System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 93f4f65dc861c62dcf034209518697e30436b6be:

• File lib/System.Data.SQLite/common.eagle — part of check-in [337076bac1] at 2018-07-23 05:52:06 on branch trunk — Improve cross-platform detection and use of the SQLite interop assembly / SQLite native library by the test suite infrastructure. (user: mistachkin size: 202550)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  etSQLiteDefineCo
0340: 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d 20  nstantPrefix {}
0350: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0360: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0370: 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e 73   the define cons
0380: 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74 74  tant prefix sett
0390: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
03a0: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
03b0: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
03c0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
03d0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
03e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
03f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
0400: 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61 6e  ::define_constan
0410: 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d 0a  t_prefix] && \..
0420: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
0430: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66 69  g length $::defi 0440: 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 66 ne_constant_pref 0450: 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ix] > 0} then {. 0460: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0470: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0480: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 65 the specified de 0490: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 72 fine constant pr 04a0: 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 efix... # 04b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 04c0: 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74$::define_const
04d0: 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20 20  ant_prefix..
04e0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
04f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
0500: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
0510: 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63 6f  efault define co
0520: 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d 0a  nstant prefix...
0530: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
0540: 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e 65     return define
0550: 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e  Constant.System.
0560: 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20 20  Data.SQLite...
0570: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
0580: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c  .    proc getSQL
0590: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
05a0: 50 72 65 66 69 78 20 7b 7d 20 7b 0d 0a 20 20 20  Prefix {} {..
05b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
05c0: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 63  TE: See if the c
05d0: 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 70 72  ompile option pr
05e0: 65 66 69 78 20 73 65 74 74 69 6e 67 20 68 61 73  efix setting has
05f0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
0600: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
0610: 62 79 20 74 68 65 20 75 73 65 72 20 28 65 2e 67  by the user (e.g
0620: 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64  . on the command
0630: 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23   line)...      #
0640: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
0650: 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 70 69  o exists ::compi
0660: 6c 65 5f 6f 70 74 69 6f 6e 5f 70 72 65 66 69 78  le_option_prefix
0670: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
0680: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
0690: 20 24 3a 3a 63 6f 6d 70 69 6c 65 5f 6f 70 74 69   $::compile_opti 06a0: 6f 6e 5f 70 72 65 66 69 78 5d 20 3e 20 30 7d 20 on_prefix] > 0} 06b0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 06c0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 06d0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 06e0: 66 69 65 64 20 63 6f 6d 70 69 6c 65 20 6f 70 74 fied compile opt 06f0: 69 6f 6e 20 70 72 65 66 69 78 2e 0d 0a 20 20 20 ion prefix... 0700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 0710: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 70 69 6c return$::compil
0720: 65 5f 6f 70 74 69 6f 6e 5f 70 72 65 66 69 78 0d  e_option_prefix.
0730: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
0740: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
0750: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0760: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6d 70  the default comp
0770: 69 6c 65 20 6f 70 74 69 6f 6e 20 70 72 65 66 69  ile option prefi
0780: 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  x...        #..
0790: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6f         return co
07a0: 6d 70 69 6c 65 4f 70 74 69 6f 6e 2e 53 51 4c 69  mpileOption.SQLi
07b0: 74 65 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  te...      }..
07c0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
07d0: 20 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e   haveSQLiteDefin
07e0: 65 43 6f 6e 73 74 61 6e 74 20 7b 20 6e 61 6d 65  eConstant { name
07f0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75   } {..      retu
0800: 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  rn [haveConstrai
0810: 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
0820: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74  [appendArgs [get
0830: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
0840: 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61 6d  tantPrefix] $nam 0850: 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 e]].. }..... 0860: 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 4c 69 proc haveSQLi 0870: 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 teCompileOption 0880: 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 { name } {.. 0890: 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f return [haveCo 08a0: 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 nstraint \.. 08b0: 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 08c0: 73 20 5b 67 65 74 53 51 4c 69 74 65 43 6f 6d 70 s [getSQLiteComp 08d0: 69 6c 65 4f 70 74 69 6f 6e 50 72 65 66 69 78 5d ileOptionPrefix] 08e0: 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d$name]]..    }.
08f0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
0900: 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b 0d 0a  BuildYear {} {..
0910: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0920: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
0930: 65 20 22 79 65 61 72 22 20 73 65 74 74 69 6e 67  e "year" setting
0940: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
0950: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72  dden by the user
0960: 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20 23 20   (e.g...      #
0970: 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63 6f 6d        on the com
0980: 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69  mand line).  Thi
0990: 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20  s helps control
09a0: 65 78 61 63 74 6c 79 20 77 68 69 63 68 20 73 65  exactly which se
09b0: 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20  t of..      #
09c0: 20 20 20 20 62 69 6e 61 72 69 65 73 20 77 65 20      binaries we
09d0: 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74 68 6f  are testing, tho
09e0: 73 65 20 70 72 6f 64 75 63 65 64 20 75 73 69 6e  se produced usin
09f0: 67 20 74 68 65 20 56 69 73 75 61 6c 20 53 74 75  g the Visual Stu
0a00: 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20  dio..      #
0a10: 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c 20 32     2005, 2008, 2
0a20: 30 31 30 2c 20 32 30 31 32 2c 20 32 30 31 33 2c  010, 2012, 2013,
0a30: 20 32 30 31 35 2c 20 6f 72 20 32 30 31 37 20 62   2015, or 2017 b
0a40: 75 69 6c 64 20 73 79 73 74 65 6d 73 2e 20 20 54  uild systems.  T
0a50: 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #
0a60: 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 76   override this v
0a70: 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d  alue via the com
0a80: 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72  mand line, enter
0a90: 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c   a command simil
0aa0: 61 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ar..      #
0ab0: 20 20 74 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20    to one of the
0ac0: 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f  following (all o
0ad0: 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20  n one line):..
0ae0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0af0: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0b00: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69  exe -anyInitiali
0b10: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0b20: 72 20 32 30 30 35 22 0d 0a 20 20 20 20 20 20 23  r 2005"..      #
0b30: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0b40: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0b50: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0b60: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0b70: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0b80: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0b90: 73 74 5f 79 65 61 72 20 32 30 30 38 22 0d 0a 20  st_year 2008"..
0ba0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0bb0: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0bc0: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0bd0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0be0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
0bf0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
0c00: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
0c10: 31 30 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  10"..      #
0c20: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
0c30: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
0c40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0c50: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0c60: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0c70: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0c80: 65 61 72 20 32 30 31 32 22 0d 0a 20 20 20 20 20  ear 2012"..
0c90: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0ca0: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0cb0: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0cc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0cd0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0ce0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
0cf0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 33 22 0d  test_year 2013".
0d00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
0d10: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
0d20: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
0d30: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
0d40: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0d50: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0d60: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0d70: 32 30 31 35 22 0d 0a 20 20 20 20 20 20 23 20 20  2015"..      #
0d80: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0d90: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0da0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0db0: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0dc0: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0dd0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
0de0: 5f 79 65 61 72 20 32 30 31 37 22 0d 0a 20 20 20  _year 2017"..
0df0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
0e00: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
0e10: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
0e20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
0e30: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61  agleShell.exe -a
0e40: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 75 6e  nyInitialize "un
0e50: 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
0e60: 74 65 73 74 5f 79 65 61 72 22 0d 0a 20 20 20 20  test_year"..
0e70: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
0e80: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
0e90: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
0ea0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
0eb0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65  exists ::test_ye
0ec0: 61 72 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c  ar] && [string l
0ed0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 0ee0: 61 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d ar] > 0} then {. 0ef0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 0f00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 0f10: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 0f20: 73 74 20 79 65 61 72 2e 20 20 49 66 20 74 68 69 st year. If thi 0f30: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f s variable is no 0f40: 74 20 73 65 74 2c 20 74 68 65 0d 0a 20 20 20 20 t set, the.. 0f50: 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 # defa 0f60: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 ult value will b 0f70: 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 e based on wheth 0f80: 65 72 20 6f 72 20 6e 6f 74 20 45 61 67 6c 65 20 er or not Eagle 0f90: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 has been.. 0fa0: 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c # compil 0fb0: 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 ed against the C 0fc0: 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 LR v2.0 or CLR v 0fd0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 4.0... #. 0fe0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 0ff0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 0d 0a 20 20$::test_year..
1000: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1010: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1020: 20 23 20 4e 4f 54 45 3a 20 49 66 20 45 61 67 6c   # NOTE: If Eagl
1030: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69  e has been compi
1040: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20  led against the
1050: 43 4c 52 20 76 34 2e 30 2c 20 75 73 65 20 22 32  CLR v4.0, use "2
1060: 30 31 30 22 20 62 79 0d 0a 20 20 20 20 20 20 20  010" by..
1070: 20 23 20 20 20 20 20 20 20 64 65 66 61 75 6c 74   #       default
1080: 20 28 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22   (we could use "
1090: 32 30 31 32 22 2c 20 22 32 30 31 33 22 2c 20 22  2012", "2013", "
10a0: 32 30 31 35 22 2c 20 6f 72 20 22 32 30 31 37 22  2015", or "2017"
10b0: 20 69 6e 20 74 68 61 74 0d 0a 20 20 20 20 20 20   in that..
10c0: 20 20 23 20 20 20 20 20 20 20 63 61 73 65 20 61    #       case a
10d0: 73 20 77 65 6c 6c 29 20 61 73 20 74 68 65 20 74  s well) as the t
10e0: 65 73 74 20 79 65 61 72 3b 20 6f 74 68 65 72 77  est year; otherw
10f0: 69 73 65 2c 20 75 73 65 20 22 32 30 30 38 22 20  ise, use "2008"
1100: 62 79 20 64 65 66 61 75 6c 74 0d 0a 20 20 20 20  by default..
1110: 20 20 20 20 23 20 20 20 20 20 20 20 28 77 65 20      #       (we
1120: 63 6f 75 6c 64 20 75 73 65 20 22 32 30 30 35 22  could use "2005"
1130: 20 69 6e 20 74 68 61 74 20 63 61 73 65 20 61 73   in that case as
1140: 20 77 65 6c 6c 29 2e 20 20 49 66 20 61 6e 6f 74   well).  If anot
1150: 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20 20 20 20  her major..
1160: 20 20 20 23 20 20 20 20 20 20 20 5b 69 6e 63 6f     #       [inco
1170: 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73 69 6f  mpatible] versio
1180: 6e 20 6f 66 20 74 68 65 20 43 4c 52 20 69 73 20  n of the CLR is
1190: 72 65 6c 65 61 73 65 64 2c 20 74 68 69 73 20 63  released, this c
11a0: 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20 20 20 20  heck will..
11b0: 20 20 20 23 20 20 20 20 20 20 20 68 61 76 65 20     #       have
11c0: 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e 20 20  to be changed.
11d0: 54 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  The default test
11e0: 20 79 65 61 72 20 74 6f 20 75 73 65 20 66 6f 72   year to use for
11f0: 20 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20   a..        #
1200: 20 20 20 20 70 61 72 74 69 63 75 6c 61 72 20 43      particular C
1210: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62  LR version may b
1220: 65 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20  e overridden by
1230: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62  setting the glob
1240: 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  al..        #
1250: 20 20 20 20 76 61 72 69 61 62 6c 65 20 22 74 65      variable "te
1260: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 24 58 22  st_year_clr_v$X" 1270: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 , where "$X" may
1280: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 0d   [currently] be.
1290: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
12a0: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22   either "2" or "
12b0: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  4"...        #..
12c0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
12d0: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67  eConstraint imag
12e0: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65  eRuntime40]} the
12f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
1300: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
1310: 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f  ::test_year_clr_
1320: 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  v4] && \..
1330: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
1340: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79  length $::test_y 1350: 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d ear_clr_v4] > 0} 1360: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1370: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1380: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 1390: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 13a0: 73 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 st year for the 13b0: 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 CLR v4.0... 13c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
13e0: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34  test_year_clr_v4
13f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
1400: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1410: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1420: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
1430: 20 64 65 66 61 75 6c 74 20 74 65 73 74 20 79 65   default test ye
1440: 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76  ar for the CLR v
1450: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  4.0...
1460: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1470: 20 72 65 74 75 72 6e 20 32 30 31 30 3b 20 23 20   return 2010; #
1480: 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c  TODO: Good "fall
1490: 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a  back" default?..
14a0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
14b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
14c0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e           if {[in
14d0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
14e0: 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 26 26  _year_clr_v2] &&
14f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1500: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
1510: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c   $::test_year_cl 1520: 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20 r_v2] > 0} then 1530: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 1540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 1550: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 1560: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 1570: 72 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 r for the CLR v2 1580: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 1590: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 15a0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 return$::test_y
15b0: 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20  ear_clr_v2..
15c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
15d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
15e0: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
15f0: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
1600: 6c 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72  lt test year for
1610: 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a   the CLR v2.0...
1620: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1630: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1640: 6e 20 32 30 30 38 3b 20 23 20 54 4f 44 4f 3a 20  n 2008; # TODO:
1650: 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20  Good "fallback"
1660: 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20  default?..
1670: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1680: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1690: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
16a0: 74 42 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72  tBuildNativeYear
16b0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20   {} {..      if
16c0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
16d0: 74 65 73 74 5f 6e 61 74 69 76 65 5f 79 65 61 72  test_native_year
16e0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
16f0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
1700: 20 24 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f   $::test_native_ 1710: 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 year] > 0} then 1720: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1730: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 1740: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 1750: 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 6e 61 test year for na 1760: 74 69 76 65 20 62 69 6e 61 72 69 65 73 2e 20 20 tive binaries. 1770: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 If this.. 1780: 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c # variabl 1790: 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 e is not set, th 17a0: 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 e value returned 17b0: 20 62 79 20 5b 67 65 74 42 75 69 6c 64 59 65 61 by [getBuildYea 17c0: 72 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 r].. # 17d0: 20 20 20 20 77 69 6c 6c 20 62 65 20 75 73 65 64 will be used 17e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 17f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
1800: 74 65 73 74 5f 6e 61 74 69 76 65 5f 79 65 61 72  test_native_year
1810: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1820: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1830: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c       # NOTE: Fal
1840: 6c 62 61 63 6b 20 6f 6e 20 74 68 65 20 28 6e 6f  lback on the (no
1850: 72 6d 61 6c 29 20 62 75 69 6c 64 20 79 65 61 72  rmal) build year
1860: 20 66 6f 72 20 6d 61 6e 61 67 65 64 20 62 69 6e   for managed bin
1870: 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  aries...
1880: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
1890: 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d  n [getBuildYear]
18a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
18b0: 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  .....    #..
18c0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f  # NOTE: This pro
18d0: 63 65 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75  cedure is only u
18e0: 73 65 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20  sed when adding
18f0: 73 68 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e  shimmed test con
1900: 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23  straints...    #
1910: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
1920: 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d  ildClrVersion {}
1930: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   {..      if {[i
1940: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
1950: 74 5f 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e  t_clr] && [strin
1960: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 1970: 5f 63 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 _clr] > 0} then 1980: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 1990: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 19a0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 19b0: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 test version for 19c0: 20 74 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68 the CLR. If th 19d0: 69 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 is variable.. 19e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 19f0: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 not set, the def 1a00: 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 ault value will 1a10: 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 be based on whet 1a20: 68 65 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 her or not.. 1a30: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c # Eagl 1a40: 65 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 e has been compi 1a50: 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 led against the 1a60: 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 CLR v2.0 or CLR 1a70: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 v4.0... # 1a80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 1a90: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20$::test_clr..
1aa0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1ab0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ac0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
1ad0: 66 20 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e  f Eagle has been
1ae0: 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73   compiled agains
1af0: 74 20 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20  t the CLR v4.0.
1b00: 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20   If so,..
1b10: 20 23 20 20 20 20 20 20 20 6a 75 73 74 20 75 73   #       just us
1b20: 65 20 74 68 61 74 20 43 4c 52 20 76 65 72 73 69  e that CLR versi
1b30: 6f 6e 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20  on.  Otherwise,
1b40: 75 73 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20  use the version
1b50: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20  for the..
1b60: 20 23 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e   #       CLR v2.
1b70: 30 2e 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d  0.  If another m
1b80: 61 6a 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62  ajor [incompatib
1b90: 6c 65 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  le] version of t
1ba0: 68 65 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20  he CLR..
1bb0: 23 20 20 20 20 20 20 20 69 73 20 72 65 6c 65 61  #       is relea
1bc0: 73 65 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20  sed, this check
1bd0: 77 69 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20  will have to be
1be0: 63 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65  changed.  The de
1bf0: 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23  fault..        #
1c00: 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76         version v
1c10: 61 6c 75 65 20 66 6f 72 20 61 20 70 61 72 74 69  alue for a parti
1c20: 63 75 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f  cular CLR versio
1c30: 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64  n may be overrid
1c40: 64 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  den..        #
1c50: 20 20 20 20 20 62 79 20 73 65 74 74 69 6e 67 20       by setting
1c60: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
1c70: 62 6c 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24  ble "test_clr_v$1c80: 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d X", where "$X" m
1c90: 61 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ay..        #
1ca0: 20 20 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20      [currently]
1cb0: 62 65 20 65 69 74 68 65 72 20 22 32 22 20 6f 72  be either "2" or
1cc0: 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23   "4"...        #
1cd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
1ce0: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d  aveConstraint im
1cf0: 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74  ageRuntime40]} t
1d00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1d10: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1d20: 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d  s ::test_clr_v4]
1d30: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1d40: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1d50: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f  gth $::test_clr_ 1d60: 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d v4] > 0} then {. 1d70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1d80: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1d90: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1da0: 69 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69 ified test versi 1db0: 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 on for the CLR v 1dc0: 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 4.0... 1dd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1de0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
1df0: 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20  clr_v4..
1e00: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1e10: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1e20: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55         # NOTE: U
1e30: 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74  se the default t
1e40: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20  est version for
1e50: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
1e60: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1e70: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1e80: 20 34 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f   4.0.30319; # TO
1e90: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
1ea0: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
1eb0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1ec0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1ed0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f         if {[info
1ee0: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63   exists ::test_c
1ef0: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
1f00: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
1f10: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1f20: 74 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 t_clr_v2] > 0} t 1f30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1f50: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 1f60: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 1f70: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 version for the 1f80: 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 CLR v2.0... 1f90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1fa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1fb0: 3a 74 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20  :test_clr_v2..
1fc0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
1fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1fe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1ff0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
2000: 61 75 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f  ault test versio
2010: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32  n for the CLR v2
2020: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .0...
2030: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
2040: 72 65 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37  return 2.0.50727
2050: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22  ; # TODO: Good "
2060: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c  fallback" defaul
2070: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t?..          }.
2080: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
2090: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
20a0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
20b0: 59 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20  Years {} {..
20c0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
20d0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69  E: See if the li
20e0: 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73  st of test years
20f0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69   has been overri
2100: 64 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72  dden by the user
2110: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2120: 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d  (e.g. on the com
2130: 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20  mand line)...
2140: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
2150: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
2160: 65 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c  est_years] && [l
2170: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79  length $::test_y 2180: 65 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ears] > 0} then 2190: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 21a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 21b0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 21c0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 list of test yea 21d0: 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rs... #.. 21e0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
21f0: 3a 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20  ::test_years..
2200: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
2210: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2220: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65   # NOTE: Use the
2230: 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66   default list of
2240: 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e 65   test years (i.e
2250: 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 20  . all)...
2260: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
2270: 72 6e 20 5b 6c 69 73 74 20 32 30 30 35 20 32 30  rn [list 2005 20
2280: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31  08 2010 2012 201
2290: 33 20 32 30 31 35 20 32 30 31 37 20 4e 65 74 53  3 2015 2017 NetS
22a0: 74 61 6e 64 61 72 64 32 30 5d 0d 0a 20 20 20 20  tandard20]..
22b0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
22c0: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
22d0: 4e 65 74 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20  NetFx {} {..
22e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
22f0: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74 65  E: See if the te
2300: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  st .NET Framewor
2310: 6b 20 73 65 74 74 69 6e 67 20 68 61 73 20 62 65  k setting has be
2320: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  en overridden by
2330: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
2340: 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f  the user (e.g. o
2350: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
2360: 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne)...      #..
2370: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2380: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74  xists ::test_net
2390: 5f 66 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  _fx] && \..
23a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
23b0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f  gth $::test_net_ 23c0: 66 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d fx] > 0} then {. 23d0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 23e0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 23f0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 2400: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 st .NET Framewor 2410: 6b 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 k... #.. 2420: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
2430: 3a 74 65 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20  :test_net_fx..
2440: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
2450: 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b        set year [
2460: 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20  getBuildYear]..
2470: 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 56         set yearV
2480: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  arName [appendAr
2490: 67 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78  gs ::test_net_fx
24a0: 5f 20 24 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20  _ $year].... 24b0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 24c0: 69 73 74 73 20 24 79 65 61 72 56 61 72 4e 61 6d ists$yearVarNam
24d0: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  e] && \..
24e0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
24f0: 67 74 68 20 5b 73 65 74 20 24 79 65 61 72 56 61  gth [set $yearVa 2500: 72 4e 61 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 rName]] > 0} the 2510: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 n {.. # 2520: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 2530: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 2540: 69 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 ified test .NET 2550: 46 72 61 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 Framework, based 2560: 20 6f 6e 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 on the build.. 2570: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2580: 20 79 65 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 year... 2590: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 #.. r 25a0: 65 74 75 72 6e 20 5b 73 65 74 20 24 79 65 61 72 eturn [set$year
25b0: 56 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  VarName]..
25c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
25d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25e0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62     # NOTE: Fallb
25f0: 61 63 6b 20 74 6f 20 74 68 65 20 22 77 65 6c 6c  ack to the "well
2600: 20 6b 6e 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61   known" .NET Fra
2610: 6d 65 77 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74  mework version t
2620: 68 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hat..          #
2630: 20 20 20 20 20 20 20 69 73 20 6d 6f 73 74 20 63         is most c
2640: 6c 6f 73 65 6c 79 20 61 73 73 6f 63 69 61 74 65  losely associate
2650: 64 20 77 69 74 68 20 61 20 70 61 72 74 69 63 75  d with a particu
2660: 6c 61 72 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a  lar version of..
2670: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2680: 20 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2e    Visual Studio.
2690: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
26a0: 20 20 20 20 20 20 20 20 20 73 77 69 74 63 68 20           switch
26b0: 2d 65 78 61 63 74 20 2d 2d 20 24 79 65 61 72 20  -exact -- $year 26c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 {.. 2 26d0: 30 30 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 005 {.. 26e0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 26f0: 78 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x20.. 2700: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2710: 32 30 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 2008 {.. 2720: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2730: 46 78 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 Fx35.. 2740: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2750: 20 32 30 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 2010 {.. 2760: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 2770: 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 tFx40.. 2780: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2790: 20 20 32 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 2012 {.. 27a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 27b0: 65 74 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 etFx45.. 27c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 27d0: 20 20 20 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 2013 {.. 27e0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 27f0: 6e 65 74 46 78 34 35 31 3b 20 23 20 54 4f 44 4f netFx451; # TODO 2800: 3a 20 4f 72 20 22 6e 65 74 46 78 34 35 32 22 3f : Or "netFx452"? 2810: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 31 . 201 2830: 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5 {.. 2840: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 2850: 36 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 6; # TODO: Or "n 2860: 65 74 46 78 34 36 31 22 20 2f 20 22 6e 65 74 46 etFx461" / "netF 2870: 78 34 36 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 x462"?.. 2880: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2890: 20 20 20 32 30 31 37 20 7b 0d 0a 20 20 20 20 20 2017 {.. 28a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 28b0: 6e 65 74 46 78 34 37 3b 20 23 20 54 4f 44 4f 3a netFx47; # TODO: 28c0: 20 4f 72 20 22 6e 65 74 46 78 34 37 31 22 20 2f Or "netFx471" / 28d0: 20 22 6e 65 74 46 78 34 37 32 22 3f 0d 0a 20 20 "netFx472"?.. 28e0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 28f0: 20 20 20 20 20 20 20 20 20 4e 65 74 53 74 61 6e NetStan 2900: 64 61 72 64 32 30 20 7b 0d 0a 20 20 20 20 20 20 dard20 {.. 2910: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 2920: 65 74 53 74 61 6e 64 61 72 64 32 30 0d 0a 20 20 etStandard20.. 2930: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2940: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 default 2950: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2960: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 35 return netFx35 2970: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 ; # TODO: Good " 2980: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c fallback" defaul 2990: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 t?.. 29a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 29b0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 29c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 29d0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 29e0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 29f0: 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20 6e 6f should return no 2a00: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 63 6f n-zero if the co 2a10: 6e 66 69 67 75 72 65 64 20 74 65 73 74 0d 0a 20 nfigured test.. 2a20: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 # platf 2a30: 6f 72 6d 20 69 73 20 6d 6f 73 74 20 6c 69 6b 65 orm is most like 2a40: 6c 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 ly the default f 2a50: 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 2e or this machine. 2a60: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 72 6f .. #.. pro 2a70: 63 20 69 73 44 65 66 61 75 6c 74 42 75 69 6c 64 c isDefaultBuild 2a80: 50 6c 61 74 66 6f 72 6d 20 7b 20 7b 76 65 72 62 Platform { {verb 2a90: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. 2aa0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2ab0: 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e NOTE: Running on 2ac0: 20 57 6f 57 36 34 20 69 73 20 6e 65 76 65 72 20 WoW64 is never 2ad0: 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 the default plat 2ae0: 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a form... #.. 2af0: 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 6e if {[isRun 2b00: 6e 69 6e 67 57 6f 57 36 34 5d 7d 20 74 68 65 6e ningWoW64]} then 2b10: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 2b20: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
2b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
2b40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2b50: 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 2b60: 20 20 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 "---- detecte 2b70: 64 20 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 70 6c d non-default pl 2b80: 61 74 66 6f 72 6d 20 28 57 6f 57 36 34 29 5c 6e atform (WoW64)\n 2b90: 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ".. }.... 2ba0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f 2bb0: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d alse.. }... 2bc0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2bd0: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 73 # NOTE: This has 2be0: 20 61 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 6f a good chance o 2bf0: 66 20 62 65 69 6e 67 20 74 68 65 20 64 65 66 61 f being the defa 2c00: 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 ult platform... 2c10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 2c20: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
2c30: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
2c40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2c50: 6c 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 l "---- detected 2c60: 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 default platfor 2c70: 6d 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d m\n".. }... 2c80: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 . return tr 2c90: 75 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 ue.. }..... 2ca0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 proc getBuildP 2cb0: 6c 61 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 latform { native 2cc0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 2cd0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 2ce0: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 est_platform] && 2cf0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 2d00: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
2d10: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e  test_platform] >
2d20: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2d30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2d40: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
2d50: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70 6c  pecified test pl
2d60: 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69 73  atform.  If this
2d70: 20 76 61 72 69 61 62 6c 65 20 69 73 20 6e 6f 74   variable is not
2d80: 20 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20 23   set,..        #
2d90: 20 20 20 20 20 20 20 74 68 65 20 64 65 66 61 75         the defau
2da0: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  lt value will be
2db0: 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d 61   based on the ma
2dc0: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75  chine architectu
2dd0: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  re...        #..
2de0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
2df0: 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20  expr {$native ? 2e00: 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d$::test_platform
2e10: 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d   : ""}]..      }
2e20: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
2e30: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63  xists ::test_mac
2e40: 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20  hine] && \..
2e50: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
2e60: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63  ngth $::test_mac 2e70: 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 hine] > 0} then 2e80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 2e90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 2ea0: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c r native builds, 2eb0: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 return the plat 2ec0: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 form name corres 2ed0: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 ponding to.. 2ee0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 2ef0: 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 63 test machine arc 2f00: 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 hitecture; other 2f10: 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 wise, return an 2f20: 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 23 empty.. # 2f30: 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a string... 2f40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2f50: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 2f60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 {..$na
2f70: 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 54  tive ? [machineT
2f80: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 73  oPlatform $::tes 2f90: 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22 0d t_machine] : "". 2fa0: 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 . }].. 2fb0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 2fc0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f fo exists ::tcl_ 2fd0: 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 platform(machine 2fe0: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 2ff0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 3000: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 NOTE: For nativ 3010: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e e builds, return 3020: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 3030: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 me corresponding 3040: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 3050: 20 20 20 20 20 74 68 65 20 6d 61 63 68 69 6e 65 the machine 3060: 20 61 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f architecture; o 3070: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 3080: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 3090: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 30a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 30b0: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 30c0: 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69$native ? [machi
30d0: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a  neToPlatform $:: 30e0: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 tcl_platform(mac 30f0: 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 hine)] : "".. 3100: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d }].. } 3110: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 3120: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3130: 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 TE: No machine a 3140: 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 rchitecture is a 3150: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e vailable, return 3160: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 3170: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ... # 3180: 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 It is importa 3190: 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 nt to return an 31a0: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 empty string her 31b0: 65 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 e because the.. 31c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 31d0: 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 esult of this pr 31e0: 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 ocedure may be u 31f0: 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a sed with [file j 3200: 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 oin]... # 3210: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 3220: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 "".. }.. 3230: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 3240: 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 getBuildConfigu 3250: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 ration {} {.. 3260: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3270: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 TE: See if the " 3280: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 configuration" s 3290: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 32a0: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 overridden by th 32b0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 32c0: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 32d0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 32e0: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f . This helps co 32f0: 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 ntrol exactly.. 3300: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 # whi 3310: 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 ch set of binari 3320: 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e es we are testin 3330: 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 g (i.e. those bu 3340: 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 ilt in the.. 3350: 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 # "Debug 3360: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 " or "Release" b 3370: 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 uild configurati 3380: 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 ons). To overri 3390: 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 de this.. # 33a0: 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 value via 33b0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 33c0: 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 e, enter a comma 33d0: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 33e0: 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 e of.. # 33f0: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e the followin 3400: 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 g (all on one li 3410: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 3420: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 3430: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 3440: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 3450: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 3460: 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 on Debug".. 3470: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 # -file 3480: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 3490: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 agle.. #.. 34a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 34b0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 34c0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 34d0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 34e0: 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 on Release".. 34f0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 3500: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 3510: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 3520: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 3530: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 agleShell.exe -f 3540: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 3550: 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 l.eagle -preTest 3560: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3570: 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 "unset -nocomp 3580: 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 lain test_config 3590: 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 uration".. 35a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 35b0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 35c0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 _configuration] 35d0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 35e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
35f0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
3600: 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tion] > 0} then
3610: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3620: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
3630: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
3640: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69  test configurati
3650: 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  on.  The default
3660: 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20   value used..
3670: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
3680: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
3690: 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c  s typically "Rel
36a0: 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79  ease", as set by
36b0: 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20   the test..
36c0: 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65     #       suite
36d0: 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20   itself...
36e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
36f0: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  urn $::test_conf 3700: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 iguration.. 3710: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 3720: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 3730: 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 NOTE: Normally, 3740: 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 we will never hi 3750: 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 t this case beca 3760: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 use the value of 3770: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 3780: 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 test confi 3790: 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c guration variabl 37a0: 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 e is always set 37b0: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 37c0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 37d0: 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 itself; howev 37e0: 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 er, it can be ov 37f0: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 erridden using t 3800: 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 he unset command 3810: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3820: 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 from the -preT 3830: 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 est option to th 3840: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 3850: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3860: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c return$::eagl
3870: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69  e_platform(confi
3880: 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20  guration)..
3890: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
38a0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43    proc getBuildC
38b0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d  onfigurations {}
38c0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
38d0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
38e0: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65  f the list of te
38f0: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st configuration
3900: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
3910: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20  idden by..
3920: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72  #       the user
3930: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f   (e.g. on the co
3940: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20  mmand line)...
3950: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
3960: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
3970: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
3980: 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ons] && \..
3990: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a       [llength $: 39a0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 39b0: 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ions] > 0} then 39c0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 39d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 39e0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 39f0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e list of test con 3a00: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 figurations... 3a10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3a20: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
3a30: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a  configurations..
3a40: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
3a50: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3a60: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
3a70: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20  he default list
3a80: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
3a90: 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  ations...
3aa0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
3ab0: 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52  rn [list Debug R
3ac0: 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d  elease]..      }
3ad0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
3ae0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 45 78 74  proc getBuildExt
3af0: 72 61 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ra {} {..      i
3b00: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
3b10: 3a 3a 74 65 73 74 5f 65 78 74 72 61 5d 20 26 26  ::test_extra] &&
3b20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
3b30: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 3b40: 74 65 73 74 5f 65 78 74 72 61 5d 20 3e 20 30 7d test_extra] > 0} 3b50: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 3b60: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3b70: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 3b80: 69 66 69 65 64 20 65 78 74 72 61 20 6f 75 74 70 ified extra outp 3b90: 75 74 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 ut directory... 3ba0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3bb0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
3bc0: 5f 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 20  _extra..      }
3bd0: 65 6c 73 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65  elseif {[isDotNe
3be0: 74 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tCore]} then {..
3bf0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3c00: 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69     # NOTE: Runni
3c10: 6e 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c  ng on .NET Core,
3c20: 20 75 73 65 20 74 68 65 20 65 78 74 72 61 20 6f   use the extra o
3c30: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20  utput directory
3c40: 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  for..        #
3c50: 20 20 20 20 20 6c 69 62 72 61 72 79 20 66 69 6c       library fil
3c60: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es...        #..
3c70: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
3c80: 65 74 73 74 61 6e 64 61 72 64 32 2e 30 0d 0a 20  etstandard2.0..
3c90: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
3ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3cb0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 65 78 74    # NOTE: No ext
3cc0: 72 61 20 6f 75 74 70 75 74 20 64 69 72 65 63 74  ra output direct
3cd0: 6f 72 79 20 69 73 20 72 65 71 75 69 72 65 64 2e  ory is required.
3ce0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
3cf0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
3d00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3d10: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
3d20: 75 69 6c 64 45 78 74 72 61 73 20 7b 7d 20 7b 0d  uildExtras {} {.
3d30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
3d40: 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74  # NOTE: See if t
3d50: 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61  he list of extra
3d60: 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
3d70: 69 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ies has been ove
3d80: 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23  rridden..      #
3d90: 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73         by the us
3da0: 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20  er (e.g. on the
3db0: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a  command line)...
3dc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
3dd0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
3de0: 3a 3a 74 65 73 74 5f 65 78 74 72 61 73 5d 20 26  ::test_extras] &
3df0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
3e00: 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f  llength $::test_ 3e10: 65 78 74 72 61 73 5d 20 3e 20 30 7d 20 74 68 65 extras] > 0} the 3e20: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 3e30: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 3e40: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 3e50: 64 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61 20 d list of extra 3e60: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 69 output directori 3e70: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 3e80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
3e90: 3a 3a 74 65 73 74 5f 65 78 74 72 61 73 0d 0a 20  ::test_extras..
3ea0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
3eb0: 69 73 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74  isDotNetCore]} t
3ec0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
3ed0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3ee0: 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45  : Running on .NE
3ef0: 54 20 43 6f 72 65 2c 20 70 72 69 6f 72 69 74 69  T Core, prioriti
3f00: 7a 65 20 69 74 73 20 65 78 74 72 61 20 6f 75 74  ze its extra out
3f10: 70 75 74 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  put directory..
3f20: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66         #       f
3f30: 6f 72 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73  or library files
3f40: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
3f50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
3f60: 73 74 20 6e 65 74 73 74 61 6e 64 61 72 64 32 2e  st netstandard2.
3f70: 30 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  0 ""]..      } e
3f80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
3f90: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
3fa0: 3a 20 55 73 65 20 64 65 66 61 75 6c 74 20 6c 69  : Use default li
3fb0: 73 74 20 6f 66 20 65 78 74 72 61 20 6f 75 74 70  st of extra outp
3fc0: 75 74 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20  ut directories,
3fd0: 77 68 69 63 68 20 69 73 20 6f 6e 65 0d 0a 20 20  which is one..
3fe0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 6d        #       em
3ff0: 70 74 79 20 73 74 72 69 6e 67 20 28 6e 6f 2d 6f  pty string (no-o
4000: 70 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  p)...        #..
4010: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
4020: 6c 69 73 74 20 22 22 5d 0d 0a 20 20 20 20 20 20  list ""]..
4030: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
4040: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61   proc getBuildBa
4050: 73 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  seDirectory {} {
4060: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
4070: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
4080: 6f 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72  out the base dir
4090: 65 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c  ectory where all
40a0: 20 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75   the builds shou
40b0: 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20  ld be..      #
40c0: 20 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54       located.  T
40d0: 68 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20  his will be the
40e0: 64 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63  directory that c
40f0: 6f 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75  ontains the actu
4100: 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  al..      #
4110: 20 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64    build output d
4120: 69 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70  irectory (e.g. p
4130: 61 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e  arent of "bin").
4140: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
4150: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
4160: 73 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64  s ::build_base_d
4170: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
4180: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
4190: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c  g length $::buil 41a0: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 d_base_directory 41b0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 41c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 41d0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f # NOTE: The lo 41e0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 cation of the bu 41f0: 69 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f ild base directo 4200: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 ry has been over 4210: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 ridden;.. 4220: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 4230: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 re, use it verba 4240: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d tim... #. 4250: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4260: 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69$::build_base_di
4270: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
4280: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
4290: 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64  xists ::common_d
42a0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
42b0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
42c0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d  g length $::comm 42d0: 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 on_directory] > 42e0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 42f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 4300: 4e 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c NOTE: Next, fall 4310: 62 61 63 6b 20 74 6f 20 74 68 65 20 67 72 61 6e back to the gran 4320: 64 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 dparent director 4330: 79 20 6f 66 20 74 68 65 20 6f 6e 65 0d 0a 20 20 y of the one.. 4340: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 4350: 6e 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 ntaining this fi 4360: 6c 65 20 28 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e le (i.e. "common 4370: 2e 65 61 67 6c 65 22 29 2c 20 69 66 20 61 76 61 .eagle"), if ava 4380: 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 ilable... 4390: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 43a0: 72 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 rn [file dirname 43b0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
43c0: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
43d0: 72 79 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ry]]..      } el
43e0: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73  seif {[info exis
43f0: 74 73 20 3a 3a 70 61 74 68 5d 20 26 26 20 5c 0d  ts ::path] && \.
4400: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
4410: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 70 61 74  ng length $::pat 4420: 68 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a h] > 0} then {.. 4430: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4440: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c # NOTE: Final 4450: 6c 79 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 ly, fallback to 4460: 74 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63 the parent direc 4470: 74 6f 72 79 20 6f 66 20 74 68 65 20 45 61 67 6c tory of the Eagl 4480: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 eTest.. # 4490: 20 20 20 20 20 20 20 70 61 74 68 2e 20 20 54 68 path. Th 44a0: 65 20 45 61 67 6c 65 54 65 73 74 20 70 61 63 6b e EagleTest pack 44b0: 61 67 65 20 67 75 61 72 61 6e 74 65 65 73 20 74 age guarantees t 44c0: 68 61 74 20 74 68 69 73 20 76 61 72 69 61 62 6c hat this variabl 44d0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 44e0: 20 20 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 will be set t 44f0: 6f 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 o the directory 4500: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 containing the f 4510: 69 72 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 irst file to.. 4520: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 4530: 65 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 ecute the [runTe 4540: 73 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 stPrologue] scri 4550: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 pt library proce 4560: 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 dure... # 4570: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 4580: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
4590: 3a 3a 70 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d  ::path]..      }
45a0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
45b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
45c0: 54 45 3a 20 4e 6f 20 70 61 74 68 20 69 73 20 61  TE: No path is a
45d0: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e  vailable, return
45e0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
45f0: 2e 20 20 54 68 69 73 20 70 6f 69 6e 74 0d 0a 20  .  This point..
4600: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
4610: 68 6f 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 61  hould not be rea
4620: 63 68 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23  ched...        #
4630: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4640: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20   ""..      }..
4650: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
4660: 20 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61   getSQLiteTestDa
4670: 74 61 50 61 74 68 20 7b 7d 20 7b 0d 0a 20 20 20  taPath {} {..
4680: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4690: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74  TE: Figure out t
46a0: 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65  he directory whe
46b0: 72 65 20 61 6c 6c 20 74 68 65 20 74 65 73 74 20  re all the test
46c0: 64 61 74 61 20 66 69 6c 65 73 20 73 68 6f 75 6c  data files shoul
46d0: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
46e0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 54 68   be located.  Th
46f0: 69 73 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65  is should be the
4700: 20 22 64 61 74 61 22 20 64 69 72 65 63 74 6f 72   "data" director
4710: 79 20 62 65 6e 65 61 74 68 20 74 68 65 0d 0a 20  y beneath the..
4720: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72       #       dir
4730: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
4740: 67 20 74 68 65 20 61 63 74 75 61 6c 20 74 65 73  g the actual tes
4750: 74 20 73 63 72 69 70 74 73 2e 0d 0a 20 20 20 20  t scripts...
4760: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
4770: 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a  n [file join $:: 4780: 70 61 74 68 20 64 61 74 61 5d 0d 0a 20 20 20 20 path data].. 4790: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 }..... proc i 47a0: 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 20 7b 7d sRunningWoW64 {} 47b0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 47c0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e # NOTE: For n 47d0: 6f 77 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 ow, just use the 47e0: 20 65 78 69 73 74 69 6e 67 20 74 65 73 74 20 63 existing test c 47f0: 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 64 65 onstraint for de 4800: 74 65 63 74 69 6e 67 0d 0a 20 20 20 20 20 20 23 tecting.. # 4810: 20 20 20 20 20 20 20 61 20 57 6f 57 36 34 20 70 a WoW64 p 4820: 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 rocess... # 4830: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 4840: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 77 haveConstraint w 4850: 6f 77 36 34 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d ow64].. }.... 4860: 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 . proc isMixe 4870: 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 dModeAssembly { 4880: 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d fileName {varNam 4890: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 48a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 48b0: 3a 20 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 : First, make su 48c0: 72 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74 re the test suit 48d0: 65 20 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 e infrastructure 48e0: 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a is allowed to.. 48f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 4900: 65 20 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d e the [exec] com 4910: 6d 61 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a mand... #.. 4920: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 4930: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 exists ::no(exe 4940: 63 29 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 c)] && ![info ex 4950: 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 ists ::no(corFla 4960: 67 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 gs)]} then {.. 4970: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4980: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 4990: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 location of CorF 49a0: 6c 61 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 lags is present 49b0: 69 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 in the environme 49c0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 nt,.. # 49d0: 20 20 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 use it; oth 49e0: 65 72 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 erwise assume it 49f0: 20 69 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e is in the PATH. 4a00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 4a10: 20 20 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 set corFlag 4a20: 73 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 s [expr {.. 4a30: 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 [info exist 4a40: 73 20 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 s ::env(CorFlags 4a50: 29 5d 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 )] ?$::env(CorF
4a60: 6c 61 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67  lags) : "CorFlag
4a70: 73 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a  s"..        }]..
4a80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4a90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
4aa0: 65 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20  empt to execute
4ab0: 43 6f 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20  CorFlags on the
4ac0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d  specified file..
4ad0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4ae0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
4af0: 0d 0a 20 20 20 20 20 20 20 20 20 20 65 78 65 63  ..          exec
4b00: 20 2d 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66   -- $corFlags [f 4b10: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 ile nativename$
4b20: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  fileName]..
4b30: 20 20 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d     } exec] == 0}
4b40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
4b50: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
4b60: 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65  # NOTE: If reque
4b70: 73 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  sted by our call
4b80: 65 72 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64  er, attempt to d
4b90: 65 74 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20  etermine the..
4ba0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4bb0: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65  platform for the
4bc0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
4bd0: 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20  as well...
4be0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
4bf0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
4c00: 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20  gth $varName] > 4c10: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 4c20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4c30: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 # NOTE: St 4c40: 6f 72 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d ore the platform 4c50: 20 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 in the named va 4c60: 72 69 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 riable in the.. 4c70: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 4c80: 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 context of ou 4c90: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 r caller... 4ca0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4cb0: 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
4cc0: 61 72 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d  arName platform.
4cd0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
4ce0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
4cf0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
4d00: 20 65 78 74 72 61 63 74 20 74 68 65 20 50 45 20   extract the PE
4d10: 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61  line from the ca
4d20: 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20  ptured..
4d30: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70      #       outp
4d40: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  ut.  If this val
4d50: 75 65 20 69 73 20 22 50 45 33 32 22 20 6f 72 20  ue is "PE32" or
4d60: 22 50 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20  "PE32+", the..
4d70: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
4d80: 20 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20    assembly file
4d90: 69 73 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d  is 32-bit or 64-
4da0: 62 69 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c  bit, respectivel
4db0: 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y;..
4dc0: 23 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73  #       otherwis
4dd0: 65 2c 20 69 74 73 20 74 79 70 65 20 69 73 20 75  e, its type is u
4de0: 6e 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20  nknown...
4df0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4e00: 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20      set pattern
4e10: 7b 5e 50 45 20 20 20 20 20 20 20 20 3a 20 28 50  {^PE        : (P
4e20: 45 33 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d  E32|PE32\+)\s+$} 4e30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 4e40: 69 66 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e if {[regexp -lin 4e50: 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 e --$pattern $e 4e60: 78 65 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d xec dummy pe32]} 4e70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4e80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4e90: 20 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 # HACK: 4ea0: 54 68 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 This [switch] as 4eb0: 73 75 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 sumes that 32-bi 4ec0: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 t executables ar 4ed0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 4ee0: 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 # always 4ef0: 78 38 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d x86 and that 64- 4f00: 62 69 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 bit executables 4f10: 61 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 are always.. 4f20: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 4f30: 20 20 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 x64... 4f40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4f50: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 switch -e 4f60: 78 61 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d xact --$pe32 {.
4f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
4f80: 20 50 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20   PE32 {..
4f90: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
4fa0: 6c 61 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20  latform Win32..
4fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
4fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
4fd0: 20 20 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20    PE32+ {..
4fe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
4ff0: 20 70 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20   platform x64..
5000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
5010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
5020: 20 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20    default {..
5030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
5040: 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a  et platform ""..
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5060: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
5070: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
5080: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
5090: 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74          set plat
50a0: 66 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20  form ""..
50b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
50c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
50d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
50e0: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
50f0: 20 65 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f   extract the ILO
5100: 4e 4c 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68  NLY line from th
5110: 65 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20  e captured..
5120: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 75        #       ou
5130: 74 70 75 74 2e 20 20 49 66 20 74 68 69 73 20 76  tput.  If this v
5140: 61 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68  alue is zero, th
5150: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65  e specified file
5160: 20 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20   must..
5170: 20 23 20 20 20 20 20 20 20 62 65 20 61 20 6d 69   #       be a mi
5180: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
5190: 79 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74  y; otherwise, it
51a0: 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a   contains only..
51b0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
51c0: 20 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e    managed compon
51d0: 65 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20  ents...
51e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
51f0: 74 20 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e  t pattern {^ILON
5200: 4c 59 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b  LY    : (0|1)\s+
5210: 24 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  $}.... 5220: 69 66 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 if {![regexp -li 5230: 6e 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 ne --$pattern $5240: 65 78 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c exec dummy ilOnl 5250: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 5260: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f 5270: 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 5280: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 }.... i 5290: 66 20 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 f {!$ilOnly} the
52a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
52b0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
52c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
52d0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
52e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
52f0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74  # NOTE: If the t
5300: 65 73 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74  est suite cannot
5310: 20 75 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65   use [exec] or e
5320: 78 65 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46  xecution of CorF
5330: 6c 61 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20  lags..      #
5340: 20 20 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75      failed, retu
5350: 72 6e 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20  rn false...
5360: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
5370: 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c   false..    }...
5380: 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 44 61 72  ..    proc isDar
5390: 77 69 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  win {} {..
53a0: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a  return [expr {..
53b0: 20 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 78          [info ex
53c0: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
53d0: 6f 72 6d 28 6f 73 29 5d 20 26 26 20 24 3a 3a 74  orm(os)] && $::t 53e0: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f 73 29 20 cl_platform(os) 53f0: 65 71 20 22 44 61 72 77 69 6e 22 0d 0a 20 20 20 eq "Darwin".. 5400: 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }].. }.... 5410: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 4e 61 74 . proc getNat 5420: 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 iveLibraryFileNa 5430: 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20 20 mesOnly {} {.. 5440: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 5450: 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 63 OTE: First, chec 5460: 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 k if the list of 5470: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 native library 5480: 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 file names has b 5490: 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 een.. # 54a0: 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 manually over 54b0: 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20 20 20 23 ridden... # 54c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 54d0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 61 74 69 76 o exists ::nativ 54e0: 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e e_library_file_n 54f0: 61 6d 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ames] && \.. 5500: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 [llength$
5510: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79  ::native_library
5520: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30  _file_names] > 0
5530: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5540: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
5550: 4f 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66  OTE: The list of
5560: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20   native library
5570: 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62  file names has b
5580: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
5590: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
55a0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
55b0: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
55c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
55d0: 20 72 65 74 75 72 6e 20 24 3a 3a 6e 61 74 69 76   return $::nativ 55e0: 65 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e e_library_file_n 55f0: 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c ames.. } el 5600: 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 seif {[isWindows 5610: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 5620: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5630: 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c NOTE: Otherwise, 5640: 20 6f 6e 20 57 69 6e 33 32 20 61 6c 77 61 79 73 on Win32 always 5650: 20 75 73 65 20 74 68 65 20 73 74 61 6e 64 61 72 use the standar 5660: 64 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 d native library 5670: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5680: 20 20 66 69 6c 65 20 6e 61 6d 65 20 22 73 71 6c file name "sql 5690: 69 74 65 33 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 ite3.dll"... 56a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 56b0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 73 71 6c 69 eturn [list sqli 56c0: 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 te3.dll].. 56d0: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 6f 74 } elseif {[isDot 56e0: 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b NetCore]} then { 56f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5700: 20 20 20 20 20 23 20 20 20 20 20 20 20 57 68 65 # Whe 5710: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 n running on .NE 5720: 54 20 43 6f 72 65 2c 20 72 65 74 75 72 6e 20 74 T Core, return t 5730: 68 65 20 73 61 6d 65 20 6e 61 74 69 76 65 20 6c he same native l 5740: 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 ibrary.. 5750: 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d # file nam 5760: 65 20 74 68 61 74 20 69 73 20 75 73 65 64 20 6f e that is used o 5770: 6e 20 57 69 6e 64 6f 77 73 20 28 69 2e 65 2e 20 n Windows (i.e. 5780: 6f 74 68 65 72 77 69 73 65 2c 20 61 73 73 75 6d otherwise, assum 5790: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 57a0: 20 20 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e we are runnin 57b0: 67 20 6f 6e 20 4d 6f 6e 6f 20 61 6e 64 20 75 73 g on Mono and us 57c0: 65 20 69 74 73 20 50 2f 49 6e 76 6f 6b 65 20 63 e its P/Invoke c 57d0: 6f 6e 76 65 6e 74 69 6f 6e 73 29 2e 0d 0a 20 20 onventions)... 57e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 57f0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 73 71 return [list sq 5800: 6c 69 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20 20 20 lite3.dll].. 5810: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 } elseif {[isD 5820: 61 72 77 69 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a arwin]} then {.. 5830: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5840: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 # NOTE: When 5850: 72 75 6e 6e 69 6e 67 20 6f 6e 20 44 61 72 77 69 running on Darwi 5860: 6e 20 28 69 2e 65 2e 20 74 68 65 20 6b 65 72 6e n (i.e. the kern 5870: 65 6c 20 6f 66 20 69 4f 53 20 2f 20 4d 61 63 20 el of iOS / Mac 5880: 4f 53 20 58 29 2c 0d 0a 20 20 20 20 20 20 20 20 OS X),.. 5890: 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 # return t 58a0: 68 65 20 4d 61 63 20 4f 53 20 58 20 6e 61 74 69 he Mac OS X nati 58b0: 76 65 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 ve library file 58c0: 6e 61 6d 65 2e 20 20 54 68 69 73 20 66 69 6c 65 name. This file 58d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 58e0: 20 20 6e 61 6d 65 20 69 73 20 6e 6f 72 6d 61 6c name is normal 58f0: 6c 79 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 ly required for 5900: 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 Mono... # 5910: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 5920: 20 5b 6c 69 73 74 20 6c 69 62 73 71 6c 69 74 65 [list libsqlite 5930: 33 2e 64 79 6c 69 62 5d 0d 0a 20 20 20 20 20 20 3.dylib].. 5940: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 5950: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 5960: 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 OTE: Otherwise, 5970: 72 65 74 75 72 6e 20 74 68 65 20 67 65 6e 65 72 return the gener 5980: 69 63 20 50 4f 53 49 58 20 6e 61 74 69 76 65 20 ic POSIX native 5990: 6c 69 62 72 61 72 79 20 66 69 6c 65 0d 0a 20 20 library file.. 59a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 59b0: 6d 65 2e 20 20 54 68 69 73 20 66 69 6c 65 20 6e me. This file n 59c0: 61 6d 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 ame is normally 59d0: 72 65 71 75 69 72 65 64 20 66 6f 72 20 4d 6f 6e required for Mon 59e0: 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 o... #.. 59f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 5a00: 69 73 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 ist libsqlite3.s 5a10: 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 o].. }.. 5a20: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 5a30: 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb 5a40: 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 lyFileNamesOnly 5a50: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 5a60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 # NOTE: Fir 5a70: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 st, check if the 5a80: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 list of interop 5a90: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e assembly file n 5aa0: 61 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 ames has been.. 5ab0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e # man 5ac0: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e ually overridden 5ad0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 5ae0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 5af0: 74 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 ts ::interop_ass 5b00: 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 embly_file_names 5b10: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 5b20: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e [llength$::in
5b30: 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66  terop_assembly_f
5b40: 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20  ile_names] > 0}
5b50: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5b60: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
5b70: 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69  E: The list of i
5b80: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
5b90: 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62  file names has b
5ba0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
5bb0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
5bc0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
5bd0: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
5be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5bf0: 20 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72   return $::inter 5c00: 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 op_assembly_file 5c10: 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 _names.. } 5c20: 65 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f elseif {[isWindo 5c30: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ws]} then {.. 5c40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5c50: 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 # NOTE: Otherwis 5c60: 65 2c 20 6f 6e 20 57 69 6e 33 32 2c 20 61 6c 77 e, on Win32, alw 5c70: 61 79 73 20 75 73 65 20 74 68 65 20 69 6e 74 65 ays use the inte 5c80: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c rop assembly fil 5c90: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 5ca0: 20 20 20 6e 61 6d 65 20 22 53 51 4c 69 74 65 2e name "SQLite. 5cb0: 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 2e 0d 0a 20 Interop.dll"... 5cc0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 5cd0: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 53 return [list S 5ce0: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 5cf0: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 5d00: 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72 if {[isDotNetCor 5d10: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 5d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 5d30: 20 20 20 20 20 20 20 57 68 65 6e 20 72 75 6e 6e When runn 5d40: 69 6e 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 ing on .NET Core 5d50: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d , return the sam 5d60: 65 20 69 6e 74 65 72 70 20 61 73 73 65 6d 62 6c e interp assembl 5d70: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 5d80: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 74 68 61 file name tha 5d90: 74 20 69 73 20 75 73 65 64 20 6f 6e 20 57 69 6e t is used on Win 5da0: 64 6f 77 73 20 28 69 2e 65 2e 20 6f 74 68 65 72 dows (i.e. other 5db0: 77 69 73 65 2c 20 61 73 73 75 6d 65 0d 0a 20 20 wise, assume.. 5dc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 # we 5dd0: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 are running on 5de0: 4d 6f 6e 6f 20 61 6e 64 20 75 73 65 20 69 74 73 Mono and use its 5df0: 20 50 2f 49 6e 76 6f 6b 65 20 63 6f 6e 76 65 6e P/Invoke conven 5e00: 74 69 6f 6e 73 29 2e 0d 0a 20 20 20 20 20 20 20 tions)... 5e10: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 5e20: 72 6e 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e rn [list SQLite. 5e30: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 Interop.dll].. 5e40: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 5e50: 73 44 61 72 77 69 6e 5d 7d 20 74 68 65 6e 20 7b sDarwin]} then { 5e60: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5e70: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 # NOTE: Whe 5e80: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 44 61 72 n running on Dar 5e90: 77 69 6e 20 28 69 2e 65 2e 20 74 68 65 20 6b 65 win (i.e. the ke 5ea0: 72 6e 65 6c 20 6f 66 20 69 4f 53 20 2f 20 4d 61 rnel of iOS / Ma 5eb0: 63 20 4f 53 20 58 29 2c 0d 0a 20 20 20 20 20 20 c OS X),.. 5ec0: 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e # return 5ed0: 20 74 68 65 20 4d 61 63 20 4f 53 20 58 20 69 6e the Mac OS X in 5ee0: 74 65 72 70 20 61 73 73 65 6d 62 6c 79 20 66 69 terp assembly fi 5ef0: 6c 65 20 6e 61 6d 65 2e 20 20 54 68 69 73 20 66 le name. This f 5f00: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ile.. # 5f10: 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 72 name is nor 5f20: 6d 61 6c 6c 79 20 72 65 71 75 69 72 65 64 20 66 mally required f 5f30: 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 or Mono... 5f40: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 5f50: 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c urn [list libSQL 5f60: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 5f70: 62 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 b].. } else 5f80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 5f90: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 5fa0: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 5fb0: 20 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 the generic POS 5fc0: 49 58 20 69 6e 74 65 72 70 20 61 73 73 65 6d 62 IX interp assemb 5fd0: 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 ly file.. 5fe0: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 20 20 # name. 5ff0: 54 68 69 73 20 66 69 6c 65 20 6e 61 6d 65 20 69 This file name i 6000: 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 71 75 69 s normally requi 6010: 72 65 64 20 66 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 red for Mono... 6020: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6030: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c return [list l 6040: 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 ibSQLite.Interop 6050: 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 .so].. }.. 6060: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 6070: 63 20 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69 c getCoreExtensi 6080: 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 onBinaryFileName 6090: 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 { {default ""} 60a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 } {.. set f 60b0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 6f 72 65 ileName [getCore 60c0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d 0d BinaryFileName]. 60d0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 ... if {[fi 60e0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
60f0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
6100: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69        return $fi 6110: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d leName.. }. 6120: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 6130: 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d$default..    }.
6140: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 42  ....    proc isB
6150: 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b 20  uildAvailable {
6160: 6e 61 74 69 76 65 20 64 69 72 65 63 74 6f 72 79  native directory
6170: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20   {varName ""} }
6180: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
6190: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
61a0: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
61b0: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f  ied file name fo
61c0: 72 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73  r the primary as
61d0: 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20  sembly..      #
61e0: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67        containing
61f0: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
6200: 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20  .SQLite managed
6210: 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 49 74 0d  components.  It.
6220: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
6230: 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74  hould be noted t
6240: 68 61 74 20 74 68 69 73 20 61 73 73 65 6d 62 6c  hat this assembl
6250: 79 20 66 69 6c 65 20 6d 61 79 20 61 6c 73 6f 20  y file may also
6260: 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a 20 20 20  contain the..
6270: 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
6280: 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66  e components, if
6290: 20 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20   a native build
62a0: 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20 20 20 20  is in use...
62b0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66    #..      set f
62c0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61  ileName [file na
62d0: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
62e0: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c  oin $directory \ 62f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 53 79 73 74 .. Syst 6300: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 6310: 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ll]].... if 6320: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 {![file exists 6330: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
6340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
6350: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  rn false..
6360: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
6370: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
6380: 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  mpt to automatic
6390: 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66 20 74  ally detect if t
63a0: 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d  he primary assem
63b0: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
63c0: 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20     contains any
63d0: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
63e0: 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e  s, if necessary.
63f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6400: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
6410: 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d 3d 20  gth $native] == 6420: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 6430: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 6440: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 ength$varName]
6450: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
6460: 20 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24         upvar 1 $6470: 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 varName$varName
6480: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
6490: 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
64a0: 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 41 73  e [isMixedModeAs
64b0: 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 64c0: 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20$varName]..
64d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
64e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
64f0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73   the primary ass
6500: 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e 74 61  embly also conta
6510: 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65 20 63  ins the native c
6520: 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 20 20  omponents,..
6530: 20 20 23 20 20 20 20 20 20 20 77 65 20 68 61 76    #       we hav
6540: 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 20  e everything we
6550: 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  need...      #..
6560: 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76        if {$nativ 6570: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 6580: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 6590: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 65a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 65b0: 3a 20 49 66 20 74 68 65 20 6d 61 63 68 69 6e 65 : If the machine 65c0: 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 61 69 6c name is unavail 65d0: 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73 20 6e able, there is n 65e0: 6f 74 68 69 6e 67 20 65 6c 73 65 20 77 65 0d 0a othing else we.. 65f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 6600: 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a n do... #.. 6610: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 6620: 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c exists ::tcl_pl 6630: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d atform(machine)] 6640: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6650: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a return false.. 6660: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 6670: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6680: 3a 20 57 68 61 74 20 69 73 20 74 68 65 20 61 72 : What is the ar 6690: 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 20 74 chitecture for t 66a0: 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 his machine?.. 66b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set 66c0: 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b 6d architecture [m 66d0: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 66e0: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
66f0: 28 6d 61 63 68 69 6e 65 29 20 74 72 75 65 5d 0d  (machine) true].
6700: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
6710: 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 20 69    # NOTE: What i
6720: 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 66  s the platform f
6730: 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f  or this machine?
6740: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6750: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d   set platform [m
6760: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d  achineToPlatform
6770: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d   $::tcl_platform 6780: 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 (machine)].... 6790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 67a0: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 OTE: Build the f 67b0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 ully qualified f 67c0: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 ile name for the 67d0: 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 67e0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 67f0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the 6800: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 6810: 74 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e te native compon 6820: 65 6e 74 73 2e 20 20 49 66 20 74 68 69 73 0d 0a ents. If this.. 6830: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 # fi 6840: 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 68 le exists, we sh 6850: 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 74 ould have everyt 6860: 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 hing we need... 6870: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f #.. fo 6880: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 6890: 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 ly [getInteropAs 68a0: 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f semblyFileNamesO 68b0: 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 nly] {.. 68c0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 68d0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 68e0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
68f0: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
6900: 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65     $architecture 6910: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
6920: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
6930: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 6940: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 6950: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 6960: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 6970: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.... set 6980: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 6990: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 69a0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 join$directory
69b0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
69c0: 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e  $platform$fileN
69d0: 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20  ameOnly]]....
69e0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
69f0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 6a00: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6a10: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. 6a20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 6a30: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa 6a40: 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e me [file nativen 6a50: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 ame [file join$
6a60: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20  directory \..
6a70: 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61           $fileNa 6a80: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 meOnly]].... 6a90: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 6aa0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
6ab0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
6ac0: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a     return true..
6ad0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
6ae0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
6af0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
6b00: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
6b10: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
6b20: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite
6b30: 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20  core..      #
6b40: 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 49 66      library.  If
6b50: 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 73 74   this file exist
6b60: 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76  s, we should hav
6b70: 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 0d  e everything we.
6b80: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
6b90: 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  eed...      #..
6ba0: 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
6bb0: 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 4e 61  eNameOnly [getNa
6bc0: 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
6bd0: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20  amesOnly] {..
6be0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
6bf0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
6c00: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 6c10: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 6c20: 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65$archite
6c30: 63 74 75 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f  cture $fileNameO 6c40: 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 nly]].... 6c50: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 6c60: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
6c70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
6c80: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
6c90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
6ca0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
6cb0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
6cc0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire 6cd0: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 6ce0: 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 24$platform $6cf0: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a fileNameOnly]].. 6d00: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 .. if {[f 6d10: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
6d20: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
6d30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
6d40: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  true..        }.
6d50: 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  ...        set f
6d60: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61  ileName [file na
6d70: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
6d80: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c  oin $directory \ 6d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66 ..$f
6da0: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d  ileNameOnly]]...
6db0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69  .        if {[fi
6dc0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN 6dd0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 6de0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 6df0: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a rue.. }.. 6e00: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 6e10: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 6e20: 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20 6e 61 : One or more na 6e30: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 tive components 6e40: 6e 65 65 64 65 64 20 62 79 20 53 79 73 74 65 6d needed by System 6e50: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 .Data.SQLite.. 6e60: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 # are 6e70: 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20 20 20 missing... 6e80: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return 6e90: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... 6ea0: 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65 6c 65 . proc isRele 6eb0: 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b 20 64 aseAvailable { d 6ec0: 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d irectory {varNam 6ed0: 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 6ee0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 6ef0: 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 gth$varName] >
6f00: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
6f10: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 6f20: 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 ame$varName..
6f30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
6f40: 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 41 76  eturn [isBuildAv
6f50: 61 69 6c 61 62 6c 65 20 22 22 20 24 64 69 72 65  ailable "" $dire 6f60: 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d ctory$varName].
6f70: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
6f80: 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72  roc joinBuildDir
6f90: 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20  ectory { native
6fa0: 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f  path year platfo
6fb0: 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  rm configuration
6fc0: 20 65 78 74 72 61 20 7d 20 7b 0d 0a 20 20 20 20   extra } {..
6fd0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
6fe0: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e  E: Figure out an
6ff0: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68  d then return th
7000: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
7010: 64 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75  d path to the bu
7020: 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ild..      #
7030: 20 20 20 64 69 72 65 63 74 6f 72 79 20 62 61 73     directory bas
7040: 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72  ed on all the ar
7050: 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64  guments provided
7060: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   by our caller..
7070: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7080: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65  if {$native} the 7090: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 70a0: 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 urn [file join$
70b0: 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24  path bin $year$
70c0: 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67  platform $config 70d0: 75 72 61 74 69 6f 6e 20 24 65 78 74 72 61 5d 0d uration$extra].
70e0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
70f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
7100: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68  [file join $path 7110: 20 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 bin$year $conf 7120: 69 67 75 72 61 74 69 6f 6e 20 62 69 6e 20 24 65 iguration bin$e
7130: 78 74 72 61 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  xtra]..      }..
7140: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7150: 6f 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63  oc getBuildDirec
7160: 74 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e  tory { managedOn
7170: 6c 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  ly } {..      #.
7180: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
7190: 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76  ee if the "nativ
71a0: 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  e" runtime optio
71b0: 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20  n has been set.
71c0: 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d   If so, use the.
71d0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
71e0: 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
71f0: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
7200: 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65  mbly (a.k.a. the
7210: 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d   native interop.
7220: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
7230: 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e  ssembly).  To en
7240: 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e  able this option
7250: 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64   via the command
7260: 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a   line, enter a..
7270: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
7280: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f  mmand similar to
7290: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c   one of the foll
72a0: 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e  owing (all on on
72b0: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20  e line):..
72c0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
72d0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
72e0: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e  -initialize -run
72f0: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
7300: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
7310: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c     -file .\path\
7320: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20  to\all.eagle..
7330: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
7340: 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74       To enable t
7350: 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74  his option via t
7360: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line
7370: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65  prior to the "be
7380: 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20  ta 16"..      #
7390: 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66        release of
73a0: 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c   Eagle, the foll
73b0: 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75  owing command mu
73c0: 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65  st be used inste
73d0: 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ad..      #
73e0: 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f    (also all on o
73f0: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20  ne line):..
7400: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20   #..      #
7410: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65    EagleShell.exe
7420: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f   -initialize -po
7430: 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20  stInitialize..
7440: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f      #         "o
7450: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
7460: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
7470: 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74  ve AddRuntimeOpt
7480: 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20  ion native"..
7490: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
74a0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
74b0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
74c0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
74d0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f   exists ::build_
74e0: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d  directory] && \.
74f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
7500: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69  ng length $::bui 7510: 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 ld_directory] > 7520: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 7530: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 7540: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 7550: 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 on of the build 7560: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 7570: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a en overridden;.. 7580: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 7590: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 75a0: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 t verbatim... 75b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 75c0: 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f return$::build_
75d0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
75e0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
75f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
7600: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61  NOTE: If the "na
7610: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70  tive" runtime op
7620: 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65  tion is set, the
7630: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
7640: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20  mbly..        #
7650: 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74        is being t
7660: 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20  ested.  In that
7670: 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74  case, the path t
7680: 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  o the build dire
7690: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23  ctory..        #
76a0: 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74         will cont
76b0: 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d  ain the platform
76c0: 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68   name and all th
76d0: 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72  e binaries under
76e0: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23   test..        #
76f0: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
7700: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74   present in that
7710: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20   directory.  If
7720: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e  the "native" run
7730: 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  time..        #
7740: 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20        option is
7750: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69  not set, the bui
7760: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c  ld directory wil
7770: 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20  l be considered
7780: 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23  to be..        #
7790: 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d         "platform
77a0: 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20  -neutral", with
77b0: 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65  the notable exce
77c0: 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74  ption of any nat
77d0: 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ive..        #
77e0: 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65       assembly (e
77f0: 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65  .g. "SQLite.Inte
7800: 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64  rop.dll") copied
7810: 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68   there during th
7820: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
7830: 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73     build process
7840: 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65   itself.  If the
7850: 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73   build process s
7860: 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d  omehow does not.
7870: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
7880: 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65   copy the native
7890: 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68   assembly for th
78a0: 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73  is platform, mos
78b0: 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a  t of the tests..
78c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
78d0: 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c  in the suite wil
78e0: 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70  l simply be skip
78f0: 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20  ped.  Generally
7900: 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d  speaking, there.
7910: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
7920: 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f   are two ways to
7930: 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72   build the binar
7940: 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69  ies when prepari
7950: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20  ng to run the..
7960: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
7970: 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20  est suite:..
7980: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
7990: 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20         1. Build
79a0: 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e  the separate man
79b0: 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20  aged and native
79c0: 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67  assemblies using
79d0: 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23   some..        #
79e0: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e            comman
79f0: 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a  ds similar to:..
7a00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7a10: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75     #          bu
7a20: 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67  ild.bat ${Config 7a30: 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f uration}ManagedO 7a40: 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d nly${Platform}.
7a50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
7a60: 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b      build.bat ${ 7a70: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 Configuration}Na 7a80: 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 tiveOnly${Platf
7a90: 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d  orm}..        #.
7aa0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
7ab0: 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66      Where ${Conf 7ac0: 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 iguration} is ei 7ad0: 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 ther "Debug" or 7ae0: 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 "Release" and.. 7af0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 7b00: 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73${Platform} is
7b10: 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20   either "Win32"
7b20: 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20  or "x64"...
7b30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
7b40: 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74        2. Build t
7b50: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
7b60: 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63  sembly using a c
7b70: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74  ommand similar t
7b80: 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  o:..        #..
7b90: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
7ba0: 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f    build.bat ${Co 7bb0: 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 nfiguration}${P
7bc0: 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20  latform}..
7bd0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20    #..        #
7be0: 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b          Where ${ 7bf0: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 Configuration} i 7c00: 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 s either "Debug" 7c10: 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e or "Release" an 7c20: 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 7c30: 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d${Platform
7c40: 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e  } is either "Win
7c50: 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49  32" or "x64".  I
7c60: 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69  f this command i
7c70: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
7c80: 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69        used, vari
7c90: 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72  ous tests that r
7ca0: 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e  equire supplemen
7cb0: 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20  tary managed..
7cc0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
7cd0: 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67   assemblies (e.g
7ce0: 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73  . LINQ) may be s
7cf0: 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68  kipped unless th
7d00: 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20  ose binaries..
7d10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
7d20: 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c   are subsequentl
7d30: 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68  y copied into th
7d40: 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74  e correct direct
7d50: 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20  ory (i.e. by..
7d60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
7d70: 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29   "test_all.bat")
7d80: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
7d90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f        #       No
7da0: 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74  te that all of t
7db0: 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64  he build command
7dc0: 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66  s above will def
7dd0: 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20  ault to using..
7de0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
7df0: 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f  he latest versio
7e00: 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61  n of MSBuild ava
7e10: 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22  ilable and the "
7e20: 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a  test_year" may..
7e30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
7e40: 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73  need to be adjus
7e50: 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20  ted accordingly
7e60: 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20  to actually run
7e70: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d  the test suite..
7e80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
7e90: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f   Refer to the co
7ea0: 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75  mments in [getBu
7eb0: 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72  ildYear] for mor
7ec0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e  e information on
7ed0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
7ee0: 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69    how to set thi
7ef0: 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20  s variable...
7f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7f10: 73 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70 72  set native [expr
7f20: 20 7b 21 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20   {!$managedOnly 7f30: 26 26 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 && [hasRuntimeOp 7f40: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 5d 0d 0a tion native]}].. 7f50: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 7f60: 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 [joinBuildDirec 7f70: 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67 65 tory$native [ge
7f80: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74  tBuildBaseDirect
7f90: 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ory] \..
7fa0: 20 20 20 20 5b 65 78 70 72 20 7b 24 6d 61 6e 61      [expr {$mana 7fb0: 67 65 64 4f 6e 6c 79 20 3f 20 5b 67 65 74 42 75 gedOnly ? [getBu 7fc0: 69 6c 64 59 65 61 72 5d 20 3a 20 5b 67 65 74 42 ildYear] : [getB 7fd0: 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72 5d 7d uildNativeYear]} 7fe0: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 7ff0: 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo 8000: 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b 67 65 74 rm$native] [get
8010: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
8020: 6f 6e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  on] \..
8030: 20 20 20 5b 65 78 70 72 20 7b 24 6d 61 6e 61 67     [expr {$manag 8040: 65 64 4f 6e 6c 79 20 3f 20 5b 67 65 74 42 75 69 edOnly ? [getBui 8050: 6c 64 45 78 74 72 61 5d 20 3a 20 22 22 7d 5d 5d ldExtra] : ""}]] 8060: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 8070: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 8080: 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 tReleaseVersion 8090: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 80a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 # NOTE: Fig 80b0: 75 72 65 20 6f 75 74 20 74 68 65 20 72 65 6c 65 ure out the rele 80c0: 61 73 65 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 ase version for 80d0: 75 73 65 20 77 69 74 68 20 74 68 65 20 62 75 69 use with the bui 80e0: 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ld directory.. 80f0: 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65 6e # when 8100: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 checking for av 8110: 61 69 6c 61 62 6c 65 20 72 65 6c 65 61 73 65 73 ailable releases 8120: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 8130: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 8140: 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 ts ::release_ver 8150: 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 sion] && \.. 8160: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 8170: 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f ngth$::release_
8180: 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68  version] > 0} th
8190: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
81a0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
81b0: 20 54 68 65 20 72 65 6c 65 61 73 65 20 76 65 72   The release ver
81c0: 73 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 6f 76  sion has been ov
81d0: 65 72 72 69 64 64 65 6e 3b 20 74 68 65 72 65 66  erridden; theref
81e0: 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a 20 20 20  ore, use it..
81f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72       #       ver
8200: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
8210: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
8220: 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72  n $::release_ver 8230: 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c sion.. } el 8240: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 8250: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 8260: 20 4e 6f 20 72 65 6c 65 61 73 65 20 76 65 72 73 No release vers 8270: 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 ion is available 8280: 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 , return an empt 8290: 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 y string... 82a0: 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69 73 # It is 82b0: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 important to re 82c0: 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 turn an empty st 82d0: 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 ring here becaus 82e0: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 e the.. # 82f0: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 result of 8300: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure 8310: 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74 68 may be used with 8320: 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 [file join]... 8330: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 8340: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 return "".. 8350: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 8360: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c proc getBuil 8370: 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 dFileName { file 8380: 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 Name managedOnly 8390: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d {platform ""} } 83a0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 83b0: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 83c0: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 ns the specified 83d0: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 file name as if 83e0: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 it were located 83f0: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 in the.. # 8400: 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 72 build dir 8410: 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 69 ectory, discardi 8420: 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 79 ng any directory 8430: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 65 information pre 8440: 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 sent.. # 8450: 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 20 in the file 8460: 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 64 name as provided 8470: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. 8480: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 8490: 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69 6c 65 set result [file 84a0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 nativename \.. 84b0: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j 84c0: 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 72 oin [getBuildDir 84d0: 65 63 74 6f 72 79 20 24 6d 61 6e 61 67 65 64 4f ectory$managedO
84e0: 6e 6c 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5c  nly] $platform \ 84f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 8500: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
8510: 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  ]]]....      #..
8520: 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 57 68        # HACK: Wh
8530: 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f  en running on Wo
8540: 57 36 34 2c 20 61 73 73 75 6d 65 20 74 68 65 20  W64, assume the
8550: 74 65 73 74 20 65 78 65 63 75 74 61 62 6c 65 73  test executables
8560: 20 61 72 65 20 70 72 65 73 65 6e 74 0d 0a 20 20   are present..
8570: 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68      #       with
8580: 20 74 68 65 20 22 33 32 22 20 73 75 66 66 69 78   the "32" suffix
8590: 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 20 20 20   on them...
85a0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
85b0: 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d 20 26  sRunningWoW64] &
85c0: 26 20 5b 66 69 6c 65 20 65 78 74 65 6e 73 69 6f  & [file extensio
85d0: 6e 20 24 72 65 73 75 6c 74 5d 20 65 71 20 22 2e  n $result] eq ". 85e0: 65 78 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 exe"} then {.. 85f0: 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 8600: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi 8610: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 72 65 73 le rootname$res
8620: 75 6c 74 5d 20 33 32 2e 65 78 65 5d 0d 0a 20 20  ult] 32.exe]..
8630: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
8640: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20  eturn $result.. 8650: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 8660: 63 20 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 c getExternalDir 8670: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 ectory {} {.. 8680: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 8690: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 TE: This procedu 86a0: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 re returns the d 86b0: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 irectory where t 86c0: 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 he external bina 86d0: 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ry.. # 86e0: 20 20 66 69 6c 65 73 20 61 72 65 20 6c 6f 63 61 files are loca 86f0: 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ted... #.. 8700: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil 8710: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 8720: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 8730: 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di 8740: 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e rname [file dirn 8750: 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 ame [info binary 8760: 5d 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d ]]]]].. }.... 8770: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69 6e . proc getBin 8780: 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 aryDirectory {} 8790: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 87a0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 # NOTE: This p 87b0: 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 rocedure returns 87c0: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 the directory w 87d0: 68 65 72 65 20 74 68 65 20 74 65 73 74 20 61 70 here the test ap 87e0: 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 plication.. 87f0: 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 20 # itself 8800: 28 69 2e 65 2e 20 74 68 65 20 45 61 67 6c 65 20 (i.e. the Eagle 8810: 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 74 65 shell) is locate 8820: 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 62 65 d. This will be 8830: 20 75 73 65 64 20 61 73 0d 0a 20 20 20 20 20 20 used as.. 8840: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 73 74 # the dest 8850: 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 ination for the 8860: 63 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 61 copied System.Da 8870: 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65 ta.SQLite native 8880: 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 and.. # 8890: 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 managed asse 88a0: 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 63 mblies (i.e. bec 88b0: 61 75 73 65 20 74 68 69 73 20 69 73 20 6f 6e 65 ause this is one 88c0: 20 6f 66 20 74 68 65 20 66 65 77 20 70 6c 61 63 of the few plac 88d0: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 88e0: 20 20 77 68 65 72 65 20 74 68 65 20 43 4c 52 20 where the CLR 88f0: 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 66 69 will actually fi 8900: 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 65 6d nd and load them 8910: 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 20 20 properly)... 8920: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 8930: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 [info exists ::b 8940: 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d inary_directory] 8950: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 8960: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 8970: 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74$::binary_direct
8980: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
8990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
89a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
89b0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
89c0: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
89d0: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
89e0: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
89f0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
8a00: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
8a10: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
8a20: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $8a30: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 8a40: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 8a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 8a60: 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d rn [info binary] 8a70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 8a80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 8a90: 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d tExternalFileNam 8aa0: 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b e { fileName } { 8ab0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8ac0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 # NOTE: Returns 8ad0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 66 the specified f 8ae0: 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 20 69 ile name as if i 8af0: 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 20 69 t were located i 8b00: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 n the.. # 8b10: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c 8b20: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78 ontaining the ex 8b30: 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 73 2e ternal binaries. 8b40: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8b50: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 return [file na 8b60: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 8b70: 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 6e 61 6c oin [getExternal 8b80: 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 6c 65 Directory]$file
8b90: 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c  Name]]..    }...
8ba0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 69  ..    proc getBi
8bb0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66  naryFileName { f
8bc0: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
8bd0: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
8be0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
8bf0: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
8c00: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
8c10: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
8c20: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
8c30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
8c40: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2c 20  nary directory,
8c50: 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64  discarding any d
8c60: 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61  irectory informa
8c70: 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20  tion present..
8c80: 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74      #       in t
8c90: 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  he file name as
8ca0: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
8cb0: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
8cc0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
8cd0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
8ce0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
8cf0: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
8d00: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c  ryDirectory] $pl 8d10: 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 atform [file tai 8d20: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a l$fileName]]]..
8d30: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
8d40: 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61 72 79  oc getCoreBinary
8d50: 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 6c 61 74  FileName { {plat
8d60: 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61 6e 64 61  form ""} {standa
8d70: 72 64 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20  rd ""} } {..
8d80: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
8d90: 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 66  E: Returns the f
8da0: 75 6c 6c 20 70 61 74 68 20 66 6f 72 20 74 68 65  ull path for the
8db0: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
8dc0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
8dd0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
8de0: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63  native library c
8df0: 6f 64 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61  ode for this pla
8e00: 74 66 6f 72 6d 2e 20 20 46 69 72 73 74 2c 20 63  tform.  First, c
8e10: 68 65 63 6b 20 61 6e 64 20 73 65 65 20 69 66 0d  heck and see if.
8e20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
8e30: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e  he SQLite core n
8e40: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 68 61  ative library ha
8e50: 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c  s already been l
8e60: 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20  oaded.  Next,..
8e70: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 61 6c       #       fal
8e80: 6c 62 61 63 6b 20 74 6f 20 77 68 61 74 20 74 68  lback to what th
8e90: 65 20 66 75 6c 6c 20 70 61 74 68 20 73 68 6f 75  e full path shou
8ea0: 6c 64 20 62 65 2c 20 62 61 73 65 64 20 6f 6e 20  ld be, based on
8eb0: 77 68 65 74 68 65 72 20 74 68 65 0d 0a 20 20 20  whether the..
8ec0: 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 65 64     #       mixed
8ed0: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 69  -mode assembly i
8ee0: 73 20 62 65 69 6e 67 20 75 73 65 64 20 61 6e 64  s being used and
8ef0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
8f00: 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20   current..
8f10: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d  #       platform
8f20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
8f30: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
8f40: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
8f50: 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
8f60: 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
8f70: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
8f80: 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
8f90: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5f 53  NativeMethods _S
8fa0: 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
8fb0: 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  eFileName..
8fc0: 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20   } fileName] ==
8fd0: 30 20 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e  0 && [string len
8fe0: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e  gth $fileName] > 8ff0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 9000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 9010: 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 4c 69 74 NOTE: The SQLit 9020: 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 e core native li 9030: 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 brary has alread 9040: 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 76 69 y been loaded vi 9050: 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 a.. # 9060: 20 20 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 the native li 9070: 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 64 65 72 brary pre-loader 9080: 2e 20 20 52 65 74 75 72 6e 20 74 68 61 74 20 66 . Return that f 9090: 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 ile name now... 90a0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 90b0: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 return$fileNa
90c0: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  me..      }....
90d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
90e0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61  NOTE: If the "na
90f0: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70  tive" runtime op
9100: 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65  tion has been se
9110: 74 2c 20 61 6c 77 61 79 73 20 72 65 74 75 72 6e  t, always return
9120: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
9130: 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f      file name fo
9140: 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65  r the mixed-mode
9150: 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...
9160: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
9170: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e  hasRuntimeOption
9180: 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b   native]} then {
9190: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
91a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
91b0: 75 72 6e 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  urn the mixed-mo
91c0: 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  de assembly file
91d0: 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20   name...
91e0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
91f0: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
9200: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
9210: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
9220: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
9230: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 79 73 74  ] $platform Syst 9240: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 9250: 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ll]].. }... 9260: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9270: 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 65 20 61 # NOTE: Are we a 9280: 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 75 74 ttempting to aut 9290: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 65 63 omatically detec 92a0: 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 t whether or not 92b0: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 92c0: 20 20 20 20 69 6e 74 65 72 6f 70 20 61 73 73 65 interop asse 92d0: 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 20 75 mbly should be u 92e0: 73 65 64 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 sed?.. #.. 92f0: 20 20 20 20 20 73 65 74 20 61 75 74 6f 6d 61 74 set automat 9300: 69 63 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e ic [expr {[strin 9310: 67 20 6c 65 6e 67 74 68 20 24 73 74 61 6e 64 61 g length$standa
9320: 72 64 5d 20 3d 3d 20 30 7d 5d 0d 0a 0d 0a 20 20  rd] == 0}]....
9330: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
9340: 4f 54 45 3a 20 46 69 72 73 74 2c 20 69 6e 20 65  OTE: First, in e
9350: 69 74 68 65 72 20 22 61 75 74 6f 6d 61 74 69 63  ither "automatic
9360: 22 20 6f 72 20 22 6e 6f 6e 2d 73 74 61 6e 64 61  " or "non-standa
9370: 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d  rd" modes, attem
9380: 70 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  pt..      #
9390: 20 20 74 6f 20 66 69 6e 64 20 74 68 65 20 6e 61    to find the na
93a0: 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f  tive-only intero
93b0: 70 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20  p assembly...
93c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
93d0: 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c 20 21 24  $automatic || !$
93e0: 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20 7b  standard} then {
93f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
9400: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
9410: 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e  empt to determin
9420: 65 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c  e the native-onl
9430: 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  y interop assemb
9440: 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20  ly file..
9450: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 66 6f   #       name fo
9460: 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 20  r this platform
9470: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20  and then return
9480: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
9490: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
94a0: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
94b0: 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79  tInteropAssembly
94c0: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
94d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
94e0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
94f0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
9500: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
9510: 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79   join [getBinary
9520: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 9530: 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e form$fileNameOn
9540: 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ly]]....
9550: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
9560: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 9570: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 9580: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e return$fileN
9590: 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ame..          }
95a0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
95b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
95c0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
95d0: 68 65 6e 2c 20 69 6e 20 65 69 74 68 65 72 20 22  hen, in either "
95e0: 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20 22 73  automatic" or "s
95f0: 74 61 6e 64 61 72 64 22 20 6d 6f 64 65 73 2c 20  tandard" modes,
9600: 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20 20 20  attempt to..
9610: 20 20 23 20 20 20 20 20 20 20 66 69 6e 64 20 74    #       find t
9620: 68 65 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69  he standard SQLi
9630: 74 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20  te library...
9640: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
9650: 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c 20 24 73  $automatic ||$s
9660: 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d  tandard} then {.
9670: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9680: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
9690: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  mpt to determine
96a0: 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79   the native-only
96b0: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
96c0: 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20   library..
96d0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e    #       file n
96e0: 61 6d 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61  ame for this pla
96f0: 74 66 6f 72 6d 20 61 6e 64 20 74 68 65 6e 20 72  tform and then r
9700: 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20  eturn it...
9710: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f     #..        fo
9720: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e  reach fileNameOn
9730: 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62  ly [getNativeLib
9740: 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c  raryFileNamesOnl
9750: 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  y] {..
9760: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
9770: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d  le nativename \.
9780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
9790: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69  file join [getBi
97a0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $97b0: 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 platform$fileNa
97c0: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20  meOnly]]....
97d0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
97e0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 97f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 9800: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 return$f
9810: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
9820: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
9830: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
9840: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
9850: 45 3a 20 57 61 73 20 74 68 65 20 6d 61 6e 61 67  E: Was the manag
9860: 65 64 20 61 73 73 65 6d 62 6c 79 20 63 6f 6d 70  ed assembly comp
9870: 69 6c 65 64 20 65 78 70 65 63 74 69 6e 67 20 74  iled expecting t
9880: 6f 20 64 65 61 6c 20 77 69 74 68 20 74 68 65 0d  o deal with the.
9890: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
98a0: 74 61 6e 64 61 72 64 20 63 6f 72 65 20 6c 69 62  tandard core lib
98b0: 72 61 72 79 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  rary?..      #..
98c0: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
98d0: 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
98e0: 61 6e 74 20 53 51 4c 49 54 45 5f 53 54 41 4e 44  ant SQLITE_STAND
98f0: 41 52 44 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ARD]} then {..
9900: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
9910: 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63   # NOTE: Fallbac
9920: 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e 67 20 74  k to returning t
9930: 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73  he native-only s
9940: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c  tandard SQLite l
9950: 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20  ibrary..
9960: 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d  #       file nam
9970: 65 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f  e for the platfo
9980: 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm...        #..
9990: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
99a0: 4e 61 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 4e 61  NamesOnly [getNa
99b0: 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
99c0: 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20  amesOnly]....
99d0: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74       if {[llengt
99e0: 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  h $fileNamesOnly 99f0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 9a00: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 9a10: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a "".. }.. 9a20: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 9a30: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 9a40: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 9a50: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 9a60: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d BinaryDirectory] 9a70: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64$platform [lind
9a80: 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c  ex $fileNamesOnl 9a90: 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 y 0]]].. } 9aa0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 9ab0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 9ac0: 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 72 E: Fallback to r 9ad0: 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61 74 eturning the nat 9ae0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 ive-only interop 9af0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 0d 0a assembly file.. 9b00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 9b10: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 6c 61 name for the pla 9b20: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20 tform... 9b30: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 #.. set f 9b40: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 5b 67 65 ileNamesOnly [ge 9b50: 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 tInteropAssembly 9b60: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a FileNamesOnly].. 9b70: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c .. if {[l 9b80: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 length$fileName
9b90: 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65  sOnly] == 0} the
9ba0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  n {..          r
9bb0: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20  eturn ""..
9bc0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
9bd0: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69  eturn [file nati
9be0: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
9bf0: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
9c00: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
9c10: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform 9c20: 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 4e 61 6d [lindex$fileNam
9c30: 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20  esOnly 0]]]..
9c40: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
9c50: 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6d 6d      proc getComm
9c60: 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  onDirectory {} {
9c70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9c80: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
9c90: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
9ca0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  the directory wh
9cb0: 65 72 65 20 74 68 65 20 74 65 73 74 20 73 63 72  ere the test scr
9cc0: 69 70 74 73 0d 0a 20 20 20 20 20 20 23 20 20 20  ipts..      #
9cd0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f      should be lo
9ce0: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75  cated.  By defau
9cf0: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 72 65  lt, this just re
9d00: 74 75 72 6e 73 20 74 68 65 20 45 61 67 6c 65 0d  turns the Eagle.
9d10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
9d20: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 2e  inary directory.
9d30: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9d40: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
9d50: 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63  s ::common_direc
9d60: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
9d70: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
9d80: 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64  ngth $::common_d 9d90: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 9da0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 9db0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 9dc0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 9dd0: 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 64 69 72 f the common dir 9de0: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 ectory has been 9df0: 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 set;.. # 9e00: 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c therefore, 9e10: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 use it... 9e20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 9e30: 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 urn$::common_di
9e40: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d  rectory..      }
9e50: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65   elseif {[info e
9e60: 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f 72 5f 64  xists ::vendor_d
9e70: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
9e80: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
9e90: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76 65 6e 64  g length $::vend 9ea0: 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 or_directory] > 9eb0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 9ec0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 9ed0: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 9ee0: 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e 64 6f 72 on of the vendor 9ef0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 9f00: 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 een set;.. 9f10: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 # theref 9f20: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 ore, use it... 9f30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 9f40: 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 6e 64 6f return$::vendo
9f50: 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  r_directory..
9f60: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
9f70: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f  fo exists ::tcl_
9f80: 6c 69 62 72 61 72 79 5d 20 26 26 20 5c 0d 0a 20  library] && \..
9f90: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
9fa0: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63 6c 5f 6c   length $::tcl_l 9fb0: 69 62 72 61 72 79 5d 20 3e 20 30 20 26 26 20 5c ibrary] > 0 && \ 9fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 9fd0: 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 3a e isdirectory$:
9fe0: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 7d 20 74  :tcl_library]} t
9ff0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
a000: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
a010: 3a 20 54 68 65 20 76 61 72 69 61 62 6c 65 20 77  : The variable w
a020: 69 74 68 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e  ith the location
a030: 20 6f 66 20 74 68 65 20 73 63 72 69 70 74 20 6c   of the script l
a040: 69 62 72 61 72 79 20 69 73 0d 0a 20 20 20 20 20  ibrary is..
a050: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 20 61     #       set a
a060: 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20 62 65  nd appears to be
a070: 20 61 20 72 65 61 6c 20 64 69 72 65 63 74 6f 72   a real director
a080: 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65 6d 62 65  y (i.e. not embe
a090: 64 64 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  dded..        #
a0a0: 20 20 20 20 20 20 77 69 74 68 69 6e 20 61 20 66        within a f
a0b0: 69 6c 65 29 3b 20 74 68 65 72 65 66 6f 72 65 2c  ile); therefore,
a0c0: 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
a0d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
a0e0: 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  urn $::tcl_libra a0f0: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else a100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. a110: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F a120: 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 20 64 allback to the d a130: 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e irectory contain a140: 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 61 62 ing the executab a150: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. a160: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ a170: 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 info binary].. a180: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... a190: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 . proc getDat a1a0: 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 20 7b abaseDirectory { a1b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. a1c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This a1d0: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur a1e0: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory a1f0: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 where the test a200: 64 61 74 61 62 61 73 65 73 0d 0a 20 20 20 20 20 databases.. a210: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 # should a220: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 be located. By a230: 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 default, this ju a240: 73 74 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 st uses the temp a250: 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 orary.. # a260: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 directory c a270: 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 onfigured for th a280: 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 is system... a290: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ a2a0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 info exists ::da a2b0: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory a2c0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. a2d0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length a2e0: 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72$::database_dir
a2f0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
a300: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
a310: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
a320: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
a330: 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72  the database dir
a340: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
a350: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
a360: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
a370: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
a380: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
a390: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61      return $::da a3a0: 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 tabase_directory a3b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif a3c0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : a3d0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo a3e0: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. a3f0: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng a400: 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 th$::scratch_di
a410: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
a420: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
a430: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
a440: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66   The location of
a450: 20 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72   the scratch dir
a460: 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20  ectory has been
a470: 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20  overridden;..
a480: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
a490: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d  refore, use it..
a4a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
a4b0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63      return $::sc a4c0: 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d ratch_directory. a4d0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. a4e0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return a4f0: 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 [getTemporaryPat a500: 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 h].. }.. a510: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc a520: 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72 65 getTemporaryDire a530: 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 ctory {} {.. a540: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT a550: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur a560: 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 e returns the di a570: 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th a580: 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 e temporary file a590: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # a5a0: 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 should be locat a5b0: 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c ed. By default, a5c0: 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 this just uses a5d0: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 the temporary.. a5e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir a5f0: 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 ectory configure a600: 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 d for this syste a610: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. a620: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi a630: 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 72 79 5f sts ::temporary_ a640: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. a650: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri a660: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 6d ng length$::tem
a670: 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79  porary_directory
a680: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
a690: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a6a0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f    # NOTE: The lo
a6b0: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 74 65  cation of the te
a6c0: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
a6d0: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
a6e0: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
a6f0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
a700: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
a710: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
a720: 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70 6f 72 61  eturn $::tempora a730: 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 ry_directory.. a740: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i a750: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 nfo exists ::scr a760: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 atch_directory] a770: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. a780: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
a790: 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74  ::scratch_direct
a7a0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
a7b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
a7c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
a7d0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
a7e0: 20 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f   scratch directo
a7f0: 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ry has been over
a800: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
a810: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
a820: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
a830: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a840: 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63  return $::scratc a850: 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 h_directory.. a860: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. a870: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 return [get a880: 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a TemporaryPath].. a890: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. a8a0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 45 ... proc getE a8b0: 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 7b 7d xecuteOnSetup {} a8c0: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 {.. if {[i a8d0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 78 65 nfo exists ::exe a8e0: 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 26 cute_on_setup] & a8f0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ a900: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
a910: 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75  :execute_on_setu
a920: 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  p] > 0} then {..
a930: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a940: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
a950: 6e 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64  n the configured
a960: 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20   SQL to execute
a970: 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65  during the conne
a980: 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23  ction..        #
a990: 20 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f         setup pro
a9a0: 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72  cedure (i.e. for
a9b0: 20 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61   every test data
a9c0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29  base connection)
a9d0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
a9e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: a9f0: 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 execute_on_setup aa00: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { aa10: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. aa20: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 # NOTE: By aa30: 64 65 66 61 75 6c 74 2c 20 74 68 65 72 65 20 69 default, there i aa40: 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 78 65 63 s no SQL to exec aa50: 75 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 ute during the c aa60: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 onnection.. aa70: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70 # setup aa80: 20 70 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e procedure (i.e. aa90: 20 66 6f 72 20 65 76 65 72 79 20 74 65 73 74 20 for every test aaa0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect aab0: 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 ion)... # aac0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return aad0: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 "".. }.. aae0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc aaf0: 20 67 65 74 53 74 72 69 6e 67 4d 61 70 46 6f 72 getStringMapFor ab00: 54 63 6c 45 73 63 61 70 65 20 7b 7d 20 7b 0d 0a TclEscape {} {.. ab10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li ab20: 73 74 20 5c 5c 20 5c 5c 5c 5c 20 5c 5b 20 5c 5c st \\ \\\\ $\\ ab30: 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20 5c 24 20 5c 5c \[$ \\\] \$ \\
ab40: 5c 24 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  \$].. }..... ab50: 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 74 4f proc getTestO ab60: 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 verridesPreamble ab70: 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 { {extraVarName ab80: 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 s ""} } {.. ab90: 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c set varNames [l aba0: 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d ist].... #. abb0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I abc0: 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 f available, sta abd0: 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 rt with the mast abe0: 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 er list of test abf0: 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 override.. ac00: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable ac10: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. ac20: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi ac30: 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 sts ::test_overr ac40: 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ides] && \.. ac50: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 [llength$
ac60: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73  ::test_overrides
ac70: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
ac80: 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
ac90: 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a  end varNames $:: aca0: 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a test_overrides.. acb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... acc0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE acd0: 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62 : If requested b ace0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 y our caller, ad acf0: 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c d any additional ad00: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. ad10: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 # names t ad20: 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 o copy now... ad30: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { ad40: 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 [llength$extraV
ad50: 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68  arNames] > 0} th
ad60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
ad70: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61  al lappend varNa
ad80: 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d  mes $extraVarNam ad90: 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 es.. }.... ada0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # adb0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the adc0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 script fragment add0: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 to be returned b ade0: 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 y processing eac adf0: 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 h.. # ae00: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 variable name a ae10: 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 nd adding the ne ae20: 63 65 63 65 73 73 61 72 79 20 73 63 72 69 70 74 cecessary script ae30: 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a fragments for.. ae40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 61 # ea ae50: 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 ch one... # ae60: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu ae70: 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 lt "".... f ae80: 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 oreach varName$
ae90: 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  varNames {..
aea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
aeb0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
aec0: 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61   qualified globa
aed0: 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e  l variable name.
aee0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
aef0: 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72       set fullVar
af00: 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73  Name [appendArgs
af10: 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d   :: $varName]... af20: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. af30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 # NOTE: Does af40: 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 the variable ex af50: 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 ist in this inte af60: 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f rpreter context? af70: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. af80: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e af90: 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 xists$fullVarNa
afa0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
afb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
afc0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65      # NOTE: Appe
afd0: 6e 64 20 61 20 73 63 72 69 70 74 20 66 72 61 67  nd a script frag
afe0: 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75  ment to the resu
aff0: 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72  lt that will cor
b000: 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20  rectly..
b010: 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 61    #       copy a
b020: 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c  ny contained val
b030: 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e  ue to another in
b040: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78  terpreter contex
b050: 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
b060: 0a 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e  .          appen
b070: 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74  d result \n "set
b080: 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20   " $fullVarName b090: 22 20 5c 7b 22 20 5b 73 74 72 69 6e 67 20 6d 61 " \{" [string ma b0a0: 70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 p \.. b0b0: 20 20 20 5b 67 65 74 53 74 72 69 6e 67 4d 61 70 [getStringMap b0c0: 46 6f 72 54 63 6c 45 73 63 61 70 65 5d 20 5b 73 ForTclEscape] [s b0d0: 65 74 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d et$fullVarName]
b0e0: 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ] \}..        }.
b0f0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
b100: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
b110: 45 3a 20 49 66 20 74 68 65 20 72 65 73 75 6c 74  E: If the result
b120: 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72   contains one or
b130: 20 6d 6f 72 65 20 73 63 72 69 70 74 20 66 72 61   more script fra
b140: 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e 64 20 61  gments, append a
b150: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
b160: 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20 20 20 20  newline...
b170: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  #..      if {[st
b180: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73  ring length $res b190: 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ult] > 0} then { b1a0: 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append b1b0: 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 result \n.. b1c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret b1d0: 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
b1e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
b1f0: 6d 6f 76 65 53 79 73 74 65 6d 44 61 74 61 53 51  moveSystemDataSQ
b200: 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67 20 7b 20  LiteDllConfig {
b210: 7b 72 65 73 74 6f 72 65 20 66 61 6c 73 65 7d 20  {restore false}
b220: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d  {verbose true} }
b230: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 64 69   {..      set di
b240: 72 65 63 74 6f 72 79 20 5b 67 65 74 42 69 6e 61  rectory [getBina
b250: 72 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a  ryDirectory]....
b260: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
b270: 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74  g length $direct b280: 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ory] == 0} then b290: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 {.. if {$
b2a0: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
b2b0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
b2c0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel b2d0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. b2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- b2f0: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 --- skipped movi b300: 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 ng \"System.Data b310: 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 .SQLite.dll.conf b320: 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 ig\", " \.. b330: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69 6e "no bin b340: 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 ary directory\n" b350: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ].. }.... b360: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a return.. b370: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... b380: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 31 29 set fileName(1) b390: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 [file normalize b3a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f b3b0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
b3c0: 6f 72 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ory System.Data.
b3d0: 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69  SQLite.dll.confi
b3e0: 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74  g]]....      set
b3f0: 20 66 69 6c 65 4e 61 6d 65 28 32 29 20 5b 61 70   fileName(2) [ap
b400: 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61  pendArgs $fileNa b410: 6d 65 28 31 29 20 2e 6d 6f 76 65 64 5d 0d 0a 0d me(1) .moved]... b420: 0a 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 74 . if {$rest
b430: 6f 72 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ore} then {..
b440: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
b450: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28  xists $fileName( b460: 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 2)]} then {.. b470: 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 file rena b480: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 me$fileName(2)
b490: 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a  $fileName(1).... b4a0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 if {$v
b4b0: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
b4c0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
b4d0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe b4e0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. b4f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b500: 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 "---- moved \"" b510: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 22 5c$fileName(2) "\
b520: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
b530: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil b540: 65 4e 61 6d 65 28 31 29 20 5c 22 5c 6e 5d 0d 0a eName(1) \"\n].. b550: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. b560: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. b570: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 if {$ve
b580: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
b590: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
b5a0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel b5b0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. b5c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b5d0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f "---- skipped mo b5e0: 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 ving \""$fileNa
b5f0: 6d 65 28 32 29 20 5c 0d 0a 20 20 20 20 20 20 20  me(2) \..
b600: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
b610: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
b620: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
b630: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
b640: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
b650: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
b660: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 28  xists $fileName( b670: 31 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 1)]} then {.. b680: 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 6e 61 file rena b690: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 me$fileName(1)
b6a0: 24 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a  $fileName(2).... b6b0: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 if {$v
b6c0: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
b6e0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe b6f0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. b700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b710: 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 "---- moved \"" b720: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 22 5c$fileName(1) "\
b730: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20  " to \"" \..
b740: 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil b750: 65 4e 61 6d 65 28 32 29 20 5c 22 5c 6e 5d 0d 0a eName(2) \"\n].. b760: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. b770: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. b780: 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 if {$ve
b790: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
b7a0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
b7b0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel b7c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. b7d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 b7e0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f "---- skipped mo b7f0: 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 4e 61 ving \""$fileNa
b800: 6d 65 28 31 29 20 5c 0d 0a 20 20 20 20 20 20 20  me(1) \..
b810: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
b820: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
b830: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
b840: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
b850: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
b860: 20 20 20 20 70 72 6f 63 20 77 72 69 74 65 53 79      proc writeSy
b870: 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c  stemDataSQLiteDl
b880: 6c 43 6f 6e 66 69 67 20 7b 20 64 61 74 61 20 7b  lConfig { data {
b890: 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20  verbose true} }
b8a0: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 64 69 72  {..      set dir
b8b0: 65 63 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72  ectory [getBinar
b8c0: 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20  yDirectory]....
b8d0: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
b8e0: 20 6c 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f   length $directo b8f0: 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ry] == 0} then { b900: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 .. if {$v
b910: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
b920: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
b930: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel b940: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. b950: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- b960: 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e -- skipped movin b970: 67 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e g \"System.Data. b980: 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 SQLite.dll.confi b990: 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 g\", " \.. b9a0: 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69 6e 61 "no bina b9b0: 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d ry directory\n"] b9c0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... b9d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 return.. b9e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... b9f0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi ba00: 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a le normalize \.. ba10: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file ba20: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 join$directory
ba30: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
ba40: 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d  te.dll.config]].
ba50: 0a 0d 0a 20 20 20 20 20 20 77 72 69 74 65 46 69  ...      writeFi
ba60: 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 64 61  le $fileName$da
ba70: 74 61 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  ta....      if {
ba80: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b  $verbose} then { ba90: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs baa0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
bab0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
bac0: 2d 2d 2d 2d 20 77 72 6f 74 65 20 5c 22 53 79 73  ---- wrote \"Sys
bad0: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
bae0: 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 5c 6e 22 0d  dll.config\"\n".
baf0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
bb00: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61    return $fileNa bb10: 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 me.. }..... bb20: 20 20 70 72 6f 63 20 6d 6f 76 65 45 61 67 6c 65 proc moveEagle bb30: 53 68 65 6c 6c 4d 64 61 43 6f 6e 66 69 67 20 7b ShellMdaConfig { bb40: 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73 65 7d {restore false} bb50: 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 {verbose true} bb60: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 64 } {.. set d bb70: 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 69 6e irectory [getBin bb80: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d aryDirectory]... bb90: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri bba0: 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65 63 ng length$direc
bbb0: 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  tory] == 0} then
bbc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
bbd0: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b  $verbose} then { bbe0: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput bbf0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
bc00: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
bc10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
bc20: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76  ---- skipped mov
bc30: 69 6e 67 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c  ing \"EagleShell
bc40: 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c  .exe.mda.config\
bc50: 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  ", " \..
bc60: 20 20 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79        "no binary
bc70: 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a   directory\n"]..
bc80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
bc90: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20       return..
bca0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
bcb0: 74 20 66 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66  t fileName(1) [f
bcc0: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d  ile normalize \.
bcd0: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
bce0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory bcf0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e EagleShell.exe. bd00: 6d 64 61 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a mda.config]].... bd10: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa bd20: 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 72 67 me(2) [appendArg bd30: 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 2e s$fileName(1) .
bd40: 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 20 20  moved]....
bd50: 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 74 68  if {$restore} th bd60: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if bd70: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
bd80: 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20 74 68  fileName(2)]} th
bd90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
bda0: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c  file rename $fil bdb0: 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 4e 61 eName(2)$fileNa
bdc0: 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 20 20  me(1)....
bdd0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} bde0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. bdf0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
be00: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
be10: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
be20: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
be30: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e  moved \"" $fileN be40: 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 5c 22 ame(2) "\" to \" be50: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. be60: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 31$fileName(1
be70: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ) \"\n]..
be80: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
be90: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
bea0: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} beb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. bec0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
bed0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
bee0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
bef0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
bf00: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22  kipped moving \"
bf10: 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c  " $fileName(2) \ bf20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bf30: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n bf40: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. bf50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. bf60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el bf70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 se {.. if bf80: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
bf90: 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20 74 68  fileName(1)]} th
bfa0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
bfb0: 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 69 6c  file rename $fil bfc0: 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 4e 61 eName(1)$fileNa
bfd0: 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 20 20  me(2)....
bfe0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} bff0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c000: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
c010: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
c020: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
c030: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
c040: 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c 65 4e  moved \"" $fileN c050: 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 5c 22 ame(1) "\" to \" c060: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. c070: 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 28 32$fileName(2
c080: 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ) \"\n]..
c090: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
c0a0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
c0b0: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20    if {$verbose} c0c0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c0d0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
c0e0: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
c0f0: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
c100: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
c110: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22  kipped moving \"
c120: 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c  " $fileName(1) \ c130: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c140: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n c150: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. c160: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. c170: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. c180: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro c190: 63 20 77 72 69 74 65 45 61 67 6c 65 53 68 65 6c c writeEagleShel c1a0: 6c 4d 64 61 43 6f 6e 66 69 67 20 7b 20 64 61 74 lMdaConfig { dat c1b0: 61 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d a {verbose true} c1c0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set c1d0: 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 69 directory [getBi c1e0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a naryDirectory].. c1f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str c200: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65 ing length$dire
c210: 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  ctory] == 0} the
c220: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
c230: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then c240: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu c250: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
c260: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
c270: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c280: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f  "---- skipped mo
c290: 76 69 6e 67 20 5c 22 45 61 67 6c 65 53 68 65 6c  ving \"EagleShel
c2a0: 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  l.exe.mda.config
c2b0: 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  \", " \..
c2c0: 20 20 20 20 20 20 20 22 6e 6f 20 62 69 6e 61 72         "no binar
c2d0: 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d  y directory\n"].
c2e0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
c2f0: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20        return..
c300: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
c310: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
c320: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20  e normalize \..
c330: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
c340: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 45  oin $directory E c350: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 agleShell.exe.md c360: 61 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 a.config]].... c370: 20 20 20 20 77 72 69 74 65 46 69 6c 65 20 24 66 writeFile$f
c380: 69 6c 65 4e 61 6d 65 20 24 64 61 74 61 0d 0a 0d  ileName $data... c390: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 . if {$verb
c3a0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
c3b0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te c3c0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. c3d0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- c3e0: 77 72 6f 74 65 20 5c 22 45 61 67 6c 65 53 68 65 wrote \"EagleShe c3f0: 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 ll.exe.mda.confi c400: 67 5c 22 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d g\"\n".. }. c410: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return c420: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 7d$fileName..    }
c430: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
c440: 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62  tAppDomainPreamb
c450: 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 22 22 7d  le { {prefix ""}
c460: 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7d 20 7b   {suffix ""} } {
c470: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
c480: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
c490: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
c4a0: 61 20 74 65 73 74 20 73 65 74 75 70 20 73 63 72  a test setup scr
c4b0: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 73 75 69  ipt fragment sui
c4c0: 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20  table for..
c4d0: 20 23 20 20 20 20 20 20 20 65 76 61 6c 75 61 74   #       evaluat
c4e0: 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74 65 72 70  ion by an interp
c4f0: 72 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e  reter created in
c500: 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 70   an isolated app
c510: 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  lication..
c520: 23 20 20 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20  #       domain.
c530: 20 54 68 65 20 73 63 72 69 70 74 20 66 72 61 67   The script frag
c540: 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72  ment being retur
c550: 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 72 72  ned will be surr
c560: 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20 20 20 20  ounded by..
c570: 20 23 20 20 20 20 20 20 20 74 68 65 20 70 72 65   #       the pre
c580: 66 69 78 20 61 6e 64 20 73 75 66 66 69 78 20 22  fix and suffix "
c590: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73  script fragments
c5a0: 22 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f  " specified by o
c5b0: 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20  ur caller,..
c5c0: 20 20 23 20 20 20 20 20 20 20 69 66 20 61 6e 79    #       if any
c5d0: 2e 20 20 54 68 65 20 65 6e 74 69 72 65 20 73 63  .  The entire sc
c5e0: 72 69 70 74 20 62 65 69 6e 67 20 72 65 74 75 72  ript being retur
c5f0: 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 62 73  ned will be subs
c600: 74 69 74 75 74 65 64 20 76 69 61 0d 0a 20 20 20  tituted via..
c610: 20 20 20 23 20 20 20 20 20 20 20 5b 73 75 62 73     #       [subs
c620: 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  t], in the conte
c630: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72  xt of our caller
c640: 2c 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 72  , before being r
c650: 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20  eturned...
c660: 23 20 20 20 20 20 20 20 54 68 69 73 20 73 74 65  #       This ste
c670: 70 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73  p is necessary s
c680: 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69  o that some limi
c690: 74 65 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f  ted context info
c6a0: 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  rmation,..
c6b0: 23 20 20 20 20 20 20 20 70 72 69 6d 61 72 69 6c  #       primaril
c6c0: 79 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65  y related to the
c6d0: 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f   testing directo
c6e0: 72 69 65 73 2c 20 63 61 6e 20 62 65 20 74 72 61  ries, can be tra
c6f0: 6e 73 66 65 72 72 65 64 0d 0a 20 20 20 20 20 20  nsferred..
c700: 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 69  #       to the i
c710: 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 74 68  nterpreter in th
c720: 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69  e isolated appli
c730: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d  cation domain, m
c740: 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20 20 20 20  aking it..
c750: 23 20 20 20 20 20 20 20 61 62 6c 65 20 74 6f 20  #       able to
c760: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72 75 6e  successfully run
c770: 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 75   tests that requ
c780: 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ire one or more
c790: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  of the..      #
c7a0: 20 20 20 20 20 20 66 69 6c 65 73 20 69 6e 20 6f        files in o
c7b0: 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74 69 6e  ne of the testin
c7c0: 67 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20  g directories.
c7d0: 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b  Callers should k
c7e0: 65 65 70 20 69 6e 0d 0a 20 20 20 20 20 20 23 20  eep in..      #
c7f0: 20 20 20 20 20 20 6d 69 6e 64 20 74 68 61 74 20        mind that
c800: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 20  the test script
c810: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
c820: 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72  eturned cannot r
c830: 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ely on..      #
c840: 20 20 20 20 20 20 61 6e 79 20 73 63 72 69 70 74        any script
c850: 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 75   library procedu
c860: 72 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  res that are not
c870: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
c880: 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20   Eagle..      #
c890: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 70 61        library pa
c8a0: 63 6b 61 67 65 20 28 69 2e 65 2e 20 22 69 6e 69  ckage (i.e. "ini
c8b0: 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75  t.eagle"), inclu
c8c0: 64 69 6e 67 20 74 68 6f 73 65 20 70 72 6f 76 69  ding those provi
c8d0: 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20  ded by..      #
c8e0: 20 20 20 20 20 20 74 68 65 20 45 61 67 6c 65 20        the Eagle
c8f0: 74 65 73 74 20 70 61 63 6b 61 67 65 2c 20 75 6e  test package, un
c900: 6c 65 73 73 20 74 68 65 20 66 69 6c 65 20 63 6f  less the file co
c910: 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 20 69 73  ntaining them is
c920: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
c930: 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20         manually
c940: 76 69 61 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d  via some other m
c950: 65 63 68 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62  echanism (e.g. b
c960: 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 70 70 72  y including appr
c970: 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20 20 23  opriate..      #
c980: 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67 65 20         [package
c990: 72 65 71 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75  require] or [sou
c9a0: 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e  rce] commands in
c9b0: 20 74 68 65 20 70 72 65 66 69 78 20 6f 72 20 73   the prefix or s
c9c0: 75 66 66 69 78 0d 0a 20 20 20 20 20 20 23 20 20  uffix..      #
c9d0: 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67       script frag
c9e0: 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61  ments).  Also, a
c9f0: 6c 6c 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  ll variable refe
ca00: 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e  rences and all n
ca10: 65 73 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20  ested..      #
ca20: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69       commands (i
ca30: 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20 73 71 75  .e. those in squ
ca40: 61 72 65 20 62 72 61 63 6b 65 74 73 29 20 63 6f  are brackets) co
ca50: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 66  ntained in the f
ca60: 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20  inal..      #
ca70: 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67 6d      script fragm
ca80: 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20 75 70 20  ent will end up
ca90: 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20  being evaluated
caa0: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
cab0: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  f the..      #
cac0: 20 20 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74       calling int
cad0: 65 72 70 72 65 74 65 72 20 61 6e 64 20 6e 6f 74  erpreter and not
cae0: 20 74 68 65 20 74 61 72 67 65 74 20 69 6e 74 65   the target inte
caf0: 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64 20  rpreter created
cb00: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
cb10: 20 20 20 20 20 20 69 73 6f 6c 61 74 65 64 20 61        isolated a
cb20: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
cb30: 6e 20 75 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c  n unless the dol
cb40: 6c 61 72 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72  lar signs and/or
cb50: 20 73 71 75 61 72 65 0d 0a 20 20 20 20 20 20 23   square..      #
cb60: 20 20 20 20 20 20 20 62 72 61 63 6b 65 74 73 20         brackets
cb70: 61 72 65 20 73 70 65 63 69 61 6c 6c 79 20 71 75  are specially qu
cb80: 6f 74 65 64 20 77 69 74 68 20 62 61 63 6b 73 6c  oted with backsl
cb90: 61 73 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ashes...      #.
cba0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75  .      return [u
cbb0: 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
cbc0: 75 62 73 74 20 5b 61 70 70 65 6e 64 41 72 67 73  ubst [appendArgs
cbd0: 20 24 70 72 65 66 69 78 20 7b 0d 0a 20 20 20 20   $prefix {.. cbe0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # cbf0: 20 4e 4f 54 45 3a 20 54 68 65 20 5c 5b 6f 62 6a NOTE: The $obj cc00: 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e 64 20 6d 61 ect$ command ma cc10: 79 20 62 65 20 6d 69 73 73 69 6e 67 20 69 6e 20 y be missing in cc20: 73 6f 6d 65 20 45 61 67 6c 65 20 63 6f 72 65 0d some Eagle core. cc30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # cc40: 20 6c 69 62 72 61 72 79 20 63 6f 6e 66 69 67 75 library configu cc50: 72 61 74 69 6f 6e 73 2e 20 20 43 6c 6f 6e 69 6e rations. Clonin cc60: 67 20 61 6e 64 20 75 73 69 6e 67 20 74 68 65 20 g and using the cc70: 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20 procedure.. cc80: 20 20 20 23 20 20 20 20 20 20 20 5c 5b 63 68 61 # $cha cc90: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime cca0: 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 20 68 65 6c Option$ may hel ccb0: 70 20 74 6f 20 6d 69 74 69 67 61 74 65 20 74 68 p to mitigate th ccc0: 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a is... #.. ccd0: 20 20 20 20 20 20 20 20 70 72 6f 63 20 63 68 61 proc cha cce0: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime ccf0: 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 Option \.. cd00: 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 61 72 67 {[info arg cd10: 73 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 s changeNativeRu cd20: 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 20 5c 0d ntimeOption]} \. cd30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 5b 69 . {[i cd40: 6e 66 6f 20 62 6f 64 79 20 63 68 61 6e 67 65 4e nfo body changeN cd50: 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 ativeRuntimeOpti cd60: 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]}.... cd70: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. cd80: 20 20 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 changeNativeR cd90: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5b 68 61 untimeOption [ha cda0: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e sRuntimeOption n cdb0: 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 20 20 20 ative].. cdc0: 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 74 54 }.. } [getT cdd0: 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 estOverridesPrea cde0: 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 68 20 mble [list path cdf0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d 20 24 test_channel]]$
ce00: 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20 20 7d  suffix]]]..    }
ce10: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
ce20: 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c  yCopyExternalFil
ce30: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
ce40: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
ce50: 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65  orm ""} {newFile
ce60: 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 62 6f 73  Name ""} {verbos
ce70: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
ce80: 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c     set sourceFil
ce90: 65 4e 61 6d 65 20 5b 67 65 74 45 78 74 65 72 6e  eName [getExtern
cea0: 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  alFileName $file ceb0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 Name].... i cec0: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 f {![file exists ced0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
cee0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
cef0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d     if {$verbose} cf00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. cf10: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
cf20: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
cf30: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
cf40: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
cf50: 70 65 64 20 63 6f 70 79 69 6e 67 20 65 78 74 65  ped copying exte
cf60: 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22 20 24 73  rnal file \"" $s cf70: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. cf80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " cf90: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not cfa0: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 exist\n"].. cfb0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... cfc0: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d return.. }. cfd0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st cfe0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 ring length$new
cff0: 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  FileName] > 0} t
d000: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  hen {..        s
d010: 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  et targetFileNam
d020: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  e [getBinaryFile
d030: 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d  Name $newFileNam d040: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 e$platform]..
d050: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
d060: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
d070: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e  FileName [getBin
d080: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  aryFileName $fil d090: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d eName$platform]
d0a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
d0b0: 20 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72     set targetDir
d0c0: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72  ectory [file dir
d0d0: 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65  name $targetFile d0e0: 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 Name].... i d0f0: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. d100: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file d110: 65 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 exists$targetDi
d120: 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b  rectory]} then {
d130: 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65  ..          file
d140: 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69   mkdir $targetDi d150: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 rectory.. d160: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 }.... fi d170: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 le copy -force$
d180: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24  sourceFileName $d190: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a targetFileName.. d1a0: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 }] == 0} t d1b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t d1c0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
d1d0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
d1e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d1f0: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 74  "---- copied ext
d200: 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20  ernal file from
d210: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  \"" $sourceFileN d220: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c ame "\" to \"" \ d230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74 ..$t
d240: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22  argetFileName \"
d250: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  \n]..      } els
d260: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
d270: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann d280: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ d290: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- d2a0: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f --- failed to co d2b0: 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 py external file d2c0: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
d2d0: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..
d2e0: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20           "\" to
d2f0: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e  \"" $targetFileN d300: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. d310: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... d320: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69 proc tryCopyBi d330: 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20 naryFile {.. d340: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName d350: 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c managedOnly {pl d360: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 atform ""} {newF d370: 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 20 20 ileName ""}.. d380: 20 20 20 20 20 20 20 20 20 7b 76 65 72 62 6f 73 {verbos d390: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 e true} } {.. d3a0: 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c set sourceFil d3b0: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary d3c0: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
d3d0: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d  me $platform]... d3e0: 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c . if {![fil d3f0: 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 e exists$source
d400: 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  FileName]} then
d410: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  {..        if {$d420: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d verbose} then {. d430: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs d440: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
d450: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d460: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
d470: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79  --- skipped copy
d480: 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ing binary file
d490: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e  \"" $sourceFileN d4a0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. d4b0: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe d4c0: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. d4d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... d4e0: 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 return.. d4f0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i d500: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt d510: 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 h$newFileName]
d520: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
d530: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46       set targetF
d540: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c  ileName [getBuil
d550: 64 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  dFileName \..
d560: 20 20 20 20 20 20 20 20 20 24 6e 65 77 46 69 6c           $newFil d570: 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e eName$managedOn
d580: 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20  ly $platform].. d590: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. d5a0: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 set targe d5b0: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 tFileName [getBu d5c0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 ildFileName \.. d5d0: 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
d5e0: 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c  Name $managedOnl d5f0: 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 y$platform]..
d600: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
d610: 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f  et targetDirecto
d620: 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65  ry [file dirname
d630: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName d640: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ d650: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. d660: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis d670: 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 ts$targetDirect
d680: 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
d690: 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64          file mkd
d6a0: 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74  ir $targetDirect d6b0: 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ory.. }.. d6c0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 .. file c d6d0: 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 opy -force$sour
d6e0: 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67  ceFileName $targ d6f0: 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 etFileName.. d700: 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 }] == 0} then d710: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs d720: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
d730: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
d740: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d750: 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20  - copied binary
d760: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s d770: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c ourceFileName "\ d780: 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 " to \"" \.. d790: 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74 46$targetF
d7a0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
d7b0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
d7c0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: d7d0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap d7e0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. d7f0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 "---- fa d800: 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e iled to copy bin d810: 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 ary file from \" d820: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d "$sourceFileNam
d830: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
d840: 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72   "\" to \"" $tar d850: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e getFileName \"\n d860: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. d870: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 }..... proc t d880: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 ryCopyBuildFile d890: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f d8a0: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO d8b0: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" d8c0: 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 } {newFileName " d8d0: 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "}.. d8e0: 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d {verbose true} } d8f0: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 6f {.. set so d900: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 urceFileName [ge d910: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 tBuildFileName$
d920: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage d930: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d dOnly$platform]
d940: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
d950: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75  file exists $sou d960: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 rceFileName]} th d970: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if d980: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
d990: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
d9a0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan d9b0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs d9c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. d9d0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 "---- skipped c d9e0: 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 66 69 6c opying build fil d9f0: 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c e \""$sourceFil
da00: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
da10: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64         "\", it d
da20: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22  oes not exist\n"
da30: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
da40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
da50: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
da60: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
da70: 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65  gth $newFileName da80: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. da90: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 set targe daa0: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 tFileName [getBi dab0: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 naryFileName$ne
dac0: 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  wFileName $platf dad0: 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c orm].. } el dae0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 se {.. se daf0: 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 t targetFileName db00: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN db10: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p db20: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. db30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 }.... set t db40: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b argetDirectory [ db50: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 file dirname$ta
db60: 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  rgetFileName]...
db70: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
db80: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  h {..        if
db90: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $dba0: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d targetDirectory] dbb0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. dbc0: 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 file mkdir$
dbd0: 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d  targetDirectory.
dbe0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
dbf0: 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20        file copy
dc00: 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69  -force $sourceFi dc10: 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 leName$targetFi
dc20: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d  leName..      }]
dc30: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
dc40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: dc50: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap dc60: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. dc70: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co dc80: 70 69 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 pied build file dc90: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 from \""$source
dca0: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20  FileName "\" to
dcb0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
dcc0: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61     $targetFileNa dcd0: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 me \"\n].. dce0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. dcf0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
dd00: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
dd10: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
dd20: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20     "---- failed
dd30: 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 20 66 69  to copy build fi
dd40: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75  le from \"" $sou dd50: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 rceFileName \.. dd60: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 "\" t dd70: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c o \""$targetFil
dd80: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
dd90: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
dda0: 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c 65      proc tryDele
ddb0: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 7b 20 66  teBinaryFile { f
ddc0: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
ddd0: 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74  m ""} {verbose t
dde0: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
ddf0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
de00: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
de10: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
de20: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
de30: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
de40: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then de50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { de60: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
de70: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
de80: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe de90: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. dea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " deb0: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c ---- skipped del dec0: 65 74 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c eting binary fil ded0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
dee0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
def0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f   "\", it does no
df00: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20  t exist\n"]..
df10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
df20: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
df30: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
df40: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
df50: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d  te $fileName}] = df60: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. df70: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
df80: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
df90: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
dfa0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65        "---- dele
dfb0: 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ted binary file
dfc0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22  \"" $fileName \" dfd0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 \n].. } els dfe0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu dff0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
e000: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
e010: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
e020: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65  --- failed to de
e030: 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69 6c 65  lete binary file
e040: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ e050: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. e060: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro e070: 63 20 74 72 79 44 65 6c 65 74 65 42 75 69 6c 64 c tryDeleteBuild e080: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 File {.. e090: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e fileName man e0a0: 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f agedOnly {platfo e0b0: 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 rm ""} {verbose e0c0: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. e0d0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 set fileName [g e0e0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName e0f0: 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67$fileName $manag e100: 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d edOnly$platform
e110: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  ]....      if {!
e120: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi e130: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. e140: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
e150: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
e160: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $e170: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ e180: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. e190: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- e1a0: 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 - skipped deleti e1b0: 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 ng build file \" e1c0: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 "$fileName \..
e1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
e1e0: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  , it does not ex
e1f0: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ist\n"]..
e200: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
e210: 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  turn..      }...
e220: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
e230: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $e240: 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d fileName}] == 0} e250: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. e260: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
e270: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
e280: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
e290: 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20    "---- deleted
e2a0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $e2b0: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. e2c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. e2d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
e2e0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
e2f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
e300: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
e310: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
e320: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $e330: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. e340: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. e350: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 ... proc tryC e360: 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 opyAssembly {.. e370: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN e380: 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 ame managedOnly e390: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 {platform ""} {p e3a0: 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 db true} {verbos e3b0: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 e true} } {.. e3c0: 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 tryCopyBuildF e3d0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d ile$fileName $m e3e0: 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 anagedOnly$plat
e3f0: 66 6f 72 6d 20 22 22 20 24 76 65 72 62 6f 73 65  form "" $verbose e400: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 .... if {$p
e410: 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  db} then {..
e420: 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64      tryCopyBuild
e430: 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73  File [appendArgs
e440: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e450: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24  [file rootname $e460: 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 fileName] .pdb] e470: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c$managedOnly $pl e480: 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62 6f atform ""$verbo
e490: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  se..      }..
e4a0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
e4b0: 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
e4c0: 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y {..
e4d0: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
e4e0: 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 75  orm ""} {pdb tru
e4f0: 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65  e} {verbose true
e500: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79  } } {..      try
e510: 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65  DeleteBinaryFile
e520: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
e530: 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 0d  form $verbose... e540: 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d . if {$pdb}
e550: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e560: 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79   tryDeleteBinary
e570: 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72 67 73  File [appendArgs
e580: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
e590: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24  [file rootname $e5a0: 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62 5d 20 fileName] .pdb] e5b0: 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f$platform $verbo e5c0: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 se.. }.. e5d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc e5e0: 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 tryLoadAssembly e5f0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 { fileName {plat e600: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 form ""} } {.. e610: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName e620: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN e630: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p e640: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... e650: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. e660: 20 20 20 20 20 20 20 20 73 65 74 20 61 73 73 65 set asse e670: 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 mbly [object loa e680: 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 d -loadtype File e690: 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 4e 61 6d -alias$fileNam
e6a0: 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20  e]..      }] ==
e6b0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
e6c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
e6d0: 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20 74  NOTE: Now, add t
e6e0: 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65 73  he necessary tes
e6f0: 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a 20  t constraint...
e700: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
e710: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
e720: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b  [file rootname [
e730: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN e740: 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ame]].... e750: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO e760: 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 6d 61 TE: Grab the ima e770: 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 73 69 ge runtime versi e780: 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 73 65 on from the asse e790: 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a 20 20 mbly because.. e7a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se e7b0: 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 6c 79 veral tests rely e7c0: 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 61 20 on it having a e7d0: 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e 0d 0a certain value... e7e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. e7f0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint e800: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 66 69 [appendArgs [fi e810: 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d le tail$fileNam
e820: 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] _ \..
e830: 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79 20 49      [$assembly I e840: 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 73 69 mageRuntimeVersi e850: 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 on]].... e860: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT e870: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 66 75 E: Return the fu e880: 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 20 6c ll path of the l e890: 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 oaded file... e8a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. e8b0: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 return$fileName
e8c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
e8d0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
e8e0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
e8f0: 20 69 73 53 51 4c 69 74 65 52 65 61 64 79 20 7b   isSQLiteReady {
e900: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
e910: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
e920: 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73 74 20   procedure must
e930: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero
e940: 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51 4c 69  only if the SQLi
e950: 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20  te native..
e960: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
e970: 20 61 6e 64 20 74 68 65 20 53 79 73 74 65 6d 2e   and the System.
e980: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61  Data.SQLite mana
e990: 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61 72 65  ged assembly are
e9a0: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
e9b0: 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 79         and ready
e9c0: 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
e9d0: 74 65 73 74 20 73 75 69 74 65 2e 20 20 43 75 72  test suite.  Cur
e9e0: 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70 72 6f  rently, this pro
e9f0: 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20 23 20  cedure..      #
ea00: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
ea10: 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66 74 65  called only afte
ea20: 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64 41 73  r the [tryLoadAs
ea30: 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64 75 72  sembly] procedur
ea40: 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23 20 20  e has..      #
ea50: 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c 65 64       been called
ea60: 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20 74 68   to probe for th
ea70: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
ea80: 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73  Lite managed ass
ea90: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  embly..      #
eaa0: 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b 63 68       and the [ch
eab0: 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20 70 72  eckForSQLite] pr
eac0: 6f 63 65 64 75 72 65 20 68 61 73 20 62 65 65 6e  ocedure has been
ead0: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65   called to probe
eae0: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
eaf0: 20 20 20 20 74 68 65 20 53 51 4c 69 74 65 20 6e      the SQLite n
eb00: 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b 20 6f  ative library; o
eb10: 74 68 65 72 77 69 73 65 2c 20 74 68 69 73 20 70  therwise, this p
eb20: 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20 73 69  rocedure will si
eb30: 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20  mply..      #
eb40: 20 20 20 20 61 6c 77 61 79 73 20 72 65 74 75 72      always retur
eb50: 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 23  n zero...      #
eb60: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
eb70: 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20  expr {..
eb80: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
eb90: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
eba0: 74 65 5d 20 26 26 20 5b 68 61 76 65 43 6f 6e 73  te] && [haveCons
ebb0: 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d 0d 0a  traint SQLite]..
ebc0: 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d        }]..    }.
ebd0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 61 74  ....    proc mat
ebe0: 63 68 50 6c 61 74 66 6f 72 6d 20 7b 20 70 6c 61  chPlatform { pla
ebf0: 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20 20 20  tform } {..
ec00: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
ec10: 3a 20 41 6e 20 65 6d 70 74 79 20 73 74 72 69 6e  : An empty strin
ec20: 67 20 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f  g for the platfo
ec30: 72 6d 20 6d 65 61 6e 73 20 74 68 61 74 20 74 68  rm means that th
ec40: 65 20 62 75 69 6c 64 20 69 73 20 6e 6f 74 0d 0a  e build is not..
ec50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 70        #       [p
ec60: 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e 61 74 69  rimarily] a nati
ec70: 76 65 20 62 75 69 6c 64 3b 20 74 68 65 72 65 66  ve build; theref
ec80: 6f 72 65 2c 20 69 74 20 61 6c 77 61 79 73 20 6d  ore, it always m
ec90: 61 74 63 68 65 73 2e 0d 0a 20 20 20 20 20 20 23  atches...      #
eca0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
ecb0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat ecc0: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e form] == 0} then ecd0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu ece0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } ecf0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. ed00: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th ed10: 65 20 6d 61 63 68 69 6e 65 20 6e 61 6d 65 20 69 e machine name i ed20: 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74 s unavailable, t ed30: 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20 here is nothing ed40: 65 6c 73 65 20 77 65 0d 0a 20 20 20 20 20 20 23 else we.. # ed50: 20 20 20 20 20 20 20 63 61 6e 20 64 6f 2e 0d 0a can do... ed60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i ed70: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists ed80: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 ::tcl_platform( ed90: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 machine)]} then eda0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur edb0: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d n false.. } edc0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. edd0: 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 # NOTE: Does ede0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 70 6c the specified pl edf0: 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 75 70 20 atform match up ee00: 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 to the current p ee10: 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 20 20 23 rocess?.. # ee20: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 6c 61 .. if {$pla
ee30: 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63 68 69 6e  tform eq [machin
ee40: 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74  eToPlatform $::t ee50: 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 cl_platform(mach ee60: 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ine)]} then {.. ee70: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr ee80: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... ee90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # eea0: 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 63 69 66 NOTE: The specif eeb0: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 64 6f 65 ied platform doe eec0: 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 70 20 77 s not match up w eed0: 69 74 68 20 74 68 65 20 70 6c 61 74 66 6f 72 6d ith the platform eee0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # eef0: 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 for the current ef00: 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 process... ef10: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return ef20: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d false.. }.... ef30: 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 . proc haveSQ ef40: 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman ef50: 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d d {} {.. #. ef60: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I ef70: 73 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 s the [object] c ef80: 6f 6d 6d 61 6e 64 20 63 75 72 72 65 6e 74 6c 79 ommand currently ef90: 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 available?.. efa0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu efb0: 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 rn [expr {[lleng efc0: 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 th [info command efd0: 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 5d s object]] > 0}] efe0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... eff0: 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c proc checkForSQL f000: 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand f010: 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a { channel } {.. f020: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
f030: 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  nnel "---- check
f040: 69 6e 67 20 66 6f 72 20 5c 22 6f 62 6a 65 63 74  ing for \"object
f050: 5c 22 20 63 6f 6d 6d 61 6e 64 20 75 73 61 67 65  \" command usage
f060: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69  ... "....      i
f070: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
f080: 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 4f 62 6a 65   ::no(sqliteObje
f090: 63 74 43 6f 6d 6d 61 6e 64 29 5d 20 26 26 20 5c  ctCommand)] && \
f0a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76  ..          [hav
f0b0: 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
f0c0: 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
f0d0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch f0e0: 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 annel yes\n.. f0f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. f100: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f110: 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 73 73 20 77 # NOTE: Unless w f120: 65 20 61 72 65 20 66 6f 72 62 69 64 64 65 6e 20 e are forbidden f130: 66 72 6f 6d 20 64 6f 69 6e 67 20 73 6f 2c 20 61 from doing so, a f140: 64 64 20 73 6f 6d 65 20 63 6f 6e 73 74 72 61 69 dd some constrai f150: 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 nts.. # f160: 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 61 that will a f170: 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 20 74 68 65 llow most of the f180: 20 74 65 73 74 20 73 75 69 74 65 20 74 6f 20 72 test suite to r f190: 75 6e 20 28 69 2e 65 2e 20 74 68 6f 73 65 0d 0a un (i.e. those.. f1a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # f1b0: 74 65 73 74 73 20 74 68 61 74 20 64 6f 20 6e 6f tests that do no f1c0: 74 20 64 69 72 65 63 74 6c 79 20 72 65 6c 79 20 t directly rely f1d0: 75 70 6f 6e 20 74 68 65 20 5b 6f 62 6a 65 63 74 upon the [object f1e0: 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 20 20 ] command)... f1f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f200: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist f210: 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 s ::no(shimSQLit f220: 65 41 73 73 65 6d 62 6c 79 43 6f 6e 73 74 72 61 eAssemblyConstra f230: 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ints)]} then {.. f240: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon f250: 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 0d 0a straint SQLite.. f260: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon f270: 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 49 6e straint SQLiteIn f280: 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 terop.. f290: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 addConstraint S f2a0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit f2b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 e.. add f2c0: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 Constraint Syste f2d0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e m.Data.SQLite.En f2e0: 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 cryption.. f2f0: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain f300: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ f310: 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d 0a 20 20 20 Lite.Linq.... f320: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr f330: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs f340: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f350: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ f360: 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b 67 65 74 42 Lite.dll_v [getB f370: 75 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e 5d 5d uildClrVersion]] f380: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... f390: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf f3a0: 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 o exists ::no(sh f3b0: 69 6d 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f imSQLiteDefineCo f3c0: 6e 73 74 61 6e 74 43 6f 6e 73 74 72 61 69 6e 74 nstantConstraint f3d0: 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. f3e0: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 foreach d f3f0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 5b 6c efineConstant [l f400: 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. f410: 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 54 INTEROP_EXT f420: 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 ENSION_FUNCTIONS f430: 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f 45 58 INTEROP_FTS5_EX f440: 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 TENSION \.. f450: 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP f460: 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e _JSON1_EXTENSION f470: 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 4e 54 INTEROP_PERCENT f480: 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d ILE_EXTENSION \. f490: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 . I f4a0: 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f 45 58 NTEROP_REGEXP_EX f4b0: 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f TENSION INTEROP_ f4c0: 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c TEST_EXTENSION \ f4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. f4e0: 49 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f INTEROP_SESSION_ f4f0: 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO f500: 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e P_SHA1_EXTENSION f510: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f520: 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 45 INTEROP_TOTYPE f530: 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 _EXTENSION INTER f540: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 OP_VIRTUAL_TABLE f550: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f560: 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c USE_INTEROP_DL f570: 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 L] {.. f580: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint f590: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. f5a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ f5b0: 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 getSQLiteDefineC f5c0: 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d 20 24 onstantPrefix]$
f5d0: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 5d 0d  defineConstant].
f5e0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
f5f0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
f600: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
f610: 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51  ists ::no(shimSQ
f620: 4c 69 74 65 56 69 73 75 61 6c 53 74 75 64 69 6f  LiteVisualStudio
f630: 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
f640: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
f650: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
f660: 61 70 70 65 6e 64 41 72 67 73 20 76 69 73 75 61  appendArgs visua
f670: 6c 53 74 75 64 69 6f 20 5b 67 65 74 42 75 69 6c  lStudio [getBuil
f680: 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20 20 20  dYear]]..
f690: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70   }....        tp
f6a0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ f6b0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 n.. }.. f6c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c f6d0: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 hangeNativeRunti f6e0: 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 74 69 76 meOption { nativ f6f0: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 e } {.. if f700: 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 {[llength [info f710: 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d 5d commands debug]] f720: 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 > 0 && \.. f730: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 5b 69 [llength [i f740: 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 73 20 nfo subcommands f750: 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 debug runtimeopt f760: 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 5b 63 61 ion]] > 0 && [ca f770: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 64 tch {.. d f780: 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 74 69 ebug runtimeopti f790: 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 on [expr {$nativ
f7a0: 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65 6d  e ? "add" : "rem
f7b0: 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20  ove"}] native..
f7c0: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
f7d0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
f7e0: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
f7f0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
f800: 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
f810: 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b 63 61  tCommand] && [ca
f820: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
f830: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74  bject invoke Int
f840: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69  erpreter.GetActi
f850: 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76  ve [expr {$nativ f860: 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 e ? \.. f870: 20 20 20 22 41 64 64 52 75 6e 74 69 6d 65 4f 70 "AddRuntimeOp f880: 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 65 52 tion" : "RemoveR f890: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 7d 5d 20 untimeOption"}] f8a0: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d native.. }] f8b0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. f8c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr f8d0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... f8e0: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals f8f0: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... f900: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ f910: 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 63 68 61 LiteBuilds { cha f920: 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c nnel {select fal f930: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 se} } {.. # f940: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: f950: 43 68 65 63 6b 20 66 6f 72 20 65 76 65 72 79 20 Check for every f960: 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 20 63 possible valid c f970: 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 76 61 ombination of va f980: 6c 75 65 73 20 75 73 65 64 20 77 68 65 6e 0d 0a lues used when.. f990: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f # lo f9a0: 63 61 74 69 6e 67 20 6f 75 74 20 74 68 65 20 62 cating out the b f9b0: 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 uild output dire f9c0: 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 20 65 ctory, showing e f9d0: 61 63 68 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 ach available.. f9e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 # bui f9f0: 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 61 6c 6f ld variation alo fa00: 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 20 20 ng the way... fa10: 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 #.. fore fa20: 61 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 73 74 ach native [list fa30: 20 66 61 6c 73 65 20 74 72 75 65 5d 20 7b 0d 0a false true] {.. fa40: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach fa50: 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 59 65 year [getBuildYe fa60: 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ars] {.. fa70: 20 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 69 67 foreach config fa80: 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c uration [getBuil fa90: 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d dConfigurations] faa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. fab0: 66 6f 72 65 61 63 68 20 65 78 74 72 61 20 5b 67 foreach extra [g fac0: 65 74 42 75 69 6c 64 45 78 74 72 61 73 5d 20 7b etBuildExtras] { fad0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. fae0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. faf0: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 # NOTE: Figure fb00: 6f 75 74 20 74 68 65 20 65 66 66 65 63 74 69 76 out the effectiv fb10: 65 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d e build platform fb20: 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 . This is.. fb30: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # fb40: 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 based on wheth fb50: 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72 69 er or not a [pri fb60: 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20 62 marily] native b fb70: 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 uild.. fb80: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62 # is b fb90: 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20 eing used. For fba0: 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d [primarily] non- fbb0: 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a native builds,.. fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # fbd0: 20 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 this will fbe0: 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 be an empty stri fbf0: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ng... fc00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. fc10: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform fc20: 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo fc30: 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 rm$native]....
fc40: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
fc50: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app fc60: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. fc70: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- fc80: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for fc90: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi fca0: 74 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 te build \"" [ex fcb0: 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 pr \.. fcc0: 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 65 {$native
fcd0: 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22   ? "native/" : "
fce0: 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69  "}] [expr {[stri
fcf0: 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20  ng length \..
fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $fd10: 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 platform] > 0 ? fd20: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 6c 61 [appendArgs$pla
fd30: 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20  tform /] : ""}]
fd40: 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 20 20  $year \.. fd50: 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f /$co
fd60: 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e  nfiguration "\".
fd70: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
fd80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
fd90: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
fda0: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
fdb0: 71 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74  qualified direct
fdc0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65  ory where the ne
fdd0: 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20  cessary..
fde0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
fdf0: 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79  omponents for Sy
fe00: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
fe10: 20 73 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64   should be found
fe20: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
fe30: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
fe40: 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 20    set directory
fe50: 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74  [joinBuildDirect
fe60: 6f 72 79 20 24 6e 61 74 69 76 65 20 5c 0d 0a 20  ory $native \.. fe70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fe80: 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 [getBuildBaseDi fe90: 72 65 63 74 6f 72 79 5d 20 24 79 65 61 72 20 24 rectory]$year $fea0: 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 platform$config
feb0: 75 72 61 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20  uration \..
fec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 78               $ex fed0: 74 72 61 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 tra].... fee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. fef0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D ff00: 6f 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 o the necessary ff10: 66 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43 75 files exist? Cu ff20: 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 rrently, no othe ff30: 72 20 73 74 65 70 73 0d 0a 20 20 20 20 20 20 20 r steps.. ff40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a ff50: 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 69 re taken to veri ff60: 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 73 fy this build is ff70: 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62 6c 65 actually viable ff80: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... ff90: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. ffa0: 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 if {[isBuildAv ffb0: 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 ailable$native
ffc0: 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  $directory]} the ffd0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. ffe0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. fff0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10000 57 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 When in "select" 10010 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 mode, automatic 10020 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20 ally select the 10030 66 69 72 73 74 0d 0a 20 20 20 20 20 20 20 20 20 first.. 10040 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 # a 10050 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 20 6f vailable build o 10060 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 f System.Data.SQ 10070 4c 69 74 65 20 61 6e 64 20 74 68 65 6e 20 72 65 Lite and then re 10080 74 75 72 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 turn.. 10090 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6d # im 100a0 6d 65 64 69 61 74 65 6c 79 2e 0d 0a 20 20 20 20 mediately... 100b0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 100c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i 100d0 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d f {$select && [m
100e0 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c  atchPlatform $pl 100f0 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. 10100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10110 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 10120 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10130 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 Manually overrid 10140 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 e all the build 10150 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 directory select 10160 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ion.. 10170 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 10180 65 6c 61 74 65 64 20 74 65 73 74 20 73 65 74 74 elated test sett 10190 69 6e 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f ings in order to 101a0 20 66 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c force this buil 101b0 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. 101c0 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 101d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 101e0 74 65 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a te to be used... 101f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10200 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 10210 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68 61 if {![cha 10220 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime 10230 4f 70 74 69 6f 6e 20 24 6e 61 74 69 76 65 5d 7d Option$native]}
10240 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10250 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
10260 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 10270 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 10280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10290 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 "no, failed t 102a0 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 o " [expr {$nati
102b0 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72 65  ve ? "add" : "re
102c0 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 20 20  move"}] \..
102d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
102e0 20 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76     " the \"nativ
102f0 65 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  e\" runtime opti
10300 6f 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  on\n"]....
10310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
10320 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
10330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
10340 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
10350 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
10360 79 65 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20  year $year.. 10370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 10380 74 20 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 t ::test_platfor 10390 6d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 m$platform..
103a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
103b0 65 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  et ::test_config
103c0 75 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75  uration $configu 103d0 72 61 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 ration.... 103e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 103f0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10400 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
10410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10420 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28  "yes, selected (
10430 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65  " [expr {$native 10440 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 22 ? "native/" : " 10450 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 "}] \.. 10460 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 10470 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng 10480 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
10490 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  0 ? [appendArgs
104a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
104b0 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f           $platfo 104c0 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 rm /] : ""}]$ye
104d0 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72 61 74  ar / $configurat 104e0 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 104f0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 [ex 10500 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 pr {[string leng 10510 74 68 20 24 65 78 74 72 61 5d 20 3e 20 30 20 3f th$extra] > 0 ?
10520 20 5b 61 70 70 65 6e 64 41 72 67 73 20 2f 20 5c   [appendArgs / \
10530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10540 20 20 20 20 20 20 20 20 24 65 78 74 72 61 5d 20          $extra] 10550 3a 20 22 22 7d 5d 20 22 29 5c 6e 22 5d 0d 0a 0d : ""}] ")\n"]... 10560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10570 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 10580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10590 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 105a0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 105b0 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e s$channel yes\n
105c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
105d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
105e0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
105f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
10600 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 10610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10620 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 10630 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 10640 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10650 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 10660 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a n false.. }.. 10670 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec 10680 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 kForSQLiteReleas 10690 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 es { channel {se 106a0 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d lect false} } {. 106b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 106c0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f # NOTE: Check fo 106d0 72 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 20 r past releases 106e0 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 of System.Data.S 106f0 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 72 QLite in the dir 10700 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 ectory.. # 10710 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 contained 10720 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44 in the "System.D 10730 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 ata.SQLite" envi 10740 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 10750 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 , if.. # 10760 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 present... 10770 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 10780 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 10790 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e env(System.Data. 107a0 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 SQLite)] && \.. 107b0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 107c0 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 length$::env(S
107d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
107e0 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  e)] > 0} then {.
107f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
10800 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
10810 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  d the fully qual
10820 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20  ified directory
10830 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73  where the necess
10840 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ary..        #
10850 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20       components
10860 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
10870 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65  SQLite should be
10880 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20   found...
10890 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
108a0 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  directory [file
108b0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
108c0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
108d0 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74       $::env(Syst 108e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20 em.Data.SQLite) 108f0 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 [getReleaseVersi 10900 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 on]]].... 10910 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10920 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
10930 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
10940 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
10950 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
10960 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a   release \"" \..
10970 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72              $dir 10980 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d ectory "\"... "] 10990 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 109a0 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 [isReleaseAvaila 109b0 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 70 ble$directory p
109c0 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b  latform]} then {
109d0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
109e0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $109f0 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 platform] == 0} 10a00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10a10 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform 10a20 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 unknown.. 10a30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 10a40 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 if {$select &
10a50 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d  & [matchPlatform
10a60 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65   $platform]} the 10a70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 10a80 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 set ::build_dir 10a90 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 ectory$director
10aa0 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y....
10ab0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 10ac0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 [appendArgs "yes 10ad0 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 , selected ("$p
10ae0 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
10af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
10b00 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
10b10 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
10b20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
10b30 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 10b40 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70 dArgs "yes ("$p
10b50 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a  latform ")\n"]..
10b60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
10b70 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
10b80 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $10b90 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a channel no\n.... 10ba0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 10bb0 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72 file exists$dir
10bc0 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20  ectory] || \..
10bd0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69              ![fi
10be0 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24  le isdirectory $10bf0 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e directory]} then 10c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10c10 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
10c20 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
10c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
10c40 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  --- environment
10c50 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65  variable \"Syste
10c60 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20  m.Data.SQLite\"
10c70 69 73 20 61 6e 20 22 20 5c 0d 0a 20 20 20 20 20  is an " \..
10c80 20 20 20 20 20 20 20 20 20 20 20 22 69 6e 76 61             "inva
10c90 6c 69 64 20 64 69 72 65 63 74 6f 72 79 2c 20 73  lid directory, s
10ca0 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f  kipping check fo
10cb0 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22  r releases...\n"
10cc0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
10cd0 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
10ce0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
10cf0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
10d00 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63  path [lsort -dec
10d10 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69  reasing [file li
10d20 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d  st $directory *] 10d30 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. 10d40 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 10d50 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c s$path] && [fil
10d60 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 70  e isdirectory $p 10d70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ath]} then {.. 10d80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10d90 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10da0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
10db0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
10dc0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
10dd0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
10de0 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d  e release \"" \.
10df0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
10e00 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20     $path "\"... 10e10 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 10e20 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 if {[isRelea 10e30 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74 seAvailable$pat
10e40 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65  h platform]} the
10e50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
10e60 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
10e70 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 10e80 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d m] == 0} then {. 10e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10ea0 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 10eb0 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. 10ec0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 10ee0 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 {$select && [ma
10ef0 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61  tchPlatform $pla 10f00 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a tform]} then {.. 10f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10f20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 set ::build_di 10f30 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d rectory$path...
10f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
10f50 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 10f60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 l [appendArgs "y 10f70 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 es, selected (" 10f80 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d$platform ")\n"]
10f90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
10fa0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
10fb0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
10fc0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
10fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
10fe0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 10ff0 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 ppendArgs "yes ( 11000 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e "$platform ")\n
11010 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
11020 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
11030 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
11050 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 11060 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \n.. 11070 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 11080 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 11090 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 110a0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 110b0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
110c0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
110d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
110e0 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  --- environment
110f0 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65  variable \"Syste
11100 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20  m.Data.SQLite\"
11110 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20  is not " \..
11120 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73 6b          "set, sk
11130 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72  ipping check for
11140 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d   releases...\n"]
11150 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
11160 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
11170 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
11180 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69  roc checkForSQLi
11190 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61 6e  teLibrary { chan
111a0 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  nel } {..      t
111b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 111c0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 111d0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 111e0 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 rary... ".... 111f0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 11200 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 11210 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 11220 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 11230 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 11240 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 11250 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e e3 SQLiteVersion 11260 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f .. } versio 11270 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. 11280 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11290 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 112a0 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 k if the returne 112b0 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 d version was nu 112c0 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 ll. If so, make 112d0 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 it easy.. 112e0 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f # to spo 112f0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 11300 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 11310 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
11320 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
11330 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
11340 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
11350 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
11360 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
11370 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
11380 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
11390 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
113a0 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ier for the SQLi
113b0 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  te..        #
113c0 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79      core library
113d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
113e0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
113f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
11400 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
11410 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
11420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
11430 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
11440 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65  e.SQLite3 SQLite
11450 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20  SourceId..
11460 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74    } sourceId]} t
11470 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
11480 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
11490 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20  NOTE: We failed
114a0 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73  to query the Fos
114b0 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74  sil source ident
114c0 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  ifier...
114d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73    #..          s
114e0 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e  et sourceId unkn
114f0 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  own..        }..
11500 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
11510 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
11520 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e  ck if the return
11530 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65  ed Fossil source
11540 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20   identifier was
11550 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20  null.  If..
11560 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d     #       so, m
11570 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73  ake it easy to s
11580 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
11590 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
115a0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75  ring length $sou 115b0 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 rceId] == 0} the 115c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 115d0 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c et sourceId null 115e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 115f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 11600 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 # NOTE: Yes, t 11610 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c he SQLite core l 11620 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74 ibrary appears t 11630 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d o be available.. 11640 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11650 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 11660 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 t SQLite.... 11670 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 11680 20 4e 4f 54 45 3a 20 52 65 63 6f 72 64 20 76 65 NOTE: Record ve 11690 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c rsion of the SQL 116a0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 ite core library 116b0 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65 0d 0a for later use.. 116c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 116d0 62 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 by test constrai 116e0 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20 nt expressions, 116f0 65 74 63 2e 20 20 49 66 20 74 68 69 73 20 76 61 etc. If this va 11700 6c 75 65 20 68 61 73 0d 0a 20 20 20 20 20 20 20 lue has.. 11710 20 23 20 20 20 20 20 20 20 61 6c 72 65 61 64 79 # already 11720 20 62 65 65 6e 20 73 65 74 20 28 6f 72 20 6f 76 been set (or ov 11730 65 72 72 69 64 64 65 6e 29 2c 20 73 6b 69 70 20 erridden), skip 11740 73 65 74 74 69 6e 67 20 69 74 2e 0d 0a 20 20 20 setting it... 11750 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 11760 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 11770 73 20 3a 3a 63 6f 72 65 5f 6c 69 62 72 61 72 79 s ::core_library 11780 5f 76 65 72 73 69 6f 6e 5d 7d 20 74 68 65 6e 20 _version]} then 11790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 117a0 20 3a 3a 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f ::core_library_ 117b0 76 65 72 73 69 6f 6e 20 24 76 65 72 73 69 6f 6e version$version
117c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
117d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 117e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 117f0 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69 s "yes ("$versi
11800 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64  on " " $sourceId 11810 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ")\n"].. } 11820 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 11830 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11840 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  no\n..      }..
11850 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
11860 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
11870 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65  Interop { channe
11880 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  l } {..      tpu
11890 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 118a0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 118b0 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 118c0 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 sembly... ".... 118d0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 118e0 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 {.. objec 118f0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 11900 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 11910 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 11920 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 11930 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73 ite3 InteropVers 11940 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 ion.. } ver 11950 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then 11960 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 11970 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 11980 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 heck if the retu 11990 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 rned version was 119a0 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d null. If so, m 119b0 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 ake it easy.. 119c0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 119d0 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 spot... # 119e0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 .. if {[s 119f0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
11a00 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
11a10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
11a20 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d  et version null.
11a30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
11a40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11a50 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
11a60 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f   to query the Fo
11a70 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e  ssil source iden
11a80 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53  tifier for the S
11a90 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23  QLite..        #
11aa0 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72         core libr
11ab0 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ary...        #.
11ac0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
11ad0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
11ae0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
11af0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
11b00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11b10 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
11b20 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
11b30 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20  eropSourceId..
11b40 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64        } sourceId
11b50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
11b60 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11b70 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69    # NOTE: We fai
11b80 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65  led to query the
11b90 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
11ba0 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20  dentifier...
11bb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
11bc0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
11bd0 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
11be0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
11bf0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
11c00 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65   Check if the re
11c10 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f  turned Fossil so
11c20 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20  urce identifier
11c30 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20  was null.  If..
11c40 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
11c50 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20  o, make it easy
11c60 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20  to spot...
11c70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
11c80 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
11c90 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d  $sourceId] == 0} 11ca0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11cb0 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId 11cc0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d null.. }. 11cd0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11ce0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65 # NOTE: Be 11cf0 66 6f 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64 fore actually ad 11d00 64 69 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f ding the test co 11d10 6e 73 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73 nstraint, make s 11d20 75 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 ure the.. 11d30 20 23 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e # version 11d40 20 69 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20 is valid (i.e. 11d50 6e 6f 74 20 6a 75 73 74 20 74 68 61 74 20 77 65 not just that we 11d60 20 63 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29 could query it) 11d70 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 11d80 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 73 69 if {$versi
11d90 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68  on ne "null"} th
11da0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
11db0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
11dc0 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51  OTE: Yes, the SQ
11dd0 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73  Lite interop ass
11de0 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f  embly appears to
11df0 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   be available...
11e00 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
11e10 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
11e20 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72  aint SQLiteInter
11e30 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  op....
11e40 73 65 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a  set answer yes..
11e50 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
11e60 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
11e70 61 6e 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20  answer no..
11e80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
11e90 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 11ea0 61 70 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77 appendArgs$answ
11eb0 65 72 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e  er " (" $version 11ec0 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 " "$sourceId "
11ed0 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65  )\n"]..      } e
11ee0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
11ef0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 11f00 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 \n.. }.. 11f10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 11f20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65 checkForSQLiteDe 11f30 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63 fineConstant { c 11f40 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d hannel name } {. 11f50 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
11f60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
11f70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  s \..          "
11f80 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
11f90 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
11fa0 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73  Lite define cons
11fb0 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c  tant \"" $name \ 11fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e .. "\". 11fd0 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 .. "].... i 11fe0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 11ff0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 12000 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 12010 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 12020 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 12030 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44 SQLite.SQLite3 D 12040 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a efineConstants.. 12050 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f } defineCo 12060 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 nstants] == 0} t 12070 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 12080 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 f {[lsearch -exa 12090 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69 ct -nocase$defi
120a0 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d  neConstants $nam 120b0 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b e] != -1} then { 120c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 120d0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 120e0 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e Yes, this defin 120f0 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65 e constant was e 12100 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20 nabled when the 12110 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20 managed.. 12120 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d # assem 12130 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 bly was compiled 12140 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 12150 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon 12160 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 12170 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65 rgs [getSQLiteDe 12180 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 fineConstantPref 12190 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 ix]$name]....
121a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 121b0 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 hannel yes\n.. 121c0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 121d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 121e0 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
121f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
12200 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
12210 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12220 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 error\n.. 12230 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 12240 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ 12250 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f LiteCompileOptio 12260 6e 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65 n { channel name 12270 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput 12280 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
12290 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
122a0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
122b0 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ng for SQLite in
122c0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 63  terop assembly c
122d0 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 5c 22  ompile option \"
122e0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24  " \..          $122f0 6e 61 6d 65 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a name "\"... "].. 12300 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 12310 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 ch {.. ob 12320 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 12330 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 12340 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 12350 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 12360 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 43 SQLite3 InteropC 12370 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 ompileOptions.. 12380 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 } compileOp 12390 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tions] == 0} the 123a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 123b0 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact 123c0 20 2d 6e 6f 63 61 73 65 20 24 63 6f 6d 70 69 6c -nocase$compil
123d0 65 4f 70 74 69 6f 6e 73 20 24 6e 61 6d 65 5d 20  eOptions $name] 123e0 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 != -1} then {.. 123f0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 12400 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye 12410 73 2c 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 20 s, this compile 12420 6f 70 74 69 6f 6e 20 77 61 73 20 65 6e 61 62 6c option was enabl 12430 65 64 20 77 68 65 6e 20 74 68 65 20 69 6e 74 65 ed when the inte 12440 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 rop.. # 12450 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly 12460 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 was compiled... 12470 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 12480 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra 12490 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 124a0 5b 67 65 74 53 51 4c 69 74 65 43 6f 6d 70 69 6c [getSQLiteCompil 124b0 65 4f 70 74 69 6f 6e 50 72 65 66 69 78 5d 20 24 eOptionPrefix]$
124c0 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  name]....
124d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 124e0 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 l yes\n.. 124f0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 12500 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
12510 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
12520 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
12530 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
12540 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f  ts $channel erro 12550 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a r\n.. }.... 12560 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
12570 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
12580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d   \..          "-
12590 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
125a0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
125b0 72 61 72 79 20 63 6f 6d 70 69 6c 65 20 6f 70 74  rary compile opt
125c0 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ion \"" \..
125d0 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22 2e 2e       $name "\".. 125e0 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 . "].... if 125f0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 12600 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 12610 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 12620 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 12630 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 12640 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 QLite.SQLite3 SQ 12650 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f LiteCompileOptio 12660 6e 73 0d 0a 20 20 20 20 20 20 7d 20 63 6f 6d 70 ns.. } comp 12670 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30 ileOptions] == 0 12680 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12690 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d if {[lsearch - 126a0 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 63 exact -nocase$c
126b0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 20 24 6e  ompileOptions $n 126c0 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e ame] != -1} then 126d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 126e0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 126f0 45 3a 20 59 65 73 2c 20 74 68 69 73 20 63 6f 6d E: Yes, this com 12700 70 69 6c 65 20 6f 70 74 69 6f 6e 20 77 61 73 20 pile option was 12710 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 enabled when the 12720 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 SQLite.. 12730 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 20 # core 12740 6c 69 62 72 61 72 79 20 77 61 73 20 63 6f 6d 70 library was comp 12750 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 iled... 12760 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 #.. ad 12770 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app 12780 65 6e 64 41 72 67 73 20 5b 67 65 74 53 51 4c 69 endArgs [getSQLi 12790 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 50 teCompileOptionP 127a0 72 65 66 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d refix]$name]...
127b0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
127c0 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n. 127d0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 127e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 127f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e ts$channel no\n
12800 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
12810 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
12820 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 12830 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 nel error\n.. 12840 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 12850 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 proc getDate 12860 54 69 6d 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69 TimeFormat { {ti 12870 6d 65 5a 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b meZone true} } { 12880 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12890 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 128a0 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 20 72 ocedure simply r 128b0 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 66 61 eturns the "defa 128c0 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 66 6f ult" DateTime fo 128d0 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 20 20 rmat used.. 128e0 20 23 20 20 20 20 20 20 20 62 79 20 74 68 65 20 # by the 128f0 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 test suite... 12900 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 12910 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 [info exists ::d 12920 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20 atetime_format] 12930 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 12940 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
12950 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61  ::datetime_forma
12960 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  t] > 0} then {..
12970 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12980 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
12990 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f  n the manually o
129a0 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75 65 20  verridden value
129b0 66 6f 72 20 74 68 65 20 44 61 74 65 54 69 6d 65  for the DateTime
129c0 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20   format...
129d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
129e0 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f  urn $::datetime_ 129f0 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20 format.. } 12a00 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 12a10 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12a20 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 53 4f E: Return an ISO 12a30 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f 8601 DateTime fo 12a40 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c 65 20 rmat compatible 12a50 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20 with SQLite,.. 12a60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 # Sy 12a70 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 12a80 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 20 66 , and suitable f 12a90 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e or round-trippin 12aa0 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20 g with the.. 12ab0 20 20 20 20 23 20 20 20 20 20 20 20 44 61 74 65 # Date 12ac0 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 74 68 Time class of th 12ad0 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66 e framework. If 12ae0 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 63 this value is c 12af0 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 20 20 hanged,.. 12b00 20 23 20 20 20 20 20 20 20 76 61 72 69 6f 75 73 # various 12b10 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c 2e tests may fail. 12b20 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12b30 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 return [app 12b40 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 12b50 20 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d "yyyy-MM- 12b60 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 dd HH:mm:ss.FFFF 12b70 46 46 46 22 20 5b 65 78 70 72 20 7b 24 74 69 6d FFF" [expr {$tim
12b80 65 5a 6f 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22  eZone ? "K" : ""
12b90 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  }]]..      }..
12ba0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12bb0 20 67 65 74 44 61 74 65 54 69 6d 65 54 69 63 6b   getDateTimeTick
12bc0 73 20 7b 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c  s { value {local
12bd0 20 22 22 7d 20 7b 64 65 66 61 75 6c 74 20 22 22   ""} {default ""
12be0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  } } {..      if
12bf0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
12c00 24 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68  $value] == 0} th 12c10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 12c20 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20 turn$default..
12c30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
12c40 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
12c50 20 20 20 20 20 20 73 65 74 20 64 61 74 65 54 69        set dateTi
12c60 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  me [object invok
12c70 65 20 2d 63 72 65 61 74 65 20 5c 0d 0a 20 20 20  e -create \..
12c80 20 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d 65           -parame
12c90 74 65 72 74 79 70 65 73 20 5b 6c 69 73 74 20 53  tertypes [list S
12ca0 74 72 69 6e 67 20 53 74 72 69 6e 67 20 49 46 6f  tring String IFo
12cb0 72 6d 61 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a  rmatProvider \..
12cc0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
12cd0 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
12ce0 2e 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 5d  .DateTimeStyles]
12cf0 20 44 61 74 65 54 69 6d 65 20 50 61 72 73 65 45   DateTime ParseE
12d00 78 61 63 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  xact \..
12d10 20 20 20 20 24 76 61 6c 75 65 20 5b 67 65 74 44      $value [getD 12d20 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e ateTimeFormat] n 12d30 75 6c 6c 20 41 64 6a 75 73 74 54 6f 55 6e 69 76 ull AdjustToUniv 12d40 65 72 73 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d ersal].. }] 12d50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12d60 20 20 72 65 74 75 72 6e 20 24 64 65 66 61 75 6c return$defaul
12d70 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  t..      }....
12d80 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
12d90 69 73 20 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69  is boolean -stri
12da0 63 74 20 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e  ct $local]} then 12db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 12dc0 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74 dateTime [object 12dd0 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20 invoke -create 12de0 44 61 74 65 54 69 6d 65 20 53 70 65 63 69 66 79 DateTime Specify 12df0 4b 69 6e 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 Kind \.. 12e00 20 20 20 20 24 64 61 74 65 54 69 6d 65 20 55 74$dateTime Ut
12e10 63 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  c]..      } else
12e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
12e30 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  rn [object invok
12e40 65 20 24 64 61 74 65 54 69 6d 65 20 54 69 63 6b  e $dateTime Tick 12e50 73 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 s].. }.... 12e60 20 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d if {$local}
12e70 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
12e80 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20   return [object
12e90 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65  invoke $dateTime 12ea0 20 54 6f 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63 ToLocalTime.Tic 12eb0 6b 73 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ks].. } els 12ec0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 e {.. ret 12ed0 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f urn [object invo 12ee0 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f 55 ke$dateTime ToU
12ef0 6e 69 76 65 72 73 61 6c 54 69 6d 65 2e 54 69 63  niversalTime.Tic
12f00 6b 73 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ks]..      }..
12f10 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12f20 20 67 65 74 50 72 6f 70 65 72 74 69 65 73 20 7b   getProperties {
12f30 20 6f 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20   object varName
12f40 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
12f50 20 31 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70   1 $varName prop 12f60 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 erties.... 12f70 73 65 74 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20 set count 0.. 12f80 20 20 20 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69 set names [li 12f90 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 st].... if 12fa0 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 {[isObjectHandle 12fb0 20 24 6f 62 6a 65 63 74 5d 20 26 26 20 24 6f 62$object] && $ob 12fc0 6a 65 63 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 ject ne "null"} 12fd0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12fe0 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d eval lappend nam 12ff0 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 es [object membe 13000 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rs \.. 13010 20 20 2d 6d 65 6d 62 65 72 74 79 70 65 73 20 50 -membertypes P 13020 72 6f 70 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c roperty -nameonl 13030 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20 y$object]....
13040 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
13050 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74  nd names [object
13060 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20   members \..
13070 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74          -membert
13080 79 70 65 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65  ypes Field -name
13090 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20  only $object].. 130a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 130b0 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 foreach name$na
130c0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  mes {..        i
130d0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
130e0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
130f0 76 6f 6b 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67  voke -objectflag
13100 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62  s +NoDispose $ob 13110 6a 65 63 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20 ject$name..
13120 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20      } value] ==
13130 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
13140 20 20 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65       if {[isObje
13150 63 74 48 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d  ctHandle $value] 13160 20 26 26 20 24 76 61 6c 75 65 20 6e 65 20 22 6e &&$value ne "n
13170 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ull"} then {..
13180 20 20 20 20 20 20 20 20 20 20 73 65 74 20 65 72            set er
13190 72 6f 72 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74  ror null; object
131a0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
131b0 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
131c0 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d 61               -ma
131d0 72 73 68 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61  rshalflags +NoHa
131e0 6e 64 6c 65 20 49 6e 74 65 72 70 72 65 74 65 72  ndle Interpreter
131f0 2e 47 65 74 41 63 74 69 76 65 20 5c 0d 0a 20 20  .GetActive \..
13200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64                Ad
13210 64 4f 62 6a 65 63 74 52 65 66 65 72 65 6e 63 65  dObjectReference
13220 20 4f 6b 20 24 76 61 6c 75 65 20 65 72 72 6f 72   Ok $value error 13230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 13240 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 lappend properti 13250 65 73 28 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73 es(objects) [lis 13260 74 20 24 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d t$name $value]. 13270 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 13280 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 13290 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 lappend propert 132a0 69 65 73 28 76 61 6c 75 65 73 29 20 5b 6c 69 73 ies(values) [lis 132b0 74 20 24 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d t$name $value]. 132c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 132d0 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 63 incr c 132e0 6f 75 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 ount.. } 132f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 13300 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72 lappend proper 13310 74 69 65 73 28 65 72 72 6f 72 73 29 20 5b 6c 69 ties(errors) [li 13320 73 74 20 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f st$name $::erro 13330 72 43 6f 64 65 5d 0d 0a 20 20 20 20 20 20 20 20 rCode].. 13340 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 13350 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 75 6e return$coun
13360 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  t..    }.....
13370 20 70 72 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70   proc getAllProp
13380 65 72 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20  erties { object
13390 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  varName } {..
133a0 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 133b0 61 6d 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a ame properties.. 133c0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 set value 133d0 24 6f 62 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20$object....
133e0 20 77 68 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d   while {true} {.
133f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69  .        if {![i
13400 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65  nfo exists prope
13410 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74  rties(seenObject
13420 73 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  s)] || \..
13430 20 20 20 20 20 20 24 76 61 6c 75 65 20 6e 69 20        $value ni 13440 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e$properties(seen
13450 4f 62 6a 65 63 74 73 29 7d 20 74 68 65 6e 20 7b  Objects)} then {
13460 0d 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 50  ..          getP
13470 72 6f 70 65 72 74 69 65 73 20 24 76 61 6c 75 65  roperties $value 13480 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 properties.. 13490 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70 lappend p 134a0 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 roperties(seenOb 134b0 6a 65 63 74 73 29 20 24 76 61 6c 75 65 0d 0a 20 jects)$value..
134c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
134d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
134e0 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 65 73  xists properties
134f0 28 6f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e  (objects)]} then
13500 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72   {..          br
13510 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  eak..        }..
13520 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c  ..        if {[l
13530 6c 65 6e 67 74 68 20 24 70 72 6f 70 65 72 74 69  length $properti 13540 65 73 28 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20 es(objects)] == 13550 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 13560 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65 unset prope 13570 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 3b 20 rties(objects); 13580 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d break.. } 13590 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 135a0 76 61 6c 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c value [lindex [l 135b0 69 6e 64 65 78 20 24 70 72 6f 70 65 72 74 69 65 index$propertie
135c0 73 28 6f 62 6a 65 63 74 73 29 20 30 5d 20 65 6e  s(objects) 0] en
135d0 64 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  d]..        set
135e0 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63  properties(objec
135f0 74 73 29 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f  ts) [lrange $pro 13600 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 perties(objects) 13610 20 31 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d 1 end].. } 13620 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 .... if {[i 13630 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65 nfo exists prope 13640 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 13650 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 13660 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c foreach val 13670 75 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 73 ue$properties(s
13680 65 65 6e 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20  eenObjects) {..
13690 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 61           if {$va 136a0 6c 75 65 20 65 71 20 24 6f 62 6a 65 63 74 7d 20 lue eq$object}
136b0 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20  continue..
136c0 20 20 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63      catch {objec
136d0 74 20 64 69 73 70 6f 73 65 20 24 76 61 6c 75 65  t dispose $value 136e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 136f0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 70 72 unset pr 13700 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a operties(seenObj 13710 65 63 74 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a ects).. }.. 13720 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 13730 6f 63 20 67 65 74 56 61 72 69 61 62 6c 65 73 20 oc getVariables 13740 7b 20 76 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65 { varNames {obje 13750 63 74 73 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a cts false} } {.. 13760 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 13770 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... 13780 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 foreach varName 13790 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20$varNames {..
137a0 20 20 20 20 20 20 69 66 20 7b 5b 75 70 6c 65 76        if {[uplev
137b0 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61 79  el 1 [list array
137c0 20 65 78 69 73 74 73 20 24 76 61 72 4e 61 6d 65   exists $varName 137d0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 137e0 20 20 20 20 20 20 73 65 74 20 61 72 72 61 79 4e set arrayN 137f0 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a ame$varName....
13800 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
13810 68 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75  h elementName [u
13820 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 61  plevel 1 [list a
13830 72 72 61 79 20 6e 61 6d 65 73 20 24 61 72 72 61  rray names $arra 13840 79 4e 61 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20 yName]] {.. 13850 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 20 set name 13860 5b 61 70 70 65 6e 64 41 72 67 73 20 24 61 72 72 [appendArgs$arr
13870 61 79 4e 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e  ayName ( $elemen 13880 74 4e 61 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20 tName )].. 13890 20 20 20 20 20 20 73 65 74 20 76 61 72 56 61 6c set varVal 138a0 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c ue [uplevel 1 [l 138b0 69 73 74 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d ist set$name]].
138c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
138d0 66 20 7b 24 6f 62 6a 65 63 74 73 20 26 26 20 5b  f {$objects && [ 138e0 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 isObjectHandle$
138f0 76 61 72 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20  varValue]} then
13900 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
13910 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
13920 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20  in properties..
13930 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74               get
13940 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76  AllProperties $v 13950 61 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69 arValue properti 13960 65 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 es.... 13970 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu 13980 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b lt [list$name [
13990 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72  array get proper
139a0 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20  ties]]..
139b0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
139c0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
139d0 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  end result [list
139e0 20 24 6e 61 6d 65 20 24 76 61 72 56 61 6c 75 65   $name$varValue
139f0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
13a00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
13a10 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
13a20 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76  .          set v
13a30 61 72 56 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c  arValue [uplevel
13a40 20 31 20 5b 6c 69 73 74 20 73 65 74 20 24 76 61   1 [list set $va 13a50 72 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 rName]].... 13a60 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74 if {$object
13a70 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61  s && [isObjectHa
13a80 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d  ndle $varValue]} 13a90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 13aa0 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 13ab0 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 74 69 65 mplain propertie 13ac0 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67 s.. g 13ad0 65 74 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 etAllProperties 13ae0 24 76 61 72 56 61 6c 75 65 20 70 72 6f 70 65 72$varValue proper
13af0 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ties....
13b00 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
13b10 6c 74 20 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d  lt [list $varNam 13b20 65 20 5b 61 72 72 61 79 20 67 65 74 20 70 72 6f e [array get pro 13b30 70 65 72 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 perties]].. 13b40 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 13b50 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 13b60 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 nd result [list 13b70 24 76 61 72 4e 61 6d 65 20 24 76 61 72 56 61 6c$varName $varVal 13b80 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d ue].. } 13b90 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 13ba0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 13bb0 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
13bc0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
13bd0 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73   enumerableToLis
13be0 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d  t { enumerable }
13bf0 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65   {..      set re
13c00 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  sult [list]....
13c10 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
13c20 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61   length $enumera 13c30 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e ble] == 0 ||$en
13c40 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c  umerable eq "nul
13c50 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  l"} then {..
13c60 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75      return $resu 13c70 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 lt.. }.... 13c80 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 13c90 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 ach -alias item 13ca0 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20$enumerable {..
13cb0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
13cc0 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d  ng length $item] 13cd0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 13ce0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 13cf0 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f result [$item To
13d00 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20  String]..
13d10 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
13d20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 13d30 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 13d40 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 proc catchAnd 13d50 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 Return { script 13d60 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 {stackTrace fals 13d70 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d e} {strict true} 13d80 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 13d90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 # NOTE: Eva 13da0 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74 luate the script 13db0 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 provided by our 13dc0 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 caller in their 13dd0 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 context,.. 13de0 20 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69 # capturi 13df0 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 ng both the resu 13e00 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 lt and the retur 13e10 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 n code... # 13e20 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 .. set code 13e30 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c [catch {uplevel 13e40 20 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 1$script} resu
13e50 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  lt]....      #..
13e60 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69        # NOTE: Di
13e70 64 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f  d the script pro
13e80 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c  vided by our cal
13e90 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e  ler NOT raise an
13ea0 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23   error?..      #
13eb0 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72  ..      if {$str 13ec0 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 ict &&$code ==
13ed0 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26  0 || !$strict && 13ee0 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65$code != 1} the
13ef0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
13f00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
13f10 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e  Success.  Return
13f20 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65   a list with the
13f30 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64   return code and
13f40 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20   the result...
13f50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13f60 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63   return [list $c 13f70 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 ode$result]..
13f80 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73      } elseif {$s 13f90 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 tackTrace} then 13fa0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 13fb0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa 13fc0 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c ilure. Our call 13fd0 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 er wants a full 13fe0 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 stack trace (if 13ff0 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 applicable),.. 14000 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 14010 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with 14020 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code 14030 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 and the result 14040 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 verbatim... 14050 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 14060 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 turn [list$code
14070 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20   $result].. 14080 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 14090 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 140a0 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 NOTE: Failure. 140b0 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 Our caller does 140c0 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 not want a full 140d0 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d stack trace (if. 140e0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 140f0 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 applicable), re 14100 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 turn a list with 14110 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 the return code 14120 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 , the error.. 14130 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 # cod 14140 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 e for the interp 14150 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 reter, and the e 14160 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 rror message up 14170 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 to the.. 14180 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 # point wh 14190 65 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 ere the stack tr 141a0 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 ace should start 141b0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 141c0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li 141d0 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f st$code $::erro 141e0 72 43 6f 64 65 20 5c 0d 0a 20 20 20 20 20 20 20 rCode \.. 141f0 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73 [extractSys 14200 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 temDataSQLiteExc 14210 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72 eptionMessage$r
14220 65 73 75 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d  esult]]..      }
14230 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
14240 70 72 6f 63 20 72 65 73 65 74 45 78 63 65 70 74  proc resetExcept
14250 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ion {} {..
14260 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
14270 20 52 65 73 65 74 20 65 78 63 65 70 74 69 6f 6e   Reset exception
14280 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
14290 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65   this interprete
142a0 72 20 28 74 6f 20 6e 75 6c 6c 29 2e 0d 0a 20 20  r (to null)...
142b0 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73      #       This
142c0 20 28 70 72 69 76 61 74 65 29 20 70 72 6f 70 65   (private) prope
142d0 72 74 79 20 69 73 20 6d 61 69 6e 74 61 69 6e 65  rty is maintaine
142e0 64 20 6f 6e 20 61 20 70 65 72 2d 74 68 72 65 61  d on a per-threa
142f0 64 20 62 61 73 69 73 2e 0d 0a 20 20 20 20 20 20  d basis...
14300 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20  #..      object
14310 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
14320 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72  onPublic Interpr
14330 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 45  eter.GetActive E
14340 78 63 65 70 74 69 6f 6e 20 6e 75 6c 6c 0d 0a 20  xception null..
14350 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
14360 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
14370 6f 63 20 63 61 74 63 68 41 6e 64 53 65 74 45 78  oc catchAndSetEx
14380 63 65 70 74 69 6f 6e 20 7b 20 73 63 72 69 70 74  ception { script
14390 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20   {varName ""} }
143a0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
143b0 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61    # NOTE: Evalua
143c0 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72  te the script pr
143d0 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
143e0 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f  ller in their co
143f0 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 23 0d  ntext...      #.
14400 0a 20 20 20 20 20 20 63 61 74 63 68 20 7b 75 70  .      catch {up
14410 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d  level 1 $script} 14420 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 14430 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 # NOTE: Grab 14440 74 68 65 20 28 70 72 69 76 61 74 65 29 20 65 78 the (private) ex 14450 63 65 70 74 69 6f 6e 20 70 72 6f 70 65 72 74 79 ception property 14460 20 66 72 6f 6d 20 74 68 69 73 20 69 6e 74 65 72 from this inter 14470 70 72 65 74 65 72 2c 0d 0a 20 20 20 20 20 20 23 preter,.. # 14480 20 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 for this 14490 74 68 72 65 61 64 2c 20 61 6e 64 20 61 64 64 20 thread, and add 144a0 61 73 20 61 6e 20 6f 70 61 71 75 65 20 6f 62 6a as an opaque obj 144b0 65 63 74 20 68 61 6e 64 6c 65 20 69 6e 20 74 68 ect handle in th 144c0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 144d0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our 144e0 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 caller... # 144f0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 14500 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
14510 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
14520 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20  ..        upvar
14530 31 20 24 76 61 72 4e 61 6d 65 20 65 78 63 65 70  1 $varName excep 14540 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d tion.. }... 14550 0a 20 20 20 20 20 20 73 65 74 20 65 78 63 65 70 . set excep 14560 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 tion [object inv 14570 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oke \.. 14580 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b -alias -flags + 14590 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 NonPublic Interp 145a0 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 reter.GetActive 145b0 45 78 63 65 70 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 Exception].... 145c0 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. 145d0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 145e0 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 c compileCSharpW 145f0 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ith {.. 14600 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73 text memory s 14610 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 65 ymbols strict re 14620 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 72 sultsVarName err 14630 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e orsVarName fileN 14640 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ames.. 14650 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 args } {.. 14660 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 try {.. 14670 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 14680 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65 TE: Since we are 14690 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68 going to use th 146a0 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61 is method name a 146b0 20 6c 6f 74 2c 20 61 73 73 69 67 6e 0d 0a 20 20 lot, assign.. 146c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 # it 146d0 20 74 6f 20 61 20 76 61 72 69 61 62 6c 65 20 66 to a variable f 146e0 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 irst... # 146f0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 64 .. set ad 14700 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 d ReferencedAsse 14710 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 mblies.Add.... 14720 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 14730 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 # NOTE: Create 14740 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 the base command 14750 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 to evaluate and 14760 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 add the propert 14770 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 14780 20 20 20 73 65 74 74 69 6e 67 73 20 74 68 61 74 settings that 14790 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61 are almost alwa 147a0 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72 ys needed by our 147b0 20 75 6e 69 74 20 74 65 73 74 73 0d 0a 20 20 20 unit tests.. 147c0 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69 2e # (i. 147d0 65 2e 20 74 68 65 20 53 79 73 74 65 6d 20 61 6e e. the System an 147e0 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73 d System.Data as 147f0 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65 sembly reference 14800 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a s)... #.. 14810 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d set comm 14820 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 and [list \.. 14830 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 compile 14840 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65 CSharp$text $me 14850 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73 mory$symbols $s 14860 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d trict results \. 14870 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 . err 14880 6f 72 73 20 24 61 64 64 20 53 79 73 74 65 6d 2e ors$add System.
14890 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e  dll $add System. 148a0 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 5c 0d Data.dll$add \.
148b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
148c0 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73  tem.Transactions
148d0 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d  .dll $add System 148e0 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 .Xml.dll].... 148f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14900 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 # NOTE: Add all 14910 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c the provided fil 14920 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d e names as assem 14930 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d bly references.. 14940 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 14950 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 14960 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20 Name$fileNames
14970 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70  {..          lap
14980 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64  pend command $ad 14990 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 d [getBinaryFile 149a0 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d Name$fileName].
149b0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
149c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
149d0 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 78 74   # NOTE: Add ext
149e0 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66  ra arguments, if
149f0 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d   any, to the com
14a00 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65  mand to evaluate
14a10 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
14a20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65        eval lappe
14a30 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73  nd command $args 14a40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 14a50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 14a60 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65 lias the compile 14a70 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20 r local results 14a80 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61 and errors varia 14a90 62 6c 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20 bles to.. 14aa0 20 23 20 20 20 20 20 20 20 74 68 65 20 76 61 72 # the var 14ab0 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76 iable names prov 14ac0 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call 14ad0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a er... #.. 14ae0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 14af0 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 ing length$resu
14b00 6c 74 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  ltsVarName] > 0}
14b10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14b20 20 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75     upvar 1 $resu 14b30 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c ltsVarName resul 14b40 74 73 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ts.. }... 14b50 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 14b60 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 ring length$err
14b70 6f 72 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  orsVarName] > 0}
14b80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14b90 20 20 20 75 70 76 61 72 20 31 20 24 65 72 72 6f     upvar 1 $erro 14ba0 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 rsVarName errors 14bb0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 14bc0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 14bd0 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 # NOTE: Evalua 14be0 74 65 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74 te the construct 14bf0 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72 ed [compileCShar 14c00 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 0d 0a p] command and.. 14c10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 14c20 72 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c return the resul 14c30 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 14c40 20 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d eval$com
14c50 6d 61 6e 64 0d 0a 20 20 20 20 20 20 7d 20 66 69  mand..      } fi
14c60 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  nally {..
14c70 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
14c80 54 45 3a 20 49 66 20 74 68 65 20 43 23 20 63 6f  TE: If the C# co
14c90 6d 70 69 6c 65 72 20 77 61 73 20 69 6e 76 6f 6b  mpiler was invok
14ca0 65 64 20 75 73 69 6e 67 20 5b 65 78 65 63 5d 2c  ed using [exec],
14cb0 20 72 65 73 65 74 20 74 68 65 0d 0a 20 20 20 20   reset the..
14cc0 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76      #       prev
14cd0 69 6f 75 73 20 70 72 6f 63 65 73 73 20 69 64 65  ious process ide
14ce0 6e 74 69 66 69 65 72 20 6e 6f 77 20 28 69 2e 65  ntifier now (i.e
14cf0 2e 20 74 68 61 74 20 77 61 79 2c 20 69 74 20 64  . that way, it d
14d00 6f 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  oes..        #
14d10 20 20 20 20 20 6e 6f 74 20 73 68 6f 77 20 75 70       not show up
14d20 20 61 73 20 62 65 69 6e 67 20 22 6c 65 61 6b 65   as being "leake
14d30 64 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  d")...        #.
14d40 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73  .        if {[is
14d50 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65  DotNetCore]} the
14d60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
14d70 61 74 63 68 20 7b 69 6e 66 6f 20 70 72 65 76 69  atch {info previ
14d80 6f 75 73 70 69 64 20 74 72 75 65 7d 0d 0a 20 20  ouspid true}..
14d90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
14da0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
14db0 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62 20  proc isMemoryDb
14dc0 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
14dd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
14de0 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73 70   NOTE: Is the sp
14df0 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65  ecified database
14e00 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c   file name reall
14e10 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64  y an in-memory d
14e20 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20 20  atabase?..
14e30 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
14e40 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65  [expr {$fileName 14e50 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c eq ":memory:" | 14e60 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b | \.. [ 14e70 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66 69 string range$fi
14e80 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71 20  leName 0 12] eq
14e90 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d  "file::memory:"}
14ea0 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
14eb0 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 6e 44   proc isTableInD
14ec0 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d  b { name {varNam
14ed0 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e db} } {..
14ee0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
14ef0 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
14f00 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
14f10 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
14f20 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
14f30 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
14f40 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63     caller.  It c
14f50 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61  ontains the data
14f60 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection
14f70 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c  handle that will
14f80 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
14f90 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75     used to execu
14fa0 74 65 20 74 68 65 20 71 75 65 72 79 20 75 73 65  te the query use
14fb0 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  d to determine i
14fc0 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
14fd0 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  e is..      #
14fe0 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74      present in t
14ff0 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  hat database...
15000 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
15010 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d 15020 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. 15030 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 15040 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 the sqlite_maste 15050 72 20 74 61 62 6c 65 20 74 6f 20 64 65 74 65 72 r table to deter 15060 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 mine if the name 15070 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 d table is.. 15080 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e # presen 15090 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 t in the databas 150a0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 150b0 20 20 20 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20 set sql {.. 150c0 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f 55 SELECT COU 150d0 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 NT(*) FROM sqlit 150e0 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74 e_master WHERE t 150f0 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e ype = 'table' AN 15100 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20 D name = ?;.. 15110 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 15120 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 15130 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 eturn non-zero i 15140 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c f the named tabl 15150 65 20 69 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20 e is present... 15160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 15170 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 turn [expr {.. 15180 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 [sql execu 15190 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c te -execute scal 151a0 61 72 20 24 64 62 20 24 73 71 6c 20 5b 6c 69 73 ar$db $sql [lis 151b0 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20 t param1 String 151c0 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20$name]] > 0..
151d0 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d     }]..    }....
151e0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44  .    proc getDbD
151f0 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 20 7b  efaultPageSize {
15200 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
15210 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71  catch {executeSq
15220 6c 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73  l "PRAGMA page_s
15230 69 7a 65 3b 22 20 73 63 61 6c 61 72 7d 20 72 65  ize;" scalar} re
15240 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
15250 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
15260 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 15270 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 15280 20 20 20 20 72 65 74 75 72 6e 20 30 0d 0a 20 20 return 0.. 15290 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 152a0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44 . proc getDbD 152b0 65 66 61 75 6c 74 43 61 63 68 65 53 69 7a 65 20 efaultCacheSize 152c0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b {} {.. if { 152d0 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 [catch {executeS 152e0 71 6c 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 ql "PRAGMA cache 152f0 5f 73 69 7a 65 3b 22 20 73 63 61 6c 61 72 7d 20 _size;" scalar} 15300 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 15310 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 15320 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
15330 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
15340 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 0d 0a        return 0..
15350 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
15360 0c 0d 0a 20 20 20 20 70 72 6f 63 20 75 73 65 4c  ...    proc useL
15370 65 67 61 63 79 44 62 50 61 67 65 41 6e 64 43 61  egacyDbPageAndCa
15380 63 68 65 53 69 7a 65 73 20 7b 20 76 61 72 4e 61  cheSizes { varNa
15390 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  me } {..      #.
153a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
153b0 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
153c0 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
153d0 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
153e0 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
153f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15400 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74  caller.  It cont
15410 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73  ains the databas
15420 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
15430 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65  dle that will be
15440 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15450 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20  used to execute
15460 71 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20  queries used to
15470 73 65 74 20 74 68 65 20 70 61 67 65 20 61 6e 64  set the page and
15480 20 63 61 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20   cache sizes...
15490 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
154a0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d 154b0 62 0d 0a 0d 0a 20 20 20 20 20 20 73 71 6c 20 65 b.... sql e 154c0 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20 xecute$db {..
154d0 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67        PRAGMA pag
154e0 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a  e_size = 1024;..
154f0 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 63          PRAGMA c
15500 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 30  ache_size = 2000
15510 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ;..      }....
15520 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
15530 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
15540 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
15550 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22  ute scalar $db " 15560 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 PRAGMA page_size 15570 3b 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ;"] \.. 15580 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65 [sql execute -e 15590 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64 xecute scalar$d
155a0 62 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f  b "PRAGMA cache_
155b0 73 69 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d  size;"]]..    }.
155c0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6e 6f 72  ....    proc nor
155d0 6d 61 6c 69 7a 65 45 78 63 65 70 74 69 6f 6e 4d  malizeExceptionM
155e0 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d  essage { value }
155f0 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   {..      if {[s
15600 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 15610 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 lue] == 0} then 15620 7b 72 65 74 75 72 6e 20 24 76 61 6c 75 65 7d 0d {return$value}.
15630 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73  .      return [s
15640 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20  tring map [list
15650 5c 72 5c 6e 20 22 20 3d 3d 3e 20 22 20 5c 6e 20  \r\n " ==> " \n
15660 22 20 3d 3d 3e 20 22 5d 20 24 76 61 6c 75 65 5d  " ==> "] $value] 15670 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 15680 70 72 6f 63 20 65 78 74 72 61 63 74 53 79 73 74 proc extractSyst 15690 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65 emDataSQLiteExce 156a0 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 7b 20 76 ptionMessage { v 156b0 61 6c 75 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 alue } {.. 156c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 156d0 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 63 If the string c 156e0 6f 6e 66 6f 72 6d 73 20 74 6f 20 66 6f 72 6d 61 onforms to forma 156f0 74 20 6f 66 20 74 68 65 20 6e 6f 72 6d 61 6c 20 t of the normal 15700 65 78 63 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20 exception.. 15710 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 73 # error s 15720 74 72 69 6e 67 73 2c 20 65 78 74 72 61 63 74 20 trings, extract 15730 61 6e 64 20 72 65 74 75 72 6e 20 6f 6e 6c 79 20 and return only 15740 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 the error messag 15750 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 15760 20 70 6f 72 74 69 6f 6e 20 69 74 73 65 6c 66 2e portion itself. 15770 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15780 20 73 65 74 20 70 61 74 74 65 72 6e 73 20 5b 6c set patterns [l 15790 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79 ist \.. {Sy 157a0 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69 stem\.Data\.SQLi 157b0 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74 te\.SQLiteExcept 157c0 69 6f 6e 20 5c 28 30 78 28 3f 3a 30 7c 38 29 5b ion $$0x(?:0|8)[ 157d0 30 2d 39 41 2d 46 61 2d 66 5d 7b 37 7d 5c 29 3a 0-9A-Fa-f]{7}$$: 157e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 28 2e 2b \.. (.+ 157f0 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d ?) (?: )?at} \. 15800 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e . {System\. 15810 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 Data\.SQLite\.SQ 15820 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20 28 LiteException: ( 15830 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 .+?) (?: )?at} 15840 5c 0d 0a 20 20 20 20 20 20 7b 45 61 67 6c 65 5c \.. {Eagle\ 15850 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50 75 ._Components\.Pu 15860 62 6c 69 63 5c 2e 53 63 72 69 70 74 45 78 63 65 blic\.ScriptExce 15870 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f ption: (.+?) (? 15880 3a 20 29 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20 20 : )?at}].... 15890 20 20 66 6f 72 65 61 63 68 20 70 61 74 74 65 72 foreach patter 158a0 6e 20 24 70 61 74 74 65 72 6e 73 20 7b 0d 0a 20 n$patterns {..
158b0 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65         if {[rege
158c0 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24  xp -- $pattern$
158d0 76 61 6c 75 65 20 64 75 6d 6d 79 20 6d 65 73 73  value dummy mess
158e0 61 67 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  age]} then {..
158f0 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 73 73          set mess
15900 61 67 65 20 5b 73 74 72 69 6e 67 20 6d 61 70 20  age [string map
15910 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20 5b  [list \r\n \n] [
15920 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6d 65 73  string trim $mes 15930 73 61 67 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 sage]].. 15940 20 20 73 65 74 20 6c 69 6e 65 73 20 5b 73 70 6c set lines [spl 15950 69 74 20 24 6d 65 73 73 61 67 65 20 5c 6e 5d 0d it$message \n].
15960 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
15970 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73  {[llength $lines 15980 5d 20 3d 3d 20 32 7d 20 74 68 65 6e 20 7b 0d 0a ] == 2} then {.. 15990 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 159a0 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 [lindex$lines 0
159b0 5d 20 65 71 20 5b 6c 69 6e 64 65 78 20 24 6c 69  ] eq [lindex $li 159c0 6e 65 73 20 31 5d 7d 20 74 68 65 6e 20 7b 0d 0a nes 1]} then {.. 159d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re 159e0 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 69 turn [lindex$li
159f0 6e 65 73 20 30 5d 0d 0a 20 20 20 20 20 20 20 20  nes 0]..
15a00 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
15a10 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70       return [app
15a20 65 6e 64 41 72 67 73 20 5b 6c 69 6e 64 65 78 20  endArgs [lindex
15a30 24 6c 69 6e 65 73 20 30 5d 20 22 20 2d 2d 20 22  $lines 0] " -- " 15a40 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 [lindex$lines
15a50 31 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  1]]..          }
15a60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
15a70 74 75 72 6e 20 24 6d 65 73 73 61 67 65 0d 0a 20  turn $message.. 15a80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 15a90 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 15aa0 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 7d 0d n$value..    }.
15ab0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 69  ....    proc tri
15ac0 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a  mSql { sql } {..
15ad0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 65        return [re
15ae0 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73  gsub -all -- {\s
15af0 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20  +} [string trim
15b00 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20  $sql] " "].. 15b10 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e 15b20 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c 20 xecuteSql { sql 15b30 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b {execute none} { 15b40 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 69 format none} {fi 15b50 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a leName ""} } {.. 15b60 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 15b70 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 g length$fileNa
15b80 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  me] == 0} then {
15b90 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65  set fileName :me
15ba0 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65  mory:}..      se
15bb0 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20  tupDb $fileName 15bc0 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66 "" "" "" "" "" f 15bd0 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 alse false false 15be0 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d 0a false db true.. 15bf0 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 .. try {.. 15c00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75 return [u 15c10 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 5c plevel 1 [list \ 15c20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 .. sq 15c30 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75 l execute -execu 15c40 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f 72 te$execute -for
15c50 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 20  mat $format$db
15c60 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20  $sql]].. } 15c70 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 finally {.. 15c80 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f set connectio 15c90 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 n [getDbConnecti 15ca0 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 on].... t 15cb0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ry {.. 15cc0 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e cleanupDb$fileN
15cd0 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c  ame db false fal
15ce0 73 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  se false..
15cf0 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20    } finally {..
15d00 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
15d10 66 6c 61 67 73 20 24 63 6f 6e 6e 65 63 74 69 6f  flags $connectio 15d20 6e 20 2d 4e 6f 44 69 73 70 6f 73 65 3b 20 66 72 n -NoDispose; fr 15d30 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a eeDbConnection.. 15d40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 15d50 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 15d60 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 6c 61 67 proc hasNoFlag 15d70 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e 6f 6e 65 s { varName none 15d80 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 } {.. upva 15d90 72 20 31 20 24 76 61 72 4e 61 6d 65 20 66 6c 61 r 1$varName fla
15da0 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  gs....      if {
15db0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66 6c  ![info exists fl
15dc0 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ags]} then {..
15dd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
15de0 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  e..      }....
15df0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
15e00 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d  length $flags] = 15e10 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 15e20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 15e30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 15e40 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 26 26 20 if {$none &&
15e50 24 66 6c 61 67 73 20 65 71 20 22 4e 6f 6e 65 22  $flags eq "None" 15e60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15e70 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 15e80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 15e90 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 15ea0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 15eb0 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c getConnectionFl 15ec0 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20 66 ags { fileName f 15ed0 6c 61 67 73 20 7b 71 75 69 65 74 20 66 61 6c 73 lags {quiet fals 15ee0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 15ef0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 15f00 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 20 igure out which 15f10 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 database file na 15f20 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e me or connection 15f30 20 73 74 72 69 6e 67 20 74 68 65 73 65 0d 0a 20 string these.. 15f40 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 15f50 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 nection flags wi 15f60 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 70 70 6c ll actually appl 15f70 79 20 74 6f 2e 20 20 54 68 69 73 20 69 73 20 6e y to. This is n 15f80 6f 74 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 ot necessary.. 15f90 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 71 # in q 15fa0 75 69 65 74 20 6d 6f 64 65 20 62 65 63 61 75 73 uiet mode becaus 15fb0 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69 e this informati 15fc0 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 on is only used 15fd0 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 20 for logging.. 15fe0 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 # and r 15ff0 65 70 6f 72 74 69 6e 67 20 70 75 72 70 6f 73 65 eporting purpose 16000 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 16010 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
16020 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16030 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
16040 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20  th $fileName] > 16050 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 16060 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 set databas 16070 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 66 e [appendArgs "f 16080 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 24 66 69 ile name \""$fi
16090 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20  leName \"]..
160a0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
160b0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74  nfo exists ::dat
160c0 61 53 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a 20  aSource] && \..
160d0 20 20 20 20 20 20 20 20 20 20 20 21 5b 61 72 72             ![arr
160e0 61 79 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61  ay exists ::data
160f0 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b 0d  Source]} then {.
16100 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64  .          set d
16110 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64 41  atabase [appendA
16120 72 67 73 20 22 64 61 74 61 20 73 6f 75 72 63 65  rgs "data source
16130 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 6f 75 72   \"" $::dataSour 16140 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20 ce \"].. 16150 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 16160 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 set database 16170 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20 <unknown>.. 16180 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 16190 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 161a0 20 23 20 4e 4f 54 45 3a 20 45 76 65 6e 20 74 68 # NOTE: Even th 161b0 6f 75 67 68 20 74 68 65 72 65 20 69 73 20 6f 6e ough there is on 161c0 6c 79 20 6f 6e 65 20 73 6f 75 72 63 65 20 6f 66 ly one source of 161d0 20 66 6c 61 67 73 20 73 6f 20 66 61 72 2c 20 74 flags so far, t 161e0 68 65 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 hey.. # 161f0 20 20 20 6d 75 73 74 20 62 65 20 63 6f 6d 62 69 must be combi 16200 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 63 6f ned using the co 16210 72 72 65 63 74 20 73 79 6e 74 61 78 20 66 6f 72 rrect syntax for 16220 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 enumerated.. 16230 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 20 # flag 16240 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 2e values for the . 16250 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a NET Framework... 16260 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 16270 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e et flags [combin 16280 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 22 22 eFlags$flags ""
16290 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ]....      #..
162a0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
162b0 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c   (and log) the l
162c0 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ocal connection
162d0 66 6c 61 67 73 20 61 6e 64 20 74 68 65 20 61 73  flags and the as
162e0 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..
162f0 23 20 20 20 20 20 20 20 64 61 74 61 20 73 6f 75  #       data sou
16300 72 63 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65  rce or file name
16310 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
16320 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 16330 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 16340 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 16350 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 ::no(emitLocalF 16360 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 lags)] && \.. 16370 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info 16380 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi 16390 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e tLocalFlagsIfNon 163a0 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 e)] || \.. 163b0 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c ![hasNoFl 163c0 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d ags flags false] 163d0 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 )} then {.. 163e0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
163f0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16400 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
16410 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f          "---- lo
16420 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  cal connection f
16430 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61  lags for " $data 16440 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 base \.. 16450 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b " are: " [ 16460 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 expr {![hasNoFla 16470 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 gs flags false] 16480 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ? \.. 16490 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c [appendArgs \ 164a0 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 "$flags \"] : "
164b0 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
164c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
164d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
164e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
164f0 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73   (and log) the s
16500 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  hared connection
16510 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23   flags...      #
16520 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu 16530 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 16540 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 16550 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 16560 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 ect invoke Syste 16570 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ 16580 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 LiteConnection S 16590 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 haredFlags.. 165a0 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67 } sharedFlag 165b0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 165c0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 165d0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 165e0 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 o(emitSharedFlag 165f0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 16600 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 (![info 16610 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit 16620 53 68 61 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e SharedFlagsIfNon 16630 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 e)] || \.. 16640 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f ![hasNo 16650 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 Flags sharedFlag 16660 73 20 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b s true])} then { 16670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 16680 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
16690 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
166a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
166b0 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20     "---- shared
166c0 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
166d0 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database 166e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 166f0 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex 16700 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 pr {![hasNoFlags 16710 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 75 sharedFlags tru 16720 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 e] ? \.. 16730 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA 16740 72 67 73 20 5c 22 20 24 73 68 61 72 65 64 46 6c rgs \"$sharedFl
16750 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
16760 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
16770 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
16780 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
16790 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
167a0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68  ists ::no(emitSh
167b0 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c  aredFlags)] && \
167c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
167d0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
167e0 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61  no(emitSharedFla
167f0 67 73 49 66 55 6e 61 76 61 69 6c 61 62 6c 65 29  gsIfUnavailable)
16800 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
16810 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 16820 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 16830 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 16840 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 16850 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 - shared connect 16860 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 ion flags for " 16870 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20$database \..
16880 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61               " a
16890 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65  re: <unavailable
168a0 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  >\n"]..
168b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
168c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
168d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
168e0 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
168f0 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c 6f  the detected glo
16900 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  bal connection f
16910 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  lags, if any...
16920 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
16930 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 16940 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 16950 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 16960 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 o(emitGlobalFlag 16970 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 16980 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 (![info ex 16990 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c ists ::no(emitGl 169a0 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 obalFlagsIfNone) 169b0 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 169c0 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 ![hasNoFlag 169d0 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 s ::connection_f 169e0 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 lags false])} th 169f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16a00 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
16a10 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
16a20 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
16a30 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20     "---- global
16a40 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
16a50 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20   are: " \..
16a60 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
16a70 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63  ![hasNoFlags ::c
16a80 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20  onnection_flags
16a90 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20  false] ? \..
16aa0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
16ab0 64 41 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e  dArgs \" $::conn 16ac0 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d ection_flags \"] 16ad0 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e : "<none>"}] \n 16ae0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 16af0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 16b00 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 16b10 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 If there are any 16b20 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73 global (per tes 16b30 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f t run) connectio 16b40 6e 20 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c n flags currentl 16b50 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 16b60 20 73 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e set, use them n 16b70 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 ow (i.e. by comb 16b80 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20 ining them with 16b90 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 the ones for thi 16ba0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 16bb0 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 connection)... 16bc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 16bd0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 16be0 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag 16bf0 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 16c00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 16c10 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 NOTE: Combine a 16c20 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 nd/or replace th 16c30 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 e connection fla 16c40 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 gs and then show 16c50 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 16c60 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e new value. 16c70 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16c80 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b set flags [ 16c90 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c combineFlags$fl
16ca0 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f  ags $::connectio 16cb0 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 n_flags].... 16cc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 16cd0 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 NOTE: Show (and 16ce0 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66 log) the new ef 16cf0 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 fective connecti 16d00 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 on flags... 16d10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 16d20 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
16d30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
16d40 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
16d50 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64  :no(emitCombined
16d60 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Flags)] && \..
16d70 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69              (![i
16d80 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
16d90 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67  emitCombinedFlag
16da0 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a  sIfNone)] || \..
16db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
16dc0 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67  [hasNoFlags flag
16dd0 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20  s false])} then
16de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
16df0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 16e00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 16e10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 16e20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e "---- combin 16e30 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 16e40 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 ags for "$datab
16e50 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ase \..
16e60 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20         " are: "
16e70 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c  [expr {![hasNoFl
16e80 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d  ags flags false]
16e90 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
16ea0 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
16eb0 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20  s \" $flags \"] 16ec0 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d : "<none>"}] \n] 16ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 16ee0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 16ef0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 16f00 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d n$flags..    }.
16f10 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
16f20 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20  FlagsProperty {
16f30 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65  {flags ""} {quie
16f40 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
16f50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
16f60 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77  OTE: Determine w
16f70 68 61 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  hat the combined
16f80 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63   (global and loc
16f90 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  al) connection..
16fa0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c        #       fl
16fb0 61 67 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70  ags should be, p
16fc0 6f 73 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e  ossibly quietly.
16fd0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16fe0 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43   set flags [getC
16ff0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22  onnectionFlags "
17000 22 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d  " $flags$quiet]
17010 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
17020 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f     # NOTE: If no
17030 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c   global or local
17040 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
17050 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64  s were specified
17060 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  , the..      #
17070 20 20 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e       default con
17080 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68  nection flags sh
17090 6f 75 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68  ould be used; th
170a0 65 72 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d  erefore, return.
170b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
170c0 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69  n empty string i
170d0 6e 20 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20  n that case...
170e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
170f0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
17100 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68  $flags] == 0} th 17110 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 17120 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d turn "".. } 17130 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 17140 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 # NOTE: In or 17150 64 65 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20 der to check if 17160 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e the default conn 17170 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 ection flags are 17180 20 62 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 being used.. 17190 20 20 20 23 20 20 20 20 20 20 20 69 74 20 69 73 # it is 171a0 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 74 necessary to at 171b0 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69 tempt a conversi 171c0 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c on to the actual 171d0 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 enumerated.. 171e0 20 20 20 23 20 20 20 20 20 20 20 74 79 70 65 2e # type. 171f0 20 20 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 Failing that, 17200 74 68 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73 the check agains 17210 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 t the default va 17220 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 lue will be.. 17230 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 # skipp 17240 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 17250 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 17260 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72 .. set er 17270 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f ror null; # IGNO 17280 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f RED.... o 17290 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 bject invoke Uti 172a0 6c 69 74 79 20 54 72 79 50 61 72 73 65 46 6c 61 lity TryParseFla 172b0 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 gsEnum "" \.. 172c0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 172d0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 172e0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 teConnectionFlag 172f0 73 20 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c s ""$flags null
17300 20 74 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20   true \..
17310 20 20 20 20 20 74 72 75 65 20 74 72 75 65 20 65       true true e
17320 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d 20 76 61  rror..      } va
17330 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  lue]} then {..
17340 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17350 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
17360 69 6e 67 20 74 6f 20 70 61 72 73 65 20 74 68 65  ing to parse the
17370 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
17380 73 20 63 61 75 73 65 64 20 61 20 73 63 72 69 70  s caused a scrip
17390 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
173a0 20 20 20 65 72 72 6f 72 2e 20 20 45 6d 69 74 20     error.  Emit
173b0 61 20 77 61 72 6e 69 6e 67 20 74 6f 20 74 68 65  a warning to the
173c0 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 61   test log file a
173d0 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20  nd continue..
173e0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69       #       usi
173f0 6e 67 20 61 6e 20 65 6d 74 70 79 20 73 74 72 69  ng an emtpy stri
17400 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20  ng instead...
17410 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17420 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41 72 67 73  tlog [appendArgs
17430 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17440 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
17450 61 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20 63  ailed to parse c
17460 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c  onnection flags,
17470 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
17480 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 76           \n\t $v 17490 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 alue \n].... 174a0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 22 22 set value "" 174b0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 174c0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 174d0 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 69 TE: If the combi 174e0 6e 65 64 20 66 6c 61 67 73 20 73 74 72 69 6e 67 ned flags string 174f0 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 61 could not actua 17500 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 74 65 64 lly be converted 17510 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17520 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 to the enumerate 17530 64 20 74 79 70 65 20 69 74 20 69 73 20 74 68 65 d type it is the 17540 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20 default value, 17550 74 68 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20 then just use.. 17560 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 20 # it 17570 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 77 verbatim; otherw 17580 69 73 65 2c 20 6a 75 73 74 20 72 65 74 75 72 6e ise, just return 17590 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 175a0 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 20 . In that.. 175b0 20 20 23 20 20 20 20 20 20 20 63 61 73 65 2c 20 # case, 175c0 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e the default conn 175d0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c ection flags wil 175e0 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 l be used... 175f0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 17600 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
17610 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76  alue] == 0 || $v 17620 61 6c 75 65 20 6e 65 20 22 44 65 66 61 75 6c 74 alue ne "Default 17630 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. 17640 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 17650 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 65 WARNING: This re 17660 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67 turns the string 17670 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f value of the co 17680 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f mbined flags, no 17690 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 176a0 20 20 20 20 20 20 74 68 65 20 65 6e 75 6d 65 72 the enumer 176b0 61 74 65 64 20 76 61 6c 75 65 2e 20 20 54 68 69 ated value. Thi 176c0 73 20 69 73 20 62 79 20 64 65 73 69 67 6e 20 61 s is by design a 176d0 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20 nd should not.. 176e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 176f0 20 20 62 65 20 63 68 61 6e 67 65 64 20 77 69 74 be changed wit 17700 68 6f 75 74 20 63 61 72 65 66 75 6c 20 63 6f 6e hout careful con 17710 73 69 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e sideration (e.g. 17720 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20 it would.. 17730 20 20 20 23 20 20 20 20 20 20 20 20 20 20 70 72 # pr 17740 65 76 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65 event the SQLite 17750 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73 Connection class 17760 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69 from allowing i 17770 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 20 nvalid.. 17780 23 20 20 20 20 20 20 20 20 20 20 5b 22 6d 61 67 # ["mag 17790 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67 ical"] meta-flag 177a0 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a s)... #.. 177b0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 177c0 61 70 70 65 6e 64 41 72 67 73 20 22 46 6c 61 67 appendArgs "Flag 177d0 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a s="$flags \;]..
177e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
177f0 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
17800 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
17810 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73  etTestProperties
17820 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71   { {flags ""} {q
17830 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
17840 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17850 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 77 69  # NOTE: Start wi
17860 74 68 20 22 46 6c 61 67 73 22 20 70 72 6f 70 65  th "Flags" prope
17870 72 74 79 20 66 6f 72 20 74 68 65 20 6e 65 77 20  rty for the new
17880 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 66 20 61  connection, if a
17890 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ny...      #..
178a0 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b      set result [
178b0 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79  getFlagsProperty
178c0 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d   $flags$quiet].
178d0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
178e0 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68    # NOTE: Add th
178f0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75  e name of the cu
17900 72 72 65 6e 74 20 74 65 73 74 20 66 69 6c 65 2c  rrent test file,
17910 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 20 20   if available.
17920 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 23  This is..      #
17930 20 20 20 20 20 20 20 6f 6e 6c 79 20 75 73 65 64         only used
17940 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0d   for debugging..
17950 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17960 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
17970 20 3a 3a 74 65 73 74 5f 66 69 6c 65 5d 7d 20 74   ::test_file]} t
17980 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
17990 70 70 65 6e 64 20 72 65 73 75 6c 74 20 54 65 73  ppend result Tes
179a0 74 46 69 6c 65 3d 20 24 3a 3a 74 65 73 74 5f 66  tFile= $::test_f 179b0 69 6c 65 20 5c 3b 0d 0a 20 20 20 20 20 20 7d 0d ile \;.. }. 179c0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 179d0 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 # NOTE: Add th 179e0 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 e name of the cu 179f0 72 72 65 6e 74 20 74 65 73 74 2c 20 69 66 20 61 rrent test, if a 17a00 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 vailable. This 17a10 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 23 is only.. # 17a20 20 20 20 20 20 20 20 75 73 65 64 20 66 6f 72 20 used for 17a30 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 debugging... 17a40 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 17a50 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 61 info exists ::ea 17a60 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e gle_tests(Curren 17a70 74 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d tName)]} then {. 17a80 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 . append 17a90 72 65 73 75 6c 74 20 54 65 73 74 4e 61 6d 65 3d result TestName= 17aa0 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28$::eagle_tests(
17ab0 43 75 72 72 65 6e 74 4e 61 6d 65 29 20 5c 3b 0d  CurrentName) \;.
17ac0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
17ad0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 17ae0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 17af0 70 72 6f 63 20 65 6e 61 62 6c 65 53 68 61 72 65 proc enableShare 17b00 64 43 61 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c dCache { channel 17b10 20 65 6e 61 62 6c 65 20 7b 71 75 69 65 74 20 66 enable {quiet f 17b20 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 17b30 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 17b40 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 17b50 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 17b60 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 17b70 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 17b80 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 17b90 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 17ba0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 sqli 17bb0 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 te3_enable_share 17bc0 64 5f 63 61 63 68 65 20 5b 65 78 70 72 20 69 6e d_cache [expr in 17bd0 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20 t($enable)]..
17be0 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
17bf0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
17c00 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 17c10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17c20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
17c30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
17c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
17c50 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33  --- call sqlite3
17c60 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63  _enable_shared_c
17c70 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c  ache(" $enable \ 17c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17c90 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 ")... ok: "$res
17ca0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ult \n]..
17cb0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
17cc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
17cd0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 17ce0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 17cf0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
17d00 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
17d10 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c         "---- cal
17d20 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65  l sqlite3_enable
17d30 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20  _shared_cache("
17d40 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20  $enable \.. 17d50 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 65 ")... e 17d60 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 rror: " \n\t$re
17d70 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
17d80 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
17d90 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
17da0 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20   setupDb {..
17db0 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
17dc0 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65   {mode ""} {date
17dd0 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b  TimeFormat ""} {
17de0 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d  dateTimeKind ""}
17df0 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20   {flags ""}..
17e00 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20           {extra
17e10 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75  ""} {qualify tru
17e20 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d  e} {delete true}
17e30 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20   {uri false}..
17e40 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f            {tempo
17e50 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e  rary true} {varN
17e60 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 74 20 66  ame db} {quiet f
17e70 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
17e80 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
17e90 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20  : First, see if
17ea0 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72  our caller has r
17eb0 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d  equested an in-m
17ec0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
17ed0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
17ee0 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73  set isMemory [is
17ef0 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61  MemoryDb $fileNa 17f00 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a me].... #.. 17f10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 17f20 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20 r now, all test 17f30 64 61 74 61 62 61 73 65 73 20 75 73 65 64 20 62 databases used b 17f40 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 y the test suite 17f50 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 20 are placed.. 17f60 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 # into 17f70 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72 the database dir 17f80 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 64 61 ectory. Each da 17f90 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c 61 74 tabase and relat 17fa0 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 ed files.. 17fb0 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20 # used by 17fc0 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 62 65 a test should be 17fd0 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 20 74 cleaned up by t 17fe0 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 20 74 hat test using t 17ff0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 18000 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 70 72 "cleanupDb" pr 18010 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d ocedure, below.. 18020 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 18030 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 if {!$isMemory &
18040 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e  & $qualify} then 18050 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 18060 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a fileName [file j 18070 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65 oin [getDatabase 18080 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 Directory] [file 18090 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
180a0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
180b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
180c0 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c  OTE: By default,
180d0 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d   delete any pre-
180e0 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
180f0 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20  e with the same
18100 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20  file..      #
18110 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74 20 63      name if it c
18120 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73 2e  urrently exists.
18130 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
18140 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20   if {!$isMemory 18150 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66 &&$delete && [f
18160 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 18170 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 18180 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 18190 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 181a0 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 t to delete any 181b0 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 pre-existing dat 181c0 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73 abase with the s 181d0 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 ame file.. 181e0 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d # name.. 181f0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 18200 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 18210 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c file delete$fil
18220 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74  eName} error]} t
18230 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
18240 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
18250 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77  NOTE: We somehow
18260 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
18270 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f  e the file, repo
18280 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
18290 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
182a0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 182b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 182c0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
182d0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
182e0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
182f0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
18300 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
18310 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66  elete database f
18320 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 18330 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 18340 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 "\" during 18350 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 setup, error: " 18360 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
18370 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
18380 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
18390 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
183a0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
183b0 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
183c0 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
183d0 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
183e0 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
183f0 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
18400 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20  er.  The handle
18410 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61  to the opened da
18420 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73  tabase will be s
18430 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
18440 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
18450 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62  ar 1 $varName db 18460 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 18470 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 # NOTE: Start 18480 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f building the co 18490 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 184a0 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69 The only requi 184b0 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 red portion.. 184c0 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 # of th 184d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 e connection str 184e0 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 20 ing is the data 184f0 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f source, which co 18500 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20 ntains the.. 18510 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 # databa 18520 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73 se file name its 18530 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c elf. If our cal 18540 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65 ler wants to use 18550 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20 a URI as.. 18560 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 74 # the dat 18570 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68 a source, use th 18580 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63 e FullUri connec 18590 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 tion string prop 185a0 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23 erty to.. # 185b0 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 prevent t 185c0 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 73 he data source s 185d0 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67 tring from being 185e0 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20 mangled... 185f0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75 #.. if {$u
18600 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ri} then {..
18610 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69      set connecti
18620 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69  on {FullUri=${fi 18630 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20 leName}}.. 18640 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 18650 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e set connection 18660 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b {Data Source=${
18670 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20  fileName}}..
18680 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
18690 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69        # NOTE: Si
186a0 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64 75  nce this procedu
186b0 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61  re has no specia
186c0 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77  l knowledge of w
186d0 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d  hat the default.
186e0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
186f0 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68  etting is for th
18700 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e  e ToFullPath con
18710 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70  nection string p
18720 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a  ropery, always..
18730 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64        #       ad
18740 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b  d the value we k
18750 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65  now about to the
18760 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
18770 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
18780 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
18790 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61  ction {;ToFullPa
187a0 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a  th=${qualify}}.. 187b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 187c0 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 187d0 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 187e0 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c a journal mode, 187f0 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 add the necessa 18800 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 ry portion.. 18810 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 # of the 18820 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 18830 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 ng now... # 18840 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 18850 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 ing length$mode
18860 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
18870 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
18880 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e  nnection {;Journ
18890 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d  al Mode=${mode}} 188a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 188b0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 188c0 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 TE: If our calle 188d0 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61 r specified a Da 188e0 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61 teTime format, a 188f0 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 dd the necessary 18900 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 18910 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 portion of the c 18920 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 18930 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. 18940 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 18950 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69 g length$dateTi
18960 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74  meFormat] > 0} t
18970 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
18980 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
18990 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61   {;DateTimeForma
189a0 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d  t=${dateTimeForm 189b0 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d at}}.. }... 189c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 189d0 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 # NOTE: If our c 189e0 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 aller specified 189f0 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20 a DateTimeKind, 18a00 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 add the necessar 18a10 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20 y portion.. 18a20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 # of the 18a30 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 18a40 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g now... #. 18a50 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 18a60 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 ng length$dateT
18a70 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68  imeKind] > 0} th
18a80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
18a90 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
18aa0 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24  {;DateTimeKind=$18ab0 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d {dateTimeKind}}. 18ac0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 18ad0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18ae0 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 E: Figure out wh 18af0 61 74 20 74 68 65 20 66 69 6e 61 6c 20 66 6c 61 at the final fla 18b00 67 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e gs for this conn 18b10 65 63 74 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62 ection need to b 18b20 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. 18b30 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 set flags [ge 18b40 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 tConnectionFlags 18b50 20 24 66 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67$fileName $flag 18b60 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 s$quiet]....
18b70 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
18b80 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
18b90 72 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65  r specified some
18ba0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
18bb0 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d  nFlags, add the.
18bc0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e  .      #       n
18bd0 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e  ecessary portion
18be0 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
18bf0 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
18c00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
18c10 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
18c20 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74  h $flags] > 0} t 18c30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 18c40 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection 18c50 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73 {;Flags=${flags
18c60 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  }}..      }....
18c70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18c80 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c  NOTE: If our cal
18c90 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 6e  ler specified an
18ca0 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74   extra payload t
18cb0 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
18cc0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
18cd0 73 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69  string, append i
18ce0 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  t now...      #.
18cf0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
18d00 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61  ng length $extra 18d10 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 18d20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 18d30 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74 nnection \;$ext
18d40 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ra..      }....
18d50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
18d60 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61  NOTE: Add the na
18d70 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e  me of the curren
18d80 74 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66 20  t test file, if
18d90 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73  available.  This
18da0 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   is..      #
18db0 20 20 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72     only used for
18dc0 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20   debugging...
18dd0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
18de0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
18df0 65 73 74 5f 66 69 6c 65 5d 7d 20 74 68 65 6e 20  est_file]} then
18e00 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
18e10 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54  d connection {;T
18e20 65 73 74 46 69 6c 65 3d 24 7b 3a 3a 74 65 73 74  estFile=${::test 18e30 5f 66 69 6c 65 7d 7d 0d 0a 20 20 20 20 20 20 7d _file}}.. } 18e40 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 18e50 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 # NOTE: Add t 18e60 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 he name of the c 18e70 75 72 72 65 6e 74 20 74 65 73 74 2c 20 69 66 20 urrent test, if 18e80 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 available. This 18e90 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 is only.. 18ea0 23 20 20 20 20 20 20 20 75 73 65 64 20 66 6f 72 # used for 18eb0 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 debugging... 18ec0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 18ed0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 [info exists ::e 18ee0 61 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65 agle_tests(Curre 18ef0 6e 74 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b ntName)]} then { 18f00 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 .. append 18f10 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 65 connection {;Te 18f20 73 74 4e 61 6d 65 3d 24 7b 3a 3a 65 61 67 6c 65 stName=${::eagle
18f30 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61  _tests(CurrentNa
18f40 6d 65 29 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  me)}}..      }..
18f50 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
18f60 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 63 6c 61   # NOTE: For cla
18f70 72 69 74 79 2c 20 61 70 70 65 6e 64 20 61 20 66  rity, append a f
18f80 69 6e 61 6c 20 73 65 6d 69 63 6f 6c 6f 6e 20 74  inal semicolon t
18f90 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
18fa0 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
18fb0 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20  #..      append
18fc0 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 0d 0a 0d  connection \;...
18fd0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
18fe0 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65  # NOTE: Open the
18ff0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
19000 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e  tion now, placin
19010 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 6e  g the opaque han
19020 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20  dle value..
19030 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68   #       into th
19040 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 69  e variable speci
19050 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  fied by our call
19060 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
19070 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20      set db [sql
19080 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74  open -type SQLit
19090 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63  e [subst $connec 190a0 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 tion]].... 190b0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 190c0 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 74 Configure the t 190d0 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f emporary directo 190e0 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 ry for the newly 190f0 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 opened database 19100 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 19110 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75 connection now u 19120 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72 nless our caller 19130 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20 forbids it... 19140 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 19150 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 21 {$temporary && !
19160 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
19170 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44 69  o(setTemporaryDi
19180 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20  rectory)]} then
19190 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65  {..        sql e
191a0 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65  xecute $db [appe 191b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 191c0 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 65 "PRAGMA te 191d0 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f mp_store_directo 191e0 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d ry = \"" [getTem 191f0 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 5d poraryDirectory] 19200 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d \"\;].. }. 19210 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 19220 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 66 6f 72 # NOTE: Perfor 19230 6d 20 61 6e 79 20 65 78 74 72 61 20 70 65 72 2d m any extra per- 19240 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 74 75 70 connection setup 19250 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f for the newly o 19260 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20 pened.. # 19270 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6e 6f database no 19280 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c w unless our cal 19290 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d ler forbids it.. 192a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 192b0 73 65 74 20 65 78 65 63 75 74 65 4f 6e 53 65 74 set executeOnSet 192c0 75 70 20 5b 67 65 74 45 78 65 63 75 74 65 4f 6e up [getExecuteOn 192d0 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 20 20 20 Setup].... 192e0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 192f0 74 68 20 24 65 78 65 63 75 74 65 4f 6e 53 65 74 th$executeOnSet
19300 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20  up] > 0 && \..
19310 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65          ![info e
19320 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 75  xists ::no(execu
19330 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 74 68 65  teOnSetup)]} the
19340 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
19350 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
19360 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61 79  This command may
19370 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3b   raise an error;
19380 20 69 66 20 73 6f 2c 20 74 68 61 74 20 69 73 20   if so, that is
19390 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 20 20 20  fine, as..
193a0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 65 6e    #       the en
193b0 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 77 69 6c  closing test wil
193c0 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 20 54 68  l then fail.  Th
193d0 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d 61 6e  e [subst] comman
193e0 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  d is..        #
193f0 20 20 20 20 20 20 75 73 65 64 20 6f 6e 20 74 68        used on th
19400 65 20 53 51 4c 20 69 6e 20 63 61 73 65 20 69 74  e SQL in case it
19410 20 6e 65 65 64 73 20 74 6f 20 72 65 66 65 72 20   needs to refer
19420 74 6f 20 73 74 61 74 65 20 69 6e 20 6f 75 72 0d  to state in our.
19430 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
19440 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20   context...
19450 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 71     #..        sq
19460 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 73  l execute $db [s 19470 75 62 73 74 20 24 65 78 65 63 75 74 65 4f 6e 53 ubst$executeOnS
19480 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  etup]..      }..
19490 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
194a0 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20   # NOTE: Always
194b0 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65  return the conne
194c0 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f  ction handle upo
194d0 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20  n success...
194e0 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
194f0 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  n $db.. }.... 19500 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 43 . proc getDbC 19510 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 onnection { {var 19520 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 Name db} } {.. 19530 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 19540 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 19550 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 19560 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 able (e.g. "db") 19570 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 in the context 19580 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 of our.. # 19590 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 caller. T 195a0 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 he handle to the 195b0 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f database previo 195c0 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20 usly opened via 195d0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 195e0 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f [setupDb] pro 195f0 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65 cedure should be 19600 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a stored there... 19610 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 #.. u 19620 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 pvar 1$varName
19630 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  db....      #..
19640 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69       # NOTE: Thi
19650 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 41 44  s returns the AD
19660 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63 74  O.NET IDbConnect
19670 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  ion object insta
19680 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20  nce for the..
19690 20 20 20 23 20 20 20 20 20 20 20 73 70 65 63 69     #       speci
196a0 66 69 65 64 20 64 61 74 61 62 73 65 20 68 61 6e  fied databse han
196b0 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74 74  dle.  Since gett
196c0 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74 20  ing this object
196d0 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20  relies upon..
196e0 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
196f0 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65 61   internals, grea
19700 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65  t care should be
19710 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20   taken to avoid
19720 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20  disposing of..
19730 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73      #       this
19740 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65 72   object or other
19750 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 74 20  wise putting it
19760 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20  into an invalid
19770 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d  state...      #.
19780 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
19790 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65   exists db]} the
197a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
197b0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
197c0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
197d0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
197e0 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67  blic -objectflag
197f0 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d 61 6c  s +NoDispose -al
19800 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
19810 20 20 20 20 20 49 6e 74 65 72 70 72 65 74 65 72       Interpreter
19820 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65  .GetActive.conne
19830 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62 0d  ctions Item $db. 19840 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c . } resul 19850 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 19860 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 19870 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 19880 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e 20 Success, return 19890 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 the opaque objec 198a0 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 t handle... 198b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 198c0 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
198d0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
198e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
198f0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
19900 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70 6f  E: Failure, repo
19910 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20  rt why...
19920 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
19930 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 19940 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 19950 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 19960 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 19970 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20 : failed to get 19980 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 19990 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 5c e for database \ 199a0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 199b0 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72 72$db "\", err
199c0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75  or: " \n\t $resu 199d0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 199e0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 199f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 19a00 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 OTE: Failure, re 19a10 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f 75 73 6c turn an obviousl 19a20 79 20 69 6e 76 61 6c 69 64 20 6f 70 61 71 75 65 y invalid opaque 19a30 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d object handle.. 19a40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 19a50 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d return "".. } 19a60 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 ..... proc fr 19a70 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b eeDbConnection { 19a80 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 {varName connec 19a90 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 tion} } {.. 19aa0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 19ab0 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 19ac0 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 19ad0 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 e (e.g. "connect 19ae0 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 ion") in the.. 19af0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 19b00 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 ext of our calle 19b10 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f r. The opaque o 19b20 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 bject handle for 19b30 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 an ADO.NET.. 19b40 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 # conne 19b50 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 ction previously 19b60 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 returned by [ge 19b70 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 tDbConnection] s 19b80 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 hould be.. 19b90 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 74 # stored t 19ba0 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a here... #.. 19bb0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
19bc0 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f  arName connectio
19bd0 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  n....      #..
19be0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
19bf0 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 68  mpt to remove th
19c00 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  e opaque object
19c10 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20  handle from the
19c20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20  interpreter..
19c30 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 20     #       now.
19c40 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 69   This [object di
19c50 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c  spose] call will
19c60 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 69   not actually di
19c70 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 20  spose of the..
19c80 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64 65      #       unde
19c90 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 65  rlying object be
19ca0 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 73  cause the +NoDis
19cb0 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73 65  pose flag was se
19cc0 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 23  t on it..      #
19cd0 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63 72         during cr
19ce0 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70  eation of the op
19cf0 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
19d00 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  le...      #..
19d10 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
19d20 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d  ists connection]
19d30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
19d40 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20   [catch {object
19d50 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74  dispose $connect 19d60 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 ion} error]} the 19d70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 19d80 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 19d90 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile 19da0 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 d to remove the 19db0 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 handle, report w 19dc0 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a hy... #.. 19dd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
19de0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
19df0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
19e00 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
19e10 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
19e20 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74  o remove connect
19e30 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 24  ion handle \"" $19e40 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 connection \.. 19e50 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 65 "\", e 19e60 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
19e70 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  ror \n]..      }
19e80 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
19e90 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 63  proc addDbConnec
19ea0 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f  tion { connectio
19eb0 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d  n {varName db} }
19ec0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
19ed0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72     # NOTE: Refer
19ee0 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65   to the specifie
19ef0 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e  d variable (e.g.
19f00 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f   "db") in the co
19f10 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20  ntext of our..
19f20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c      #       call
19f30 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  er...      #..
19f40 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 19f50 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 Name db.... 19f60 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 19f70 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 65 : Create a corre 19f80 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 6e ctly formatted n 19f90 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61 ame for the data 19fa0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 19fb0 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 19fc0 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68 be added to th 19fd0 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 62 e list managed b 19fe0 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 y the Eagle inte 19ff0 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 1a000 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 #.. set db 1a010 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d [object invoke - 1a020 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 1a030 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 61 \.. Ea 1a040 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e gle._Components. 1a050 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 Private.FormatOp 1a060 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 74 s DatabaseObject 1a070 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e Name$connection
1a080 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51   \..          SQ
1a090 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b  LiteConnection [
1a0a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e  object invoke In
1a0b0 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
1a0c0 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a  ive NextId]]....
1a0d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1a0e0 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 64   NOTE: Add the d
1a0f0 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1a100 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  on provided by o
1a110 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 65  ur caller to the
1a120 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20 20   list..      #
1a130 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e       of those kn
1a140 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65  own to the Eagle
1a150 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
1a160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62       #..      ob
1a170 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
1a180 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e  gs +NonPublic In
1a190 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74  terpreter.GetAct
1a1a0 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  ive.connections
1a1b0 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  Add \..
1a1c0 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e   $db$connection
1a1d0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1a1e0 70 72 6f 63 20 72 65 6d 6f 76 65 44 62 54 72 61  proc removeDbTra
1a1f0 6e 73 61 63 74 69 6f 6e 20 7b 20 74 72 61 6e 73  nsaction { trans
1a200 61 63 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20  action } {..
1a210 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1a220 45 3a 20 52 65 6d 6f 76 65 20 74 68 65 20 64 61  E: Remove the da
1a230 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74 69  tabase transacti
1a240 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  on provided by o
1a250 75 72 20 63 61 6c 6c 65 72 20 66 72 6f 6d 20 74  ur caller from t
1a260 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
1a270 20 20 6c 69 73 74 20 6f 66 20 74 68 6f 73 65 20    list of those
1a280 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67  known to the Eag
1a290 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  le interpreter..
1a2a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1a2b0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
1a2c0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
1a2d0 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
1a2e0 63 74 69 76 65 2e 74 72 61 6e 73 61 63 74 69 6f  ctive.transactio
1a2f0 6e 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ns \..
1a300 52 65 6d 6f 76 65 20 24 74 72 61 6e 73 61 63 74  Remove $transact 1a310 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ion.. }..... 1a320 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46 proc getRowsF 1a330 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64 romDataTable { d 1a340 61 74 61 54 61 62 6c 65 20 7b 76 61 6c 75 65 43 ataTable {valueC 1a350 61 6c 6c 62 61 63 6b 20 22 22 7d 20 7d 20 7b 0d allback ""} } {. 1a360 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73 20 . set rows 1a370 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 [list].. se 1a380 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 t count [$dataTa
1a390 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e  ble Columns.Coun
1a3a0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20  t]....      for
1a3b0 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24  {set index 0} {$1a3c0 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 index <$count}
1a3d0 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a  {incr index} {..
1a3e0 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61          set data
1a3f0 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61 62  Column [$dataTab 1a400 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e le -alias Column 1a410 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 s.get_Item$inde
1a420 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  x]..        set
1a430 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b 24  names($index) [$
1a440 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d  dataColumn Colum
1a450 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  nName]..      }.
1a460 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1a470 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20    # NOTE: Setup
1a480 73 6f 6d 65 20 54 63 6c 20 72 65 74 75 72 6e 20  some Tcl return
1a490 63 6f 64 65 20 63 6f 6e 73 74 61 6e 74 73 2e 0d  code constants..
1a4a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1a4b0 73 65 74 20 4f 6b 20 30 3b 20 73 65 74 20 45 72  set Ok 0; set Er
1a4c0 72 6f 72 20 31 3b 20 73 65 74 20 52 65 74 75 72  ror 1; set Retur
1a4d0 6e 20 32 3b 20 73 65 74 20 42 72 65 61 6b 20 33  n 2; set Break 3
1a4e0 3b 20 73 65 74 20 43 6f 6e 74 69 6e 75 65 20 34  ; set Continue 4
1a4f0 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74  ....      object
1a500 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
1a510 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61 74  dataRow [set dat
1a520 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62 6c  aRows [$dataTabl 1a530 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 e Rows]] {.. 1a540 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 73 set row [lis 1a550 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f t].... fo 1a560 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 r {set index 0} 1a570 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 {$index < $count 1a580 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b } {incr index} { 1a590 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 1a5a0 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 20 value [$dataRow
1a5b0 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 67  -create -alias g
1a5c0 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d  et_Item $index]. 1a5d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1a5e0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1a5f0 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 5d 20$valueCallback]
1a600 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
1a610 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64           set cod
1a620 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20  e [catch {..
1a630 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75 65            $value 1a640 43 61 6c 6c 62 61 63 6b 20 24 64 61 74 61 54 61 Callback$dataTa
1a650 62 6c 65 20 24 64 61 74 61 52 6f 77 20 24 69 6e  ble $dataRow$in
1a660 64 65 78 20 24 76 61 6c 75 65 0d 0a 20 20 20 20  dex $value.. 1a670 20 20 20 20 20 20 20 20 7d 20 6e 65 77 56 61 6c } newVal 1a680 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue].... 1a690 20 20 20 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 if {$code ==
1a6a0 24 4f 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  $Ok} then {.. 1a6b0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1a6c0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1a6d0 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1a6e0 69 66 69 65 64 20 28 6e 65 77 3f 29 20 72 6f 77 ified (new?) row 1a6f0 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 value... 1a700 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a710 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 1a720 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 row [list$names
1a730 28 24 69 6e 64 65 78 29 20 24 6e 65 77 56 61 6c  ($index)$newVal
1a740 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue]..
1a750 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65   } elseif {$code 1a760 20 3d 3d 20 24 45 72 72 6f 72 7d 20 74 68 65 6e ==$Error} then
1a770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1a780 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1a790 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
1a7a0 68 65 20 28 6e 65 77 3f 29 20 4e 55 4c 4c 20 72  he (new?) NULL r
1a7b0 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  ow value...
1a7c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1a7d0 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
1a7e0 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d  d row [list $nam 1a7f0 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 es($index)]..
1a800 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69           } elsei
1a810 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 52 65 74  f {$code ==$Ret
1a820 75 72 6e 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  urn} then {..
1a830 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1a840 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1a850 54 45 3a 20 53 6b 69 70 20 72 65 6d 61 69 6e 69  TE: Skip remaini
1a860 6e 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  ng values for th
1a870 69 73 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20  is row...
1a880 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a890 20 20 20 20 20 20 20 20 62 72 65 61 6b 0d 0a 20          break..
1a8a0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1a8b0 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 42  eif {$code ==$B
1a8c0 72 65 61 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  reak} then {..
1a8d0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1a8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
1a8f0 4f 54 45 3a 20 53 6b 69 70 20 70 72 6f 63 65 73  OTE: Skip proces
1a900 73 69 6e 67 20 74 68 69 73 20 72 6f 77 20 76 61  sing this row va
1a910 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  lue...
1a920 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1a930 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f     } elseif {$co 1a940 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d de ==$Continue}
1a950 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a960 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a970 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1a980 55 73 65 20 64 65 66 61 75 6c 74 20 72 6f 77 20  Use default row
1a990 76 61 6c 75 65 20 68 61 6e 64 6c 69 6e 67 2e 0d  value handling..
1a9a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
1a9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1a9c0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
1a9d0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1a9e0 20 73 65 74 20 63 6f 64 65 20 24 43 6f 6e 74 69   set code $Conti 1a9f0 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d nue.. } 1aa00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 1aa10 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 6f 6e 74 {$code == $Cont 1aa20 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 inue} then {.. 1aa30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 1aa40 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
1aa50 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20  lue] > 0 && \..
1aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
1aa70 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43  [object invoke C
1aa80 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c 20  onvert IsDBNull
1aa90 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d  $value]} then {. 1aaa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c . l 1aab0 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 append row [list 1aac0 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20$names($index) 1aad0 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e 67 [$value ToString
1aae0 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]]..
1aaf0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1ab00 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
1ab10 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73  row [list $names 1ab20 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20 ($index)]..
1ab30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1ab40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1ab50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70  ....        lapp
1ab60 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20  end rows $row.. 1ab70 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1ab80 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20 return$rows..
1ab90 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1aba0 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74   dumpRowsFromDat
1abb0 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c  aTable { channel
1abc0 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20   rows } {..
1abd0 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31 0d   set sequence 1.
1abe0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
1abf0 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20   row $rows {.. 1ac00 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1ac10 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1ac20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1ac30 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63 65  [expr {$sequence 1ac40 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22 > 1 ? "\n" : "" 1ac50 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20 }] "---- ROW #" 1ac60 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a$sequence :\n]..
1ac70 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
1ac80 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20  h pair $row {.. 1ac90 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c if {[ll 1aca0 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d 20 ength$pair] >=
1acb0 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  2} then {..
1acc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 1acd0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1ace0 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 s \t \.. 1acf0 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c [list [l 1ad00 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20 index$pair 0]]
1ad10 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64  ": " [list [lind
1ad20 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d  ex $pair 1]] \n] 1ad30 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 1ad40 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 seif {[llength$
1ad50 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e  pair] == 1} then
1ad60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ad70 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 1ad80 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d appendArgs \t \. 1ad90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ada0 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 [list [lindex$
1adb0 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c  pair 0]] ": <nul
1adc0 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  l>\n"]..
1add0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1ade0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 1adf0 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e hannel \t<empty> 1ae00 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64 \n; # NOTE: No d 1ae10 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 ata?.. 1ae20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1ae30 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 65 71 incr seq 1ae40 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a uence.. }.. 1ae50 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1ae60 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 oc cleanupDb { f 1ae70 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 ileName {varName 1ae80 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 db} {collect tr 1ae90 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 ue} {qualify tru 1aea0 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e}.. 1aeb0 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 {delete 1aec0 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 1aed0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1aee0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f E: Attempt to fo 1aef0 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 rce all pending 1af00 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 "garbage" object 1af10 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 s to be collecte 1af20 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 d,.. # 1af30 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 including SQLi 1af40 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e te statements an 1af50 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 d backup objects 1af60 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c ; this should al 1af70 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 low.. # 1af80 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e the underlyin 1af90 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 g database file 1afa0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a to be deleted... 1afb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1afc0 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 f {$collect} the
1afd0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c  n {..        col
1afe0 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74  lectGarbage $::t 1aff0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 1b000 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 1b010 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 1b020 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 1b030 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 1b040 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 1b050 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 1b060 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1b070 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e caller. The han 1b080 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 dle to the datab 1b090 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f ase previously o 1b0a0 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 pened via the.. 1b0b0 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 # [se 1b0c0 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 tupDb] procedure 1b0d0 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 should be store 1b0e0 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 d there... 1b0f0 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 #.. upvar 1 1b100 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a$varName db....
1b110 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1b120 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65   NOTE: Close the
1b130 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
1b140 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e  he database now.
1b150 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c    This should al
1b160 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20  low us..      #
1b170 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20        to delete
1b180 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
1b190 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20  atabase file...
1b1a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
1b1b0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64   {[info exists d
1b1c0 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71  b] && [catch {sq
1b1d0 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72  l close $db} err 1b1e0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 or]} then {.. 1b1f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b200 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 # NOTE: We someh 1b210 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f ow failed to clo 1b220 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c se the database, 1b230 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 1b240 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1b250 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1b260 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1b270 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1b280 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1b290 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65   failed to close
1b2a0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64   database \"" $d 1b2b0 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 b "\", error: " 1b2c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c \.. \ 1b2d0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
1b2e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1b2f0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1b300 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20  : First, see if
1b310 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72  our caller has r
1b320 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d  equested an in-m
1b330 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d  emory database..
1b340 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1b350 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73  set isMemory [is
1b360 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61  MemoryDb $fileNa 1b370 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a me].... #.. 1b380 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 1b390 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 ild the full pat 1b3a0 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 h to the databas 1b3b0 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f e file name. Fo 1b3c0 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d r now, all test. 1b3d0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 1b3e0 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 atabase files ar 1b3f0 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 e stored in the 1b400 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 1b410 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ory... #.. 1b420 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d if {!$isMem
1b430 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d  ory && $qualify} 1b440 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1b450 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 set fileName [f 1b460 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 ile join [getDat 1b470 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 abaseDirectory] 1b480 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
1b490 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  Name]]..      }.
1b4a0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1b4b0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
1b4c0 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c  if the file stil
1b4d0 6c 20 65 78 69 73 74 73 3b 20 69 6e 69 74 69 61  l exists; initia
1b4e0 6c 6c 79 2c 20 61 73 73 75 6d 65 20 61 6c 6c 20  lly, assume all
1b4f0 66 69 6c 65 73 20 77 69 6c 6c 0d 0a 20 20 20 20  files will..
1b500 20 20 23 20 20 20 20 20 20 20 62 65 20 64 65 6c    #       be del
1b510 65 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c  eted successfull
1b520 79 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e  y, if necessary.
1b530 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1b540 20 73 65 74 20 73 75 63 63 65 73 73 20 74 72 75   set success tru
1b550 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  e....      if {!
1b560 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65  $isMemory &&$de
1b570 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78  lete && [file ex
1b580 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} 1b590 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1b5a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1b5b0 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e TE: Skip deletin 1b5c0 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 g database files 1b5d0 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 if somebody set 1b5e0 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 s the global.. 1b5f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 1b600 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e riable to preven 1b610 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 t it... # 1b620 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 1b630 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1b640 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 73 29 (cleanupDbFiles) 1b650 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1b660 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1b670 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 1b680 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 t to delete the 1b690 74 65 73 74 20 57 41 4c 20 66 69 6c 65 2c 20 69 test WAL file, i 1b6a0 66 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20 f any, now... 1b6b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1b6c0 20 20 20 20 73 65 74 20 77 61 6c 46 69 6c 65 4e set walFileN 1b6d0 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ame [appendArgs 1b6e0 24 66 69 6c 65 4e 61 6d 65 20 2d 77 61 6c 5d 0d$fileName -wal].
1b6f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
1b700 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 77  {[file exists $w 1b710 61 6c 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 alFileName]} the 1b720 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1b730 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1b740 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 # NOTE: If there 1b750 20 69 73 20 61 20 57 41 4c 20 66 69 6c 65 2c 20 is a WAL file, 1b760 69 74 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72 it should be zer 1b770 6f 20 62 79 74 65 73 20 61 74 20 74 68 69 73 0d o bytes at this. 1b780 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 . # 1b790 20 20 20 20 20 70 6f 69 6e 74 2e 0d 0a 20 20 20 point... 1b7a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1b7b0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 if {[set 1b7c0 20 73 69 7a 65 20 5b 66 69 6c 65 20 73 69 7a 65 size [file size 1b7d0 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 5d 5d 20$walFileName]]
1b7e0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
1b7f0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1b800 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
1b810 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
1b820 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
1b830 20 74 68 65 20 57 41 4c 20 66 69 6c 65 2c 20 72   the WAL file, r
1b840 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
1b850 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1b860 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
1b870 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
1b880 74 65 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 7d  te $walFileName} 1b890 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 1b8a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b8b0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1b8c0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1b8d0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1b8e0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1b8f0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1b900 74 6f 20 64 65 6c 65 74 65 20 57 41 4c 20 66 69  to delete WAL fi
1b910 6c 65 20 5c 22 22 20 24 77 61 6c 46 69 6c 65 4e  le \"" $walFileN 1b920 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ame \.. 1b930 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d 1b940 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 uring cleanup, e 1b950 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1b960 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ror \n]....
1b970 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73             set s
1b980 75 63 63 65 73 73 20 66 61 6c 73 65 0d 0a 20 20  uccess false..
1b990 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1b9a0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
1b9b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1b9c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1b9d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1b9e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1b9f0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1ba00 57 41 52 4e 49 4e 47 3a 20 57 41 4c 20 66 69 6c WARNING: WAL fil 1ba10 65 20 5c 22 22 20 24 77 61 6c 46 69 6c 65 4e 61 e \""$walFileNa
1ba20 6d 65 20 22 5c 22 20 69 73 20 22 20 24 73 69 7a  me "\" is " $siz 1ba30 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 1ba40 20 20 20 20 20 20 20 22 20 62 79 74 65 73 20 69 " bytes i 1ba50 6e 20 73 69 7a 65 2c 20 73 6b 69 70 70 69 6e 67 n size, skipping 1ba60 20 61 6c 6c 20 66 69 6c 65 20 64 65 6c 65 74 69 all file deleti 1ba70 6f 6e 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20 ons...\n"].... 1ba80 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 1ba90 72 6e 20 31 3b 20 23 20 65 72 72 6f 72 0d 0a 20 rn 1; # error.. 1baa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1bab0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1bac0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1bad0 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 1bae0 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 mpt to delete th 1baf0 65 20 74 65 73 74 20 53 48 4d 20 66 69 6c 65 2c e test SHM file, 1bb00 20 69 66 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 if any, now... 1bb10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1bb20 20 20 20 20 20 20 73 65 74 20 73 68 6d 46 69 6c set shmFil 1bb30 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 eName [appendArg 1bb40 73 20 24 66 69 6c 65 4e 61 6d 65 20 2d 73 68 6d s$fileName -shm
1bb50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ]....          i
1bb60 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
1bb70 24 73 68 6d 46 69 6c 65 4e 61 6d 65 5d 20 26 26  $shmFileName] && 1bb80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1bb90 20 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 [catch {file d 1bba0 65 6c 65 74 65 20 24 73 68 6d 46 69 6c 65 4e 61 elete$shmFileNa
1bbb0 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e  me} error]} then
1bbc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1bbd0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
1bbe0 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
1bbf0 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  w failed to dele
1bc00 74 65 20 74 68 65 20 53 48 4d 20 66 69 6c 65 2c  te the SHM file,
1bc10 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
1bc20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1bc30 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1bc40 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1bc50 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1bc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1bc70 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1bc80 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 53 48 led to delete SH 1bc90 4d 20 66 69 6c 65 20 5c 22 22 20 24 73 68 6d 46 M file \""$shmF
1bca0 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
1bcb0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
1bcc0 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65  uring cleanup, e
1bcd0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1bce0 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ror \n].... 1bcf0 20 20 20 20 20 20 20 73 65 74 20 73 75 63 63 65 set succe 1bd00 73 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 ss false.. 1bd10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1bd20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1bd30 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 1bd40 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 to delete the te 1bd50 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 st database file 1bd60 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 now... 1bd70 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 1bd80 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d 1bd90 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
1bda0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1bdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1bdc0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1bdd0 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
1bde0 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
1bdf0 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74  the file, report
1be00 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20   why...
1be10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1be20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1be30 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1be40 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1be50 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1be60 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1be70 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 delete database 1be80 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
1be90 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
1bea0 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67        "\" during
1beb0 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a   cleanup, error:
1bec0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c   " \n\t $error \ 1bed0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n].... 1bee0 20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 61 set success fa 1bef0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lse.. } 1bf00 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 1bf10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 1bf20 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1bf30 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20 E: Show that we 1bf40 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting 1bf50 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20 the file... 1bf60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1bf70 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1bf80 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1bf90 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1bfa0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1bfb0 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c  ING: skipped del
1bfc0 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66  eting database f
1bfd0 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 1bfe0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 1bff0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 1c000 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 eanup\n"].. 1c010 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1c020 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 . return [e 1c030 78 70 72 20 7b 24 73 75 63 63 65 73 73 20 3f 20 xpr {$success ?
1c040 30 20 3a 20 31 7d 5d 0d 0a 20 20 20 20 7d 0d 0a  0 : 1}]..    }..
1c050 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65  ...    proc save
1c060 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
1c070 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61  bles { names {va
1c080 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
1c090 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1c0a0 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e  NOTE: For each n
1c0b0 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 6c 69  ame, does the li
1c0c0 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  ve environment v
1c0d0 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20 20  ariable exist?
1c0e0 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  If..      #
1c0f0 20 20 73 6f 2c 20 73 61 76 65 20 74 68 65 20 76    so, save the v
1c100 61 6c 75 65 20 66 6f 72 20 6c 61 74 65 72 3b 20  alue for later;
1c110 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20  otherwise, make
1c120 73 75 72 65 20 74 68 65 20 73 61 76 65 64 0d 0a  sure the saved..
1c130 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
1c140 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69  lue does not exi
1c150 73 74 20 65 69 74 68 65 72 2e 20 20 54 68 65 20  st either.  The
1c160 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74  live environment
1c170 20 76 61 72 69 61 62 6c 65 73 0d 0a 20 20 20 20   variables..
1c180 20 20 23 20 20 20 20 20 20 20 41 52 45 20 4e 4f    #       ARE NO
1c190 54 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69  T changed by thi
1c1a0 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20  s procedure...
1c1b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1c1c0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
1c1d0 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20  $varName] == 0} 1c1e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c1f0 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65 set varName save 1c200 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d dEnv.. }... 1c210 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
1c220 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76  varName savedEnv
1c230 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  ....      foreac
1c240 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d  h name $names {. 1c250 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 1c260 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 fo exists ::env( 1c270 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d$name)]} then {.
1c280 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
1c290 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 20 24  avedEnv($name)$
1c2a0 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20  ::env($name).. 1c2b0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1c2c0 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 unset 1c2d0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 -nocomplain save 1c2e0 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 dEnv($name)..
1c2f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
1c300 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1c310 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69    # NOTE: This i
1c320 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e  s self-cleaning.
1c330 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65 6e    If no saved en
1c340 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62  vironment variab
1c350 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23  les now..      #
1c360 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 72 65         exist, re
1c370 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e 0d  move the array..
1c380 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1c390 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20  if {[array size
1c3a0 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20  savedEnv] == 0}
1c3b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1c3c0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69  unset -nocomplai
1c3d0 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20  n savedEnv..
1c3e0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
1c3f0 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 45     proc restoreE
1c400 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62  nvironmentVariab
1c410 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72  les { names {var
1c420 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  Name ""} } {..
1c430 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1c440 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e 61  OTE: For each na
1c450 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 73 61 76  me, does the sav
1c460 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  ed environment v
1c470 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20 20  ariable exist?
1c480 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  If..      #
1c490 20 20 73 6f 2c 20 72 65 73 74 6f 72 65 20 74 68    so, restore th
1c4a0 65 20 73 61 76 65 64 20 76 61 6c 75 65 20 61 6e  e saved value an
1c4b0 64 20 75 6e 73 65 74 20 69 74 3b 20 6f 74 68 65  d unset it; othe
1c4c0 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65  rwise, make sure
1c4d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1c4e0 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e  the live environ
1c4f0 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 64 6f  ment variable do
1c500 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74  es not exist eit
1c510 68 65 72 20 28 69 2e 65 2e 20 69 74 0d 0a 20 20  her (i.e. it..
1c520 20 20 20 20 23 20 20 20 20 20 20 20 77 61 73 20      #       was
1c530 6e 6f 74 20 73 65 74 20 74 6f 20 62 65 67 69 6e  not set to begin
1c540 20 77 69 74 68 29 2e 20 20 42 6f 74 68 20 73 61   with).  Both sa
1c550 76 65 64 20 61 6e 64 20 6c 69 76 65 20 65 6e 76  ved and live env
1c560 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20  ironment..
1c570 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65  #       variable
1c580 73 20 41 52 45 20 63 68 61 6e 67 65 64 20 62 79  s ARE changed by
1c590 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e   this procedure.
1c5a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1c5b0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
1c5c0 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d  gth $varName] == 1c5d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1c5e0 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 20 set varName 1c5f0 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20 savedEnv.. 1c600 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 72 }.... upvar 1c610 20 31 20 24 76 61 72 4e 61 6d 65 20 73 61 76 65 1$varName save
1c620 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  dEnv....      fo
1c630 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65  reach name $name 1c640 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 s {.. if 1c650 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61 {[info exists sa 1c660 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 5d 7d 20 vedEnv($name)]}
1c670 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1c680 20 20 73 65 74 20 3a 3a 65 6e 76 28 24 6e 61 6d    set ::env($nam 1c690 65 29 20 24 73 61 76 65 64 45 6e 76 28 24 6e 61 e)$savedEnv($na 1c6a0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 75 me).. u 1c6b0 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 1c6c0 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 savedEnv($name)
1c6d0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1c6e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e   {..          un
1c6f0 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20  set -nocomplain
1c700 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20  ::env($name).. 1c710 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 1c720 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 1c730 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 # NOTE: This 1c740 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 is self-cleaning 1c750 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65 . If no saved e 1c760 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 nvironment varia 1c770 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 bles now.. 1c780 23 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 72 # exist, r 1c790 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e emove the array. 1c7a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1c7b0 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 if {[array size 1c7c0 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d savedEnv] == 0} 1c7d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1c7e0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 1c7f0 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 in savedEnv.. 1c800 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 1c810 20 20 20 20 70 72 6f 63 20 73 61 76 65 45 61 67 proc saveEag 1c820 6c 65 53 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65 leShellEnvironme 1c830 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 nt {} {.. u 1c840 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 pvar 1 savedEnv 1c850 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 savedEnv.... 1c860 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e saveEnvironmen 1c870 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 tVariables [list 1c880 20 4e 6f 4d 75 74 65 78 65 73 5d 20 73 61 76 65 NoMutexes] save 1c890 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a dEnv.. }..... 1c8a0 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 proc restore 1c8b0 45 61 67 6c 65 53 68 65 6c 6c 45 6e 76 69 72 6f EagleShellEnviro 1c8c0 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 nment {} {.. 1c8d0 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 upvar 1 savedE 1c8e0 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 nv savedEnv.... 1c8f0 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 restoreEnvi 1c900 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 1c910 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 65 78 65 73 [list NoMutexes 1c920 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 ] savedEnv.. 1c930 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 }..... proc s 1c940 61 76 65 4d 64 61 43 6f 6e 66 69 67 45 6e 76 69 aveMdaConfigEnvi 1c950 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 1c960 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 1c970 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 1c980 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 . saveEnvir 1c990 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 onmentVariables 1c9a0 5b 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44 [list COMPLUS_MD 1c9b0 41 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 A] savedEnv.. 1c9c0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1c9d0 72 65 73 74 6f 72 65 4d 64 61 43 6f 6e 66 69 67 restoreMdaConfig 1c9e0 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b Environment {} { 1c9f0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 1ca00 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e savedEnv savedEn 1ca10 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 6f v.... resto 1ca20 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 reEnvironmentVar 1ca30 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43 4f 4d iables [list COM 1ca40 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65 64 45 PLUS_MDA] savedE 1ca50 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 nv.. }..... 1ca60 20 20 70 72 6f 63 20 73 61 76 65 47 65 74 53 65 proc saveGetSe 1ca70 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f ttingValueEnviro 1ca80 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 nment {} {.. 1ca90 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 upvar 1 savedE 1caa0 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 nv savedEnv.... 1cab0 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e saveEnviron 1cac0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c mentVariables [l 1cad0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 1cae0 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 No_Expand No_SQ 1caf0 4c 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 61 LiteGetSettingVa 1cb00 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c lue No_SQLiteXml 1cb10 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 ConfigFile] \.. 1cb20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e savedEn 1cb30 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 v.. }..... 1cb40 20 70 72 6f 63 20 72 65 73 74 6f 72 65 47 65 74 proc restoreGet 1cb50 53 65 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 SettingValueEnvi 1cb60 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 1cb70 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 1cb80 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 1cb90 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e . restoreEn 1cba0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 1cbb0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 1cbc0 20 20 20 20 20 20 4e 6f 5f 45 78 70 61 6e 64 20 No_Expand 1cbd0 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53 65 74 74 No_SQLiteGetSett 1cbe0 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53 51 4c 69 ingValue No_SQLi 1cbf0 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 5d teXmlConfigFile] 1cc00 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 \.. sa 1cc10 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c vedEnv.. }... 1cc20 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 .. proc saveS 1cc30 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 QLiteConnectionE 1cc40 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d nvironment {} {. 1cc50 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 . upvar 1 s 1cc60 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 avedEnv savedEnv 1cc70 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e .... saveEn 1cc80 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 1cc90 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 1cca0 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 DefaultFla 1ccb0 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 gs_SQLiteConnect 1ccc0 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e ion No_SQLiteCon 1ccd0 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 nectionNewParser 1cce0 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ] \.. s 1ccf0 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a avedEnv.. }.. 1cd00 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 ... proc rest 1cd10 6f 72 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 oreSQLiteConnect 1cd20 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b ionEnvironment { 1cd30 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 1cd40 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 1 savedEnv save 1cd50 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 dEnv.... re 1cd60 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 storeEnvironment 1cd70 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 Variables [list 1cd80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 \.. Def 1cd90 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 aultFlags_SQLite 1cda0 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 Connection No_SQ 1cdb0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 LiteConnectionNe 1cdc0 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 wParser] \.. 1cdd0 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a savedEnv.. 1cde0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1cdf0 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e oc saveSQLiteCon 1ce00 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 vertEnvironment 1ce10 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 {} {.. upva 1ce20 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 r 1 savedEnv sav 1ce30 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 edEnv.... s 1ce40 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 aveEnvironmentVa 1ce50 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d riables [list \. 1ce60 0a 20 20 20 20 20 20 20 20 20 20 55 73 65 5f 53 . Use_S 1ce70 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 QLiteConvert_Def 1ce80 61 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f 53 aultDbType Use_S 1ce90 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66 QLiteConvert_Def 1cea0 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d aultTypeName] \. 1ceb0 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64 . saved 1cec0 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 Env.. }..... 1ced0 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53 proc restoreS 1cee0 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 QLiteConvertEnvi 1cef0 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 ronment {} {.. 1cf00 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 upvar 1 save 1cf10 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d dEnv savedEnv... 1cf20 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e . restoreEn 1cf30 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c vironmentVariabl 1cf40 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 es [list \.. 1cf50 20 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65 Use_SQLite 1cf60 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44 Convert_DefaultD 1cf70 62 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65 bType Use_SQLite 1cf80 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54 Convert_DefaultT 1cf90 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 ypeName] \.. 1cfa0 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a savedEnv.. 1cfb0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1cfc0 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 oc setupDbInterr 1cfd0 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68 uptCallback { ch 1cfe0 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 annel log } {.. 1cff0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1d000 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e  nel "---- settin
1d010 67 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e  g up debugger in
1d020 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b  terrupt callback
1d030 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69  ... "....      i
1d040 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
1d050 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e       saveEnviron
1d060 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c  mentVariables [l
1d070 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
1d080 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65     quietFindInte
1d090 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20  rpreterTestPath
1d0a0 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70  quietSetupInterp
1d0b0 72 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a  reterTestPath]..
1d0c0 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d  ..        try {.
1d0d0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1d0e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1d0f0 50 72 65 76 65 6e 74 20 74 68 65 20 76 65 6e 64  Prevent the vend
1d100 6f 72 20 73 63 72 69 70 74 20 66 72 6f 6d 20 62  or script from b
1d110 65 69 6e 67 20 6e 6f 69 73 79 20 77 68 65 6e 20  eing noisy when
1d120 63 72 65 61 74 69 6e 67 0d 0a 20 20 20 20 20 20  creating..
1d130 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1d140 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
1d150 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  eter...
1d160 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
1d170 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 46 69 6e  t ::env(quietFin
1d180 64 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74  dInterpreterTest
1d190 50 61 74 68 29 20 31 0d 0a 20 20 20 20 20 20 20  Path) 1..
1d1a0 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69     set ::env(qui
1d1b0 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74  etSetupInterpret
1d1c0 65 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a 0d  erTestPath) 1...
1d1d0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1d1e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1d1f0 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63  Make sure the sc
1d200 72 69 70 74 20 64 65 62 75 67 67 65 72 20 61 6e  ript debugger an
1d210 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69  d the isolated i
1d220 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20  nterpreter..
1d230 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
1d240 65 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64  e setup and read
1d250 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20  y for use...
1d260 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d270 20 20 20 64 65 62 75 67 20 73 65 74 75 70 20 74     debug setup t
1d280 72 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20  rue true....
1d290 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d2a0 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20     # NOTE: Load
1d2b0 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 61  the necessary pa
1d2c0 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20  ckages into the
1d2d0 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72  isolated interpr
1d2e0 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  eter...
1d2f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65   #..          de
1d300 62 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20  bug eval {..
1d310 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20          package
1d320 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20  require Eagle..
1d330 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61             packa
1d340 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65  ge require Eagle
1d350 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20  .Library..
1d360 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65        package re
1d370 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74  quire Eagle.Test
1d380 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
1d390 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1d3a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1d3b0 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73 61  Copy the necessa
1d3c0 72 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74  ry variables int
1d3d0 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69  o the isolated i
1d3e0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
1d3f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1d400 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65      debug invoke
1d410 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68   0 set ::test_ch
1d420 61 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20  annel $channel; 1d430 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 # NOTE: For [tpu 1d440 74 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ts]... 1d450 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 debug invoke 0 s 1d460 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c et ::test_log$l
1d470 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20  og; # NOTE: For
1d480 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20  [tlog].....
1d490 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1d4a0 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c    # NOTE: Instal
1d4b0 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73  l the callback s
1d4c0 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c  cript to be eval
1d4d0 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f  uated in the iso
1d4e0 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20  lated..
1d4f0 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 72   #       interpr
1d500 65 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 69  eter when this i
1d510 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 69 6e  nterpreter is in
1d520 74 65 72 72 75 70 74 65 64 20 62 79 20 73 63 72  terrupted by scr
1d530 69 70 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ipt..          #
1d540 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74         cancellat
1d550 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20  ion, etc...
1d560 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1d570 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b    debug callback
1d580 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20   apply {{sender
1d590 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  e} {..
1d5a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1d5b0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
1d5c0 66 20 74 68 69 73 20 64 65 62 75 67 67 65 72 20  f this debugger
1d5d0 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20  callback is one
1d5e0 74 68 61 74 20 77 65 20 63 61 72 65 20 61 62 6f  that we care abo
1d5f0 75 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ut...
1d600 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1d610 73 65 74 20 69 6e 74 65 72 72 75 70 74 54 79 70  set interruptTyp
1d620 65 73 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e  es [split [$e In 1d630 74 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20 terruptType] ", 1d640 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 1d650 20 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22 if {"Canceled" 1d660 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79 in$interruptTy
1d670 70 65 73 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  pes || \..
1d680 20 20 20 20 20 20 20 20 20 20 22 55 6e 77 6f 75            "Unwou
1d690 6e 64 22 20 69 6e 20 24 69 6e 74 65 72 72 75 70  nd" in $interrup 1d6a0 74 54 79 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a tTypes} then {.. 1d6b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1d6c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1d6d0 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 NOTE: Make sure 1d6e0 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f the [object] co 1d6f0 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 mmand is availab 1d700 6c 65 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 le. Since.. 1d710 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1d720 20 20 74 68 69 73 20 69 73 20 61 6e 20 69 73 6f this is an iso 1d730 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete 1d740 72 2c 20 63 68 65 63 6b 20 66 6f 72 20 69 74 20 r, check for it 1d750 74 68 65 20 68 61 72 64 0d 0a 20 20 20 20 20 20 the hard.. 1d760 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1d770 77 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 way... 1d780 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1d790 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 1d7a0 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 h [info commands 1d7b0 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 object]] > 0} t 1d7c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1d7d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1d7e0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1d7f0 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 : Iterate throug 1d800 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 h all database c 1d810 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e onnections known 1d820 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 to the.. 1d830 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1d840 20 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 parent interpre 1d850 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ter... 1d860 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1d870 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 1d880 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 foreach -alias p 1d890 61 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f air [object invo 1d8a0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1d8b0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 1d8c0 20 20 20 20 20 20 20 20 20 20 20 20 24 65 20 49$e I
1d8d0 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65  nterpreter.conne
1d8e0 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20  ctions] {..
1d8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
1d900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1d910 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
1d920 74 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20  t to cancel any
1d930 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70  SQL queries in p
1d940 72 6f 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20  rogress on..
1d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
1d960 20 20 20 20 20 20 74 68 69 73 20 64 61 74 61 62        this datab
1d970 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ase connection..
1d980 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1d990 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1d9a0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1d9b0 63 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e  ch {$pair Value. 1d9c0 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 Cancel} error]} 1d9d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d9e0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1d9f0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1da00 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e  l [appendArgs \n
1da10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1da20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1da30 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
1da40 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72  d to cancel quer
1da50 79 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20  y for " \..
1da60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1da70 20 20 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c     "connection \
1da80 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22  "" [$pair Key] " 1da90 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 1daa0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 1dab0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72$er
1dac0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
1dad0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1dae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
1daf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
1db00 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1db10 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1db20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1db30 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d appendArgs \n \. 1db40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1db50 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1db60 4e 47 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 NG: cannot cance 1db70 6c 20 61 6e 79 20 71 75 65 72 69 65 73 3a 20 22 l any queries: " 1db80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1db90 20 20 20 20 20 20 20 20 22 74 68 65 20 5c 22 6f "the \"o 1dba0 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 bject\" command 1dbb0 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 is not available 1dbc0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 1dbd0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1dbe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1dbf0 7d 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 }}.. } fi 1dc00 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 nally {.. 1dc10 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f restoreEnviro 1dc20 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b nmentVariables [ 1dc30 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 1dc40 20 20 20 20 20 20 71 75 69 65 74 46 69 6e 64 49 quietFindI 1dc50 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 nterpreterTestPa 1dc60 74 68 20 71 75 69 65 74 53 65 74 75 70 49 6e 74 th quietSetupInt 1dc70 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 erpreterTestPath 1dc80 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 1dc90 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 } error] == 1dca0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1dcb0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 1dcc0 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 interruptCallba 1dcd0 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20 ck.sqlite3.... 1dce0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
1dcf0 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20  nnel yes\n..
1dd00 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1dd10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 1dd20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " 1dd30 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c no, error: " \n\ 1dd40 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
1dd50 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
1dd60 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75  .    proc cleanu
1dd70 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65  pFile { fileName
1dd80 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20   {collect true}
1dd90 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20  {force false} }
1dda0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1ddb0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
1ddc0 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70  t to force all p
1ddd0 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22  ending "garbage"
1dde0 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63   objects to be c
1ddf0 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20  ollected,..
1de00 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69   #       includi
1de10 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d  ng SQLite statem
1de20 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20  ents and backup
1de30 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68  objects; this sh
1de40 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20  ould allow..
1de50 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e    #       the un
1de60 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73  derlying databas
1de70 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c  e file to be del
1de80 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  eted...      #..
1de90 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65        if {$colle 1dea0 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ct} then {.. 1deb0 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 collectGarba 1dec0 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ge$::test_chann
1ded0 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  el..      }....
1dee0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1def0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
1df00 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78  he file still ex
1df10 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ists...      #..
1df20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
1df30 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 1df40 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1df50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1df60 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 NOTE: Skip delet 1df70 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69 ing test files i 1df80 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20 f somebody sets 1df90 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 the global varia 1dfa0 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ble.. # 1dfb0 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20 to prevent 1dfc0 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. 1dfd0 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72 if {$for
1dfe0 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69  ce || ![info exi
1dff0 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70  sts ::no(cleanup
1e000 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  File)]} then {..
1e010 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1e020 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
1e030 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65  ttempt to delete
1e040 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e   the test file n
1e050 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ow...          #
1e060 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1e070 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68  [set code [catch
1e080 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f 1e090 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d ileName} error]] 1e0a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e0b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1e0c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 1e0d0 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 1e0e0 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c o delete the fil 1e0f0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 1e100 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1e110 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1e120 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1e130 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1e140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1e150 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1e160 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
1e170 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66  test file \"" $f 1e180 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. 1e190 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d 1e1a0 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 uring cleanup, e 1e1b0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1e1c0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
1e1d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
1e1e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1e1f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
1e200 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74   NOTE: Show that
1e210 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65   we skipped dele
1e220 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a  ting the file...
1e230 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1e240 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20         set code
1e250 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74  0....          t
1e260 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1e270 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1e280 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e290 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1e2a0 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e skipped deletin 1e2b0 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 g test file \"" 1e2c0 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
1e2d0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
1e2e0 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22  uring cleanup\n"
1e2f0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
1e300 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1e310 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1e320 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c   # NOTE: The fil
1e330 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  e does not exist
1e340 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20  , success!..
1e350 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
1e360 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20  et code 0..
1e370 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
1e380 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d  rn $code.. }. 1e390 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 .... proc cle 1e3a0 61 6e 75 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72 anupMemory { var 1e3b0 4e 61 6d 65 20 7b 71 75 69 65 74 20 66 61 6c 73 Name {quiet fals 1e3c0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 e} } {.. if 1e3d0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 1e3e0 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c ectCommand] && \ 1e3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 1e400 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
1e410 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
1e420 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1e430 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
1e440 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
1e450 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
1e460 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29  g. "connection")
1e470 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20   in the..
1e480 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
1e490 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20   of our caller.
1e4a0 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65   The opaque obje
1e4b0 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e  ct handle for an
1e4c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1e4d0 20 20 41 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63    ADO.NET connec
1e4e0 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20  tion previously
1e4f0 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74  returned by [get
1e500 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20  DbConnection]..
1e510 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
1e520 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20  hould be stored
1e530 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20  there...
1e540 23 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72  #..        upvar
1e550 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e   1 $varName conn 1e560 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 ection.... 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 6f 62 6a 65 63 74 object 1e590 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74 invoke$connect
1e5a0 69 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72  ion ReleaseMemor
1e5b0 79 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  y..        } res
1e5c0 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ult]} then {..
1e5d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 1e5e0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 1e5f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1e600 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1e610 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1e620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1e630 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1e640 6c 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 64  led to release d
1e650 61 74 61 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20  atabase memory,
1e660 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20  error: " \..
1e670 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74              \n\t
1e680 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 1e690 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1e6a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1e6b0 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e . if {[llen 1e6c0 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e gth [info comman 1e6d0 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20 ds debug]] > 0} 1e6e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1e6f0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 1e700 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 1e710 31 20 5b 6c 69 73 74 20 64 65 62 75 67 20 70 75 1 [list debug pu 1e720 72 67 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 rge].. } 1e730 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d result]} then {. 1e740 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1e750 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1e760 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1e770 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1e780 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1e790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1e7a0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1e7b0 66 61 69 6c 65 64 20 74 6f 20 70 75 72 67 65 20 failed to purge 1e7c0 63 61 6c 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f call frame, erro 1e7d0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. 1e7e0 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 \n\t$re
1e7f0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
1e800 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1e810 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
1e820 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1e830 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c      uplevel 1 [l
1e840 69 73 74 20 64 65 62 75 67 20 63 6c 65 61 6e 75  ist debug cleanu
1e850 70 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65  p]..        } re
1e860 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  sult]} then {..
1e870 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 1e880 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1e890 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1e8a0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1e8b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1e8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1e8d0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1e8e0 69 6c 65 64 20 74 6f 20 63 6c 65 61 6e 75 70 20  iled to cleanup
1e8f0 69 6e 74 65 72 70 72 65 74 65 72 2c 20 65 72 72  interpreter, err
1e900 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
1e910 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72           \n\t $r 1e920 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 esult \n].. 1e930 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1e940 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 1e950 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1e960 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 1e970 6c 69 73 74 20 64 65 62 75 67 20 63 6f 6c 6c 65 list debug colle 1e980 63 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 ct].. } r 1e990 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a esult]} then {.. 1e9a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
1e9b0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
1e9c0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1e9d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1e9e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1e9f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ea00 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1ea10 61 69 6c 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74 ailed to collect 1ea20 20 67 61 72 62 61 67 65 2c 20 65 72 72 6f 72 3a garbage, error: 1ea30 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 1ea40 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 \n\t$resu
1ea50 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1ea60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
1ea70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
1ea80 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75  ...    proc setu
1ea90 70 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20  pMemoryCounters
1eaa0 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20  { varName } {..
1eab0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
1eac0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
1ead0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
1eae0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 1eaf0 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a Name counter.... 1eb00 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e set coun 1eb10 74 65 72 28 31 29 20 5b 6f 62 6a 65 63 74 20 63 ter(1) [object c 1eb20 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a reate -alias \.. 1eb30 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 1eb40 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 em.Diagnostics.P 1eb50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65 erformanceCounte 1eb60 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20 r Process \.. 1eb70 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e "Workin 1eb80 67 20 53 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f g Set" [file roo 1eb90 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c tname [file tail 1eba0 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d$::bin_file]]].
1ebb0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
1ebc0 6f 75 6e 74 65 72 28 32 29 20 5b 6f 62 6a 65 63  ounter(2) [objec
1ebd0 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20  t create -alias
1ebe0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
1ebf0 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
1ec00 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75  s.PerformanceCou
1ec10 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a  nter Process \..
1ec20 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 72              "Wor
1ec30 6b 69 6e 67 20 53 65 74 20 50 65 61 6b 22 20 5b  king Set Peak" [
1ec40 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66  file rootname [f
1ec50 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f  ile tail $::bin_ 1ec60 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 file]]].... 1ec70 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 33 set counter(3 1ec80 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 ) [object create 1ec90 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 -alias \.. 1eca0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 System.Di 1ecb0 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 agnostics.Perfor 1ecc0 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f manceCounter Pro 1ecd0 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 cess \.. 1ece0 20 20 20 20 22 50 72 69 76 61 74 65 20 42 79 74 "Private Byt 1ecf0 65 73 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 es" [file rootna 1ed00 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a me [file tail$:
1ed10 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20  :bin_file]]]..
1ed20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
1ed30 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d  eturn ""..    }.
1ed40 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70  ....    proc rep
1ed50 6f 72 74 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72  ortMemoryCounter
1ed60 73 20 7b 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e  s { channel varN
1ed70 61 6d 65 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a  ame prefix } {..
1ed80 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1ed90 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1eda0 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nd]} then {..
1edb0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61       upvar 1 $va 1edc0 72 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d rName counter... 1edd0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1ede0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1edf0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1ee00 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66     "---- " $pref 1ee10 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22 ix " counter \"" 1ee20 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1ee30 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
1ee40 63 6f 75 6e 74 65 72 28 31 29 20 43 6f 75 6e 74  counter(1) Count
1ee50 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75  erName] "\" valu
1ee60 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20  e is " \..
1ee70 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e        [object in
1ee80 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29  voke $counter(1) 1ee90 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a RawValue] \n].. 1eea0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 1eeb0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
1eec0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1eed0 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65      "---- " $pre 1eee0 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 fix " counter \" 1eef0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1ef00 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 [object invoke 1ef10 24 63 6f 75 6e 74 65 72 28 32 29 20 43 6f 75 6e$counter(2) Coun
1ef20 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c  terName] "\" val
1ef30 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20  ue is " \..
1ef40 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69         [object i
1ef50 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32  nvoke $counter(2 1ef60 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d ) RawValue] \n]. 1ef70 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 1ef80 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1ef90 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1efa0 20 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72       "---- " $pr 1efb0 65 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c efix " counter \ 1efc0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1efd0 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 [object invoke 1efe0 20 24 63 6f 75 6e 74 65 72 28 33 29 20 43 6f 75$counter(3) Cou
1eff0 6e 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61  nterName] "\" va
1f000 6c 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20  lue is " \..
1f010 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object
1f020 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28  invoke $counter( 1f030 33 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 3) RawValue] \n] 1f040 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 1f050 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f ..... proc co 1f060 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 llectGarbage { c 1f070 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 hannel {millisec 1f080 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 onds 1000} {quie 1f090 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 t true} } {.. 1f0a0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 1f0b0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 1f0c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1f0d0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 1f0e0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 1f0f0 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f invoke GC GetTo 1f100 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d talMemory false. 1f110 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c . } resul 1f120 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 1f130 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 1f140 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
1f150 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1f160 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 1f170 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 1f180 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1f190 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 memory in use by 1f1a0 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 20 the CLR before 1f1b0 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 collection... " 1f1c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f1d0 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74$result " byt
1f1e0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
1f1f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65    }..        } e
1f200 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1f210 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1f220 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1f230 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
1f240 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1f250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f260 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
1f270 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52  ailed to get CLR
1f280 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65   memory usage, e
1f290 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
1f2a0 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20             \n\t
1f2b0 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 1f2c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1f2d0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 1f2e0 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 ########## 1f2f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 1f320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############. 1f330 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1f340 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 # NOTE: Repeat 1f350 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20 edly attempt to 1f360 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 20 collect garbage 1f370 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 until the allott 1f380 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 ed number.. 1f390 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c # of mill 1f3a0 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 iseconds has ela 1f3b0 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 61 74 psed. Always at 1f3c0 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 tempt to collect 1f3d0 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 20 20 garbage.. 1f3e0 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 73 74 # at least 1f3f0 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d once... #. 1f400 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 1f410 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 1f420 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 and]} then {.. 1f430 20 20 20 20 20 20 73 65 74 20 73 74 61 72 74 20 set start 1f440 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d [clock seconds]. 1f450 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 6f . set sto 1f460 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 20 p [expr {$start
1f470 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  + ($milliseconds 1f480 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 / 1000)}].... 1f490 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 do {.. 1f4a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f4b0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 1f4c0 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 75 pt to force a fu 1f4d0 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 ll garbage colle 1f4e0 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f ction now. Repo 1f4f0 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 rt any.. 1f500 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 # error 1f510 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 that is encounte 1f520 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d red if we fail.. 1f530 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1f540 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1f550 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1f560 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 1f570 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 GC GetTotalMemor 1f580 79 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 y true.. 1f590 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e } error]} then 1f5a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f5b0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1f5c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1f5d0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1f5e0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1f5f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f600 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1f610 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61 : failed full ga 1f620 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e rbage collection 1f630 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 , error: " \.. 1f640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f650 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1f660 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
1f670 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1f680 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 77           set now
1f690 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
1f6a0 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c  ..        } whil
1f6b0 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f  e {$start <=$no
1f6c0 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f  w && $now <$sto
1f6d0 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  p}..      }....
1f6e0 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23       ###########
1f6f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f700 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f710 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
1f720 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
1f730 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
1f740 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
1f750 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
1f760 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1f770 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
1f780 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20  bject invoke GC
1f790 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66  GetTotalMemory f
1f7a0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20  alse..        }
1f7b0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
1f7c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1f7d0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 1f7e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1f7f0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
1f800 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1f810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f820 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  ---- memory in u
1f830 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66  se by the CLR af
1f840 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e  ter collection..
1f850 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  . " \..
1f860 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22         $result " 1f870 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 1f880 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f890 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1f8a0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
1f8b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1f8c0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1f8d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1f8e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f8f0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1f900 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 G: failed to get 1f910 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67 CLR memory usag 1f920 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 e, error: " \.. 1f930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c \ 1f940 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
1f950 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
1f960 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1f970 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1f980 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61  proc getSQLiteHa
1f990 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61  ndleCounts { cha
1f9a0 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73  nnel {quiet fals
1f9b0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
1f9c0 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
1f9d0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  ...      if {[ha
1f9e0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1f9f0 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20  mmand] && \..
1fa00 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69         [haveSQLi
1fa10 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  teDefineConstant
1fa20 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20   COUNT_HANDLE]}
1fa30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fa40 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
1fa50 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 74  E: Add each crit
1fa60 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e  ical handle coun
1fa70 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69  t to the resulti
1fa80 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20  ng list...
1fa90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
1faa0 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20  each name [list
1fab0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  \..            c
1fac0 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73  onnectionCount s
1fad0 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61  tatementCount ba
1fae0 63 6b 75 70 43 6f 75 6e 74 20 62 6c 6f 62 43 6f  ckupCount blobCo
1faf0 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  unt] {..
1fb00 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1fb10 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65              obje
1fb20 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
1fb30 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
1fb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1fb50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1fb60 65 2e 44 65 62 75 67 44 61 74 61 20 24 6e 61 6d  e.DebugData $nam 1fb70 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 76 e.. } v 1fb80 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e alue] == 0} then 1fb90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1fba0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1fbb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1fbc0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 1fbd0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1fbe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1fbf0 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 "---- critica 1fc00 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c l handle count \ 1fc10 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 ""$name "\" is
1fc20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20  " $value \n].. 1fc30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1fc40 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 1fc50 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c 75 65 nd result$value
1fc60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
1fc70 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
1fc80 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1fc90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1fca0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
1fcb0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
1fcc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1fcd0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1fce0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65  NG: failed to ge
1fcf0 74 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c  t critical handl
1fd00 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20  e count \"" \..
1fd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1fd20 20 24 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f   $name "\", erro 1fd30 72 3a 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65 r: " \n\t$value
1fd40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1fd50 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1fd60 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1fd70 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71     } elseif {!$q 1fd80 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 1fd90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1fda0 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 # NOTE: The act 1fdb0 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 ual handle count 1fdc0 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 s are not availa 1fdd0 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 ble; therefore, 1fde0 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 just.. # 1fdf0 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 return an 1fe00 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 empty list... 1fe10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1fe20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
1fe30 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61  ---- critical ha
1fe40 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76  ndle counts unav
1fe50 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20  ailable\n"..
1fe60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
1fe70 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 1fe80 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1fe90 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b shutdownSQLite { 1fea0 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 channel {force 1feb0 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 false} {quiet fa 1fec0 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 1fed0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1fee0 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 Make sure that 1fef0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 1ff00 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c ary is completel 1ff10 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 y shutdown. Thi 1ff20 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 1ff30 20 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74 is used by test 1ff40 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f s that change co 1ff50 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 nfiguration opti 1ff60 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 ons and/or those 1ff70 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1ff80 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b that need to mak 1ff90 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 e sure logging i 1ffa0 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 s initialized (i 1ffb0 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 .e. just in case 1ffc0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1ffd0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core 1ffe0 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 library was init 1fff0 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 ialized in the p 20000 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d rocess prior to. 20010 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 20020 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 he SQLiteLog cla 20030 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f ss being able to 20040 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 setup its loggi 20050 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 ng callback)... 20060 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 # Nor 20070 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 mally, this shou 20080 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f ld only be perfo 20090 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 rmed if SQLite i 200a0 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 s loaded and.. 200b0 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64 # read 200c0 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the 200d0 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 200e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 200f0 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 {$force || [isSQ
20100 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e  LiteReady]} then
20110 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
20120 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a         # BUGFIX:
20130 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that
20140 61 6e 79 20 22 6c 65 61 6b 65 64 22 20 74 72 61  any "leaked" tra
20150 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72  nsactions and/or
20160 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20   connections..
20170 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
20180 61 72 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62  are cleaned up b
20190 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68  efore calling th
201a0 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77  e native shutdow
201b0 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20  n function...
201c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
201d0 66 6f 72 65 61 63 68 20 74 72 61 6e 73 61 63 74  foreach transact
201e0 69 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61  ion [info transa
201f0 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20  ctions] {..
20200 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
20210 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20   match \..
20220 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44          System#D
20230 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74  ata#SQLite#SQLit
20240 65 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24  eTransaction#* $20250 74 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 transaction]} th 20260 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20270 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 20280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 20290 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f l transaction ro 202a0 6c 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74 llback$transact
202b0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ion..
202c0 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20   } error] == 0}
202d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
202e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 202f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 20300 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20310 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
20320 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
20330 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
20340 2d 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c  -- rolled back l
20350 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f  eaked transactio
20360 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  n \"" \..
20370 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72               $tr 20380 61 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d ansaction \"\n]. 20390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 203a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 203b0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 203c0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
203d0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
203e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
203f0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 20400 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 20410 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 20420 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 20430 65 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c ed to rollback l 20440 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f eaked transactio 20450 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 n \"" \.. 20460 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72$tr
20470 61 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65  ansaction "\", e
20480 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 20490 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 204a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 204b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 204c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 204d0 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 ... forea 204e0 63 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e ch db [info conn 204f0 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 ections] {.. 20500 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 20510 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 g match \.. 20520 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 System# 20530 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 Data#SQLite#SQLi 20540 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 teConnection#*$
20550 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  db]} then {..
20560 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
20570 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24  tch {sql close $20580 64 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d db} error] == 0} 20590 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 205a0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
205b0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
205c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
205d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 205e0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 205f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 20600 2d 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 --- closed leake 20610 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 d database \""$
20620 64 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  db \"\n]..
20630 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
20640 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
20650 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
20660 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 20670 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 20680 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
20690 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
206a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
206b0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
206c0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63  ING: failed to c
206d0 6c 6f 73 65 20 6c 65 61 6b 65 64 20 64 61 74 61  lose leaked data
206e0 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  base \"" \..
206f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20700 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20  $db "\", error: 20710 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
20720 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
20730 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
20740 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
20750 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20760 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
20770 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65  # BUGFIX: Before
20780 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74   calling the nat
20790 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e  ive shutdown fun
207a0 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65  ction, make sure
207b0 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23   both..        #
207c0 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20           of the
207d0 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64  PRAGMA related d
207e0 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61  irectory names a
207f0 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20  re freed...
20800 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
20810 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
20820 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c  ctories $channel 20830 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... 20840 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 20850 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 20860 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 20870 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 20880 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 20890 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 .Data.SQLite.Uns 208a0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 afeNativeMethods 208b0 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 sqlite3_shutdow 208c0 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 n.. } res 208d0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 208e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 208f0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
20900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
20910 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 20920 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 20930 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20940 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 - call sqlite3_s 20950 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a hutdown()... ok: 20960 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a "$result \n]..
20970 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
20980 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
20990 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 209a0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 209b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 209c0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
209d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
209e0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61          "---- ca
209f0 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64  ll sqlite3_shutd
20a00 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20  own()... error:
20a10 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ 20a20 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 20a30 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 20a40 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 20a50 20 20 20 70 72 6f 63 20 67 65 74 53 65 74 74 69 proc getSetti 20a60 6e 67 52 65 61 64 43 6f 75 6e 74 20 7b 20 6e 61 ngReadCount { na 20a70 6d 65 20 7b 76 69 61 46 69 6c 65 20 66 61 6c 73 me {viaFile fals 20a80 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 e} } {.. if 20a90 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e {[haveConstrain 20aa0 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 t buildConfigura 20ab0 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b tion.Debug] && [ 20ac0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 20ad0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 20ae0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 20af0 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 -alias \.. 20b00 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 20b10 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 ta.SQLite.DebugD 20b20 61 74 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 ata GetSettingRe 20b30 61 64 43 6f 75 6e 74 73 20 24 76 69 61 46 69 6c adCounts$viaFil
20b40 65 0d 0a 20 20 20 20 20 20 7d 20 73 65 74 74 69  e..      } setti
20b50 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d  ngReadCounts] ==
20b60 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
20b70 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
20b80 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20  length $name] > 20b90 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 20ba0 20 20 20 20 20 69 66 20 7b 5b 24 73 65 74 74 69 if {[$setti
20bb0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 54 72 79  ngReadCounts Try
20bc0 47 65 74 56 61 6c 75 65 20 24 6e 61 6d 65 20 76  GetValue $name v 20bd0 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 alue]} then {.. 20be0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20bf0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
20c00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
20c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20c20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22  "---- setting \"
20c30 22 20 24 6e 61 6d 65 20 22 5c 22 20 77 61 73 20  " $name "\" was 20c40 72 65 61 64 20 22 20 24 76 61 6c 75 65 20 22 20 read "$value "
20c50 74 69 6d 65 73 22 20 5c 0d 0a 20 20 20 20 20 20  times" \..
20c60 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
20c70 7b 24 76 69 61 46 69 6c 65 20 3f 20 22 20 66 72  {$viaFile ? " fr 20c80 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 om the configura 20c90 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d tion file" : ""} 20ca0 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 20cb0 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c return$val
20cc0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ue..          }.
20cd0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
20ce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
20cf0 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74   nameCount [$set 20d00 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 tingReadCounts C 20d10 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 ount].. 20d20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 set valueCount 20d30 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 0.... o 20d40 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 bject foreach -a 20d50 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69 lias pair$setti
20d60 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a  ngReadCounts {..
20d70 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72              incr
20d80 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61   valueCount [$pa 20d90 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 ir Value].... 20da0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
20db0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
20dc0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
20dd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
20de0 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20  --- setting \""
20df0 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20  [$pair Key] "\" 20e00 77 61 73 20 72 65 61 64 20 22 20 5b 24 70 61 69 was read " [$pai
20e10 72 20 56 61 6c 75 65 5d 20 5c 0d 0a 20 20 20 20  r Value] \..
20e20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 74 69              " ti
20e30 6d 65 73 22 20 5b 65 78 70 72 20 7b 24 76 69 61  mes" [expr {$via 20e40 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 68 File ? " from th 20e50 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 e configuration 20e60 66 69 6c 65 22 20 3a 20 5c 0d 0a 20 20 20 20 20 file" : \.. 20e70 20 20 20 20 20 20 20 20 20 20 20 22 22 7d 5d 20 ""}] 20e80 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 20e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 .... re 20ea0 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65 turn [list$name
20eb0 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e  Count $valueCoun 20ec0 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 t].. }.. 20ed0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 20ee0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 20ef0 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 th$name] > 0} t
20f00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
20f10 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 20f20 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 20f30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20f40 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 "---- setting \" 20f50 22 20 24 6e 61 6d 65 20 22 5c 22 20 77 61 73 20 "$name "\" was
20f60 6e 6f 74 20 72 65 61 64 22 20 5b 65 78 70 72 20  not read" [expr
20f70 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20  {$viaFile ? \.. 20f80 20 20 20 20 20 20 20 20 20 20 20 22 20 66 72 6f " fro 20f90 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 m the configurat 20fa0 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d ion file" : ""}] 20fb0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c \n].. } el 20fc0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp 20fd0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
20fe0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
20ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
21000 2d 2d 2d 2d 20 6e 6f 20 73 65 74 74 69 6e 67 73  ---- no settings
21010 20 77 65 72 65 20 72 65 61 64 22 20 5b 65 78 70   were read" [exp
21020 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d  r {$viaFile ? \. 21030 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 20 66 . " f 21040 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 rom the configur 21050 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 ation file" : "" 21060 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d }] \n].. }. 21070 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 21080 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 -1.. }..... 21090 20 20 70 72 6f 63 20 67 65 74 4f 74 68 65 72 43 proc getOtherC 210a0 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d ount { name } {. 210b0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 210c0 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 Constraint build 210d0 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 Configuration.De 210e0 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b bug] && [catch { 210f0 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 .. object 21100 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 21110 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 NonPublic -alias 21120 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21130 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 21140 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 te.DebugData Get 21150 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20 OtherCounts.. 21160 20 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 } otherCounts 21170 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 21180 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 21190 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 ing length$name
211a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
211b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 24 6f           if {[$o 211c0 74 68 65 72 43 6f 75 6e 74 73 20 54 72 79 47 65 therCounts TryGe 211d0 74 56 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c tValue$name val
211e0 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ue]} then {..
211f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $21200 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 21210 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 21220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 21230 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 --- other counte 21240 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 r \""$name "\"
21250 68 61 73 20 76 61 6c 75 65 20 22 20 24 76 61 6c  has value " $val 21260 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ue \n].... 21270 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 return$va
21280 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  lue..          }
21290 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
212a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
212b0 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 6f 74  t nameCount [$ot 212c0 68 65 72 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d herCounts Count] 212d0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 212e0 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a valueCount 0.... 212f0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 21300 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 foreach -alias 21310 70 61 69 72 20 24 6f 74 68 65 72 43 6f 75 6e 74 pair$otherCount
21320 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
21330 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74   incr valueCount
21340 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a   [$pair Value].. 21350 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 21360 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
21370 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
21380 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21390 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63     "---- other c
213a0 6f 75 6e 74 65 72 20 5c 22 22 20 5b 24 70 61 69  ounter \"" [$pai 213b0 72 20 4b 65 79 5d 20 22 5c 22 20 68 61 73 20 76 r Key] "\" has v 213c0 61 6c 75 65 20 22 20 5c 0d 0a 20 20 20 20 20 20 alue " \.. 213d0 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72 [$pair
213e0 20 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20   Value] \n]..
213f0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
21400 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
21410 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 24 76  st $nameCount$v
21420 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20 20 20  alueCount]..
21430 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
21440 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
21450 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65  ing length $name 21460 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 21470 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
21480 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
21490 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
214a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74          "---- ot
214b0 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20  her counter \""
214c0 24 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 6e 6f  $name "\" has no 214d0 20 76 61 6c 75 65 5c 6e 22 5d 0d 0a 20 20 20 20 value\n"].. 214e0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 214f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
21500 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20  t_channel "----
21510 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68  there are no oth
21520 65 72 20 63 6f 75 6e 74 65 72 73 5c 6e 22 0d 0a  er counters\n"..
21530 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
21540 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 20 20   return -1..
21550 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
21560 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75  eportSQLiteResou
21570 72 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  rces {..
21580 20 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69      channel {qui
21590 65 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74  et false} {reset
215a0 20 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20   true} {collect
215b0 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
215c0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
215d0 3a 20 49 66 20 70 6f 73 73 69 62 6c 65 2c 20 61  : If possible, a
215e0 6c 77 61 79 73 20 72 65 73 65 74 20 74 68 65 20  lways reset the
215f0 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 20  cached assembly
21600 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
21610 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65   #       and the
21620 20 63 61 63 68 65 64 20 58 4d 4c 20 63 6f 6e 66   cached XML conf
21630 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 20 6e  iguration file n
21640 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ame...      #..
21650 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
21660 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
21670 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
21680 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
21690 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
216a0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
216b0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
216c0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
216d0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
216e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
216f0 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
21700 20 20 20 20 20 52 65 73 65 74 43 61 63 68 65 64       ResetCached
21710 41 73 73 65 6d 62 6c 79 44 69 72 65 63 74 6f 72  AssemblyDirector
21720 79 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72  y..        } err
21730 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
21740 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
21750 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 21760 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 21770 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
21780 2d 20 72 65 73 65 74 20 63 61 63 68 65 64 20 61  - reset cached a
21790 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72  ssembly director
217a0 79 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20  y\n"..
217b0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
217c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  e {..          i
217d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 217e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 217f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
21800 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
21810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
21820 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
21830 6c 65 64 20 74 6f 20 72 65 73 65 74 20 63 61 63  led to reset cac
21840 68 65 64 20 61 73 73 65 6d 62 6c 79 20 64 69 72  hed assembly dir
21850 65 63 74 6f 72 79 2c 20 22 20 5c 0d 0a 20 20 20  ectory, " \..
21860 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 72               "er
21870 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 21880 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 21890 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 218a0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 218b0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 218c0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 218d0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 218e0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 218f0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 21900 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 21910 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 21920 20 20 20 20 20 20 20 20 20 20 20 52 65 73 65 74 Reset 21930 43 61 63 68 65 64 58 6d 6c 43 6f 6e 66 69 67 46 CachedXmlConfigF 21940 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName.. 21950 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 } error] == 0} 21960 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21970 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
21980 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21990 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 219a0 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 63 61 l "---- reset ca 219b0 63 68 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 ched XML configu 219c0 72 61 74 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65 ration file name 219d0 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n".. } 219e0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 219f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 21a00 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
21a10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
21a20 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 21a30 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 21a40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 21a50 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 21a60 65 64 20 74 6f 20 72 65 73 65 74 20 63 61 63 68 ed to reset cach 21a70 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 ed XML configura 21a80 74 69 6f 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20 tion " \.. 21a90 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65 20 "file 21aa0 6e 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c name, error: " \ 21ab0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
21ac0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
21ad0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
21ae0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
21af0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61    # NOTE: If ava
21b00 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f  ilable, report o
21b10 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20  n (and possibly
21b20 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74 69  reset) the runti
21b30 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  me..      #
21b40 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    configuration
21b50 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20  statistics...
21b60 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
21b70 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
21b80 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a  tCommand] && \..
21b90 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43            [haveC
21ba0 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43  onstraint buildC
21bb0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62  onfiguration.Deb
21bc0 75 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ug]} then {..
21bd0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
21be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
21bf0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
21c00 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c  s +NonPublic -al
21c10 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
21c20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
21c30 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74  .SQLite.DebugDat
21c40 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 61 64  a GetSettingRead
21c50 43 6f 75 6e 74 73 20 66 61 6c 73 65 0d 0a 20 20  Counts false..
21c60 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52        } settingR
21c70 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d  eadCounts] == 0}
21c80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21c90 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74     set nameCount
21ca0 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f   [$settingReadCo 21cb0 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 unts Count].. 21cc0 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 set value 21cd0 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 Count 0.... 21ce0 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 object fore 21cf0 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 ach -alias pair 21d00 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e$settingReadCoun
21d10 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ts {..
21d20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e    incr valueCoun
21d30 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d  t [$pair Value]. 21d40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 21d50 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
21d60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21d70 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 21d80 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 21d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21da0 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 "---- setting 21db0 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 \"" [$pair Key]
21dc0 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c  "\" was read " \
21dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21de0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65      [$pair Value 21df0 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20 ] " times\n"].. 21e00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 21e10 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 21e20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 if {$rese
21e30 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
21e40 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
21e50 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
21e60 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
21e70 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
21e80 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  ic -alias \..
21e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
21ea0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
21eb0 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 61  e.DebugData Clea
21ec0 72 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  rSettingReadCoun
21ed0 74 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ts false..
21ee0 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d        } error] =
21ef0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
21f00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
21f10 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 21f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21f30 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
21f40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
21f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21f60 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65    "---- reset se
21f70 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73  tting statistics
21f80 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75   for the previou
21f90 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  s " \..
21fa0 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65             $name 21fb0 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e Count " names an 21fc0 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 d "$valueCount
21fd0 22 20 76 61 6c 75 65 73 20 72 65 61 64 5c 6e 22  " values read\n"
21fe0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
21ff0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
22000 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
22010 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 22020 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 22030 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 22040 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
22050 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
22060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
22070 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
22080 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 73 65  iled to reset se
22090 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73  tting statistics
220a0 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20   for " \..
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74                "t
220c0 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e  he previous " $n 220d0 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 ameCount " names 220e0 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 and "$valueCou
220f0 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  nt \..
22100 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75            " valu
22110 65 73 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20  es read, error:
22120 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 22130 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 22140 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 22150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 22160 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 22170 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 22180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 22190 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 221a0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c s +NonPublic -al 221b0 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ias \.. 221c0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 221d0 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 .SQLite.DebugDat 221e0 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 61 64 a GetSettingRead 221f0 43 6f 75 6e 74 73 20 74 72 75 65 0d 0a 20 20 20 Counts true.. 22200 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 46 69 } settingFi 22210 6c 65 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d leReadCounts] == 22220 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 22230 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 22240 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 46 69 6c unt [$settingFil
22250 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e  eReadCounts Coun
22260 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  t]..          se
22270 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a  t valueCount 0..
22280 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
22290 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
222a0 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 46  s pair $settingF 222b0 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d ileReadCounts {. 222c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 . inc 222d0 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 r valueCount [$p
222e0 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20  air Value]....
222f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$22300 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 22310 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 22320 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
22330 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
22340 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
22350 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b  -- setting \"" [
22360 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77  $pair Key] "\" w 22370 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 as read " \.. 22380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 22390 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74$pair Value] " t
223a0 69 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f  imes from the co
223b0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
223c0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
223d0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
223e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
223f0 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 22400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 22410 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 22420 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 22430 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 22440 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 NonPublic -alias 22450 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22460 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 22470 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 a.SQLite.DebugDa 22480 74 61 20 43 6c 65 61 72 53 65 74 74 69 6e 67 52 ta ClearSettingR 22490 65 61 64 43 6f 75 6e 74 73 20 74 72 75 65 0d 0a eadCounts true.. 224a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 } er 224b0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 224c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 224d0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
224e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
224f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 22500 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22520 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 "---- re 22530 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 set setting stat 22540 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70 istics for the p 22550 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20 revious " \.. 22560 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22570 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61$nameCount " na
22580 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65  mes and " $value 22590 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72 Count " values r 225a0 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ead " \.. 225b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72 "fr 225c0 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 om the configura 225d0 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 tion file\n"].. 225e0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 225f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 22600 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 22610 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
22620 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
22630 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $22640 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 22650 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 22660 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 22670 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 22680 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e to reset settin 22690 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72 g statistics for 226a0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 226b0 20 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70 "the p 226c0 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 revious "$nameC
226d0 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64  ount " names and
226e0 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c   " $valueCount \ 226f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22700 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 20 72 " values r 22710 65 61 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e ead from the con 22720 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 2c figuration file, 22730 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c error: " \n\t \ 22740 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 22750 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d$error \n]
22760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22770 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
22780 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
22790 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
227a0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
227b0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
227c0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
227d0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69   +NonPublic -ali
227e0 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  as \..
227f0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
22800 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61  SQLite.DebugData
22810 20 47 65 74 4f 74 68 65 72 43 6f 75 6e 74 73 0d   GetOtherCounts.
22820 0a 20 20 20 20 20 20 20 20 7d 20 6f 74 68 65 72  .        } other
22830 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68  Counts] == 0} th
22840 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22850 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24  set nameCount [$22860 6f 74 68 65 72 43 6f 75 6e 74 73 20 43 6f 75 6e otherCounts Coun 22870 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 t].. se 22880 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a t valueCount 0.. 22890 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 228a0 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 ct foreach -alia 228b0 73 20 70 61 69 72 20 24 6f 74 68 65 72 43 6f 75 s pair$otherCou
228c0 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  nts {..
228d0 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75     incr valueCou
228e0 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d  nt [$pair Value] 228f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 22900 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
22910 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
22920 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 22930 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 22940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22950 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 "---- other c 22960 6f 75 6e 74 65 72 20 5c 22 22 20 5b 24 70 61 69 ounter \"" [$pai
22970 72 20 4b 65 79 5d 20 22 5c 22 20 68 61 73 20 76  r Key] "\" has v
22980 61 6c 75 65 20 22 20 5c 0d 0a 20 20 20 20 20 20  alue " \..
22990 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61              [$pa 229a0 69 72 20 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 ir Value] \n].. 229b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 229c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 229d0 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 if {$rese
229e0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
229f0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
22a00 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
22a10 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
22a20 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
22a30 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20  ic -alias \..
22a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
22a50 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
22a60 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 61  e.DebugData Clea
22a70 72 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20  rOtherCounts..
22a80 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f            } erro
22a90 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  r] == 0} then {.
22aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
22ab0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 22ac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 22ad0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
22ae0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
22af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22b00 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65        "---- rese
22b10 74 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 73  t other counters
22b20 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75   for the previou
22b30 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  s " \..
22b40 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65             $name 22b50 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e Count " names an 22b60 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 d "$valueCount
22b70 22 20 76 61 6c 75 65 73 5c 6e 22 5d 0d 0a 20 20  " values\n"]..
22b80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
22b90 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
22ba0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
22bb0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 22bc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 22bd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
22be0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
22bf0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
22c00 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
22c10 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
22c20 74 6f 20 72 65 73 65 74 20 6f 74 68 65 72 20 63  to reset other c
22c30 6f 75 6e 74 65 72 73 20 66 6f 72 20 22 20 5c 0d  ounters for " \.
22c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
22c50 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f       "the previo
22c60 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20  us " $nameCount 22c70 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 " names and "$v
22c80 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20  alueCount \..
22c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
22ca0 20 22 20 76 61 6c 75 65 73 2c 20 65 72 72 6f 72   " values, error
22cb0 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 22cc0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 22cd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 22ce0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 22cf0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 22d00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 22d10 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 22d20 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c ectCommand] && \ 22d30 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 .. [hav 22d40 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e eSQLiteDefineCon 22d50 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 56 49 stant INTEROP_VI 22d60 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20 RTUAL_TABLE] && 22d70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 \.. [ha 22d80 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f veSQLiteDefineCo 22d90 6e 73 74 61 6e 74 20 54 52 41 43 4b 5f 4d 45 4d nstant TRACK_MEM 22da0 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e ORY_BYTES]} then 22db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 22dc0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
22dd0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
22de0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 22df0 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 22e00 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 22e10 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 22e20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 22e30 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 22e40 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 22e50 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 22e60 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 22e70 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 22e80 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 22e90 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 41 iteMemory bytesA 22ea0 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 llocated.. 22eb0 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 } memory] == 0 22ec0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22ed0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
22ee0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
22ef0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 22f00 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22f10 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c$memory " bytes\
22f20 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
22f30 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
22f40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
22f50 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
22f60 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
22f70 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 22f80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 22f90 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
22fa0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 22fb0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 22fc0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 22fd0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
22fe0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
22ff0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 23000 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 hannel "---- max 23010 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 imum memory in u 23020 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f se by SQLiteMemo 23030 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 ry... ".. 23040 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 23050 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 23060 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 23070 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 23080 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 23090 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 230a0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 230b0 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79 Memory maximumBy 230c0 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 tesAllocated.. 230d0 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 } memory] 230e0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 230f0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
23100 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
23110 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $23120 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 23130 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 rgs$memory " by
23140 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  tes\n"]..
23150 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
23160 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
23170 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b    set memory unk
23180 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nown....
23190 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 231a0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 231b0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
231c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 231d0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 emory \n].. 231e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 231f0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 23200 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
23210 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23220 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 23230 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 "---- current me 23240 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 mory in use by S 23250 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 QLite... ".. 23260 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 }.... if 23270 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 23280 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 23290 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 232a0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 232b0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 232c0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 232d0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 232e0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 232f0 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 23300 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 tiveMethods sqli 23310 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d te3_memory_used. 23320 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 23330 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 23340 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 23350 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
23360 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
23370 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 23380 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 ndArgs$memory "
23390 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
233a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
233b0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
233c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
233d0 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20    # NOTE: Maybe
233e0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
233f0 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61  library is unava
23400 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20  ilable?..
23410 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
23420 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
23430 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
23440 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 23450 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 23460 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
23470 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 23480 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 23490 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 234a0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 234b0 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d . set mem 234c0 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d ory unavailable. 234d0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 234e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
234f0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
23500 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 23510 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
23520 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
23530 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
23540 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79  t result $memory 23550 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e ; # NOTE: Return 23560 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 memory in-use t 23570 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d o our caller.... 23580 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 . if {!$qui
23590 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
235a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 235b0 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d el "---- maximum 235c0 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 memory in use b 235d0 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 y SQLite... ".. 235e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 235f0 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 23600 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 23610 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 23620 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 23630 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 23640 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 23650 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 23660 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 23670 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 23680 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 23690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 236a0 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 sqlite3_memory_h 236b0 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 20 20 ighwater 0.. 236c0 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d } memory] == 236d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 236e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
236f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
23700 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 23710 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 23720 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
23730 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
23740 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
23750 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
23760 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
23770 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53  OTE: Maybe the S
23780 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
23790 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c  ry is unavailabl
237a0 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e?..          #.
237b0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d  .          set m
237c0 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d  emory unknown...
237d0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
237e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 237f0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 23800 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
23810 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 23820 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 23830 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 23840 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 23850 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 set memory u 23860 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 navailable.... 23870 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
23880 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
23890 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 238a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 238b0 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20$memory \n]..
238c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
238d0 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f  ...      if {$co 238e0 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 llect} then {.. 238f0 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 collectGa 23900 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a rbage$channel..
23910 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
23920 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 23930 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp 23940 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d uts$channel "--
23950 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72  -- current memor
23960 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20  y in use by the
23970 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20  CLR... "..
23980 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
23990 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
239a0 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
239b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
239c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
239d0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
239e0 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
239f0 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  y false..
23a00 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d   } memory] == 0}
23a10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
23a20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69     if {[string i
23a30 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63  s integer -stric
23a40 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e  t $memory]} then 23a50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 23a60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
23a70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
23a80 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 23a90 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
23aa0 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
23ab0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
23ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
23ad0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
23ae0 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76    set memory inv
23af0 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20  alid....
23b00 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 23b10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 23b20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
23b30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
23b40 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 23b50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 23b60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 23b70 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 23b80 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 23b90 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 23ba0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
23bb0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
23bc0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 23bd0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 23be0 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
23bf0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
23c00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
23c10 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
23c20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61  set memory unava
23c30 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  ilable....
23c40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 23c50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 23c60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
23c70 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 23c80 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 23c90 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 23ca0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
23cb0 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
23cc0 20 20 20 70 72 6f 63 20 72 65 73 65 74 53 51 4c     proc resetSQL
23cd0 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b  iteDirectories {
23ce0 20 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 20   channel native
23cf0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
23d00 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
23d10 6d 70 74 20 74 6f 20 75 73 65 20 74 68 65 20 6e  mpt to use the n
23d20 61 74 69 76 65 20 41 50 49 20 28 76 69 61 20 74  ative API (via t
23d30 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  he managed assem
23d40 62 6c 79 29 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  bly)?..      #..
23d50 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76        if {$nativ 23d60 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 23d70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 23d80 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73 NOTE: Now make s 23d90 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65 ure the database 23da0 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 23db0 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a irectories are.. 23dc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 23dd0 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61 reset their defa 23de0 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 ult values, whic 23df0 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c h should be null 23e00 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 for both... 23e10 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 # Sinc 23e20 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 e the sqlite3_wi 23e30 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 23e40 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 y function is av 23e50 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 ailable,.. 23e60 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 # use it 23e70 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 23e80 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 for {set i 23e90 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20 ndex 1} {$index
23ea0 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78  < 3} {incr index
23eb0 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  } {..          i
23ec0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
23ed0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
23ee0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
23ef0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
23f00 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
23f10 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
23f20 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
23f30 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
23f40 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69        sqlite3_wi
23f50 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
23f60 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20  y $index null.. 23f70 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c } resul 23f80 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d t] == 0} then {. 23f90 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 23fa0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
23fb0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
23fc0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
23fd0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69   call sqlite3_wi
23fe0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
23ff0 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20  y(" $index \.. 24000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c ", 24010 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 null)... ok: " 24020 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
24030 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
24040 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
24050 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 24060 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 24070 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 24080 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi 24090 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 240a0 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
240b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
240c0 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a   null)... error:
240d0 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20   " \n\t $result 240e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 240f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 24100 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 24110 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24120 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 # NOTE: Now make 24130 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61 sure the databa 24140 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 24150 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 directories are 24160 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 24170 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65 reset their de 24180 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 fault values, wh 24190 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 ich should be nu 241a0 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 ll for both... 241b0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69 # Si 241c0 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f nce the sqlite3_ 241d0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 241e0 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 ory function doe 241f0 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 s not.. # 24200 20 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f appear to 24210 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 be available, u 24220 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 se the associate 24230 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 d PRAGMA command 24240 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 24250 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 instead... 24260 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24270 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72 foreach director 24280 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f y [list data_sto 24290 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d re_directory tem 242a0 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 p_store_director 242b0 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 y] {.. 242c0 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 set sql [appendA 242d0 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 rgs "PRAGMA "$d
242e0 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c  irectory " = \"\
242f0 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ";"]....
24300 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78    if {[catch {ex
24310 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72  ecuteSql $sql} r 24320 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 24330 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 24340 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
24350 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
24360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
24370 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41  ---- execute PRA
24380 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79  GMA " $directory 24390 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d "... ok: \"" \. 243a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 243b0 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a$result \"\n]..
243c0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
243d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
243e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 243f0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 24400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 24410 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 --- execute PRAG 24420 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 MA "$directory
24430 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d  "... error: " \.
24440 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
24450 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e   \n\t $result \n 24460 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 24470 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 24480 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 24490 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS 244a0 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 244b0 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65 { channel {rese 244c0 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 244d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 244e0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 244f0 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f e sqlite3_win32_ 24500 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 set_directory fu 24510 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 nction is availa 24520 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ble... #.. 24530 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
24540 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
24550 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
24560 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c  for function sql
24570 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
24580 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d  irectory... "...
24590 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
245a0 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c  # NOTE: This cal
245b0 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33  l to the sqlite3
245c0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
245d0 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73  tory function us
245e0 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  es the..      #
245f0 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61        invalid va
24600 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20 66 69  lue 0 for the fi
24610 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54  rst argument.  T
24620 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73 69  his code is desi
24630 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20  gned..      #
24640 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20      to check if
24650 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63  calling the func
24660 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20  tion will raise
24670 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e  an exception (i.
24680 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  e...      #
24690 20 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 73    the actual res
246a0 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ult of the funct
246b0 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  ion does not mat
246c0 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e  ter as long as n
246d0 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  o..      #
246e0 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68   directory is ch
246f0 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23  anged)...      #
24700 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 57  ..      if {[isW
24710 69 6e 64 6f 77 73 5d 20 26 26 20 5b 63 61 74 63  indows] && [catc
24720 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
24730 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
24740 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
24750 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
24760 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
24770 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
24780 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
24790 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f    sqlite3_win32_
247a0 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20  set_directory 0
247b0 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  null..      }] =
247c0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
247d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
247e0 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20  # NOTE: Calling
247f0 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33  the sqlite3_win3
24800 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20  2_set_directory
24810 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f  function does no
24820 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
24830 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65     cause an exce
24840 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65  ption; therefore
24850 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61  , it must be ava
24860 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20  ilable (i.e...
24870 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76        #       ev
24880 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f  en though it sho
24890 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 69  uld return a fai
248a0 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65  lure return code
248b0 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20   in this..
248c0 20 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e    #       case).
248d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
248e0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
248f0 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32  nt sqlite3_win32
24900 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a  _set_directory..
24910 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
24920 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. 24930 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 24940 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 # NOTE: Doe 24950 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e s our caller wan 24960 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 t to reset the d 24970 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20 irectories?.. 24980 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24990 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e if {$reset} then
249a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65   {..          re
249b0 73 65 74 53 51 4c 69 74 65 44 69 72 65 63 74 6f  setSQLiteDirecto
249c0 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72  ries $channel tr 249d0 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 ue.. }.. 249e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 249f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
24a00 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20  annel no\n....
24a10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
24a20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
24a30 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
24a40 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
24a50 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61  tories?  This ca
24a60 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  n only..
24a70 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f  #       be perfo
24a80 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  rmed if SQLite i
24a90 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61  s loaded and rea
24aa0 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
24ab0 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20  e test..
24ac0 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a  #       suite...
24ad0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
24ae0 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26     if {$reset && 24af0 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d [isSQLiteReady] 24b00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 24b10 20 20 20 20 72 65 73 65 74 53 51 4c 69 74 65 44 resetSQLiteD 24b20 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e irectories$chan
24b30 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  nel false..
24b40 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
24b50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
24b60 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c  # NOTE: Finally,
24b70 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e   show the curren
24b80 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  t value of the d
24b90 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70  atabase and temp
24ba0 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  orary..      #
24bb0 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 73       directories
24bc0 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79  .  This can only
24bd0 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66   be performed if
24be0 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65   SQLite is loade
24bf0 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
24c00 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
24c10 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
24c20 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  uite...      #..
24c30 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c        if {[isSQL
24c40 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20  iteReady]} then
24c50 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  {..        forea
24c60 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69  ch directory [li
24c70 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  st data_store_di
24c80 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f  rectory temp_sto
24c90 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d  re_directory] {.
24ca0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
24cb0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 24cc0 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63 dArgs "---- chec 24cd0 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72 king "$director
24ce0 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  y "... "]....
24cf0 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b         set sql [
24d00 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47  appendArgs "PRAG
24d10 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  MA " $directory 24d20 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \;].... 24d30 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65 if {[catch {exe 24d40 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61 cuteSql$sql sca
24d50 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20  lar} result] ==
24d60 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
24d70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 24d80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 24d90 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75 s "ok: \""$resu
24da0 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  lt \"\n]..
24db0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
24dc0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
24dd0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 24de0 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c Args "error: " \ 24df0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d n\t$result \n].
24e00 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
24e10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
24e20 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
24e30 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54  proc loadSQLiteT
24e40 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68  estSettings { ch
24e50 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22  annel {suffix ""
24e60 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20  } {quiet false}
24e70 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
24e80 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
24e90 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74   loading the set
24ea0 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 75  tings if their u
24eb0 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 69  sage has been di
24ec0 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23  sabled...      #
24ed0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
24ee0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73  fo exists ::no(s
24ef0 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67  qliteTestSetting
24f00 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
24f10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
24f20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73  # NOTE: Load cus
24f30 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64  tom per-user and
24f40 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73  /or per-host tes
24f50 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d  t settings now..
24f60 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
24f70 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
24f80 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66  ists ::tcl_platf
24f90 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e  orm(user)]} then
24fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
24fb0 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 69  t userSettingsFi
24fc0 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  leName [file joi
24fd0 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65  n [getCommonDire
24fe0 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20  ctory] \..
24ff0 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41          [appendA
25000 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75  rgs settings $su 25010 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c ffix .$::tcl_pl
25020 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61  atform(user) .ea
25030 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  gle]]....
25040 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
25050 73 74 73 20 24 75 73 65 72 53 65 74 74 69 6e 67  sts $userSetting 25060 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e sFileName]} then 25070 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25080 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
25090 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
250a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 250b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 250c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 250d0 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 "---- loading 250e0 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 per-user test s 250f0 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 ettings file \"" 25100 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25110 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69$userSetti
25120 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e  ngsFileName \"..
25130 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  .\n]..
25140 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
25150 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
25160 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
25170 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
25180 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 74 69  ource $userSetti 25190 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 ngsFileName].. 251a0 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 251b0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 251c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
251d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
251e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
251f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 25200 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 25210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25220 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 25230 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 failed to load p 25240 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 er-user settings 25250 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 25260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 25270 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
25280 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f  leName "\", erro
25290 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 252a0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 252b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 252c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 252d0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 252e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
252f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
25300 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $25310 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 25320 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 25330 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 25340 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 kipped loading p 25350 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 er-user test set 25360 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 25370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25380 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
25390 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69  sFileName "\", i
253a0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
253b0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
253c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
253d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
253e0 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23         #########
253f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
25420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
25430 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
25440 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c  nfo exists ::tcl
25450 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d  _platform(host)]
25460 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
25470 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 74      set hostSett
25480 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69  ingsFileName [fi
25490 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d  le join [getComm
254a0 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a  onDirectory] \..
254b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
254c0 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e  ppendArgs settin
254d0 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a  gs $suffix .$::
254e0 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73  tcl_platform(hos
254f0 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20  t) .eagle]]....
25500 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
25510 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 53  le exists $hostS 25520 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 25530 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 25540 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
25550 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
25560 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $25570 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 25580 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 25590 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 255a0 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 oading per-host 255b0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 255c0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 255d0 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73$hos
255e0 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
255f0 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20  e \"...\n]..
25600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
25610 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
25620 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
25630 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
25640 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73  list source $hos 25650 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 25660 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 e].. 25670 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { 25680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 25690 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
256a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
256b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 256c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 256d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 256e0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 256f0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 25700 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65 load per-host se 25710 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 ttings file \"" 25720 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25730 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74$hostSett
25740 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22  ingsFileName "\"
25750 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
25760 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 25770 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 25780 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 25790 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 257a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 257b0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
257c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
257d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 257e0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 257f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 25800 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61 ---- skipped loa 25810 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65 ding per-host te 25820 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65 st settings file 25830 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 25840 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53$hostS
25850 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20  ettingsFileName
25860 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
25870 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
25880 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
25890 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
258a0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
258b0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
258c0 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 62 61 73  opySampleDatabas
258d0 65 46 69 6c 65 73 20 7b 7d 20 7b 0d 0a 20 20 20  eFiles {} {..
258e0 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a     uplevel 1 {..
258f0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
25900 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20     # NOTE: Copy
25910 28 6f 72 20 72 65 2d 63 6f 70 79 29 20 74 68 65  (or re-copy) the
25920 20 72 65 66 65 72 65 6e 63 65 20 64 61 74 61 62   reference datab
25930 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 66 6f  ase file used fo
25940 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  r this..
25950 23 20 20 20 20 20 20 20 75 6e 69 74 20 74 65 73  #       unit tes
25960 74 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64  t to the build d
25970 69 72 65 63 74 6f 72 79 20 69 6e 20 63 61 73 65  irectory in case
25980 20 69 74 20 68 61 73 20 62 65 65 6e 20 63 68 61   it has been cha
25990 6e 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  nged..        #
259a0 20 20 20 20 20 20 62 79 20 61 20 70 72 65 76 69        by a previ
259b0 6f 75 73 20 74 65 73 74 20 72 75 6e 2e 0d 0a 20  ous test run...
259c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
259d0 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72    file copy -for
259e0 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44  ce $northwindEfD 259f0 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 bFile \.. 25a00 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 [file join [g 25a10 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 etBuildDirectory 25a20 20 66 61 6c 73 65 5d 20 5b 66 69 6c 65 20 74 61 false] [file ta 25a30 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 il$northwindEfD
25a40 62 46 69 6c 65 5d 5d 0d 0a 20 20 20 20 20 20 7d  bFile]]..      }
25a50 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
25a60 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65  proc runSQLiteTe
25a70 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d  stPrologue {} {.
25a80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
25a90 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e  # NOTE: Skip run
25aa0 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20  ning our custom
25ab0 70 72 6f 6c 6f 67 75 65 20 69 66 20 74 68 65 20  prologue if the
25ac0 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65  main one has bee
25ad0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
25ae0 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20   skipped...
25af0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b   #..      if {![
25b00 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
25b10 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67 6c 65 29  (prologue.eagle)
25b20 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
25b30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
25b40 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22  NOTE: Load the "
25b50 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72 61 69 6e  before-constrain
25b60 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75  ts" custom per-u
25b70 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68  ser and/or per-h
25b80 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ost..        #
25b90 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e       test settin
25ba0 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20  gs now...
25bb0 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65   #..        uple
25bc0 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64  vel 1 [list load
25bd0 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e  SQLiteTestSettin
25be0 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  gs $::test_chann 25bf0 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a 0d 0a 20 el .before].... 25c00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 25c10 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 25c20 69 66 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 if the [object] 25c30 63 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c command is avail 25c40 61 62 6c 65 3b 20 69 66 20 6e 6f 74 2c 20 61 64 able; if not, ad 25c50 64 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 d some.. 25c60 23 20 20 20 20 20 20 20 73 68 69 6d 73 20 74 6f # shims to 25c70 20 6d 61 6b 65 20 74 68 65 20 74 65 73 74 20 73 make the test s 25c80 75 69 74 65 20 72 75 6e 20 73 6d 6f 6f 74 68 65 uite run smoothe 25c90 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 r... #.. 25ca0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 25cb0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma 25cc0 6e 64 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e nd$::test_chann
25cd0 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  el....        #.
25ce0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
25cf0 20 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e   Determine the n
25d00 61 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69  ames of the nati
25d10 76 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20  ve platform and
25d20 61 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20  architecture...
25d30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
25d40 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b    set platform [
25d50 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
25d60 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20   true]..
25d70 73 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65  set architecture
25d80 20 5b 61 72 63 68 69 74 65 63 74 75 72 65 46 6f   [architectureFo
25d90 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66  rPlatform $platf 25da0 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 orm].... 25db0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 25dc0 45 3a 20 53 68 6f 77 20 74 68 65 20 70 6c 61 74 E: Show the plat 25dd0 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 form and archite 25de0 63 74 75 72 65 20 75 73 65 64 20 74 6f 20 68 65 cture used to he 25df0 6c 70 20 6c 6f 63 61 74 65 20 74 68 65 0d 0a 20 lp locate the.. 25e00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e # n 25e10 61 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 ative build file 25e20 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 25e30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
25e40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
25e50 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
25e60 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 70 6c          "---- pl
25e70 61 74 66 6f 72 6d 20 66 6f 72 20 6c 6f 63 61 74  atform for locat
25e80 69 6e 67 20 6e 61 74 69 76 65 20 62 75 69 6c 64  ing native build
25e90 20 66 69 6c 65 73 20 69 73 20 5c 22 22 20 5c 0d   files is \"" \.
25ea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c  .            $pl 25eb0 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 0d 0a atform \"\n].... 25ec0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
25ed0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
25ee0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
25ef0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 61           "---- a
25f00 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72 20  rchitecture for
25f10 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20  locating native
25f20 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c  build files is \
25f30 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
25f40 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20    $architecture 25f50 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 \"\n].... 25f60 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 25f70 54 45 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 TE: Build a list 25f80 20 6f 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f of configuratio 25f90 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 n files that we 25fa0 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 handle... 25fb0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 25fc0 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 configFileNames 25fd0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 25fe0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 25ff0 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 .SQLite.dll.conf 26000 69 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ig].... # 26010 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26020 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f : Build a list o 26030 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 f auxiliary Mana 26040 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 ged Debugging As 26050 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a sistants (MDA).. 26060 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26070 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 configuration fi 26080 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 les that we hand 26090 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 260a0 20 20 20 20 20 20 20 20 73 65 74 20 6d 64 61 43 set mdaC 260b0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b onfigFileNames [ 260c0 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 260d0 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 EagleShell32 260e0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 .exe.mda.config 260f0 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 Installer.exe.md 26100 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 a.config \.. 26110 20 20 20 20 20 20 20 20 74 65 73 74 2e 65 78 65 test.exe 26120 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 .mda.config test 26130 6c 69 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e linq.exe.mda.con 26140 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 fig \.. 26150 20 20 20 74 65 73 74 65 66 36 2e 65 78 65 2e 6d testef6.exe.m 26160 64 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 da.config].... 26170 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26180 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t 26190 68 65 20 6c 69 73 74 20 6f 66 20 65 78 74 65 72 he list of exter 261a0 6e 61 6c 20 66 69 6c 65 73 20 74 68 61 74 20 77 nal files that w 261b0 65 20 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 e handle. Some 261c0 6f 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 of.. # 261d0 20 20 20 20 74 68 65 73 65 20 66 69 6c 65 73 20 these files 261e0 6d 61 79 20 62 65 20 6e 61 74 69 76 65 20 61 6e may be native an 261f0 64 2f 6f 72 20 6d 61 6e 61 67 65 64 20 61 73 73 d/or managed ass 26200 65 6d 62 6c 69 65 73 20 74 68 61 74 20 61 72 65 emblies that are 26210 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 26220 20 20 72 65 71 75 69 72 65 64 20 74 6f 20 70 65 required to pe 26230 72 66 6f 72 6d 20 76 61 72 69 6f 75 73 20 74 65 rform various te 26240 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 26250 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 78 74 . set ext 26260 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b ernalFileNames [ 26270 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 list \.. 26280 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 [file join E 26290 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c ntityFramework l 262a0 69 62 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b ib [string map [ 262b0 6c 69 73 74 20 46 78 20 22 22 5d 20 5c 0d 0a 20 list Fx ""] \.. 262c0 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 262d0 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 ng map [list net 262e0 46 78 34 35 31 20 6e 65 74 46 78 34 35 20 6e 65 Fx451 netFx45 ne 262f0 74 46 78 34 35 32 20 6e 65 74 46 78 34 35 20 6e tFx452 netFx45 n 26300 65 74 46 78 34 36 20 5c 0d 0a 20 20 20 20 20 20 etFx46 \.. 26310 20 20 20 20 20 20 6e 65 74 46 78 34 35 20 6e 65 netFx45 ne 26320 74 46 78 34 36 31 20 6e 65 74 46 78 34 35 20 6e tFx461 netFx45 n 26330 65 74 46 78 34 36 32 20 6e 65 74 46 78 34 35 20 etFx462 netFx45 26340 6e 65 74 46 78 34 37 20 6e 65 74 46 78 34 35 20 netFx47 netFx45 26350 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e \.. n 26360 65 74 46 78 34 37 31 20 6e 65 74 46 78 34 35 20 etFx471 netFx45 26370 6e 65 74 46 78 34 37 32 20 6e 65 74 46 78 34 35 netFx472 netFx45 26380 20 6e 65 74 53 74 61 6e 64 61 72 64 32 30 20 6e netStandard20 n 26390 65 74 46 78 34 35 5d 20 5c 0d 0a 20 20 20 20 20 etFx45] \.. 263a0 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 [getBuild 263b0 4e 65 74 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 NetFx]]] EntityF 263c0 72 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a ramework.dll]].. 263d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 263e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 263f0 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e ld the list of n 26400 61 74 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 ative assembly f 26410 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e iles that we han 26420 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d dle... #. 26430 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 . set nat 26440 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 iveFileNames [li 26450 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 st].... e 26460 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 val lappend nati 26470 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 veFileNames [get 26480 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c NativeLibraryFil 26490 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 eNamesOnly].. 264a0 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e eval lappen 264b0 64 20 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 d nativeFileName 264c0 73 20 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 s [getInteropAss 264d0 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e emblyFileNamesOn 264e0 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 ly].... # 264f0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26500 3a 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 : Build the list 26510 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 of mixed-mode a 26520 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 ssembly files th 26530 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 at we handle... 26540 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 26550 20 20 73 65 74 20 6d 69 78 65 64 46 69 6c 65 4e set mixedFileN 26560 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 ames [list].... 26570 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 if {[hasR 26580 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 untimeOption nat 26590 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ive]} then {.. 265a0 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 265b0 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 mixedFileNames S 265c0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 265d0 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d e.dll.. } 265e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 265f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 26600 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 uild the list of 26610 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c managed assembl 26620 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 y files that we 26630 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 handle... 26640 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 26650 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 26660 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 26670 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 26680 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c a.SQLite.Linq.dl 26690 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 l System.Data.SQ 266a0 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d Lite.EF6.dll]... 266b0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 . if {![h 266c0 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 asRuntimeOption 266d0 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d native]} then {. 266e0 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 . lappe 266f0 6e 64 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 nd managedFileNa 26700 6d 65 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e mes System.Data. 26710 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 SQLite.dll.. 26720 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26730 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 26740 54 45 3a 20 53 68 6f 77 20 74 68 65 20 76 61 72 TE: Show the var 26750 69 6f 75 73 20 6c 69 73 74 73 20 6f 66 20 66 69 ious lists of fi 26760 6c 65 20 6e 61 6d 65 73 20 74 68 61 74 20 61 72 le names that ar 26770 65 20 68 61 6e 64 6c 65 64 20 62 79 20 74 68 69 e handled by thi 26780 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 26790 20 20 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 procedure... 267a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 267b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
267c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
267d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
267e0 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66     "---- list of
267f0 20 5c 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   \"configuration
26800 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73  \" file names is
26810 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
26820 20 20 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61     $configFileNa 26830 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 mes \n].... 26840 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
26850 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
26860 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
26870 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f      "---- list o
26880 66 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67 75 72  f \"MDA configur
26890 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 6e 61 6d  ation\" file nam
268a0 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 20 20 20  es is: " \..
268b0 20 20 20 20 20 20 20 20 24 6d 64 61 43 6f 6e 66          $mdaConf 268c0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d igFileNames \n]. 268d0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ... tputs 268e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
268f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
26900 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
26910 2d 20 6c 69 73 74 20 6f 66 20 5c 22 65 78 74 65  - list of \"exte
26920 72 6e 61 6c 5c 22 20 66 69 6c 65 20 6e 61 6d 65  rnal\" file name
26930 73 20 69 73 3a 20 22 20 24 65 78 74 65 72 6e 61  s is: " $externa 26940 6c 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d 0a lFileNames \n].. 26950 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 26960 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
26970 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
26980 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
26990 20 6c 69 73 74 20 6f 66 20 5c 22 6e 61 74 69 76   list of \"nativ
269a0 65 5c 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69  e\" file names i
269b0 73 3a 20 22 20 24 6e 61 74 69 76 65 46 69 6c 65  s: " $nativeFile 269c0 4e 61 6d 65 73 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 Names \n].... 269d0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
269e0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
269f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
26a00 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74        "---- list
26a10 20 6f 66 20 5c 22 6d 69 78 65 64 5c 22 20 66 69   of \"mixed\" fi
26a20 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 24  le names is: " $26a30 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c mixedFileNames \ 26a40 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 n].... tp 26a50 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
26a60 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
26a70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
26a80 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 6d  ---- list of \"m
26a90 61 6e 61 67 65 64 5c 22 20 66 69 6c 65 20 6e 61  anaged\" file na
26aa0 6d 65 73 20 69 73 3a 20 22 20 24 6d 61 6e 61 67  mes is: " $manag 26ab0 65 64 46 69 6c 65 4e 61 6d 65 73 20 5c 6e 5d 0d edFileNames \n]. 26ac0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 26ad0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 26ae0 6d 6f 76 65 20 61 6e 79 20 74 65 73 74 20 63 6f move any test co 26af0 6e 73 74 72 61 69 6e 74 73 20 74 68 61 74 20 72 nstraints that r 26b00 65 66 65 72 20 74 6f 20 74 68 65 20 6e 61 74 69 efer to the nati 26b10 76 65 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 ve and/or.. 26b20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 # manag 26b30 65 64 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 ed assembly file 26b40 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 s that we handle 26b50 20 75 6e 6c 65 73 73 20 66 6f 72 62 69 64 64 65 unless forbidde 26b60 6e 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 20 20 n from.. 26b70 23 20 20 20 20 20 20 20 64 6f 69 6e 67 20 73 6f # doing so 26b80 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 26b90 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 26ba0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c exists ::no(sql 26bb0 69 74 65 52 65 6d 6f 76 65 43 6f 6e 73 74 72 61 iteRemoveConstra 26bc0 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ints)]} then {.. 26bd0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 26be0 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 h fileName$conf
26bf0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
26c00 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76             remov
26c10 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
26c20 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66  endArgs file_ $f 26c30 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 ileName].. 26c40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 26c50 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 26c60 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 ame$mdaConfigFi
26c70 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
26c80 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e         removeCon
26c90 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
26ca0 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e  rgs file_ $fileN 26cb0 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ame].. 26cc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 }.... f 26cd0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 26ce0 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d$externalFileNam
26cf0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
26d00 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69    removeConstrai
26d10 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
26d20 69 6c 65 5f 20 5b 66 69 6c 65 20 74 61 69 6c 20  ile_ [file tail
26d30 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20  $fileName]].. 26d40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 26d50 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 26d60 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 leName$nativeFi
26d70 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
26d80 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e         removeCon
26d90 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
26da0 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e  rgs file_ $fileN 26db0 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 ame].. 26dc0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 }.... f 26dd0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 26de0 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20$mixedFileNames
26df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
26e00 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  emoveConstraint
26e10 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
26e20 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  _ $fileName].. 26e30 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 26e40 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 26e50 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 ileName$managed
26e60 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
26e70 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43           removeC
26e80 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
26e90 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 69 6c  dArgs file_ $fil 26ea0 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 26eb0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 26ec0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 26ed0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 26ee0 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 p all System.Dat 26ef0 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 26f00 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 file handling ( 26f10 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 deleting,.. 26f20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 # copyi 26f30 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 ng, and loading) 26f40 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d if instructed.. 26f50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 26f60 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 26f70 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 xists ::no(sqlit 26f80 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b eFiles)]} then { 26f90 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 26fa0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 26fb0 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 Skip trying to 26fc0 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c 65 73 delete any files 26fd0 20 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d if instructed.. 26fe0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 26ff0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 27000 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 27010 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73 eleteSqliteFiles 27020 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 27030 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 27040 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 27050 65 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e 66 69 eleteSqliteConfi 27060 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b gFiles)]} then { 27070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 27080 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 27090 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65$configFileName
270a0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
270b0 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69       tryDeleteBi
270c0 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61  naryFile $fileNa 270d0 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 270e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 270f0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 27100 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 27110 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 27120 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c qliteExternalFil 27130 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 27140 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 27150 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 ach fileName$md
27160 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73  aConfigFileNames
27170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
27180 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 75 69      tryDeleteBui
27190 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ldFile $fileName 271a0 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 false.. 271b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 271c0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 271d0 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 fileName$exter
271e0 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  nalFileNames {..
271f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27200 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
27210 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 27220 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 27230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 27240 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 27250 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 27260 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 27270 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 NativeFiles)]} t 27280 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 27290 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 272a0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 272b0 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 teSqliteImplicit 272c0 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 74 NativeFiles)]} t 272d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 272e0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 272f0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
27300 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
27310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
27320 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20  yDeleteAssembly
27330 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  $fileName.. 27340 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 27350 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 27360 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 27370 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 27380 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 27390 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c teNonImplicitFil 273a0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 273b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 273c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 273d0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 273e0 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d ePlatformFiles)] 273f0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 27400 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 [stri 27410 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
27420 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
27430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
27440 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
27450 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 27460 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 27470 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 try 27480 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 DeleteAssembly$
27490 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo 274a0 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 rm.. 274b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 274c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 274e0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 274f0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 27500 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69 6c eArchitectureFil 27510 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 es)] && \.. 27520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 27530 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 string length$a
27540 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30  rchitecture] > 0
27550 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
27560 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
27570 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 27580 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 27590 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 275a0 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 tryDeleteAs 275b0 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 sembly$fileName
275c0 20 24 61 72 63 68 69 74 65 63 74 75 72 65 0d 0a   $architecture.. 275d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 275e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 275f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 27600 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 27610 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 27620 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 27630 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 27640 65 74 65 53 71 6c 69 74 65 4d 69 78 65 64 46 69 eteSqliteMixedFi 27650 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 27660 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 27670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 27680 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 NOTE: If the "na 27690 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 tive" runtime op 276a0 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 64 65 6c tion is set, del 276b0 65 74 65 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 ete implicit.. 276c0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 276d0 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 mixed-mode a 276e0 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 ssembly files as 276f0 20 77 65 6c 6c 2e 20 20 54 68 69 73 20 72 75 6e well. This run 27700 74 69 6d 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 time option.. 27710 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 27720 20 20 20 63 68 65 63 6b 20 69 73 20 68 61 6e 64 check is hand 27730 6c 65 64 20 77 68 65 6e 20 62 75 69 6c 64 69 6e led when buildin 27740 67 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 g the list of mi 27750 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 xed-mode.. 27760 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 27770 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 27780 6d 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 mes... 27790 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 277a0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 277b0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 277c0 74 65 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 teSqliteImplicit 277d0 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 MixedFiles)]} th 277e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 277f0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 27800 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c leName$mixedFil
27810 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
27820 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44              tryD
27830 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66  eleteAssembly $f 27840 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName.. 27850 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 27860 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 27870 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 27880 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 27890 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 278a0 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 NonImplicitFiles 278b0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 278c0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 278d0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 278e0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 50 no(deleteSqliteP 278f0 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 latformFiles)] & 27900 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 27910 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 27920 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
27930 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  m] > 0} then {..
27940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
27950 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
27960 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 27970 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 27980 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 27990 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
279a0 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d  eName $platform. 279b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 279c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 279d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 279e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 279f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 27a00 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 41 72 o(deleteSqliteAr 27a10 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 chitectureFiles) 27a20 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 27a30 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 [str 27a40 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 ing length$arch
27a50 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74  itecture] > 0} t
27a60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
27a70 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
27a80 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64   fileName $mixed 27a90 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 27aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 27ab0 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 tryDeleteAssemb 27ac0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 ly$fileName $ar 27ad0 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 chitecture.. 27ae0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 27af0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 27b00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 27b10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 27b20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 27b30 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 27b40 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 27b50 71 6c 69 74 65 4d 61 6e 61 67 65 64 46 69 6c 65 qliteManagedFile 27b60 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 27b70 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 27b80 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e ch fileName$man
27b90 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  agedFileNames {.
27ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
27bb0 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62   tryDeleteAssemb
27bc0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  ly $fileName.. 27bd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 27be0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 27bf0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 27c00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 27c10 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 27c20 6b 20 66 6f 72 20 74 68 65 20 22 61 75 74 6f 53 k for the "autoS 27c30 65 6c 65 63 74 22 20 72 75 6e 74 69 6d 65 20 6f elect" runtime o 27c40 70 74 69 6f 6e 2e 20 20 49 66 20 70 72 65 73 65 ption. If prese 27c50 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 23 nt,.. # 27c60 20 20 20 20 20 20 20 61 74 74 65 6d 70 74 20 74 attempt t 27c70 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 o automatically 27c80 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 select the first 27c90 20 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 available.. 27ca0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 # bu 27cb0 69 6c 64 20 28 6f 72 20 22 72 65 6c 65 61 73 65 ild (or "release 27cc0 22 29 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 ") of SQLite and 27cd0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 27ce0 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ite.. # 27cf0 20 20 20 20 20 20 20 66 6f 72 20 75 73 65 20 77 for use w 27d00 69 74 68 20 74 68 65 20 74 65 73 74 20 73 75 69 ith the test sui 27d10 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 te... # 27d20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 27d30 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f [hasRuntimeOptio 27d40 6e 20 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 n autoSelect]} t 27d50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 27d60 20 20 20 69 66 20 7b 21 5b 63 68 65 63 6b 46 6f if {![checkFo 27d70 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a rSQLiteBuilds$:
27d80 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72  :test_channel tr
27d90 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ue]} then {..
27da0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
27db0 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65  ForSQLiteRelease
27dc0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 27dd0 6c 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 l true.. 27de0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 27df0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 27e00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 27e10 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 OTE: Skip trying 27e20 20 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 to verify the b 27e30 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 uild directory i 27e40 66 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 f instructed;.. 27e50 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 27e60 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 otherwise, make 27e70 20 73 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c sure it actuall 27e80 79 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 y exists or halt 27e90 20 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 the entire.. 27ea0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 27eb0 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 esting process i 27ec0 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 f it does not ex 27ed0 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ist... 27ee0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 27ef0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 27f00 3a 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 :no(verifyBuildD 27f10 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e irectory)]} then 27f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 27f30 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 27f40 20 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 NOTE: At this p 27f50 6f 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 oint, the build 27f60 64 69 72 65 63 74 6f 72 69 65 73 20 4d 55 53 54 directories MUST 27f70 20 65 78 69 73 74 20 66 6f 72 0d 0a 20 20 20 20 exist for.. 27f80 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 27f90 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 the testing proc 27fa0 65 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e ess to continue. 27fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 27fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 27fd0 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 directory [getB 27fe0 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 uildDirectory fa 27ff0 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 28000 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 28010 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
28020 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
28030 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
28040 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 28050 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 28060 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 28070 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 28080 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 28090 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 280a0 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 280b0 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 280c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 280d0 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 280e0 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 280f0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 28100 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 28110 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
28120 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
28130 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
28140 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
28150 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
28160 66 79 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20  fy native build
28170 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d  directory \"" \.
28180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
28190 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c     $directory "\ 281a0 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 ", all testing h 281b0 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 alted\n"].... 281c0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 281d0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 281e0 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 TE: Raising a sc 281f0 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 ript error from 28200 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c this point shoul 28210 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 d halt.. 28220 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 28230 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 e testing proces 28240 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s... 28250 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 28260 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 error [append 28270 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 28280 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 "could 28290 20 6e 6f 74 20 76 65 72 69 66 79 20 6e 61 74 69 not verify nati 282a0 76 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f ve build directo 282b0 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 ry \"" \.. 282c0 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72$dir
282d0 65 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c 6c 20  ectory "\", all
282e0 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d  testing halted"]
282f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
28300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
28310 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65  et directory [ge
28320 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20  tBuildDirectory
28330 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  true]....
28340 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
28350 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72  exists $director 28360 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 y] || \.. 28370 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 ![file 28380 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 isdirectory$dir
28390 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
283a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
283b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
283c0 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69  # NOTE: Just pri
283d0 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68  or to actually h
283e0 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69  alting the testi
283f0 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20  ng process,..
28400 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
28410 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20     add an error
28420 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20  to the test log
28430 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  file...
28440 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28450 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 28460 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 28470 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 28480 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 28490 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 -- could not ver 284a0 69 66 79 20 6d 61 6e 61 67 65 64 20 62 75 69 6c ify managed buil 284b0 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 d directory \"" 284c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 284d0 20 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 20$directory
284e0 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67  "\", all testing
284f0 20 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20   halted\n"]....
28500 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
28510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
28520 4e 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20  NOTE: Raising a
28530 73 63 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f  script error fro
28540 6d 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f  m this point sho
28550 75 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20  uld halt..
28560 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
28570 74 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63  the testing proc
28580 65 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ess...
28590 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
285a0 20 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65       error [appe
285b0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
285c0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75              "cou
285d0 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 20 6d 61  ld not verify ma
285e0 6e 61 67 65 64 20 62 75 69 6c 64 20 64 69 72 65  naged build dire
285f0 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20  ctory \"" \..
28600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $28610 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2c 20 61 directory "\", a 28620 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 ll testing halte 28630 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 d"].. 28640 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 28650 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 28660 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 28670 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f : Skip trying to 28680 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20 copy any files 28690 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a if instructed... 286a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 286b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 286c0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 286d0 70 79 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d pySqliteFiles)]} 286e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 286f0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 28700 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 28710 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 SqliteConfigFile 28720 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 28730 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 28740 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
28750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28760 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79        "---- copy
28770 69 6e 67 20 5c 22 63 6f 6e 66 69 67 75 72 61 74  ing \"configurat
28780 69 6f 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e  ion\" files...\n
28790 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "....
287a0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
287b0 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e  ame $configFileN 287c0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 287d0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 tryCopyB 287e0 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 uildFile$fileNa
287f0 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  me false..
28800 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
28810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
28820 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
28830 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
28840 6f 70 79 53 71 6c 69 74 65 45 78 74 65 72 6e 61  opySqliteExterna
28850 6c 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  lFiles)]} then {
28860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
28870 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
28880 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68   # NOTE: Copy th
28890 65 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67  e Managed Debugg
288a0 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28  ing Assistants (
288b0 4d 44 41 29 20 63 6f 6e 66 69 67 75 72 61 74 69  MDA) configurati
288c0 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  on..
288d0 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 66    #       file f
288e0 6f 72 20 74 68 65 20 45 61 67 6c 65 20 73 68 65  or the Eagle she
288f0 6c 6c 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20  ll to the build
28900 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
28910 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..
28920 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20 75   #       while u
28930 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68 65  sing each of the
28940 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76 61   names of the va
28950 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65 73  rious legacy tes
28960 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..
28970 20 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61   #       executa
28980 62 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c  bles.  This will
28990 20 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75   help to make su
289a0 72 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d  re that all the.
289b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
289c0 20 20 20 20 20 20 20 6c 65 67 61 63 79 20 74 65         legacy te
289d0 73 74 73 20 72 75 6e 20 77 69 74 68 20 65 78 61  sts run with exa
289e0 63 74 6c 79 20 74 68 65 20 73 61 6d 65 20 73 65  ctly the same se
289f0 74 20 6f 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20  t of Managed..
28a00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
28a10 20 20 20 20 44 65 62 75 67 67 69 6e 67 20 41 73      Debugging As
28a20 73 69 73 74 61 6e 74 73 20 63 6f 6e 66 69 67 75  sistants configu
28a30 72 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  red...
28a40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
28a50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 28a60 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 st_channel \.. 28a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28a80 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 "---- copying \" 28a90 4d 44 41 20 63 6f 6e 66 69 67 75 72 61 74 69 6f MDA configuratio 28aa0 6e 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d n\" files...\n". 28ab0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 28ac0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 28ad0 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 e$mdaConfigFile
28ae0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
28af0 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
28b00 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 6c 65  BinaryFile Eagle
28b10 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f  Shell.exe.mda.co
28b20 6e 66 69 67 20 74 72 75 65 20 22 22 20 24 66 69  nfig true "" $fi 28b30 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 28b40 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 28b50 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 28b60 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 28b70 3a 20 43 6f 70 79 20 74 68 65 20 65 78 74 65 72 : Copy the exter 28b80 6e 61 6c 20 62 69 6e 61 72 69 65 73 2c 20 69 66 nal binaries, if 28b90 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 64 69 72 any, to the dir 28ba0 65 63 74 6f 72 79 20 74 68 61 74 0d 0a 20 20 20 ectory that.. 28bb0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 28bc0 20 20 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 contains the 28bd0 45 61 67 6c 65 20 73 68 65 6c 6c 2e 20 20 54 68 Eagle shell. Th 28be0 69 73 20 69 73 20 74 79 70 69 63 61 6c 6c 79 20 is is typically 28bf0 75 73 65 64 20 74 6f 20 6d 61 6b 65 0d 0a 20 20 used to make.. 28c00 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 28c10 20 20 20 20 73 75 72 65 20 61 73 73 65 6d 62 6c sure assembl 28c20 69 65 73 20 72 65 66 65 72 65 6e 63 65 64 20 62 ies referenced b 28c30 79 20 74 68 65 20 6f 6e 65 73 20 62 65 69 6e 67 y the ones being 28c40 20 74 65 73 74 65 64 20 61 72 65 0d 0a 20 20 20 tested are.. 28c50 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 28c60 20 20 20 61 76 61 69 6c 61 62 6c 65 20 64 75 72 available dur 28c70 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20 ing the testing 28c80 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 process... 28c90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 28ca0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
28cb0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22  ::test_channel "
28cc0 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 65  ---- copying \"e
28cd0 78 74 65 72 6e 61 6c 5c 22 20 66 69 6c 65 73 2e  xternal\" files.
28ce0 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
28cf0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
28d00 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61  ileName $externa 28d10 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 lFileNames {.. 28d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 28d30 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46 69 6c yCopyExternalFil 28d40 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 e$fileName..
28d50 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
28d60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
28d70 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
28d80 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
28d90 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e 61 74 69  o(copySqliteNati
28da0 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
28db0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
28dc0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
28dd0 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
28de0 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 20 69   test platform i
28df0 73 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 65 66  s likely the def
28e00 61 75 6c 74 20 66 6f 72 20 74 68 69 73 0d 0a 20  ault for this..
28e10 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20               #
28e20 20 20 20 20 20 6d 61 63 68 69 6e 65 2c 20 61 6c       machine, al
28e30 73 6f 20 74 72 79 20 74 6f 20 63 6f 70 79 20 74  so try to copy t
28e40 68 65 20 6e 61 74 69 76 65 20 66 69 6c 65 73 20  he native files
28e50 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
28e60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 69        #       bi
28e70 6e 61 72 79 20 6c 6f 63 61 74 69 6f 6e 2e 0d 0a  nary location...
28e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
28e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
28ea0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
28eb0 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
28ec0 49 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 69  ImplicitNativeFi
28ed0 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
28ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 69                [i
28ef0 73 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61  sDefaultBuildPla
28f00 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
28f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
28f20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 28f30 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 28f40 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 28f50 2d 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69 -- copying impli 28f60 63 69 74 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 cit \"native\" f 28f70 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 iles...\n".... 28f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f fo 28f90 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 reach fileName$
28fa0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
28fb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
28fc0 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
28fd0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66  mbly $fileName f 28fe0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 28ff0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 29000 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 29010 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 29020 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 29030 28 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d (copySqliteNonIm 29040 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 29050 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 29060 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 29070 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 29080 70 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d pySqlitePlatform 29090 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 290a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 290b0 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 290c0 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
290d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
290e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
290f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 29100 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 29110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29120 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 "---- copy 29130 69 6e 67 20 5c 22 6e 61 74 69 76 65 5c 22 20 66 ing \"native\" f 29140 69 6c 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 iles for platfor 29150 6d 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 m \"" \.. 29160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
29170 70 6c 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e  platform \"...\n
29180 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
29190 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
291a0 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46  ileName $nativeF 291b0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 291c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 291d0 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 tryCopyAssembly 291e0 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20$fileName false
291f0 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20  $platform.. 29200 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 29210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29220 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 29230 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 29240 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 29250 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 75 SqliteArchitectu 29260 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a reFiles)] && \.. 29270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29280 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 29290 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 65 th$architecture
292a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
292b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
292c0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 292d0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 292e0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 292f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 29300 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 - copying \"nati 29310 76 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 61 ve\" files for a 29320 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 22 20 rchitecture \"" 29330 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29340 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74$archit
29350 65 63 74 75 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d  ecture \"...\n].
29360 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
29370 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
29380 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 29390 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 293a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 293b0 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 yCopyAssembly$f
293c0 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 61  ileName false $a 293d0 72 63 68 69 74 65 63 74 75 72 65 0d 0a 20 20 20 rchitecture.. 293e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 293f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29400 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 29410 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 29420 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 29430 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 29440 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 ists ::no(copySq 29450 6c 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d liteMixedFiles)] 29460 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 29470 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 29480 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 29490 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 If the "native" 294a0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 runtime option 294b0 69 73 20 73 65 74 2c 20 63 6f 70 79 20 69 6d 70 is set, copy imp 294c0 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 licit.. 294d0 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 # mix 294e0 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 294f0 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 files as well. 29500 20 54 68 65 20 72 75 6e 74 69 6d 65 20 6f 70 74 The runtime opt 29510 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ion.. 29520 20 20 20 23 20 20 20 20 20 20 20 63 68 65 63 6b # check 29530 20 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 6e is handled when 29540 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c 69 building the li 29550 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 65 st of mixed-mode 29560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 29570 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 29580 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 20 file names... 29590 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 295a0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 295b0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 295c0 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 49 6d :no(copySqliteIm 295d0 70 6c 69 63 69 74 4d 69 78 65 64 46 69 6c 65 73 plicitMixedFiles 295e0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 295f0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 29600 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
29610 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
29620 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
29630 6f 70 79 69 6e 67 20 69 6d 70 6c 69 63 69 74 20  opying implicit
29640 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e  \"mixed\" files.
29650 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
29660 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
29670 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64   fileName $mixed 29680 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 29690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 296a0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 ryCopyAssembly$
296b0 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d 0a  fileName false..
296c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
296d0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
296e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
296f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
29700 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53  xists ::no(copyS
29710 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69 63 69 74  qliteNonImplicit
29720 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d  Files)]} then {.
29730 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
29740 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
29750 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
29760 74 65 50 6c 61 74 66 6f 72 6d 46 69 6c 65 73 29  tePlatformFiles)
29770 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
29780 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
29790 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 297a0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 297b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 297c0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
297d0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
297e0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
297f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29800 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22  "---- copying \"
29810 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 20 66 6f  mixed\" files fo
29820 72 20 70 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c  r platform \"" \
29830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29840 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 29850 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 m \"...\n].... 29860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 29870 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 29880 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
29890 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
298a0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41          tryCopyA
298b0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 298c0 65 20 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 e false$platfor
298d0 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  m..
298e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
298f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
29900 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
29910 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
29920 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72  :no(copySqliteAr
29930 63 68 69 74 65 63 74 75 72 65 46 69 6c 65 73 29  chitectureFiles)
29940 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
29950 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
29960 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68  ing length $arch 29970 69 74 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 itecture] > 0} t 29980 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 29990 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
299a0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
299b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
299c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
299d0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e      "---- copyin
299e0 67 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65  g \"mixed\" file
299f0 73 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75  s for architectu
29a00 72 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  re \"" \..
29a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22  $architecture \" 29a30 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ...\n].... 29a40 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 29a50 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 ach fileName$mi
29a60 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  xedFileNames {..
29a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
29a80 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
29a90 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  bly $fileName fa 29aa0 6c 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 lse$architectur
29ab0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
29ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
29ad0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
29ae0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
29af0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
29b00 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
29b10 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
29b20 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65  copySqliteManage
29b30 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  dFiles)]} then {
29b40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
29b50 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 29b60 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 annel "---- copy 29b70 69 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20 ing \"managed\" 29b80 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 files...\n".... 29b90 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 29ba0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
29bb0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20  anagedFileNames
29bc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
29bd0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
29be0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75  ly $fileName tru 29bf0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 29c00 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 29c10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 29c20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 29c30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 29c40 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 Skip trying to 29c50 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 load any files i 29c60 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 f instructed... 29c70 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 29c80 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 29c90 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 29ca0 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 dSqliteFiles)]} 29cb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29cc0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 29cd0 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 29ce0 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c qliteImplicitFil 29cf0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 29d00 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c tryL 29d10 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 oadAssembly Syst 29d20 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 29d30 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 29d40 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 29d50 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 29d60 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 29d70 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 teLinqFiles)]} t 29d80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 29d90 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 29da0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 29db0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 29dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 29dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 29de0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 29df0 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 29e00 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e Ef6Files)]} then 29e10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 29e20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 29e30 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 29e40 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 Lite.EF6.dll.. 29e50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 29e60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 29e70 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 29e80 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 o(loadSqliteNonI 29e90 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 29ea0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29eb0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 29ec0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 29ed0 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 dSqlitePlatformF 29ee0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 iles)] && \.. 29ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 29f00 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
29f10 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
29f20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
29f30 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
29f40 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
29f50 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c  a.SQLite.dll $pl 29f60 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 atform.. 29f70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 29f80 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 29f90 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 29fa0 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 loadSqliteArchit 29fb0 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 29fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29fd0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 29fe0 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
29ff0 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
2a000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2a010 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
2a020 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2a030 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65  ite.dll $archite 2a040 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 cture.. 2a050 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2a060 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2a070 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 2a080 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 . foreach 2a090 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e fileNameOnly$n
2a0a0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
2a0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63  ..          catc
2a0c0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
2a0d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2a0e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2a0f0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 2a100 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 "---- file 2a110 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 version of \"" 2a120 6e 61 74 69 76 65 2f 20 24 66 69 6c 65 4e 61 6d native/$fileNam
2a130 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20  eOnly \..
2a140 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20           "\"...
2a150 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f  \"" [file versio
2a160 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
2a170 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
2a180 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d          $fileNam 2a190 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 eOnly]] \"\n].. 2a1a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2a1b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2a1c0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 2a1d0 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65 eOnly$mixedFile
2a1e0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
2a1f0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
2a200 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2a210 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 2a220 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 2a230 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 2a240 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 -- file version 2a250 6f 66 20 5c 22 22 20 6d 69 78 65 64 2f 20 24 66 of \"" mixed/$f
2a260 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20  ileNameOnly \..
2a270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2a280 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20  \"... \"" [file
2a290 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
2a2a0 72 79 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  ryFileName \..
2a2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66                $f 2a2c0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 ileNameOnly]] \" 2a2d0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 2a2e0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2a2f0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 2a300 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 61 6e ileNameOnly$man
2a310 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  agedFileNames {.
2a320 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68  .          catch
2a330 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2a340 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2a350 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 2a360 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 2a370 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 2a380 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d version of \"" m 2a390 61 6e 61 67 65 64 2f 20 24 66 69 6c 65 4e 61 6d anaged/$fileNam
2a3a0 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20  eOnly \..
2a3b0 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20           "\"...
2a3c0 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f  \"" [file versio
2a3d0 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
2a3e0 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
2a3f0 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d          $fileNam 2a400 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 eOnly]] \"\n].. 2a410 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2a420 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2a430 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 2a440 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
2a450 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2a460 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
2a470 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69  leNameOnly $nati 2a480 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 veFileNames {.. 2a490 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 catch 2a4a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2a4b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2a4c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2a4d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2a4e0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
2a4f0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
2a500 22 22 20 6e 61 74 69 76 65 2f 70 6c 61 74 66 6f  "" native/platfo
2a510 72 6d 2f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rm/ \..
2a520 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f           $platfo 2a530 72 6d 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e rm /$fileNameOn
2a540 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66  ly "\"... \"" [f
2a550 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
2a560 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
2a570 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
2a580 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ame $fileNameOnl 2a590 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 2a5a0 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d$platform
2a5b0 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  ]] \"\n]..
2a5c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2a5d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2a5e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
2a5f0 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c  meOnly $mixedFil 2a600 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 2a610 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 catch {.. 2a620 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 2a630 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2a640 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
2a650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2a660 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76      "---- file v
2a670 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d 69  ersion of \"" mi
2a680 78 65 64 2f 70 6c 61 74 66 6f 72 6d 2f 20 5c 0d  xed/platform/ \.
2a690 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2a6a0 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 20 24     $platform /$
2a6b0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22  fileNameOnly "\"
2a6c0 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 5c 0d  ... \"" [file \.
2a6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2a6e0 20 20 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42     version [getB
2a6f0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f 2a700 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 ileNameOnly \.. 2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a720 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c$platform]] \"\
2a730 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
2a740 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
2a750 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2a760 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
2a770 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 2a780 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 2a790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f {.. fo 2a7a0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 2a7b0 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 ly$nativeFileNa
2a7c0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
2a7d0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
2a7e0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
2a7f0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2a800 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 2a810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a820 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 2a830 69 6f 6e 20 6f 66 20 5c 22 22 20 6e 61 74 69 76 ion of \"" nativ 2a840 65 2f 61 72 63 68 69 74 65 63 74 75 72 65 2f 20 e/architecture/ 2a850 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a860 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75$architectu
2a870 72 65 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  re / $fileNameOn 2a880 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 ly "\"... \"" [f 2a890 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 2a8a0 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e version 2a8b0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 2a8c0 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ame$fileNameOnl
2a8d0 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
2a8e0 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63         $architec 2a8f0 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 ture]] \"\n].. 2a900 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2a910 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2a920 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 2a930 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 leNameOnly$mixe
2a940 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
2a950 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20            catch
2a960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2a970 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2a980 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2a990 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 2a9a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 "---- fi 2a9b0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 le version of \" 2a9c0 22 20 6d 69 78 65 64 2f 61 72 63 68 69 74 65 63 " mixed/architec 2a9d0 74 75 72 65 2f 20 5c 0d 0a 20 20 20 20 20 20 20 ture/ \.. 2a9e0 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68$arch
2a9f0 69 74 65 63 74 75 72 65 20 2f 20 24 66 69 6c 65  itecture / $file 2aa00 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20 NameOnly "\"... 2aa10 5c 22 22 20 5b 66 69 6c 65 20 5c 0d 0a 20 20 20 \"" [file \.. 2aa20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76 v 2aa30 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 ersion [getBinar 2aa40 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
2aa50 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20  ameOnly \..
2aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72               $ar 2aa70 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c chitecture]] \"\ 2aa80 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 2aa90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 2aaa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2aab0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2aac0 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the 2aad0 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 list of managed 2aae0 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 assemblies for 2aaf0 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 the current proc 2ab00 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ess.. # 2ab10 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20 and report 2ab20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 on the System.Da 2ab30 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 ta.SQLite relate 2ab40 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 d ones... 2ab50 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 2ab60 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 2ab70 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 2ab80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 2ab90 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 2aba0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 2abb0 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 47 65 74 voke Utility Get 2abc0 41 73 73 65 6d 62 6c 69 65 73 0d 0a 20 20 20 20 Assemblies.. 2abd0 20 20 20 20 20 20 7d 20 61 73 73 65 6d 62 6c 69 } assembli 2abe0 65 73 5d 20 3d 3d 20 30 20 7c 7c 20 5b 63 61 74 es] == 0 || [cat 2abf0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 2ac00 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 2ac10 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e AppDomain.Curren 2ac20 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d tDomain GetAssem 2ac30 62 6c 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 blies.. 2ac40 20 7d 20 61 73 73 65 6d 62 6c 69 65 73 5d 20 3d } assemblies] = 2ac50 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 2ac60 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 2ac70 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79 foreach assembly 2ac80 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a$assemblies {..
2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
2aca0 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match
2acb0 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \{System.Data.SQ
2acc0 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d  Lite* $assembly] 2acd0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2ace0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 2acf0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2ad00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
2ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ad20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c     "---- found l
2ad30 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20  oaded assembly:
2ad40 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d  " $assembly \n]. 2ad50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 2ad60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2ad70 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 2ad80 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2ad90 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 2ada0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2adb0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
2adc0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
2add0 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  -- define consta
2ade0 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d  nts for \"System
2adf0 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e  .Data.SQLite\"..
2ae00 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  . "....
2ae10 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
2ae20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63             objec
2ae30 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
2ae40 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
2ae50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
2ae60 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
2ae70 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43  .SQLite3 DefineC
2ae80 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20  onstants..
2ae90 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73      } defineCons
2aea0 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tants] == 0} the
2aeb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2aec0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2aed0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2aee0 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b gs [formatList [ 2aef0 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 lsort \.. 2af00 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65$define
2af10 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65  Constants] <none
2af20 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  >] \n]..
2af30 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
2af40 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2af50 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e :test_channel un 2af60 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 known\n.. 2af70 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 2af80 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 2af90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 2afa0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
2afb0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
2afc0 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63       "---- sourc
2afd0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53  e version of \"S
2afe0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2aff0 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a  e.dll\"... "....
2b000 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
2b010 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
2b020 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
2b030 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
2b040 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
2b050 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
2b060 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
2b070 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69  Connection Provi
2b080 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  derVersion..
2b090 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d        } version]
2b0a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
2b0b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
2b0c0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 2b0d0 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 ersion] == 0} th 2b0e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2b0f0 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 set version 2b100 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 null.. 2b110 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2b120 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b130 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2b140 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d  gs $version \n]. 2b150 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 2b160 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 2b170 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b180 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
2b190 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2b1a0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2b1b0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
2b1c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2b1d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 2b1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 2b1f0 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b --- source check 2b200 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e out of \"System. 2b210 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c Data.SQLite.dll\ 2b220 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 "... ".... 2b230 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 2b240 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 2b250 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 2b260 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 2b270 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2b280 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2b290 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 ite.SQLiteConnec 2b2a0 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75 tion ProviderSou 2b2b0 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20 rceId.. 2b2c0 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 } sourceId] == 2b2d0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 2b2e0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 2b2f0 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 ng length$sourc
2b300 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  eId] == 0} then
2b310 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2b320 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75   set sourceId nu
2b330 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..
2b340 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  }..            t
2b350 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2b360 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 2b370 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a$sourceId \n]..
2b380 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2b390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2b3a0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2b3b0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 2b3c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 2b3d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2b3e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 2b3f0 4e 4f 54 45 3a 20 52 65 73 65 74 20 63 61 63 68 NOTE: Reset cach 2b400 65 64 20 22 62 72 65 61 6b 20 69 6e 74 6f 20 64 ed "break into d 2b410 65 62 75 67 67 65 72 22 20 73 65 74 74 69 6e 67 ebugger" setting 2b420 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20 so that it can 2b430 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 be.. # 2b440 20 20 20 20 75 73 65 64 20 64 75 72 69 6e 67 20 used during 2b450 74 68 65 20 74 65 73 74 20 66 69 6c 65 2c 20 69 the test file, i 2b460 66 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 f needed... 2b470 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 2b480 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 2b490 3a 3a 6e 6f 28 72 65 73 65 74 42 72 65 61 6b 49 ::no(resetBreakI 2b4a0 6e 74 6f 44 65 62 75 67 67 65 72 29 5d 20 26 26 ntoDebugger)] && 2b4b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2b4c0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 2b4d0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 2b4e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 2b4f0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 2b500 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 2b510 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 2b520 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 2b530 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 2b540 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 48 65 6c .Data.SQLite.Hel 2b550 70 65 72 4d 65 74 68 6f 64 73 20 52 65 73 65 74 perMethods Reset 2b560 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65 BreakIntoDebugge 2b570 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 72 r.. } r 2b580 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 2b590 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2b5a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2b5b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2b5c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2b5d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c        "---- call
2b5e0 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f 44   ResetBreakIntoD
2b5f0 65 62 75 67 67 65 72 28 29 2e 2e 2e 20 6f 6b 5c  ebugger()... ok\
2b600 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n"]..          }
2b610 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2b620 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2b630 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 2b640 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 2b650 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 2b660 63 61 6c 6c 20 52 65 73 65 74 42 72 65 61 6b 49 call ResetBreakI 2b670 6e 74 6f 44 65 62 75 67 67 65 72 28 29 2e 2e 2e ntoDebugger()... 2b680 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 2b690 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c \n\ 2b6a0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
2b6b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2b6c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2b6d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2b6e0 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76  TE: Check the av
2b6f0 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28  ailable builds (
2b700 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20  and "releases")
2b710 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20  of SQLite and..
2b720 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53         #       S
2b730 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2b740 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
2b750 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53         checkForS
2b760 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74  QLiteBuilds $::t 2b770 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 est_channel.. 2b780 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 2b790 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 iteReleases$::t
2b7a0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20  est_channel....
2b7b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2b7c0 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77    # NOTE: Now, w
2b7d0 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69  e need to know i
2b7e0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
2b7f0 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61  e library is ava
2b800 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  ilable..
2b810 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65  #       (i.e. be
2b820 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65  cause the manage
2b830 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61  d-only System.Da
2b840 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62  ta.SQLite assemb
2b850 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20  ly can..
2b860 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74  #       load wit
2b870 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72  hout it; however
2b880 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61  , it cannot do a
2b890 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77  nything useful w
2b8a0 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20  ithout..
2b8b0 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66  #       it).  If
2b8c0 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68   we are using th
2b8d0 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  e mixed-mode ass
2b8e0 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72  embly and we alr
2b8f0 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20  eady..        #
2b900 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28        found it (
2b910 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f  above), this sho
2b920 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65  uld always succe
2b930 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
2b940 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2b950 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a  SQLiteLibrary $: 2b960 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 2b970 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2b980 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 2b990 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 k if the SQLite 2b9a0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 interop assembly 2b9b0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a is available... 2b9c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2b9d0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 2b9e0 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 eInterop$::test
2b9f0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
2ba00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2ba10 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65   NOTE: Check the
2ba20 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65   SQLite database
2ba30 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64   and temporary d
2ba40 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20  irectories...
2ba50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2ba60 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
2ba70 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73  rectories $::tes 2ba80 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 2ba90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2baa0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt 2bab0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 to determine if 2bac0 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d various compile- 2bad0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 time options nee 2bae0 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 ded for.. 2baf0 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f # test co 2bb00 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 nstraints were e 2bb10 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d nabled for the m 2bb20 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e anaged assembly. 2bb30 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 There.. 2bb40 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d # are som 2bb50 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f e compile-time o 2bb60 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 ptions that must 2bb70 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 also have been 2bb80 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 enabled.. 2bb90 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 # for the 2bba0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 2bbb0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 y in order to be 2bbc0 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 effective. For 2bbd0 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 those.. 2bbe0 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c # options, 2bbf0 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 it will be assu 2bc00 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20 med that it was 2bc10 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 enabled for the 2bc20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 interop.. 2bc30 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c # assembl 2bc40 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 y if it was enab 2bc50 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 led for the mana 2bc60 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 ged assembly... 2bc70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2bc80 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 foreach define 2bc90 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c Constant [list \ 2bca0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48 .. CH 2bcb0 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f ECK_STATE COUNT_ 2bcc0 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 HANDLE DEBUG INT 2bcd0 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 EROP_CODEC INTER 2bce0 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 OP_DEBUG \.. 2bcf0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ 2bd00 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 EXTENSION_FUNCTI 2bd10 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 ONS INTEROP_FTS5 2bd20 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 _EXTENSION \.. 2bd30 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 2bd40 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 P_INCLUDE_CEROD 2bd50 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f INTEROP_INCLUDE_ 2bd60 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e EXTRA INTEROP_IN 2bd70 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20 CLUDE_SEE \.. 2bd80 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 INTEROP 2bd90 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20 _INCLUDE_ZIPVFS 2bda0 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 INTEROP_JSON1_EX 2bdb0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 TENSION \.. 2bdc0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c INTEROP_L 2bdd0 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 EGACY_CLOSE INTE 2bde0 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f ROP_LOG INTEROP_ 2bdf0 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e PERCENTILE_EXTEN 2be00 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 SION \.. 2be10 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 INTEROP_REGE 2be20 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 XP_EXTENSION INT 2be30 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 EROP_SESSION_EXT 2be40 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 ENSION \.. 2be50 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 48 INTEROP_SH 2be60 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 A1_EXTENSION INT 2be70 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 EROP_TEST_EXTENS 2be80 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. 2be90 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50 INTEROP_TOTYP 2bea0 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 E_EXTENSION INTE 2beb0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c ROP_VIRTUAL_TABL 2bec0 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 E \.. 2bed0 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 4e NET_20 NET_35 N 2bee0 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 ET_40 NET_45 NET 2bef0 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54 _451 NET_452 NET 2bf00 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a 20 _46 NET_461 \.. 2bf10 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34 NET_4 2bf20 36 32 20 4e 45 54 5f 34 37 20 4e 45 54 5f 34 37 62 NET_47 NET_47 2bf30 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 1 NET_COMPACT_20 2bf40 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 PLATFORM_COMPAC 2bf50 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 TFRAMEWORK \.. 2bf60 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41 PRELOA 2bf70 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 D_NATIVE_LIBRARY 2bf80 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 51 RETARGETABLE SQ 2bf90 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d LITE_STANDARD \. 2bfa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48 52 . THR 2bfb0 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 OW_ON_DISPOSED T 2bfc0 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 RACE TRACE_CONNE 2bfd0 43 54 49 4f 4e 20 54 52 41 43 45 5f 44 45 54 45 CTION TRACE_DETE 2bfe0 43 54 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 CTION \.. 2bff0 20 20 20 20 20 54 52 41 43 45 5f 48 41 4e 44 4c TRACE_HANDL 2c000 45 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 E TRACE_PRELOAD 2c010 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 41 TRACE_SHARED TRA 2c020 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 5c 0d 0a CE_STATEMENT \.. 2c030 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41 43 TRAC 2c040 45 5f 57 41 52 4e 49 4e 47 20 54 52 41 43 4b 5f E_WARNING TRACK_ 2c050 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45 MEMORY_BYTES USE 2c060 5f 45 4e 54 49 54 59 5f 46 52 41 4d 45 57 4f 52 _ENTITY_FRAMEWOR 2c070 4b 5f 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 K_6 \.. 2c080 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 USE_INTEROP_D 2c090 4c 4c 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56 LL USE_PREPARE_V 2c0a0 32 20 57 49 4e 44 4f 57 53 5d 20 7b 0d 0a 20 20 2 WINDOWS] {.. 2c0b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2c0c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 2c0d0 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 69 6c ck if the compil 2c0e0 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 e-time option is 2c0f0 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 20 6c listed in the l 2c100 69 73 74 20 6f 66 0d 0a 20 20 20 20 20 20 20 20 ist of.. 2c110 20 20 23 20 20 20 20 20 20 20 22 64 65 66 69 6e # "defin 2c120 65 20 63 6f 6e 73 74 61 6e 74 73 22 20 6b 65 70 e constants" kep 2c130 74 20 74 72 61 63 6b 20 6f 66 20 62 79 20 74 68 t track of by th 2c140 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 e managed assemb 2c150 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ly... # 2c160 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 .. chec 2c170 6b 46 6f 72 53 51 4c 69 74 65 44 65 66 69 6e 65 kForSQLiteDefine 2c180 43 6f 6e 73 74 61 6e 74 20 24 3a 3a 74 65 73 74 Constant$::test
2c190 5f 63 68 61 6e 6e 65 6c 20 24 64 65 66 69 6e 65  _channel $define 2c1a0 43 6f 6e 73 74 61 6e 74 0d 0a 20 20 20 20 20 20 Constant.. 2c1b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 2c1c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2c1d0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 : Attempt to det 2c1e0 65 72 6d 69 6e 65 20 69 66 20 76 61 72 69 6f 75 ermine if variou 2c1f0 73 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f s compile-time o 2c200 70 74 69 6f 6e 73 20 6e 65 65 64 65 64 20 66 6f ptions needed fo 2c210 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 r.. # 2c220 20 20 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 test constrai 2c230 6e 74 73 20 77 65 72 65 20 65 6e 61 62 6c 65 64 nts were enabled 2c240 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f 70 for the interop 2c250 20 61 73 73 65 6d 62 6c 79 20 61 6e 64 2f 6f 72 assembly and/or 2c260 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 2c270 20 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 for the SQLite 2c280 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a core library... 2c290 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2c2a0 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6d 70 69 foreach compi 2c2b0 6c 65 4f 70 74 69 6f 6e 20 5b 6c 69 73 74 20 5c leOption [list \ 2c2c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 4f .. CO 2c2d0 44 45 43 20 45 58 54 45 4e 53 49 4f 4e 5f 46 55 DEC EXTENSION_FU 2c2e0 4e 43 54 49 4f 4e 53 20 48 41 53 5f 43 4f 44 45 NCTIONS HAS_CODE 2c2f0 43 20 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20 C INCLUDE_CEROD 2c300 49 4e 43 4c 55 44 45 5f 45 58 54 52 41 20 5c 0d INCLUDE_EXTRA \. 2c310 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 43 . INC 2c320 4c 55 44 45 5f 53 45 45 20 49 4e 43 4c 55 44 45 LUDE_SEE INCLUDE 2c330 5f 5a 49 50 56 46 53 20 4a 53 4f 4e 31 5f 45 58 _ZIPVFS JSON1_EX 2c340 54 45 4e 53 49 4f 4e 20 4c 45 47 41 43 59 5f 43 TENSION LEGACY_C 2c350 4c 4f 53 45 20 4c 4f 47 20 5c 0d 0a 20 20 20 20 LOSE LOG \.. 2c360 20 20 20 20 20 20 20 20 50 45 52 43 45 4e 54 49 PERCENTI 2c370 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20 52 45 47 LE_EXTENSION REG 2c380 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 53 45 EXP_EXTENSION SE 2c390 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 SSION_EXTENSION 2c3a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 2c3b0 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 54 45 HA1_EXTENSION TE 2c3c0 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 54 4f 54 ST_EXTENSION TOT 2c3d0 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 56 49 YPE_EXTENSION VI 2c3e0 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 7b 0d 0a RTUAL_TABLE] {.. 2c3f0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2c400 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 2c410 68 65 63 6b 20 69 66 20 74 68 65 20 63 6f 6d 70 heck if the comp 2c420 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 20 ile-time option 2c430 69 73 20 6c 69 73 74 65 64 20 69 6e 20 74 68 65 is listed in the 2c440 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 20 20 20 list.. 2c450 20 23 20 20 20 20 20 20 20 6b 65 70 74 20 74 72 # kept tr 2c460 61 63 6b 20 6f 66 20 62 79 20 74 68 65 20 69 6e ack of by the in 2c470 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 terop assembly a 2c480 6e 64 2f 6f 72 20 74 68 65 20 53 51 4c 69 74 65 nd/or the SQLite 2c490 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 2c4a0 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 core library 2c4b0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 2c4c0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2c4d0 6f 72 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f orSQLiteCompileO 2c4e0 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 ption$::test_ch
2c4f0 61 6e 6e 65 6c 20 24 63 6f 6d 70 69 6c 65 4f 70  annel $compileOp 2c500 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d tion.. }. 2c510 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2c520 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 2c530 65 63 6b 20 69 66 20 74 68 65 20 53 79 73 74 65 eck if the Syste 2c540 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 70 72 m.Data.SQLite pr 2c550 6f 76 69 64 65 72 20 77 61 73 20 63 6f 6d 70 69 ovider was compi 2c560 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 led with.. 2c570 20 20 23 20 20 20 20 20 20 20 73 75 70 70 6f 72 # suppor 2c580 74 20 66 6f 72 20 61 6e 79 20 65 6e 63 72 79 70 t for any encryp 2c590 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a ted databases... 2c5a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2c5b0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 2c5c0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 2c5d0 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43 5d 20 INTEROP_CODEC] 2c5e0 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 2c5f0 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 [haveSQLiteDef 2c600 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 ineConstant INTE 2c610 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 5d ROP_INCLUDE_SEE] 2c620 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2c630 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2c640 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 63 68 65 # NOTE: Now che 2c650 63 6b 20 69 66 20 74 68 65 20 69 6e 74 65 72 6f ck if the intero 2c660 70 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 61 p assembly was a 2c670 6c 73 6f 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 lso compiled wit 2c680 68 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 h.. # 2c690 20 20 20 20 20 73 75 70 70 6f 72 74 20 66 6f 72 support for 2c6a0 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61 62 encrypted datab 2c6b0 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 ases... 2c6c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 #.. if 2c6d0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 43 6f 6d {[haveSQLiteCom 2c6e0 70 69 6c 65 4f 70 74 69 6f 6e 20 43 4f 44 45 43 pileOption CODEC 2c6f0 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 2c700 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 [haveSQLit 2c710 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 49 eCompileOption I 2c720 4e 43 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 NCLUDE_SEE]} the 2c730 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2c740 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2c750 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c # NOTE: Finally, 2c760 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 53 51 check if the SQ 2c770 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 2c780 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 0d 0a y was compiled.. 2c790 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 2c7a0 20 20 20 20 77 69 74 68 20 73 75 70 70 6f 72 74 with support 2c7b0 20 66 6f 72 20 65 6e 63 72 79 70 74 65 64 20 64 for encrypted d 2c7c0 61 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 atabases... 2c7d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2c7e0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS 2c7f0 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 QLiteCompileOpti 2c800 6f 6e 20 48 41 53 5f 43 4f 44 45 43 5d 7d 20 74 on HAS_CODEC]} t 2c810 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2c820 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2c830 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 # NOTE: Ye 2c840 73 2c 20 61 64 64 20 63 6f 6e 73 74 72 61 69 6e s, add constrain 2c850 74 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 t for use by the 2c860 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 2c870 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 2c880 20 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 add 2c890 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 Constraint Syste 2c8a0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 6e m.Data.SQLite.En 2c8b0 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 cryption.. 2c8c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2c8d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 2c8e0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 2c8f0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 2c900 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 eck the current 2c910 62 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 build year. Bas 2c920 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 ically, this ind 2c930 69 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 icates.. 2c940 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76 65 # which ve 2c950 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 rsion of MSBuild 2c960 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 and/or Visual S 2c970 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 tudio was used t 2c980 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 o.. # 2c990 20 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 compile the a 2c9a0 73 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 ssembly binaries 2c9b0 20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 under test... 2c9c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2c9d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2c9e0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2c9f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
2ca00 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e  king for System.
2ca10 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c  Data.SQLite buil
2ca20 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20  d year... "....
2ca30 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20         set year
2ca40 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a  [getBuildYear]..
2ca50 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
2ca60 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
2ca70 73 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65  s buildYear. $ye 2ca80 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 ar].. tpu 2ca90 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2caa0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
2cab0 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d  " $year \"\n]... 2cac0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
2cad0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c  ::test_channel \
2cae0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
2caf0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
2cb00 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2cb10 69 74 65 20 62 75 69 6c 64 20 6e 61 74 69 76 65  ite build native
2cb20 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20   year... "....
2cb30 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b        set year [
2cb40 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 59 65  getBuildNativeYe
2cb50 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64  ar]..        add
2cb60 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
2cb70 6e 64 41 72 67 73 20 62 75 69 6c 64 4e 61 74 69  ndArgs buildNati
2cb80 76 65 59 65 61 72 2e 20 24 79 65 61 72 5d 0d 0a  veYear. $year].. 2cb90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2cba0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
2cbb0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 79 65  ppendArgs \" $ye 2cbc0 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 ar \"\n].... 2cbd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2cbe0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 2cbf0 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 2e current build . 2cc00 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 NET Framework. 2cc10 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d Basically, this. 2cc20 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 2cc30 20 69 6e 64 69 63 61 74 65 73 20 77 68 69 63 68 indicates which 2cc40 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 version of the 2cc50 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 69 .NET Framework i 2cc60 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20 20 20 s being.. 2cc70 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 # used by 2cc80 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 the assembly bi 2cc90 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 naries under tes 2cca0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. 2ccb0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2ccc0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2ccd0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2cce0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
2ccf0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2cd00 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 46 72 61  e build .NET Fra
2cd10 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20  mework... "....
2cd20 20 20 20 20 20 20 20 73 65 74 20 6e 65 74 46 78         set netFx
2cd30 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 5d   [getBuildNetFx]
2cd40 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
2cd50 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
2cd60 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77 6f  rgs buildFramewo
2cd70 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20 20  rk. $netFx].. 2cd80 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2cd90 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2cda0 6e 64 41 72 67 73 20 5c 22 20 24 6e 65 74 46 78  ndArgs \" $netFx 2cdb0 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 \"\n].... 2cdc0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2cdd0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 OTE: Check the c 2cde0 75 72 72 65 6e 74 20 62 75 69 6c 64 20 63 6f 6e urrent build con 2cdf0 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 69 figuration. Thi 2ce00 73 20 73 68 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c s should normall 2ce10 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 2ce20 20 20 20 62 65 20 65 69 74 68 65 72 20 22 44 65 be either "De 2ce30 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65 bug" or "Release 2ce40 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 "... #.. 2ce50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2ce60 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2ce80 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
2ce90 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
2cea0 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72  e build configur
2ceb0 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20  ation... "....
2cec0 20 20 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67        set config
2ced0 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 69 6c  uration [getBuil
2cee0 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d  dConfiguration].
2cef0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
2cf00 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2cf10 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72  gs buildConfigur
2cf20 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67 75 72  ation. $configur 2cf30 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ation].. 2cf40 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2cf50 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2cf60 73 20 5c 22 20 24 63 6f 6e 66 69 67 75 72 61 74  s \" $configurat 2cf70 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 20 ion \"\n].... 2cf80 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2cf90 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
2cfa0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
2cfb0 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73  checking for Sys
2cfc0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
2cfd0 62 75 69 6c 64 20 65 78 74 72 61 2e 2e 2e 20 22  build extra... "
2cfe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2cff0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
2d000 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
2d010 20 62 75 69 6c 64 20 65 78 74 72 61 20 64 69 72   build extra dir
2d020 65 63 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69  ectory.  This wi
2d030 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20  ll normally..
2d040 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
2d050 65 69 74 68 65 72 20 22 6e 65 74 73 74 61 6e 64  either "netstand
2d060 61 72 64 32 2e 30 22 20 6f 72 20 61 6e 20 65 6d  ard2.0" or an em
2d070 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20  pty string...
2d080 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2d090 73 65 74 20 65 78 74 72 61 20 5b 67 65 74 42 75  set extra [getBu
2d0a0 69 6c 64 45 78 74 72 61 5d 0d 0a 0d 0a 20 20 20  ildExtra]....
2d0b0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
2d0c0 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20   length $extra] 2d0d0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 2d0e0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 2d0f0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2d100 20 62 75 69 6c 64 45 78 74 72 61 2e 20 24 65 78 buildExtra.$ex
2d110 74 72 61 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  tra]..
2d120 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 2d130 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 2d140 73 20 5c 22 20 24 65 78 74 72 61 20 5c 22 5c 6e s \"$extra \"\n
2d150 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  ]..        } els
2d160 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61  e {..          a
2d170 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69  ddConstraint bui
2d180 6c 64 45 78 74 72 61 2e 6e 6f 6e 65 0d 0a 20 20  ldExtra.none..
2d190 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2d1a0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 3c 6e :test_channel <n 2d1b0 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 one>\n.. 2d1c0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 2d1d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2d1e0 54 72 79 20 74 6f 20 73 65 74 75 70 20 61 6e 20 Try to setup an 2d1f0 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 interrupt callba 2d200 63 6b 20 75 73 69 6e 67 20 74 68 65 20 73 63 72 ck using the scr 2d210 69 70 74 20 64 65 62 75 67 67 65 72 0d 0a 20 20 ipt debugger.. 2d220 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2d230 61 74 20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 at will cancel a 2d240 6c 6c 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 ll SQL queries i 2d250 6e 20 70 72 6f 67 72 65 73 73 20 66 6f 72 20 61 n progress for a 2d260 6c 6c 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 ll database.. 2d270 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 2d280 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 nections known t 2d290 6f 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 o this interpret 2d2a0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a er... #.. 2d2b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2d2c0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s 2d2d0 71 6c 69 74 65 49 6e 74 65 72 72 75 70 74 43 61 qliteInterruptCa 2d2e0 6c 6c 62 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b llback)]} then { 2d2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 75 .. setu 2d300 70 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c pDbInterruptCall 2d310 62 61 63 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 back$::test_cha
2d320 6e 6e 65 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67  nnel $::test_log 2d330 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 2d340 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2d350 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 2d360 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20 72 for the native r 2d370 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 untime option, w 2d380 68 69 63 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 hich would mean 2d390 77 65 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 we are.. 2d3a0 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 74 68 # using th 2d3b0 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 2d3c0 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 embly... 2d3d0 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b #.. check 2d3e0 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e ForRuntimeOption 2d3f0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2d400 20 6e 61 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20   native....
2d410 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
2d420 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
2d430 68 65 20 74 65 73 74 20 73 75 69 74 65 20 73 68  he test suite sh
2d440 6f 75 6c 64 20 63 6f 75 6e 74 20 74 68 65 20 6e  ould count the n
2d450 75 6d 62 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74  umber of connect
2d460 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20  ions..        #
2d470 20 20 20 20 20 20 22 6f 70 65 6e 65 64 22 20 61        "opened" a
2d480 6e 64 20 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d  nd "closed" from
2d490 20 74 68 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64   the pool when d
2d4a0 65 74 65 72 6d 69 6e 69 6e 67 20 69 66 20 61 20  etermining if a
2d4b0 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
2d4c0 20 20 20 20 20 20 70 61 73 73 65 64 2e 20 20 44        passed.  D
2d4d0 69 73 61 62 6c 69 6e 67 20 74 68 69 73 20 62 65  isabling this be
2d4e0 68 61 76 69 6f 72 20 69 73 20 73 6f 6d 65 74 69  havior is someti
2d4f0 6d 65 73 20 6e 65 63 65 73 73 61 72 79 20 28 65  mes necessary (e
2d500 2e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  .g...        #
2d510 20 20 20 20 20 64 75 72 69 6e 67 20 74 68 65 20       during the
2d520 72 65 6c 65 61 73 65 20 74 65 73 74 69 6e 67 20  release testing
2d530 70 72 6f 63 65 73 73 29 20 62 65 63 61 75 73 65  process) because
2d540 20 74 68 65 72 65 20 61 72 65 20 73 65 76 65 72   there are sever
2d550 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  al..        #
2d560 20 20 20 20 74 65 73 74 73 20 74 68 61 74 20 72      tests that r
2d570 65 6c 79 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e  ely on the "open
2d580 65 64 20 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f  ed from pool" co
2d590 75 6e 74 20 62 65 69 6e 67 20 67 72 65 61 74 65  unt being greate
2d5a0 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
2d5b0 20 20 20 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54     than zero.  T
2d5c0 68 65 73 65 20 74 65 73 74 73 20 6d 61 79 20 66  hese tests may f
2d5d0 61 69 6c 20 64 75 65 20 74 6f 20 74 68 65 20 6e  ail due to the n
2d5e0 6f 6e 2d 64 65 74 65 72 6d 69 6e 69 73 74 69 63  on-deterministic
2d5f0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2d600 20 20 62 65 68 61 76 69 6f 72 20 6f 66 20 74 68    behavior of th
2d610 65 20 43 4c 52 20 47 43 2c 20 65 76 65 6e 20 77  e CLR GC, even w
2d620 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no
2d630 62 75 67 20 69 6e 20 74 68 65 20 63 6f 64 65 0d  bug in the code.
2d640 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2d650 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a   being tested...
2d660 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2d670 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69     checkForRunti
2d680 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74  meOption $::test 2d690 5f 63 68 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 _channel noPoolC 2d6a0 6f 75 6e 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 ounts.... 2d6b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2d6c0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 2d6d0 20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 test suite shou 2d6e0 6c 64 20 75 73 65 20 73 68 61 72 65 64 2d 63 61 ld use shared-ca 2d6f0 63 68 65 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 che mode... 2d700 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 2d710 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70 74 eckForRuntimeOpt 2d720 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ion$::test_chan
2d730 6e 65 6c 20 73 68 61 72 65 64 43 61 63 68 65 0d  nel sharedCache.
2d740 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2d750 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
2d760 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63  port the resourc
2d770 65 20 75 73 61 67 65 20 70 72 69 6f 72 20 74 6f  e usage prior to
2d780 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 74 65 73   running any tes
2d790 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ts...        #..
2d7a0 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51          reportSQ
2d7b0 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a  LiteResources $: 2d7c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d :test_channel... 2d7d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2d7e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 # NOTE: Grab 2d7f0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 the list of nat 2d800 69 76 65 20 6d 6f 64 75 6c 65 73 20 66 6f 72 20 ive modules for 2d810 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 the current proc 2d820 65 73 73 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 ess and.. 2d830 20 23 20 20 20 20 20 20 20 72 65 70 6f 72 74 20 # report 2d840 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 on the System.Da 2d850 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 ta.SQLite relate 2d860 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 d ones... 2d870 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 2d880 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 2d890 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 2d8a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 2d8b0 20 6d 6f 64 75 6c 65 73 20 5b 6f 62 6a 65 63 74 modules [object 2d8c0 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 invoke \.. 2d8d0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 2d8e0 44 69 61 67 6e 6f 73 74 69 63 73 2e 50 72 6f 63 Diagnostics.Proc 2d8f0 65 73 73 2e 47 65 74 43 75 72 72 65 6e 74 50 72 ess.GetCurrentPr 2d900 6f 63 65 73 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a ocess Modules].. 2d910 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 2d920 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 ct foreach -alia 2d930 73 20 6d 6f 64 75 6c 65 20 24 6d 6f 64 75 6c 65 s module$module
2d940 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
2d950 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
2d960 23 20 4e 4f 54 45 3a 20 54 68 65 20 6d 6f 64 75  # NOTE: The modu
2d970 6c 65 20 66 69 6c 65 20 6e 61 6d 65 20 68 65 72  le file name her
2d980 65 20 6d 75 73 74 20 62 65 20 6e 6f 72 6d 61 6c  e must be normal
2d990 69 7a 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  ized...
2d9a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2d9b0 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
2d9c0 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b  file normalize [
2d9d0 24 6d 6f 64 75 6c 65 20 46 69 6c 65 4e 61 6d 65  $module FileName 2d9e0 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]].. 2d9f0 73 65 74 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 set fileNameOnly 2da00 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
2da10 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  eName]....
2da20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72        if {[lsear
2da30 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73  ch -exact -nocas
2da40 65 20 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20  e -- \..
2da50 20 20 20 20 20 20 20 20 5b 67 65 74 4e 61 74 69          [getNati
2da60 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d  veLibraryFileNam
2da70 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d  esOnly] $fileNam 2da80 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68 eOnly] != -1} th 2da90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2daa0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
2dab0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
2dac0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
2dad0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2dae0 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51   found loaded SQ
2daf0 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 72  Lite native libr
2db00 61 72 79 20 6d 6f 64 75 6c 65 3a 20 22 20 5c 0d  ary module: " \.
2db10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2db20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c 6e 5d     $fileName \n] 2db30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 2db40 65 6c 73 65 69 66 20 7b 5b 6c 73 65 61 72 63 68 elseif {[lsearch 2db50 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 -exact -nocase 2db60 2d 2d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 -- \.. 2db70 20 20 20 20 20 20 5b 67 65 74 49 6e 74 65 72 6f [getIntero 2db80 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d pAssemblyFileNam 2db90 65 73 4f 6e 6c 79 5d 20 24 66 69 6c 65 4e 61 6d esOnly]$fileNam
2dba0 65 4f 6e 6c 79 5d 20 21 3d 20 2d 31 7d 20 74 68  eOnly] != -1} th
2dbb0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2dbc0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2dbd0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 2dbe0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 2dbf0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2dc00 20 66 6f 75 6e 64 20 6c 6f 61 64 65 64 20 53 51 found loaded SQ 2dc10 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 2dc20 65 6d 62 6c 79 20 6d 6f 64 75 6c 65 3a 20 22 20 embly module: " 2dc30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2dc40 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20 5c$fileName \
2dc50 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
2dc60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
2dc70 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2dc80 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
2dc90 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2dca0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 2dcb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 2dcc0 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74 69 6d ---- compile-tim 2dcd0 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20 53 51 e options for SQ 2dce0 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 Lite core librar 2dcf0 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 2dd00 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 2dd10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 2dd20 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 2dd30 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 2dd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2dd50 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2dd60 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 ite.SQLite3 SQLi 2dd70 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 teCompileOptions 2dd80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 6f .. } co 2dd90 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d mpileOptions] == 2dda0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2ddb0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2ddc0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
2ddd0 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d 61  ppendArgs [forma
2dde0 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d 0a  tList [lsort \..
2ddf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2de00 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d  $compileOptions] 2de10 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 <none>] \n].. 2de20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 2de30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 2de40 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
2de50 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20  nel unknown\n..
2de60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2de70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2de80 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20   catch {..
2de90 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2dea0 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 2deb0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2dec0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 compile-time op 2ded0 74 69 6f 6e 73 20 66 6f 72 20 53 51 4c 69 74 65 tions for SQLite 2dee0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 2def0 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 y... ".... 2df00 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 2df10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 .. ob 2df20 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 2df30 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 2df40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2df50 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2df60 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65 ite.SQLite3 Inte 2df70 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e ropCompileOption 2df80 73 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 63 s.. } c 2df90 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d ompileOptions] = 2dfa0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 2dfb0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
2dfc0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
2dfd0 61 70 70 65 6e 64 41 72 67 73 20 5b 66 6f 72 6d  appendArgs [form
2dfe0 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5c 0d  atList [lsort \.
2dff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2e000 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73   $compileOptions 2e010 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 ] <none>] \n].. 2e020 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 2e030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 2e040 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
2e050 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a  nnel unknown\n..
2e060 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2e070 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2e080 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
2e090 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 20 61 63  OTE: Show the ac
2e0a0 74 69 76 65 20 74 65 73 74 20 63 6f 6e 73 74 72  tive test constr
2e0b0 61 69 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20  aints...
2e0c0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
2e0d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2e0e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d [appendArgs "-- 2e0f0 2d 2d 20 63 6f 6e 73 74 72 61 69 6e 74 73 3a 20 -- constraints: 2e100 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 2e110 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 2e120 6f 72 74 20 5b 67 65 74 43 6f 6e 73 74 72 61 69 ort [getConstrai 2e130 6e 74 73 5d 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c 6e nts]] <none>] \n 2e140 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ].... #.. 2e150 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2e160 53 61 76 65 20 74 68 65 20 74 65 73 74 20 63 6f Save the test co 2e170 6e 73 74 72 61 69 6e 74 73 20 66 6f 72 20 75 73 nstraints for us 2e180 65 20 62 79 20 74 68 72 65 61 64 73 20 63 72 65 e by threads cre 2e190 61 74 65 64 20 69 6e 20 74 68 69 73 0d 0a 20 20 ated in this.. 2e1a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70 # ap 2e1b0 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e plication domain 2e1c0 2e 20 20 54 68 69 73 20 69 73 20 6e 65 63 65 73 . This is neces 2e1d0 73 61 72 79 20 62 65 63 61 75 73 65 20 61 6c 6c sary because all 2e1e0 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 the Eagle.. 2e1f0 20 20 20 20 23 20 20 20 20 20 20 20 22 74 65 73 # "tes 2e200 74 20 63 6f 6e 74 65 78 74 22 20 69 6e 66 6f 72 t context" infor 2e210 6d 61 74 69 6f 6e 20 69 73 20 70 65 72 2d 74 68 mation is per-th 2e220 72 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 read... # 2e230 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 2e240 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 info exists ::te 2e250 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 5d 7d st_constraints]} 2e260 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2e270 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f set ::test_co 2e280 6e 73 74 72 61 69 6e 74 73 20 24 3a 3a 65 61 67 nstraints$::eag
2e290 6c 65 5f 74 65 73 74 73 28 43 6f 6e 73 74 72 61  le_tests(Constra
2e2a0 69 6e 74 73 29 0d 0a 20 20 20 20 20 20 20 20 7d  ints)..        }
2e2b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
2e2c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
2e2d0 6f 61 64 20 74 68 65 20 22 61 66 74 65 72 2d 63  oad the "after-c
2e2e0 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75 73 74  onstraints" cust
2e2f0 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 2f  om per-user and/
2e300 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20  or per-host..
2e310 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
2e320 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d  t settings now..
2e330 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2e340 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c      uplevel 1 [l
2e350 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65 54 65  ist loadSQLiteTe
2e360 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a 74 65  stSettings $::te 2e370 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 61 66 74 65 st_channel .afte 2e380 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d r].... #. 2e390 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 2e3a0 20 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 65 If necessary, e 2e3b0 6e 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 nable shared-cac 2e3c0 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 he mode now... 2e3d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2e3e0 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 if {[hasRuntime 2e3f0 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 Option sharedCac 2e400 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 he]} then {.. 2e410 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 enableSha 2e420 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 redCache$::test
2e430 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20  _channel true..
2e440 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e450 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2e460 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 65 6e   NOTE: Show when
2e470 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 75 61   our tests actua
2e480 6c 6c 79 20 62 65 67 61 6e 20 28 6e 6f 77 29 2e  lly began (now).
2e490 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2e4a0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 2e4b0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 2e4c0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 2e4d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 "---- Syst 2e4e0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 em.Data.SQLite t 2e4f0 65 73 74 73 20 62 65 67 61 6e 20 61 74 20 22 20 ests began at " 2e500 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 2e510 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c clock format [cl 2e520 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e ock seconds]] \n 2e530 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 2e540 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 2e550 75 6e 53 51 4c 69 74 65 54 65 73 74 46 69 6c 65 unSQLiteTestFile 2e560 73 50 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a sPrologue {} {.. 2e570 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 2e580 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e NOTE: Skip runn 2e590 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 66 ing our custom f 2e5a0 69 6c 65 73 20 70 72 6f 6c 6f 67 75 65 20 69 66 iles prologue if 2e5b0 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 2e5c0 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 2e5d0 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 2e5e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 2e5f0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2e600 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 ::no(prologue.e 2e610 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 2e620 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 uplevel 2e630 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 1 {.. # 2e640 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f .. # NO 2e650 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 76 61 TE: Setup the va 2e660 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 65 66 riables that ref 2e670 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f 75 er to the variou 2e680 73 20 6e 6f 6e 2d 64 61 74 61 20 66 69 6c 65 73 s non-data files 2e690 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 2e6a0 20 20 20 20 72 65 71 75 69 72 65 64 20 62 79 20 required by 2e6b0 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68 69 the tests in thi 2e6c0 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 s file... 2e6d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2e6e0 73 65 74 20 65 6e 74 69 74 79 46 72 61 6d 65 77 set entityFramew 2e6f0 6f 72 6b 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 orkDllFile \.. 2e700 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 2e710 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 45 6e BuildFileName En 2e720 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 2e 64 6c tityFramework.dl 2e730 6c 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 l false].... 2e740 20 20 20 20 20 20 73 65 74 20 69 6e 73 74 61 6c set instal 2e750 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 lerExeFile \.. 2e760 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 2e770 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49 6e BuildFileName In 2e780 73 74 61 6c 6c 65 72 2e 65 78 65 20 66 61 6c 73 staller.exe fals 2e790 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 2e7a0 73 65 74 20 73 71 6c 69 74 65 44 65 73 69 67 6e set sqliteDesign 2e7b0 65 72 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 erDllFile \.. 2e7c0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 2e7d0 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 51 4c uildFileName SQL 2e7e0 69 74 65 2e 44 65 73 69 67 6e 65 72 2e 64 6c 6c ite.Designer.dll 2e7f0 20 66 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 false].... 2e800 20 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 set systemD 2e810 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 ataSQLiteDllFile 2e820 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2e830 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 2e840 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 2e850 53 51 4c 69 74 65 2e 64 6c 6c 20 66 61 6c 73 65 SQLite.dll false 2e860 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ].... s 2e870 65 74 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c et systemDataSQL 2e880 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 20 5c iteLinqDllFile \ 2e890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2e8a0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam 2e8b0 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 e System.Data.SQ 2e8c0 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 66 61 Lite.Linq.dll fa 2e8d0 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 lse].... 2e8e0 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 set systemData 2e8f0 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 SQLiteEf6DllFile 2e900 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2e910 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e [getBuildFileN 2e920 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 2e930 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20 66 SQLite.EF6.dll f 2e940 61 6c 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 alse].... 2e950 20 20 20 73 65 74 20 74 65 73 74 45 78 65 46 69 set testExeFi 2e960 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 le [getBuildFile 2e970 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 20 66 61 Name test.exe fa 2e980 6c 73 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 lse].. 2e990 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46 set testLinqExeF 2e9a0 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ile [getBuildFil 2e9b0 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 eName testlinq.e 2e9c0 78 65 20 66 61 6c 73 65 5d 0d 0a 20 20 20 20 20 xe false].. 2e9d0 20 20 20 20 20 73 65 74 20 74 65 73 74 45 66 36 set testEf6 2e9e0 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c ExeFile [getBuil 2e9f0 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 dFileName testef 2ea00 36 2e 65 78 65 20 66 61 6c 73 65 5d 0d 0a 0d 0a 6.exe false].... 2ea10 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2ea20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 2ea30 65 74 75 70 20 74 68 65 20 76 61 72 69 61 62 6c etup the variabl 2ea40 65 73 20 74 68 61 74 20 72 65 66 65 72 20 74 6f es that refer to 2ea50 20 74 68 65 20 76 61 72 69 6f 75 73 20 64 61 74 the various dat 2ea60 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 a files.. 2ea70 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 # requi 2ea80 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 red by the tests 2ea90 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a in this file... 2eaa0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2eab0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c set testL 2eac0 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 inqOutFile [file 2ead0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2eae0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2eaf0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2eb00 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2eb10 74 65 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a testlinq.out]].. 2eb20 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2eb30 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c northwindEfDbFil 2eb40 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2eb50 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2eb60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2eb70 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 file dirname [fi 2eb80 6c 65 20 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 le dirname [getS 2eb90 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 2eba0 68 5d 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 h]]] \.. 2ebb0 20 20 20 20 20 20 74 65 73 74 6c 69 6e 71 20 6e testlinq n 2ebc0 6f 72 74 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d orthwindEF.db]]. 2ebd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 ... set 2ebe0 20 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 nonWalDbFile [f 2ebf0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 2ec00 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 2ec10 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 2ec20 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 2ec30 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a h] nonWal.db]].. 2ec40 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2ec50 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 walDbFile [file 2ec60 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2ec70 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2ec80 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 2ec90 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 77 eTestDataPath] w 2eca0 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 al.db]].... 2ecb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2ecc0 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 # NOTE: The va 2ecd0 72 69 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e rious install/un 2ece0 69 6e 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 install log file 2ecf0 73 20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 s used to test t 2ed00 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 he.. # 2ed10 20 20 20 20 20 20 64 65 73 69 67 6e 2d 74 69 6d design-tim 2ed20 65 20 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 e component inst 2ed30 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 aller... 2ed40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 2ed50 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 et testInstallVs 2ed60 32 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 2005LogFile [fil 2ed70 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 2ed80 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. 2ed90 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c [getSQL 2eda0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d iteTestDataPath] 2edb0 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f Installer_Test_ 2edc0 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2005.log]].... 2edd0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 set te 2ede0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c stInstallVs2008L 2edf0 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 ogFile [file nat 2ee00 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 2ee10 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 2ee20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2ee30 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 stDataPath] Inst 2ee40 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 aller_Test_Vs200 2ee50 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 8.log]].... 2ee60 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 set testIns 2ee70 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 2ee80 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 2ee90 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 2eea0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 2eeb0 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 getSQLiteTestDat 2eec0 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 aPath] Installer 2eed0 5f 54 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 _Test_Vs2010.log 2eee0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ]].... 2eef0 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 set testInstallV 2ef00 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 s2012LogFile [fi 2ef10 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 2ef20 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 ile join \.. 2ef30 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 2ef40 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 LiteTestDataPath 2ef50 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 ] Installer_Test 2ef60 5f 56 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2012.log]]... 2ef70 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 . set t 2ef80 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 estInstallVs2013 2ef90 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 2efa0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 2efb0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 2efc0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 2efd0 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 estDataPath] Ins 2efe0 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 2eff0 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 13.log]].... 2f000 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e set testIn 2f010 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 stallVs2015LogFi 2f020 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e le [file nativen 2f030 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ 2f040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2f050 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 [getSQLiteTestDa 2f060 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 taPath] Installe 2f070 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f r_Test_Vs2015.lo 2f080 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 g]].... 2f090 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c set testInstall 2f0a0 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 Vs2017LogFile [f 2f0b0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b ile nativename [ 2f0c0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 file join \.. 2f0d0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 [getS 2f0e0 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74 QLiteTestDataPat 2f0f0 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 h] Installer_Tes 2f100 74 5f 56 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d 0a t_Vs2017.log]].. 2f110 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 2f120 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 2f130 30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 005LogFile [file 2f140 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 2f150 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 e join \.. 2f160 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 [getSQLi 2f170 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 teTestDataPath] 2f180 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 Uninstaller_Test 2f190 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d _Vs2005.log]]... 2f1a0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 . set t 2f1b0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 2f1c0 30 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 08LogFile [file 2f1d0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 2f1e0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 2f1f0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 [getSQLit 2f200 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 eTestDataPath] U 2f210 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f ninstaller_Test_ 2f220 56 73 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a Vs2008.log]].... 2f230 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 set te 2f240 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 stUninstallVs201 2f250 30 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 0LogFile [file n 2f260 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 2f270 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 join \.. 2f280 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 [getSQLite 2f290 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e TestDataPath] Un 2f2a0 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 installer_Test_V 2f2b0 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 s2010.log]].... 2f2c0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 set tes 2f2d0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 tUninstallVs2012 2f2e0 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 LogFile [file na 2f2f0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 2f300 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oin \.. 2f310 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 [getSQLiteT 2f320 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 estDataPath] Uni 2f330 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 nstaller_Test_Vs 2f340 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 2012.log]].... 2f350 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 set test 2f360 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c UninstallVs2013L 2f370 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 ogFile [file nat 2f380 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 2f390 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 2f3a0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 [getSQLiteTe 2f3b0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e stDataPath] Unin 2f3c0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 staller_Test_Vs2 2f3d0 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 013.log]].... 2f3e0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 set testU 2f3f0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f ninstallVs2015Lo 2f400 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 gFile [file nati 2f410 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 vename [file joi 2f420 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 2f430 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 [getSQLiteTes 2f440 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 tDataPath] Unins 2f450 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 taller_Test_Vs20 2f460 31 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 15.log]].... 2f470 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e set testUn 2f480 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 installVs2017Log 2f490 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 File [file nativ 2f4a0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e ename [file join 2f4b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2f4c0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 [getSQLiteTest 2f4d0 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 DataPath] Uninst 2f4e0 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 aller_Test_Vs201 2f4f0 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 7.log]].... 2f500 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 2f510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2f520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2f530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 2f540 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 ##########.... 2f550 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2f560 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 2f570 68 65 63 6b 46 6f 72 53 71 6c 69 74 65 46 69 6c heckForSqliteFil 2f580 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 2f590 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2f5a0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 2f5b0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 2f5c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2f5d0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
2f5e0 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44  entityFrameworkD
2f5f0 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  llFile]]]} then
2f600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2f610 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 2f620 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 est_channel$ent
2f630 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46  ityFrameworkDllF
2f640 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
2f650 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
2f660 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
2f670 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2f680 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
2f690 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2f6a0 65 20 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65  e tail $installe 2f6b0 72 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 rExeFile]]]} the 2f6c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2f6d0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 2f6e0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69$test_channel $i 2f6f0 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 nstallerExeFile 2f700 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 Installer.exe.. 2f710 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2f720 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2f730 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2f740 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2f750 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2f760 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2f770 20 24 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72$sqliteDesigner
2f780 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  DllFile]]]} then
2f790 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2f7a0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $2f7b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 test_channel$sq
2f7c0 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46  liteDesignerDllF
2f7d0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
2f7e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
2f7f0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
2f800 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
2f810 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
2f820 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
2f830 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61  e tail $systemDa 2f840 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d taSQLiteDllFile] 2f850 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 2f860 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 2f870 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
2f880 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61  nnel $systemData 2f890 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 SQLiteDllFile.. 2f8a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2f8b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2f8c0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 2f8d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 2f8e0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 2f8f0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 2f900 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
2f910 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d  teLinqDllFile]]]
2f920 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2f930 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
2f940 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 2f950 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 el$systemDataSQ
2f960 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d  LiteLinqDllFile.
2f970 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2f980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2f990 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
2f9a0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
2f9b0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
2f9c0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
2f9d0 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51  il $systemDataSQ 2f9e0 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d LiteEf6DllFile]] 2f9f0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2fa00 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2fa10 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2fa20 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53  nel $systemDataS 2fa30 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d QLiteEf6DllFile. 2fa40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2fa50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2fa60 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2fa70 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2fa80 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2fa90 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2faa0 69 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d il$testExeFile]
2fab0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2fac0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2fad0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2fae0 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46 69 6c nnel$testExeFil
2faf0 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 20  e test.exe..
2fb00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2fb10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68           if {![h
2fb20 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
2fb30 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
2fb40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2fb50 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74     [file tail $t 2fb60 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d estLinqExeFile]] 2fb70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2fb80 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2fb90 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2fba0 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65  nel $testLinqExe 2fbb0 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 File testlinq.ex 2fbc0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 2fbd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2fbe0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 2fbf0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2fc00 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 2fc10 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 2fc20 74 61 69 6c 20 24 74 65 73 74 45 66 36 45 78 65 tail$testEf6Exe
2fc30 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d  File]]]} then {.
2fc40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63  .              c
2fc50 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 2fc60 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 t_channel$testE
2fc70 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 65 66  f6ExeFile testef
2fc80 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 20  6.exe..
2fc90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
2fca0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
2fcb0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
2fcc0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
2fcd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
2fce0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69  ile tail $testLi 2fcf0 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 nqOutFile]]]} th 2fd00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2fd10 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 checkForFile 2fd20 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24$test_channel $2fd30 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d testLinqOutFile. 2fd40 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2fd50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2fd60 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 2fd70 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 2fd80 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 2fd90 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 2fda0 69 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 il$northwindEfD
2fdb0 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  bFile]]]} then {
2fdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2fdd0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 2fde0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 st_channel$nort
2fdf0 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20  hwindEfDbFile..
2fe00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2fe10 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2fe20 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
2fe30 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
2fe40 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
2fe50 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
2fe60 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d   $nonWalDbFile]] 2fe70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 2fe80 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 2fe90 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
2fea0 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c  nel $nonWalDbFil 2feb0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 2fec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2fed0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 2fee0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 2fef0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 2ff00 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 2ff10 74 61 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d tail$walDbFile]
2ff20 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
2ff30 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
2ff40 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 2ff50 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d nnel$walDbFile.
2ff60 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ff70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2ff80 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
2ff90 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
2ffa0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
2ffb0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
2ffc0 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 2ffd0 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2005LogFile]]]} 2ffe0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2fff0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 30000 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
30010 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 30020 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2005LogFile.. 30030 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 30040 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 30050 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 30060 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 30070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 30080 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
30090 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
300a0 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  8LogFile]]]} the
300b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
300c0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
300d0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
300e0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38  estInstallVs2008
300f0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
30100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
30110 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
30120 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
30130 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
30140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30150 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 30160 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 InstallVs2010Log 30170 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 30180 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 30190 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
301a0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 301b0 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 nstallVs2010LogF 301c0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 301d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 301e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 301f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 30200 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 30210 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30220 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
30230 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
30240 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
30250 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
30260 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 30270 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 annel$testInsta
30280 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d  llVs2012LogFile.
30290 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
302a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
302b0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
302c0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
302d0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
302e0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
302f0 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 30300 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2013LogFile]]]} 30310 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 30320 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 30330 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
30340 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  l $testInstallVs 30350 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2013LogFile.. 30360 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 30370 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 30380 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 30390 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 303a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 303b0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
303c0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
303d0 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  5LogFile]]]} the
303e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
303f0 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
30400 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74  $test_channel$t
30410 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35  estInstallVs2015
30420 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20  LogFile..
30430 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
30440 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
30450 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
30460 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
30470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30480 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 30490 49 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 InstallVs2017Log 304a0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 304b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 304c0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
304d0 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49  t_channel $testI 304e0 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 nstallVs2017LogF 304f0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 30500 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 30510 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 30520 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 30530 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 30540 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30550 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e e tail$testUnin
30560 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69  stallVs2005LogFi
30570 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
30580 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
30590 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 305a0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
305b0 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46  nstallVs2005LogF
305c0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
305d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
305e0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
305f0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
30600 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
30610 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
30620 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e  e tail $testUnin 30630 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 stallVs2008LogFi 30640 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 30650 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 30660 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
30670 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 30680 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 nstallVs2008LogF 30690 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 306a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 306b0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 306c0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 306d0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 306e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 306f0 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e e tail$testUnin
30700 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
30710 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
30720 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
30730 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 30740 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
30750 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46  nstallVs2010LogF
30760 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
30770 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
30780 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
30790 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
307a0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
307b0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
307c0 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e  e tail $testUnin 307d0 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 stallVs2012LogFi 307e0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 307f0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 30800 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
30810 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 30820 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 nstallVs2012LogF 30830 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 30840 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 30850 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 30860 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 30870 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 30880 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30890 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e e tail$testUnin
308a0 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69  stallVs2013LogFi
308b0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
308c0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
308d0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 308e0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
308f0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
30900 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
30910 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
30920 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
30930 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
30940 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
30950 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
30960 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e  e tail $testUnin 30970 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 stallVs2015LogFi 30980 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 30990 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 309a0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
309b0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69  channel $testUni 309c0 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 nstallVs2015LogF 309d0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ile.. 309e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 309f0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 30a00 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 30a10 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 30a20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 30a30 65 20 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e e tail$testUnin
30a40 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69  stallVs2017LogFi
30a50 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
30a60 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
30a70 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 30a80 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 channel$testUni
30a90 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46  nstallVs2017LogF
30aa0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ile..
30ab0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
30ac0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
30ad0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
30ae0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74     proc runSQLit
30af0 65 54 65 73 74 46 69 6c 65 73 45 70 69 6c 6f 67  eTestFilesEpilog
30b00 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue {} {..      #
30b10 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
30b20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72  Skip running our
30b30 20 63 75 73 74 6f 6d 20 66 69 6c 65 73 20 65 70   custom files ep
30b40 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61  ilogue if the ma
30b50 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d  in one has been.
30b60 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
30b70 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
30b80 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
30b90 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
30ba0 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d  pilogue.eagle)]}
30bb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
30bc0 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20   uplevel 1 {..
30bd0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
30be0 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20  ocomplain \..
30bf0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55             testU
30c00 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f  ninstallVs2017Lo
30c10 67 46 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74  gFile testUninst
30c20 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
30c30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
30c40 20 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56    testUninstallV
30c50 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 74 65 73  s2013LogFile tes
30c60 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32  tUninstallVs2012
30c70 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20  LogFile \..
30c80 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69           testUni
30c90 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46  nstallVs2010LogF
30ca0 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c  ile testUninstal
30cb0 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c  lVs2008LogFile \
30cc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
30cd0 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32  testUninstallVs2
30ce0 30 30 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49  005LogFile testI
30cf0 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46  nstallVs2017LogF
30d00 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
30d10 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c       testInstall
30d20 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65  Vs2015LogFile te
30d30 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c  stInstallVs2013L
30d40 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  ogFile \..
30d50 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74          testInst
30d60 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
30d70 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
30d80 31 30 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20  10LogFile \..
30d90 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 49             testI
30da0 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
30db0 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56  ile testInstallV
30dc0 73 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a  s2005LogFile....
30dd0 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20            unset
30de0 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20  -nocomplain \..
30df0 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72               nor
30e00 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74  thwindEfDbFile t
30e10 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c  estLinqOutFile \
30e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
30e30 77 61 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c  walDbFile nonWal
30e40 44 62 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  DbFile....
30e50 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d      unset -nocom
30e60 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20  plain \..
30e70 20 20 20 20 20 20 20 74 65 73 74 45 66 36 45 78         testEf6Ex
30e80 65 46 69 6c 65 20 74 65 73 74 4c 69 6e 71 45 78  eFile testLinqEx
30e90 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  eFile \..
30ea0 20 20 20 20 20 20 20 74 65 73 74 45 78 65 46 69         testExeFi
30eb0 6c 65 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c  le systemDataSQL
30ec0 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d  iteEf6DllFile \.
30ed0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
30ee0 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c  ystemDataSQLiteL
30ef0 69 6e 71 44 6c 6c 46 69 6c 65 20 73 79 73 74 65  inqDllFile syste
30f00 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69  mDataSQLiteDllFi
30f10 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
30f20 20 20 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e      sqliteDesign
30f30 65 72 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c  erDllFile instal
30f40 6c 65 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20  lerExeFile \..
30f50 20 20 20 20 20 20 20 20 20 20 20 20 65 6e 74 69              enti
30f60 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69  tyFrameworkDllFi
30f70 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  le..        }..
30f80 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
30f90 0d 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51  ..    proc runSQ
30fa0 4c 69 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65  LiteTestEpilogue
30fb0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
30fc0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
30fd0 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
30fe0 75 73 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69  ustom epilogue i
30ff0 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68  f the main one h
31000 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23  as been..      #
31010 20 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d         skipped..
31020 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
31030 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
31040 73 20 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e  s ::no(epilogue.
31050 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
31060 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
31070 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
31080 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20   when our tests
31090 61 63 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28  actually ended (
310a0 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  now)...        #
310b0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
310c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 310d0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 310e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 310f0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 31100 69 74 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 ite tests ended 31110 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 at " \.. 31120 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 [clock forma 31130 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 t [clock seconds 31140 5d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ]] \n].... 31150 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 31160 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 OTE: Load the "e 31170 70 69 6c 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 pilogue" custom 31180 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 31190 70 65 72 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 per-host test.. 311a0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 311b0 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 311c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 311d0 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 311e0 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 311f0 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
31200 63 68 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75  channel .epilogu
31210 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  e]....        #.
31220 0a 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49  .        # BUGFI
31230 58 3a 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69  X: Before checki
31240 6e 67 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73  ng the final res
31250 6f 75 72 63 65 73 20 69 6e 20 75 73 65 20 62 79  ources in use by
31260 20 53 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20   SQLite, make..
31270 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
31280 20 73 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68   sure both of th
31290 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64  e PRAGMA related
312a0 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73   directory names
312b0 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20   are freed...
312c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
312d0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69  checkForSQLiteDi
312e0 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73  rectories $::tes 312f0 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a t_channel true.. 31300 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 31310 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 # NOTE: Als 31320 6f 20 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 o report the res 31330 6f 75 72 63 65 20 75 73 61 67 65 20 61 66 74 65 ource usage afte 31340 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 r running the te 31350 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 31360 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 . reportS 31370 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 QLiteResources$
31380 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
31390 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
313a0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70       # NOTE: Rep
313b0 6f 72 74 20 74 68 65 20 63 72 69 74 69 63 61 6c  ort the critical
313c0 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61   handle counts a
313d0 66 74 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65  fter running the
313e0 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20   tests...
313f0 20 23 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53   #..        getS
31400 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74  QLiteHandleCount
31410 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 31420 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 31430 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 31440 49 66 20 6e 65 63 65 73 73 61 72 79 2c 20 64 69 If necessary, di 31450 73 61 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 sable shared-cac 31460 68 65 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 he mode now... 31470 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 31480 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 if {[hasRuntime 31490 4f 70 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 Option sharedCac 314a0 68 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 he]} then {.. 314b0 20 20 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 enableSha 314c0 72 65 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 redCache$::test
314d0 5f 63 68 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a  _channel false..
314e0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
314f0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
31500 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
31510 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31520 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31530 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31540 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a 20  #############..
31550 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
31560 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31570 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c 59 20   END Eagle ONLY
31580 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
31590 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
315a0 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
315b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
315c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
315d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
315e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
315f0 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23  .  }....  #..  #
31600 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
31610 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69 72 65  name of the dire
31620 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
31630 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 23   this file...  #
31640 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65  ..  if {![info e
31650 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64 69 72  xists common_dir
31660 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
31670 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f 6e 5f  .    set common_
31680 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  directory [file
31690 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 73 63  dirname [info sc
316a0 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d 0a 20  ript]]..  }....
316b0 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 50 72   #..  # NOTE: Pr
316c0 6f 76 69 64 65 20 74 68 65 20 53 79 73 74 65 6d  ovide the System
316d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73  .Data.SQLite tes
316e0 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74 68 65  t package to the
316f0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20   interpreter...
31700 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20 70 72   #..  package pr
31710 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44 61 74  ovide System.Dat
31720 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20 31 2e  a.SQLite.Test 1.
31730 30 0d 0a 7d 0d 0a                                0..}..