System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact b2b72feda41b47930ea23ee7e9062a0402b35bab:

• File lib/System.Data.SQLite/common.eagle — part of check-in [02ed8cae60] at 2018-12-23 04:56:32 on branch trunk — Add HidePassword connection flag to remove the password from the connection string once the database is opened. Pursuant to [23d8d6171e]. (user: mistachkin size: 214152)

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 4e 61 74 69 76 65 20 7b 7d 20 7b  BuildNative {} {
0910: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0920: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
0930: 66 20 77 65 20 61 72 65 20 62 65 69 6e 67 20 66  f we are being f
0940: 6f 72 63 65 64 20 74 6f 20 74 72 65 61 74 20 74  orced to treat t
0950: 68 69 73 20 61 73 20 61 20 6e 61 74 69 76 65 20  his as a native
0960: 62 75 69 6c 64 2e 0d 0a 20 20 20 20 20 20 23 20  build...      #
0970: 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6e 6f        This is no
0980: 72 6d 61 6c 6c 79 20 64 6f 6e 65 20 28 61 75 74  rmally done (aut
0990: 6f 6d 61 74 69 63 61 6c 6c 79 29 20 6f 6e 6c 79  omatically) only
09a0: 20 77 68 65 6e 20 74 68 65 20 6d 69 78 65 64 2d   when the mixed-
09b0: 6d 6f 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20  mode..      #
09c0: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 73 20      assembly is
09d0: 69 6e 20 75 73 65 3b 20 68 6f 77 65 76 65 72 2c  in use; however,
09e0: 20 69 6e 20 73 6f 6d 65 20 63 69 72 63 75 6d 73   in some circums
09f0: 74 61 6e 63 65 73 20 69 74 20 69 73 20 75 73 65  tances it is use
0a00: 66 75 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ful..      #
0a10: 20 20 20 74 6f 20 66 6f 72 63 65 20 74 68 69 73     to force this
0a20: 20 62 65 68 61 76 69 6f 72 2e 0d 0a 20 20 20 20   behavior...
0a30: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
0a40: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
0a50: 73 74 5f 6e 61 74 69 76 65 5d 20 26 26 20 5c 0d  st_native] && \.
0a60: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
0a70: 6e 67 20 69 73 20 62 6f 6f 6c 65 61 6e 20 2d 73  ng is boolean -s
0a80: 74 72 69 63 74 20 24 3a 3a 74 65 73 74 5f 6e 61  trict $::test_na 0a90: 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tive]} then {.. 0aa0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
0ab0: 3a 74 65 73 74 5f 6e 61 74 69 76 65 0d 0a 20 20  :test_native..
0ac0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
0ad0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
0ae0: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  se..      }..
0af0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
0b00: 67 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20  getBuildYear {}
0b10: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0b20: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0b30: 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74   the "year" sett
0b40: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
0b50: 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75  rridden by the u
0b60: 73 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20  ser (e.g...
0b70: 20 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20   #       on the
0b80: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20  command line).
0b90: 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72  This helps contr
0ba0: 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68  ol exactly which
0bb0: 20 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23   set of..      #
0bc0: 20 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20         binaries
0bd0: 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20  we are testing,
0be0: 74 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75  those produced u
0bf0: 73 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20  sing the Visual
0c00: 53 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20  Studio..      #
0c10: 20 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38        2005, 2008
0c20: 2c 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32 30  , 2010, 2012, 20
0c30: 31 33 2c 20 32 30 31 35 2c 20 6f 72 20 32 30 31  13, 2015, or 201
0c40: 37 20 62 75 69 6c 64 20 73 79 73 74 65 6d 73 2e  7 build systems.
0c50: 20 20 54 6f 0d 0a 20 20 20 20 20 20 23 20 20 20    To..      #
0c60: 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68 69      override thi
0c70: 73 20 76 61 6c 75 65 20 76 69 61 20 74 68 65 20  s value via the
0c80: 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e  command line, en
0c90: 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69  ter a command si
0ca0: 6d 69 6c 61 72 0d 0a 20 20 20 20 20 20 23 20 20  milar..      #
0cb0: 20 20 20 20 20 74 6f 20 6f 6e 65 20 6f 66 20 74       to one of t
0cc0: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c  he following (al
0cd0: 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d  l on one line):.
0ce0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
0cf0: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65  #       EagleShe
0d00: 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69  ll.exe -anyIniti
0d10: 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f  alize "set test_
0d20: 79 65 61 72 20 32 30 30 35 22 0d 0a 20 20 20 20  year 2005"..
0d30: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c    #         -fil
0d40: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e  e .\path\to\all.
0d50: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a  eagle..      #..
0d60: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61        #       Ea
0d70: 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e  gleShell.exe -an
0d80: 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74  yInitialize "set
0d90: 20 74 65 73 74 5f 79 65 61 72 20 32 30 30 38 22   test_year 2008"
0da0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
0db0: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74    -file .\path\t
0dc0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20  o\all.eagle..
0dd0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20     #..      #
0de0: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65      EagleShell.e
0df0: 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a  xe -anyInitializ
0e00: 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72  e "set test_year
0e10: 20 32 30 31 30 22 0d 0a 20 20 20 20 20 20 23 20   2010"..      #
0e20: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c          -file .\
0e30: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c  path\to\all.eagl
0e40: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  e..      #..
0e50: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53    #       EagleS
0e60: 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69  hell.exe -anyIni
0e70: 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73  tialize "set tes
0e80: 74 5f 79 65 61 72 20 32 30 31 32 22 0d 0a 20 20  t_year 2012"..
0e90: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66      #         -f
0ea0: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
0eb0: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  l.eagle..      #
0ec0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
0ed0: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d  EagleShell.exe -
0ee0: 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73  anyInitialize "s
0ef0: 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 31  et test_year 201
0f00: 33 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  3"..      #
0f10: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68      -file .\path
0f20: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20  \to\all.eagle..
0f30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
0f40: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c        EagleShell
0f50: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c  .exe -anyInitial
0f60: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65  ize "set test_ye
0f70: 61 72 20 32 30 31 35 22 0d 0a 20 20 20 20 20 20  ar 2015"..
0f80: 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20  #         -file
0f90: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
0fa0: 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  gle..      #..
0fb0: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
0fc0: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49  eShell.exe -anyI
0fd0: 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74  nitialize "set t
0fe0: 65 73 74 5f 79 65 61 72 20 32 30 31 37 22 0d 0a  est_year 2017"..
0ff0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
1000: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c  -file .\path\to\
1010: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20  all.eagle..
1020: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20   #..      #
1030: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65    EagleShell.exe
1040: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20   -anyInitialize
1050: 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61  "unset -nocompla
1060: 69 6e 20 74 65 73 74 5f 79 65 61 72 22 0d 0a 20  in test_year"..
1070: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
1080: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
1090: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
10a0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
10b0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
10c0: 5f 79 65 61 72 5d 20 26 26 20 5b 73 74 72 69 6e  _year] && [strin
10d0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 10e0: 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 65 6e _year] > 0} then 10f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 1100: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 1110: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 1120: 20 74 65 73 74 20 79 65 61 72 2e 20 20 49 66 20 test year. If 1130: 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 73 this variable is 1140: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 0d 0a 20 not set, the.. 1150: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 # d 1160: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c efault value wil 1170: 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 77 68 l be based on wh 1180: 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 61 67 ether or not Eag 1190: 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 le has been.. 11a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com 11b0: 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 74 68 piled against th 11c0: 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 4c e CLR v2.0 or CL 11d0: 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v4.0... 11e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 11f0: 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 0d rn$::test_year.
1200: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
1210: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1220: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 45      # NOTE: If E
1230: 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f  agle has been co
1240: 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 74  mpiled against t
1250: 68 65 20 43 4c 52 20 76 34 2e 30 2c 20 75 73 65  he CLR v4.0, use
1260: 20 22 32 30 31 30 22 20 62 79 0d 0a 20 20 20 20   "2010" by..
1270: 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61      #       defa
1280: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
1290: 65 20 22 32 30 31 32 22 2c 20 22 32 30 31 33 22  e "2012", "2013"
12a0: 2c 20 22 32 30 31 35 22 2c 20 6f 72 20 22 32 30  , "2015", or "20
12b0: 31 37 22 20 69 6e 20 74 68 61 74 0d 0a 20 20 20  17" in that..
12c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 73       #       cas
12d0: 65 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74 68  e as well) as th
12e0: 65 20 74 65 73 74 20 79 65 61 72 3b 20 6f 74 68  e test year; oth
12f0: 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30 30  erwise, use "200
1300: 38 22 20 62 79 20 64 65 66 61 75 6c 74 0d 0a 20  8" by default..
1310: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28         #       (
1320: 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32 30  we could use "20
1330: 30 35 22 20 69 6e 20 74 68 61 74 20 63 61 73 65  05" in that case
1340: 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20 61   as well).  If a
1350: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 0d 0a 20 20  nother major..
1360: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 69        #       [i
1370: 6e 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72  ncompatible] ver
1380: 73 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52 20  sion of the CLR
1390: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
13a0: 73 20 63 68 65 63 6b 20 77 69 6c 6c 0d 0a 20 20  s check will..
13b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68 61        #       ha
13c0: 76 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64  ve to be changed
13d0: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20 74  .  The default t
13e0: 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65 20  est year to use
13f0: 66 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20 23  for a..        #
1400: 20 20 20 20 20 20 20 70 61 72 74 69 63 75 6c 61         particula
1410: 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61  r CLR version ma
1420: 79 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20  y be overridden
1430: 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20 67  by setting the g
1440: 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23  lobal..        #
1450: 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20         variable
1460: 22 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76  "test_year_clr_v
1470: 24 58 22 2c 20 77 68 65 72 65 20 22 24 58 22 20  $X", where "$X"
1480: 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20  may [currently]
1490: 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  be..        #
14a0: 20 20 20 20 65 69 74 68 65 72 20 22 32 22 20 6f      either "2" o
14b0: 72 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20 20  r "4"...
14c0: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
14d0: 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 69  haveConstraint i
14e0: 6d 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20  mageRuntime40]}
14f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1500: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1510: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
1520: 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v4] && \..
1530: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
1540: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1550: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 3e t_year_clr_v4] > 1560: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1570: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1580: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 1590: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 15a0: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 15b0: 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 he CLR v4.0... 15c0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 15d0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 15e0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
15f0: 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v4..          }
1600: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1610: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1620: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1630: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
1640: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
1650: 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v4.0...
1660: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1670: 20 20 20 20 72 65 74 75 72 6e 20 32 30 31 30 3b      return 2010;
1680: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
1690: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
16a0: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
16b0: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
16c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
16d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
16e0: 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d  est_year_clr_v2]
16f0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
1700: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1710: 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61 72  gth $::test_year 1720: 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 _clr_v2] > 0} th 1730: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1740: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1750: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 1760: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 specified test 1770: 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c 52 year for the CLR 1780: 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 v2.0... 1790: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 17a0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
17b0: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a 20  t_year_clr_v2..
17c0: 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
17d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
17e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
17f0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65  NOTE: Use the de
1800: 66 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20  fault test year
1810: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
1820: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
1840: 74 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f 44  turn 2008; # TOD
1850: 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63  O: Good "fallbac
1860: 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20  k" default?..
1870: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1880: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
1890: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
18a0: 20 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 59   getBuildNativeY
18b0: 65 61 72 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ear {} {..
18c0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
18d0: 20 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f 79   ::test_native_y
18e0: 65 61 72 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ear] && \..
18f0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1900: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 61 74 69  gth $::test_nati 1910: 76 65 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 ve_year] > 0} th 1920: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 1930: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1940: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 1950: 65 64 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 ed test year for 1960: 20 6e 61 74 69 76 65 20 62 69 6e 61 72 69 65 73 native binaries 1970: 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 . If this.. 1980: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari 1990: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 19a0: 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 the value retur 19b0: 6e 65 64 20 62 79 20 5b 67 65 74 42 75 69 6c 64 ned by [getBuild 19c0: 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 23 Year].. # 19d0: 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 75 will be u 19e0: 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sed... #. 19f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1a00: 24 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f 79$::test_native_y
1a10: 65 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ear..      } els
1a20: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
1a30: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1a40: 46 61 6c 6c 62 61 63 6b 20 6f 6e 20 74 68 65 20  Fallback on the
1a50: 28 6e 6f 72 6d 61 6c 29 20 62 75 69 6c 64 20 79  (normal) build y
1a60: 65 61 72 20 66 6f 72 20 6d 61 6e 61 67 65 64 20  ear for managed
1a70: 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20  binaries...
1a80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
1a90: 74 75 72 6e 20 5b 67 65 74 42 75 69 6c 64 59 65  turn [getBuildYe
1aa0: 61 72 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ar]..      }..
1ab0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1ac0: 20 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 59   getBuildNativeY
1ad0: 65 61 72 46 6f 72 44 6f 74 4e 65 74 43 6f 72 65  earForDotNetCore
1ae0: 20 7b 20 79 65 61 72 20 7d 20 7b 0d 0a 20 20 20   { year } {..
1af0: 20 20 20 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74     if {[isDotNet
1b00: 43 6f 72 65 5d 20 26 26 20 5b 69 73 57 69 6e 64  Core] && [isWind
1b10: 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ows]} then {..
1b20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 32 30 31        return 201
1b30: 35 3b 20 23 20 48 41 43 4b 3a 20 53 70 65 63 69  5; # HACK: Speci
1b40: 61 6c 20 63 61 73 65 2c 20 75 73 65 20 32 30 31  al case, use 201
1b50: 35 20 6e 61 74 69 76 65 20 62 69 6e 61 72 69 65  5 native binarie
1b60: 73 2e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  s...      } else
1b70: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1b80: 74 68 20 24 79 65 61 72 5d 20 3e 20 30 7d 20 74  th $year] > 0} t 1b90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 1ba0: 65 74 75 72 6e 20 24 79 65 61 72 0d 0a 20 20 20 eturn$year..
1bb0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1bc0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74       return [get
1bd0: 42 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72 5d  BuildNativeYear]
1be0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
1bf0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
1c00: 74 42 75 69 6c 64 59 65 61 72 73 20 7b 7d 20 7b  tBuildYears {} {
1c10: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1c20: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
1c30: 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74  the list of test
1c40: 20 79 65 61 72 73 20 68 61 73 20 62 65 65 6e 20   years has been
1c50: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68  overridden by th
1c60: 65 20 75 73 65 72 0d 0a 20 20 20 20 20 20 23 20  e user..      #
1c70: 20 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20 74        (e.g. on t
1c80: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
1c90: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1ca0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1cb0: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d  ts ::test_years]
1cc0: 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a   && [llength $:: 1cd0: 74 65 73 74 5f 79 65 61 72 73 5d 20 3e 20 30 7d test_years] > 0} 1ce0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1cf0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1d00: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1d10: 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 ified list of te 1d20: 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20 20 20 st years... 1d30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 1d40: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 turn$::test_yea
1d50: 72 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  rs..      } else
1d60: 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72  if {[isDotNetCor
1d70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
1d80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1d90: 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f   NOTE: Running o
1da0: 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 70 72 69  n .NET Core, pri
1db0: 6f 72 69 74 69 7a 65 20 69 74 73 20 6c 69 73 74  oritize its list
1dc0: 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 2e 0d   of test years..
1dd0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1de0: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
1df0: 20 4e 65 74 53 74 61 6e 64 61 72 64 32 30 5d 0d   NetStandard20].
1e00: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
1e10: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1e20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1e30: 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74  the default list
1e40: 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20 28   of test years (
1e50: 69 2e 65 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20  i.e. all)...
1e60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
1e70: 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30 35  eturn [list 2005
1e80: 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32 20   2008 2010 2012
1e90: 32 30 31 33 20 32 30 31 35 20 32 30 31 37 20 4e  2013 2015 2017 N
1ea0: 65 74 53 74 61 6e 64 61 72 64 32 30 5d 0d 0a 20  etStandard20]..
1eb0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1ec0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
1ed0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
1ee0: 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 73 65 64  ure is only used
1ef0: 20 77 68 65 6e 20 61 64 64 69 6e 67 20 73 68 69   when adding shi
1f00: 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e 73 74 72  mmed test constr
1f10: 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a 20  aints...    #..
1f20: 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64     proc getBuild
1f30: 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d  ClrVersion {} {.
1f40: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
1f50: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63   exists ::test_c
1f60: 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e 67 20 6c  lr] && [string l
1f70: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c  ength $::test_cl 1f80: 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a r] > 0} then {.. 1f90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1fa0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 1fb0: 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 he specified tes 1fc0: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 t version for th 1fd0: 65 20 43 4c 52 2e 20 20 49 66 20 74 68 69 73 20 e CLR. If this 1fe0: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 variable.. 1ff0: 20 20 23 20 20 20 20 20 20 20 69 73 20 6e 6f 74 # is not 2000: 20 73 65 74 2c 20 74 68 65 20 64 65 66 61 75 6c set, the defaul 2010: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 t value will be 2020: 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 72 based on whether 2030: 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 or not.. 2040: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 68 # Eagle h 2050: 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 as been compiled 2060: 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c 52 against the CLR 2070: 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 2e v2.0 or CLR v4. 2080: 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 0... #.. 2090: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
20a0: 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20 20 20 20  :test_clr..
20b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
20c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
20d0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 45  NOTE: Check if E
20e0: 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63 6f  agle has been co
20f0: 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 74  mpiled against t
2100: 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49 66  he CLR v4.0.  If
2110: 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 20 23 20   so,..        #
2120: 20 20 20 20 20 20 6a 75 73 74 20 75 73 65 20 74        just use t
2130: 68 61 74 20 43 4c 52 20 76 65 72 73 69 6f 6e 2e  hat CLR version.
2140: 20 20 4f 74 68 65 72 77 69 73 65 2c 20 75 73 65    Otherwise, use
2150: 20 74 68 65 20 76 65 72 73 69 6f 6e 20 66 6f 72   the version for
2160: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
2170: 20 20 20 20 20 20 43 4c 52 20 76 32 2e 30 2e 20        CLR v2.0.
2180: 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a 6f   If another majo
2190: 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65 5d  r [incompatible]
21a0: 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20   version of the
21b0: 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 23 20 20  CLR..        #
21c0: 20 20 20 20 20 69 73 20 72 65 6c 65 61 73 65 64       is released
21d0: 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69 6c  , this check wil
21e0: 6c 20 68 61 76 65 20 74 6f 20 62 65 20 63 68 61  l have to be cha
21f0: 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66 61 75  nged.  The defau
2200: 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  lt..        #
2210: 20 20 20 20 76 65 72 73 69 6f 6e 20 76 61 6c 75      version valu
2220: 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75 6c  e for a particul
2230: 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d  ar CLR version m
2240: 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  ay be overridden
2250: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2260: 20 20 62 79 20 73 65 74 74 69 6e 67 20 74 68 65    by setting the
2270: 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65   global variable
2280: 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 58 22 2c   "test_clr_v$X", 2290: 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 0d where "$X" may.
22a0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
22b0: 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65 20   [currently] be
22c0: 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22 34  either "2" or "4
22d0: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  "...        #..
22e0: 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65         if {[have
22f0: 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67 65  Constraint image
2300: 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65 6e  Runtime40]} then
2310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
2320: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
2330: 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d 20 26 26  :test_clr_v4] &&
2340: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2350: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
2360: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d   $::test_clr_v4] 2370: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 2380: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2390: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 23a0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 23b0: 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20 ed test version 23c0: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e 30 for the CLR v4.0 23d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 23e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 23f0: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c 72 turn$::test_clr
2400: 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v4..          }
2410: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2420: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2430: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
2440: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
2450: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
2460: 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20   CLR v4.0...
2470: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2480: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 34 2e         return 4.
2490: 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 44 4f 3a  0.30319; # TODO:
24a0: 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22   Good "fallback"
24b0: 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20   default?..
24c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
24d0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
24e0: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
24f0: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5f  ists ::test_clr_
2500: 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  v2] && \..
2510: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
2520: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63  length $::test_c 2530: 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 6e lr_v2] > 0} then 2540: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2550: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 2560: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 2570: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76 65 pecified test ve 2580: 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c rsion for the CL 2590: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v2.0... 25a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25b0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
25c0: 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20 20  st_clr_v2..
25d0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
25e0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
25f0: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2600: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
2610: 74 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20 66  t test version f
2620: 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30 2e  or the CLR v2.0.
2630: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
2640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2650: 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 3b 20 23  urn 2.0.50727; #
2660: 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c   TODO: Good "fal
2670: 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d  lback" default?.
2680: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
2690: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
26a0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
26b0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 65 74  proc getBuildNet
26c0: 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  Fx {} {..      #
26d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
26e0: 53 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20  See if the test
26f0: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 73  .NET Framework s
2700: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20  etting has been
2710: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20  overridden by..
2720: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2730: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
2740: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
2750: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
2760: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
2770: 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78  ts ::test_net_fx
2780: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
2790: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
27a0: 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5d   $::test_net_fx] 27b0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 27c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 27d0: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 # NOTE: Use the 27e0: 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 specified test 27f0: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d .NET Framework.. 2800: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2810: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
2820: 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20 20  st_net_fx..
2830: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
2840: 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65 74     set year [get
2850: 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20 20  BuildYear]..
2860: 20 20 20 20 73 65 74 20 79 65 61 72 56 61 72 4e      set yearVarN
2870: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ame [appendArgs
2880: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20 24  ::test_net_fx_ $2890: 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 year].... 28a0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 28b0: 73 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 20 s$yearVarName]
28c0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
28d0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
28e0: 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e 61   [set $yearVarNa 28f0: 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b me]] > 0} then { 2900: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2910: 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 2920: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 2930: 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72 61 ed test .NET Fra 2940: 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f 6e mework, based on 2950: 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 the build.. 2960: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 79 65 # ye 2970: 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ar... # 2980: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu 2990: 72 6e 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 rn [set$yearVar
29a0: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d  Name]..        }
29b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
29c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
29d0: 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b  # NOTE: Fallback
29e0: 20 74 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b 6e   to the "well kn
29f0: 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65 77  own" .NET Framew
2a00: 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74 68 61 74  ork version that
2a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2a20: 20 20 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f 73      is most clos
2a30: 65 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  ely associated w
2a40: 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61 72  ith a particular
2a50: 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20 20   version of..
2a60: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 56         #       V
2a70: 69 73 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a 20  isual Studio...
2a80: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2a90: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78        switch -ex
2aa0: 61 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d 0a  act -- $year {.. 2ab0: 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 35 2005 2ac0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2ad0: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30 return netFx20 2ae0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2af0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 . 200 2b00: 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 8 {.. 2b10: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 33 return netFx3 2b20: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 5.. } 2b30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 .. 20 2b40: 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 10 {.. 2b50: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 2b60: 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 40.. 2b70: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 }.. 2 2b80: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 012 {.. 2b90: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 2ba0: 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x45.. 2bb0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2bc0: 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 20 2013 {.. 2bd0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2be0: 46 78 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 4f Fx451; # TODO: O 2bf0: 72 20 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a 20 r "netFx452"?.. 2c00: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2c10: 20 20 20 20 20 20 20 20 20 20 32 30 31 35 20 7b 2015 { 2c20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c30: 72 65 74 75 72 6e 20 6e 65 74 46 78 34 36 3b 20 return netFx46; 2c40: 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 46 # TODO: Or "netF 2c50: 78 34 36 31 22 20 2f 20 22 6e 65 74 46 78 34 36 x461" / "netFx46 2c60: 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 2"?.. 2c70: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2c80: 32 30 31 37 20 7b 0d 0a 20 20 20 20 20 20 20 20 2017 {.. 2c90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2ca0: 46 78 34 37 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 Fx47; # TODO: Or 2cb0: 20 22 6e 65 74 46 78 34 37 31 22 20 2f 20 22 6e "netFx471" / "n 2cc0: 65 74 46 78 34 37 32 22 3f 0d 0a 20 20 20 20 20 etFx472"?.. 2cd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2ce0: 20 20 20 20 20 20 4e 65 74 53 74 61 6e 64 61 72 NetStandar 2cf0: 64 32 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 d20 {.. 2d00: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 53 return netS 2d10: 74 61 6e 64 61 72 64 32 30 0d 0a 20 20 20 20 20 tandard20.. 2d20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2d30: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d default {. 2d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 . r 2d50: 65 74 75 72 6e 20 6e 65 74 46 78 33 35 3b 20 23 eturn netFx35; # 2d60: 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c TODO: Good "fal 2d70: 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d lback" default?. 2d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2d90: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2da0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 2db0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 . }..... # 2dc0: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 .. # NOTE: Th 2dd0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f is procedure sho 2de0: 75 6c 64 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a uld return non-z 2df0: 65 72 6f 20 69 66 20 74 68 65 20 63 6f 6e 66 69 ero if the confi 2e00: 67 75 72 65 64 20 74 65 73 74 0d 0a 20 20 20 20 gured test.. 2e10: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d # platform 2e20: 20 69 73 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 is most likely 2e30: 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 the default for 2e40: 74 68 69 73 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 this machine... 2e50: 20 20 20 23 0d 0a 20 20 20 20 70 72 6f 63 20 69 #.. proc i 2e60: 73 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 sDefaultBuildPla 2e70: 74 66 6f 72 6d 20 7b 20 7b 76 65 72 62 6f 73 65 tform { {verbose 2e80: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 2e90: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 2ea0: 45 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f E: Running on Wo 2eb0: 57 36 34 20 69 73 20 6e 65 76 65 72 20 74 68 65 W64 is never the 2ec0: 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 default platfor 2ed0: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 2ee0: 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e if {[isRunnin 2ef0: 67 57 6f 57 36 34 5d 7d 20 74 68 65 6e 20 7b 0d gWoW64]} then {. 2f00: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
2f10: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
2f20: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $2f30: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 2f40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2f50: 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 6e "---- detected n 2f60: 6f 6e 2d 64 65 66 61 75 6c 74 20 70 6c 61 74 66 on-default platf 2f70: 6f 72 6d 20 28 57 6f 57 36 34 29 5c 6e 22 0d 0a orm (WoW64)\n".. 2f80: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2f90: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 2fa0: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 2fb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 2fc0: 4f 54 45 3a 20 54 68 69 73 20 68 61 73 20 61 20 OTE: This has a 2fd0: 67 6f 6f 64 20 63 68 61 6e 63 65 20 6f 66 20 62 good chance of b 2fe0: 65 69 6e 67 20 74 68 65 20 64 65 66 61 75 6c 74 eing the default 2ff0: 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 platform... 3000: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
3010: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
3020: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $3030: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 ::test_channel " 3040: 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 64 65 ---- detected de 3050: 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 5c 6e fault platform\n 3060: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 3070: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. 3080: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 3090: 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 74 roc getBuildPlat 30a0: 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d 20 form { native } 30b0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e {.. if {[in 30c0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 30d0: 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c 0d _platform] && \. 30e0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 30f0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 ng length$::tes
3100: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d  t_platform] > 0}
3110: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3120: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3130: 54 45 3a 20 50 6f 73 73 69 62 6c 79 20 75 73 65  TE: Possibly use
3140: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74   the specified t
3150: 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20 49  est platform.  I
3160: 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d  f this variable.
3170: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3180: 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65   is not set, the
3190: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77   default value w
31a0: 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20  ill be based on
31b0: 74 68 65 20 6d 61 63 68 69 6e 65 0d 0a 20 20 20  the machine..
31c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 63       #       arc
31d0: 68 69 74 65 63 74 75 72 65 2e 20 20 4e 6f 72 6d  hitecture.  Norm
31e0: 61 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 64 6f  ally, this is do
31f0: 6e 65 20 66 6f 72 20 62 75 69 6c 64 73 20 74 68  ne for builds th
3200: 61 74 20 69 6e 76 6f 6c 76 65 0d 0a 20 20 20 20  at involve..
3210: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
3220: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
3230: 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  bly...        #.
3240: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
3250: 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f  [expr {$native ? 3260: 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72$::test_platfor
3270: 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20  m : ""}]..
3280: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20  } elseif {[info
3290: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d 61  exists ::test_ma
32a0: 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20 20  chine] && \..
32b0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
32c0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d 61  ength $::test_ma 32d0: 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 6e chine] > 0} then 32e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 32f0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 3300: 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 or native builds 3310: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 , return the pla 3320: 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 tform name corre 3330: 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 sponding to.. 3340: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 3350: 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 72 test machine ar 3360: 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 chitecture; othe 3370: 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e rwise, return an 3380: 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 20 empty.. 3390: 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e 20 # string. 33a0: 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 Normally, this 33b0: 69 73 20 64 6f 6e 65 20 66 6f 72 20 62 75 69 6c is done for buil 33c0: 64 73 20 74 68 61 74 20 69 6e 76 6f 6c 76 65 20 ds that involve 33d0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 33e0: 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 mixed-mode 33f0: 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 assembly... 3400: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 3410: 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 turn [expr {.. 3420: 20 20 20 20 20 20 20 20 24 6e 61 74 69 76 65 20$native
3430: 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74  ? [machineToPlat
3440: 66 6f 72 6d 20 24 3a 3a 74 65 73 74 5f 6d 61 63  form $::test_mac 3450: 68 69 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 20 20 hine] : "".. 3460: 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 }].. } 3470: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 elseif {[info ex 3480: 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf 3490: 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 orm(machine)]} t 34a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 34b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 34c0: 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 : For native bui 34d0: 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 lds, return the 34e0: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f platform name co 34f0: 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a rresponding to.. 3500: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3510: 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 the machine arch 3520: 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 itecture; otherw 3530: 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ise, return an e 3540: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 mpty string... 3550: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f # No 3560: 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 rmally, this is 3570: 64 6f 6e 65 20 66 6f 72 20 62 75 69 6c 64 73 20 done for builds 3580: 74 68 61 74 20 69 6e 76 6f 6c 76 65 20 74 68 65 that involve the 3590: 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 20 mixed-mode.. 35a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 35b0: 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 embly... 35c0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 35d0: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 n [expr {.. 35e0: 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b$native ? [
35f0: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
3600: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor 3610: 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20 22 22 m(machine)] : "" 3620: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 20 .. }].. 3630: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 3640: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3650: 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 68 # NOTE: No mach 3660: 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 ine architecture 3670: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 3680: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 3690: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 36a0: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 36b0: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 36c0: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 36d0: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 36e0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 36f0: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 3700: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 3710: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 3720: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 3730: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 3740: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 3750: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 3760: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f proc getBuildCo 3770: 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d 20 7b nfiguration {} { 3780: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 3790: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 # NOTE: See if 37a0: 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61 74 69 the "configurati 37b0: 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61 73 20 on" setting has 37c0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 been overridden 37d0: 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 by the.. # 37e0: 20 20 20 20 20 20 75 73 65 72 20 28 65 2e 67 2e user (e.g. 37f0: 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 on the command 3800: 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68 65 6c line). This hel 3810: 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61 63 74 ps control exact 3820: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ly.. # 3830: 20 20 77 68 69 63 68 20 73 65 74 20 6f 66 20 62 which set of b 3840: 69 6e 61 72 69 65 73 20 77 65 20 61 72 65 20 74 inaries we are t 3850: 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74 68 6f esting (i.e. tho 3860: 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68 65 0d se built in the. 3870: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 . # " 3880: 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 Debug" or "Relea 3890: 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 se" build config 38a0: 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f 20 6f urations). To o 38b0: 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a 20 20 verride this.. 38c0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c 75 # valu 38d0: 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e e via the comman 38e0: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 20 d line, enter a 38f0: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 3900: 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 20 to one of.. 3910: 20 23 20 20 20 20 20 20 20 74 68 65 20 66 6f 6c # the fol 3920: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 3930: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 3940: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 3950: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 3960: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 3970: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 3980: 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22 0d 0a uration Debug".. 3990: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 39a0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c -file .\path\to\ 39b0: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 all.eagle.. 39c0: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 39d0: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 39e0: 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 -anyInitialize 39f0: 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 67 "set test_config 3a00: 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73 65 22 uration Release" 3a10: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3a20: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 -file .\path\t 3a30: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 o\all.eagle.. 3a40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 #.. # 3a50: 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 EagleShell.e 3a60: 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c xe -file .\path\ 3a70: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 72 to\all.eagle -pr 3a80: 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23 20 20 eTest.. # 3a90: 20 20 20 20 20 20 20 22 75 6e 73 65 74 20 2d 6e "unset -n 3aa0: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 63 ocomplain test_c 3ab0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d 0a 20 onfiguration".. 3ac0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 3ad0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 3ae0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 3af0: 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ion] && \.. 3b00: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 3b10: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 gth$::test_conf
3b20: 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 7d 20  iguration] > 0}
3b30: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
3b40: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
3b50: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69  E: Use the speci
3b60: 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 69 67  fied test config
3b70: 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64 65  uration.  The de
3b80: 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 65 64  fault value used
3b90: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
3ba0: 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 69 61    for this varia
3bb0: 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c 6c 79  ble is typically
3bc0: 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20 73   "Release", as s
3bd0: 65 74 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  et by the test..
3be0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3bf0: 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a 20  suite itself...
3c00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3c10: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74    return $::test 3c20: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a _configuration.. 3c30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 3c40: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 3c50: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d 61 # NOTE: Norma 3c60: 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 76 lly, we will nev 3c70: 65 72 20 68 69 74 20 74 68 69 73 20 63 61 73 65 er hit this case 3c80: 20 62 65 63 61 75 73 65 20 74 68 65 20 76 61 6c because the val 3c90: 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 ue of the.. 3ca0: 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 # test 3cb0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 61 configuration va 3cc0: 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 73 riable is always 3cd0: 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 set by the test 3ce0: 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 20 suite.. 3cf0: 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b 20 # itself; 3d00: 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e 20 however, it can 3d10: 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 73 be overridden us 3d20: 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 6f ing the unset co 3d30: 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 mmand.. # 3d40: 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 20 from the 3d50: 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e 20 -preTest option 3d60: 74 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 74 to the test suit 3d70: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 3d80: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
3d90: 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28  :eagle_platform(
3da0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d 0a  configuration)..
3db0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3dc0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
3dd0: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
3de0: 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ns {} {..      #
3df0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
3e00: 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74 20  See if the list
3e10: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
3e20: 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 6e 20  ations has been
3e30: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a 20  overridden by..
3e40: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
3e50: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74   user (e.g. on t
3e60: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29  he command line)
3e70: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3e80: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3e90: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67  ts ::test_config
3ea0: 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c 0d 0a  urations] && \..
3eb0: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67            [lleng
3ec0: 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  th $::test_confi 3ed0: 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30 7d 20 gurations] > 0} 3ee0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3ef0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3f00: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 3f10: 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 fied list of tes 3f20: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 t configurations 3f30: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 3f40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
3f50: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
3f60: 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ons..      } els
3f70: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
3f80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3f90: 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default
3fa0: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e  list of test con
3fb0: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20  figurations...
3fc0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
3fd0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 44 65   return [list De
3fe0: 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a 20 20  bug Release]..
3ff0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
4000: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
4010: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53  ldConfigurationS
4020: 75 66 66 69 78 20 7b 7d 20 7b 0d 0a 20 20 20 20  uffix {} {..
4030: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
4040: 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74 65  E: See if the te
4050: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st configuration
4060: 20 73 75 66 66 69 78 20 68 61 73 20 62 65 65 6e   suffix has been
4070: 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a   overridden by..
4080: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
4090: 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20  e user (e.g. on
40a0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
40b0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
40c0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
40d0: 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  sts ::test_confi
40e0: 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 5d  guration_suffix]
40f0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
4100: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
4110: 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72  $::test_configur 4120: 61 74 69 6f 6e 5f 73 75 66 66 69 78 5d 20 3e 20 ation_suffix] > 4130: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 4140: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 4150: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 4160: 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e ecified test con 4170: 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66 69 figuration suffi 4180: 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 x... #.. 4190: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
41a0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
41b0: 69 6f 6e 5f 73 75 66 66 69 78 0d 0a 20 20 20 20  ion_suffix..
41c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
41d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
41e0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
41f0: 65 66 61 75 6c 74 20 74 65 73 74 20 63 6f 6e 66  efault test conf
4200: 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66 69 78  iguration suffix
4210: 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62  , which should b
4220: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
4230: 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69     an empty stri
4240: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ng...        #..
4250: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
4260: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  "..      }..
4270: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
4280: 65 74 42 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e  etBuildNativeCon
4290: 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78  figurationSuffix
42a0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
42b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
42c0: 65 20 69 66 20 74 68 65 20 74 65 73 74 20 6e 61  e if the test na
42d0: 74 69 76 65 20 63 6f 6e 66 69 67 75 72 61 74 69  tive configurati
42e0: 6f 6e 20 73 75 66 66 69 78 20 68 61 73 20 62 65  on suffix has be
42f0: 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  en..      #
4300: 20 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20    overridden by
4310: 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f  the user (e.g. o
4320: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
4330: 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne)...      #..
4340: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
4350: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 61 74  xists ::test_nat
4360: 69 76 65 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  ive_configuratio
4370: 6e 5f 73 75 66 66 69 78 5d 20 26 26 20 5c 0d 0a  n_suffix] && \..
4380: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
4390: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  g length $::test 43a0: 5f 6e 61 74 69 76 65 5f 63 6f 6e 66 69 67 75 72 _native_configur 43b0: 61 74 69 6f 6e 5f 73 75 66 66 69 78 5d 20 3e 20 ation_suffix] > 43c0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 43d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 43e0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 43f0: 65 63 69 66 69 65 64 20 74 65 73 74 20 6e 61 74 ecified test nat 4400: 69 76 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ive configuratio 4410: 6e 20 73 75 66 66 69 78 2e 0d 0a 20 20 20 20 20 n suffix... 4420: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 4430: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 61 74 turn$::test_nat
4440: 69 76 65 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  ive_configuratio
4450: 6e 5f 73 75 66 66 69 78 0d 0a 20 20 20 20 20 20  n_suffix..
4460: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
4470: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
4480: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66  OTE: Use the def
4490: 61 75 6c 74 20 74 65 73 74 20 6e 61 74 69 76 65  ault test native
44a0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
44b0: 75 66 66 69 78 2c 20 77 68 69 63 68 0d 0a 20 20  uffix, which..
44c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
44d0: 6f 75 6c 64 20 62 65 20 61 6e 20 65 6d 70 74 79  ould be an empty
44e0: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
44f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
4500: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d  urn ""..      }.
4510: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
4520: 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 61 74 69  roc getBuildNati
4530: 76 65 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53  veConfigurationS
4540: 75 66 66 69 78 46 6f 72 44 6f 74 4e 65 74 43 6f  uffixForDotNetCo
4550: 72 65 20 7b 20 73 75 66 66 69 78 20 7d 20 7b 0d  re { suffix } {.
4560: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 44 6f  .      if {[isDo
4570: 74 4e 65 74 43 6f 72 65 5d 20 26 26 20 5b 69 73  tNetCore] && [is
4580: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b  Windows]} then {
4590: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
45a0: 20 4e 61 74 69 76 65 4f 6e 6c 79 3b 20 23 20 48   NativeOnly; # H
45b0: 41 43 4b 3a 20 53 70 65 63 69 61 6c 20 63 61 73  ACK: Special cas
45c0: 65 2c 20 75 73 65 20 32 30 31 35 20 6e 61 74 69  e, use 2015 nati
45d0: 76 65 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20  ve binaries...
45e0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73      } elseif {[s
45f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 75  tring length $su 4600: 66 66 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ffix] > 0} then 4610: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 4620: 6e 20 24 73 75 66 66 69 78 0d 0a 20 20 20 20 20 n$suffix..
4630: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
4640: 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 42 75     return [getBu
4650: 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 75  ildNativeConfigu
4660: 72 61 74 69 6f 6e 53 75 66 66 69 78 5d 0d 0a 20  rationSuffix]..
4670: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
4680: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
4690: 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
46a0: 53 75 66 66 69 78 65 73 20 7b 7d 20 7b 0d 0a 20  Suffixes {} {..
46b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
46c0: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65  NOTE: See if the
46d0: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f   list of test co
46e0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66  nfiguration suff
46f0: 69 78 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20  ixes has been..
4700: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 76 65       #       ove
4710: 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75  rridden by the u
4720: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65  ser (e.g. on the
4730: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d   command line)..
4740: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
4750: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
4760: 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72   ::test_configur
4770: 61 74 69 6f 6e 5f 73 75 66 66 69 78 65 73 5d 20  ation_suffixes]
4780: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
4790: 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74  [llength $::test 47a0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5f 73 _configuration_s 47b0: 75 66 66 69 78 65 73 5d 20 3e 20 30 7d 20 74 68 uffixes] > 0} th 47c0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 47d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 47e0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 47f0: 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 ed list of test 4800: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 73 configurations s 4810: 75 66 66 69 78 65 73 2e 0d 0a 20 20 20 20 20 20 uffixes... 4820: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 4830: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 urn$::test_conf
4840: 69 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69 78  iguration_suffix
4850: 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  es..      } else
4860: 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72  if {[isDotNetCor
4870: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
4880: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
4890: 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f   NOTE: Running o
48a0: 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 70 72 69  n .NET Core, pri
48b0: 6f 72 69 74 69 7a 65 20 69 74 73 20 74 65 73 74  oritize its test
48c0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a   configuration..
48d0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
48e0: 73 75 66 66 69 78 65 73 20 66 6f 72 20 6c 69 62  suffixes for lib
48f0: 72 61 72 79 20 66 69 6c 65 73 2e 0d 0a 20 20 20  rary files...
4900: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4910: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 4e 65 74  return [list Net
4920: 53 74 61 6e 64 61 72 64 32 30 20 22 22 5d 0d 0a  Standard20 ""]..
4930: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
4940: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4950: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
4960: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20  he default list
4970: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
4980: 61 74 69 6f 6e 73 20 73 75 66 66 69 78 65 73 2e  ations suffixes.
4990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
49a0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
49b0: 74 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  t ""]..      }..
49c0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
49d0: 6f 63 20 67 65 74 42 75 69 6c 64 45 78 74 72 61  oc getBuildExtra
49e0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20   {} {..      if
49f0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
4a00: 74 65 73 74 5f 65 78 74 72 61 5d 20 26 26 20 5c  test_extra] && \
4a10: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
4a20: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 4a30: 73 74 5f 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 st_extra] > 0} t 4a40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 4a50: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 4a60: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 4a70: 69 65 64 20 65 78 74 72 61 20 6f 75 74 70 75 74 ied extra output 4a80: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20 directory... 4a90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4aa0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 65 return$::test_e
4ab0: 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 20 65 6c  xtra..      } el
4ac0: 73 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43  seif {[isDotNetC
4ad0: 6f 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ore]} then {..
4ae0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4af0: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67   # NOTE: Running
4b00: 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 75   on .NET Core, u
4b10: 73 65 20 74 68 65 20 65 78 74 72 61 20 6f 75 74  se the extra out
4b20: 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 66 6f  put directory fo
4b30: 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  r..        #
4b40: 20 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73     library files
4b50: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4b60: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74        return net
4b70: 73 74 61 6e 64 61 72 64 32 2e 30 0d 0a 20 20 20  standard2.0..
4b80: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
4b90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4ba0: 23 20 4e 4f 54 45 3a 20 4e 6f 20 65 78 74 72 61  # NOTE: No extra
4bb0: 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72   output director
4bc0: 79 20 69 73 20 72 65 71 75 69 72 65 64 2e 0d 0a  y is required...
4bd0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4be0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
4bf0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
4c00: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
4c10: 6c 64 45 78 74 72 61 73 20 7b 7d 20 7b 0d 0a 20  ldExtras {} {..
4c20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
4c30: 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65  NOTE: See if the
4c40: 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61 20 6f   list of extra o
4c50: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 69 65  utput directorie
4c60: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
4c70: 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23 20 20  idden..      #
4c80: 20 20 20 20 20 62 79 20 74 68 65 20 75 73 65 72       by the user
4c90: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f   (e.g. on the co
4ca0: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20  mmand line)...
4cb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
4cc0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
4cd0: 74 65 73 74 5f 65 78 74 72 61 73 5d 20 26 26 20  test_extras] &&
4ce0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c  \..          [ll
4cf0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 65 78  ength $::test_ex 4d00: 74 72 61 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tras] > 0} then 4d10: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 4d20: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 4d30: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 4d40: 6c 69 73 74 20 6f 66 20 65 78 74 72 61 20 6f 75 list of extra ou 4d50: 74 70 75 74 20 64 69 72 65 63 74 6f 72 69 65 73 tput directories 4d60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 4d70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
4d80: 74 65 73 74 5f 65 78 74 72 61 73 0d 0a 20 20 20  test_extras..
4d90: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73     } elseif {[is
4da0: 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65  DotNetCore]} the
4db0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
4dc0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
4dd0: 52 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 54 20  Running on .NET
4de0: 43 6f 72 65 2c 20 70 72 69 6f 72 69 74 69 7a 65  Core, prioritize
4df0: 20 69 74 73 20 65 78 74 72 61 20 6f 75 74 70 75   its extra outpu
4e00: 74 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20  t directory..
4e10: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
4e20: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73 2e 0d   library files..
4e30: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4e40: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74      return [list
4e50: 20 6e 65 74 73 74 61 6e 64 61 72 64 32 2e 30 20   netstandard2.0
4e60: 22 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ""]..      } els
4e70: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
4e80: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
4e90: 55 73 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74  Use default list
4ea0: 20 6f 66 20 65 78 74 72 61 20 6f 75 74 70 75 74   of extra output
4eb0: 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 77 68   directories, wh
4ec0: 69 63 68 20 69 73 20 6f 6e 65 0d 0a 20 20 20 20  ich is one..
4ed0: 20 20 20 20 23 20 20 20 20 20 20 20 65 6d 70 74      #       empt
4ee0: 79 20 73 74 72 69 6e 67 20 28 6e 6f 2d 6f 70 29  y string (no-op)
4ef0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4f00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
4f10: 73 74 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d 0d  st ""]..      }.
4f20: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
4f30: 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73 65  roc getBuildBase
4f40: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a  Directory {} {..
4f50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4f60: 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
4f70: 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65 63  t the base direc
4f80: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74  tory where all t
4f90: 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c 64  he builds should
4fa0: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
4fb0: 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69     located.  Thi
4fc0: 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64 69  s will be the di
4fd0: 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f 6e  rectory that con
4fe0: 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61 6c  tains the actual
4ff0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5000: 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72  build output dir
5010: 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61 72  ectory (e.g. par
5020: 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a  ent of "bin")...
5030: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
5040: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
5050: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
5060: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
5070: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
5080: 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f  length $::build_ 5090: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 base_directory] 50a0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 50b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 50c0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 50d0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c tion of the buil 50e0: 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 d base directory 50f0: 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 has been overri 5100: 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 dden;.. # 5110: 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 therefore 5120: 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 69 , use it verbati 5130: 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 m... #.. 5140: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
5150: 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65  :build_base_dire
5160: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
5170: 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  lseif {[info exi
5180: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  sts ::common_dir
5190: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
51a0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
51b0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e  length $::common 51c0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 51d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 51e0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 51f0: 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 TE: Next, fallba 5200: 63 6b 20 74 6f 20 74 68 65 20 67 72 61 6e 64 70 ck to the grandp 5210: 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 20 arent directory 5220: 6f 66 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20 of the one.. 5230: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 5240: 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 aining this file 5250: 20 28 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e 2e 65 (i.e. "common.e 5260: 61 67 6c 65 22 29 2c 20 69 66 20 61 76 61 69 6c agle"), if avail 5270: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 able... # 5280: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 5290: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [ 52a0: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a file dirname$::
52b0: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
52c0: 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ]]..      } else
52d0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
52e0: 20 3a 3a 70 61 74 68 5d 20 26 26 20 5c 0d 0a 20   ::path] && \..
52f0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5300: 20 6c 65 6e 67 74 68 20 24 3a 3a 70 61 74 68 5d   length $::path] 5310: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 5320: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5330: 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 # NOTE: Finally 5340: 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 , fallback to th 5350: 65 20 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f e parent directo 5360: 72 79 20 6f 66 20 74 68 65 20 45 61 67 6c 65 54 ry of the EagleT 5370: 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 est.. # 5380: 20 20 20 20 20 70 61 74 68 2e 20 20 54 68 65 20 path. The 5390: 45 61 67 6c 65 54 65 73 74 20 70 61 63 6b 61 67 EagleTest packag 53a0: 65 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 61 e guarantees tha 53b0: 74 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 0d t this variable. 53c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 53d0: 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f 20 will be set to 53e0: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f the directory co 53f0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 72 ntaining the fir 5400: 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 20 st file to.. 5410: 20 20 20 20 23 20 20 20 20 20 20 20 65 78 65 63 # exec 5420: 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 73 74 ute the [runTest 5430: 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 70 74 Prologue] script 5440: 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 75 library procedu 5450: 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a re... #.. 5460: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 5470: 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a 3a file dirname$::
5480: 70 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 20 65  path]..      } e
5490: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
54a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
54b0: 3a 20 4e 6f 20 70 61 74 68 20 69 73 20 61 76 61  : No path is ava
54c0: 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20 61  ilable, return a
54d0: 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 20  n empty string.
54e0: 20 54 68 69 73 20 70 6f 69 6e 74 0d 0a 20 20 20   This point..
54f0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f       #       sho
5500: 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 61 63 68  uld not be reach
5510: 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ed...        #..
5520: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
5530: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  "..      }..
5540: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
5550: 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
5560: 50 61 74 68 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  Path {} {..
5570: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
5580: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65  : Figure out the
5590: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65   directory where
55a0: 20 61 6c 6c 20 74 68 65 20 74 65 73 74 20 64 61   all the test da
55b0: 74 61 20 66 69 6c 65 73 20 73 68 6f 75 6c 64 0d  ta files should.
55c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62  .      #       b
55d0: 65 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73  e located.  This
55e0: 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 20 22   should be the "
55f0: 64 61 74 61 22 20 64 69 72 65 63 74 6f 72 79 20  data" directory
5600: 62 65 6e 65 61 74 68 20 74 68 65 0d 0a 20 20 20  beneath the..
5610: 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
5620: 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  tory containing
5630: 74 68 65 20 61 63 74 75 61 6c 20 74 65 73 74 20  the actual test
5640: 73 63 72 69 70 74 73 2e 0d 0a 20 20 20 20 20 20  scripts...
5650: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
5660: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a 70 61  [file join $::pa 5670: 74 68 20 64 61 74 61 5d 0d 0a 20 20 20 20 7d 0d th data].. }. 5680: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 .... proc isR 5690: 75 6e 6e 69 6e 67 57 6f 57 36 34 20 7b 7d 20 7b unningWoW64 {} { 56a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 56b0: 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 # NOTE: For now 56c0: 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 20 65 , just use the e 56d0: 78 69 73 74 69 6e 67 20 74 65 73 74 20 63 6f 6e xisting test con 56e0: 73 74 72 61 69 6e 74 20 66 6f 72 20 64 65 74 65 straint for dete 56f0: 63 74 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 cting.. # 5700: 20 20 20 20 20 61 20 57 6f 57 36 34 20 70 72 6f a WoW64 pro 5710: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a cess... #.. 5720: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 68 61 return [ha 5730: 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 77 6f 77 veConstraint wow 5740: 36 34 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 64].. }..... 5750: 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 64 4d proc isMixedM 5760: 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 odeAssembly { fi 5770: 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 leName {varName 5780: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 5790: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 57a0: 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 First, make sure 57b0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 57c0: 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 20 69 infrastructure i 57d0: 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 s allowed to.. 57e0: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 # use 57f0: 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 the [exec] comma 5800: 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 nd... #.. 5810: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 5820: 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 xists ::no(exec) 5830: 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 ] && ![info exis 5840: 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 ts ::no(corFlags 5850: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 5860: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 5870: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6c 6f NOTE: If the lo 5880: 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 cation of CorFla 5890: 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e gs is present in 58a0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 the environment 58b0: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ,.. # 58c0: 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 65 72 use it; other 58d0: 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 20 69 wise assume it i 58e0: 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a s in the PATH... 58f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5900: 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 73 20 set corFlags 5910: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 [expr {.. 5920: 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 [info exists 5930: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d ::env(CorFlags)] 5940: 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 ?$::env(CorFla
5950: 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67 73 22  gs) : "CorFlags"
5960: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a  ..        }]....
5970: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5980: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
5990: 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 6f  pt to execute Co
59a0: 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20 73 70  rFlags on the sp
59b0: 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20  ecified file...
59c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
59d0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
59e0: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 20 2d            exec -
59f0: 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c  - $corFlags [fil 5a00: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 69 e nativename$fi
5a10: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
5a20: 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74   } exec] == 0} t
5a30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
5a40: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
5a50: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74  NOTE: If request
5a60: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
5a70: 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74  , attempt to det
5a80: 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20 20  ermine the..
5a90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c        #       pl
5aa0: 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65 20 73  atform for the s
5ab0: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 61 73  pecified file as
5ac0: 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20   well...
5ad0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
5ae0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
5af0: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 5b00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 5b10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5b20: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 # NOTE: Stor 5b30: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 e the platform i 5b40: 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69 n the named vari 5b50: 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 able in the.. 5b60: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 5b70: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our 5b80: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 caller... 5b90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5ba0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
5bb0: 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d  Name platform...
5bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
5bd0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
5be0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
5bf0: 78 74 72 61 63 74 20 74 68 65 20 50 45 20 6c 69  xtract the PE li
5c00: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74  ne from the capt
5c10: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ured..
5c20: 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74    #       output
5c30: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
5c40: 20 69 73 20 22 50 45 33 32 22 20 6f 72 20 22 50   is "PE32" or "P
5c50: 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20  E32+", the..
5c60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
5c70: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 69 73  assembly file is
5c80: 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d 62 69   32-bit or 64-bi
5c90: 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 3b  t, respectively;
5ca0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
5cb0: 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c        otherwise,
5cc0: 20 69 74 73 20 74 79 70 65 20 69 73 20 75 6e 6b   its type is unk
5cd0: 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  nown...
5ce0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
5cf0: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
5d00: 50 45 20 20 20 20 20 20 20 20 3a 20 28 50 45 33  PE        : (PE3
5d10: 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a  2|PE32\+)\s+$}.. 5d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 5d30: 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 {[regexp -line 5d40: 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 --$pattern $exe 5d50: 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 c dummy pe32]} t 5d60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 5d70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5d80: 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68 # HACK: Th 5d90: 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 73 75 is [switch] assu 5da0: 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 74 20 mes that 32-bit 5db0: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 0d executables are. 5dc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 5dd0: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 78 38 always x8 5de0: 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d 62 69 6 and that 64-bi 5df0: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 t executables ar 5e00: 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 e always.. 5e10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5e20: 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 x64... 5e30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 5e40: 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 switch -exa 5e50: 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 ct --$pe32 {..
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
5e70: 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  E32 {..
5e80: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
5e90: 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20  tform Win32..
5ea0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5ec0: 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20  PE32+ {..
5ed0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
5ee0: 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20  latform x64..
5ef0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5f10: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20  default {..
5f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
5f30: 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20   platform ""..
5f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
5f50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
5f60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
5f70: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
5f80: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
5f90: 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20  rm ""..
5fa0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
5fb0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
5fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
5fd0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
5fe0: 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c  xtract the ILONL
5ff0: 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  Y line from the
6000: 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20  captured..
6010: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70      #       outp
6020: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  ut.  If this val
6030: 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  ue is zero, the
6040: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6d  specified file m
6050: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ust..          #
6060: 20 20 20 20 20 20 20 62 65 20 61 20 6d 69 78 65         be a mixe
6070: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b  d-mode assembly;
6080: 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 63   otherwise, it c
6090: 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20  ontains only..
60a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
60b0: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e  managed componen
60c0: 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ts...          #
60d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
60e0: 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59  pattern {^ILONLY
60f0: 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d      : (0|1)\s+$} 6100: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 6110: 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 {![regexp -line 6120: 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 --$pattern $ex 6130: 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d ec dummy ilOnly] 6140: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6150: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 6160: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d se.. }. 6170: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 6180: 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 {!$ilOnly} then
6190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
61a0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
61b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
61c0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
61d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
61e0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 73  NOTE: If the tes
61f0: 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74 20 75  t suite cannot u
6200: 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65 78 65  se [exec] or exe
6210: 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61  cution of CorFla
6220: 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  gs..      #
6230: 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e    failed, return
6240: 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23   false...      #
6250: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
6260: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
6270: 20 20 20 20 70 72 6f 63 20 69 73 44 61 72 77 69      proc isDarwi
6280: 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65  n {} {..      re
6290: 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20  turn [expr {..
62a0: 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73        [info exis
62b0: 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  ts ::tcl_platfor
62c0: 6d 28 6f 73 29 5d 20 26 26 20 24 3a 3a 74 63 6c  m(os)] && $::tcl 62d0: 5f 70 6c 61 74 66 6f 72 6d 28 6f 73 29 20 65 71 _platform(os) eq 62e0: 20 22 44 61 72 77 69 6e 22 0d 0a 20 20 20 20 20 "Darwin".. 62f0: 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }].. }..... 6300: 20 20 20 70 72 6f 63 20 67 65 74 4e 61 74 69 76 proc getNativ 6310: 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 eLibraryFileName 6320: 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 sOnly {} {.. 6330: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 6340: 45 3a 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20 E: First, check 6350: 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e if the list of n 6360: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66 69 ative library fi 6370: 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65 65 le names has bee 6380: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 6390: 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 manually overri 63a0: 64 64 65 6e 2e 0d 0a 20 20 20 20 20 20 23 0d 0a dden... #.. 63b0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 63c0: 65 78 69 73 74 73 20 3a 3a 6e 61 74 69 76 65 5f exists ::native_ 63d0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d library_file_nam 63e0: 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 es] && \.. 63f0: 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a [llength$::
6400: 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 5f 66  native_library_f
6410: 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20  ile_names] > 0}
6420: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
6430: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6440: 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 6e  E: The list of n
6450: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66 69  ative library fi
6460: 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65 65  le names has bee
6470: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
6480: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
6490: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
64a0: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
64b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
64c0: 65 74 75 72 6e 20 24 3a 3a 6e 61 74 69 76 65 5f  eturn $::native_ 64d0: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d library_file_nam 64e0: 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 es.. } else 64f0: 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 7d if {[isWindows]} 6500: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 6510: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6520: 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 6f TE: Otherwise, o 6530: 6e 20 57 69 6e 33 32 2c 20 61 6c 77 61 79 73 20 n Win32, always 6540: 75 73 65 20 74 68 65 20 73 74 61 6e 64 61 72 64 use the standard 6550: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 0d native library. 6560: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6570: 20 66 69 6c 65 20 6e 61 6d 65 20 22 73 71 6c 69 file name "sqli 6580: 74 65 33 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 te3.dll"... 6590: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 65a0: 74 75 72 6e 20 5b 6c 69 73 74 20 73 71 6c 69 74 turn [list sqlit 65b0: 65 33 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d e3.dll].. } 65c0: 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 6f 74 4e elseif {[isDotN 65d0: 65 74 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b 0d etCore]} then {. 65e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 65f0: 20 20 20 20 23 20 20 20 20 20 20 20 57 68 65 6e # When 6600: 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 54 running on .NET 6610: 20 43 6f 72 65 2c 20 72 65 74 75 72 6e 20 74 68 Core, return th 6620: 65 20 73 61 6d 65 20 6e 61 74 69 76 65 20 6c 69 e same native li 6630: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 brary.. # 6640: 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 file name 6650: 20 74 68 61 74 20 69 73 20 75 73 65 64 20 6f 6e that is used on 6660: 20 57 69 6e 64 6f 77 73 20 28 69 2e 65 2e 20 6f Windows (i.e. o 6670: 74 68 65 72 77 69 73 65 2c 20 61 73 73 75 6d 65 therwise, assume 6680: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6690: 20 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e 67 we are running 66a0: 20 6f 6e 20 4d 6f 6e 6f 20 61 6e 64 20 75 73 65 on Mono and use 66b0: 20 69 74 73 20 50 2f 49 6e 76 6f 6b 65 20 63 6f its P/Invoke co 66c0: 6e 76 65 6e 74 69 6f 6e 73 29 2e 0d 0a 20 20 20 nventions)... 66d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 66e0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 73 71 6c return [list sql 66f0: 69 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 ite3.dll].. 6700: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 61 } elseif {[isDa 6710: 72 77 69 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rwin]} then {.. 6720: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6730: 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 72 # NOTE: When r 6740: 75 6e 6e 69 6e 67 20 6f 6e 20 44 61 72 77 69 6e unning on Darwin 6750: 20 28 69 2e 65 2e 20 74 68 65 20 6b 65 72 6e 65 (i.e. the kerne 6760: 6c 20 6f 66 20 69 4f 53 20 2f 20 4d 61 63 20 4f l of iOS / Mac O 6770: 53 20 58 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 S X),.. # 6780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68 return th 6790: 65 20 4d 61 63 20 4f 53 20 58 20 6e 61 74 69 76 e Mac OS X nativ 67a0: 65 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e e library file n 67b0: 61 6d 65 2e 20 20 54 68 69 73 20 66 69 6c 65 0d ame. This file. 67c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 67d0: 20 6e 61 6d 65 20 69 73 20 6e 6f 72 6d 61 6c 6c name is normall 67e0: 79 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 4d y required for M 67f0: 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ono... #. 6800: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6810: 5b 6c 69 73 74 20 6c 69 62 73 71 6c 69 74 65 33 [list libsqlite3 6820: 2e 64 79 6c 69 62 5d 0d 0a 20 20 20 20 20 20 7d .dylib].. } 6830: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 6840: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 6850: 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 72 TE: Otherwise, r 6860: 65 74 75 72 6e 20 74 68 65 20 67 65 6e 65 72 69 eturn the generi 6870: 63 20 50 4f 53 49 58 20 6e 61 74 69 76 65 20 6c c POSIX native l 6880: 69 62 72 61 72 79 20 66 69 6c 65 0d 0a 20 20 20 ibrary file.. 6890: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 68a0: 65 2e 20 20 54 68 69 73 20 66 69 6c 65 20 6e 61 e. This file na 68b0: 6d 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 me is normally r 68c0: 65 71 75 69 72 65 64 20 66 6f 72 20 4d 6f 6e 6f equired for Mono 68d0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 68e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li 68f0: 73 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 6f st libsqlite3.so 6900: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 6910: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 6920: 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c etInteropAssembl 6930: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 6940: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 6950: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 6960: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 6970: 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 list of interop 6980: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 assembly file na 6990: 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 mes has been.. 69a0: 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 # manu 69b0: 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e ally overridden. 69c0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 69d0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 69e0: 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 s ::interop_asse 69f0: 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d mbly_file_names] 6a00: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 6a10: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e 74 [llength$::int
6a20: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69  erop_assembly_fi
6a30: 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20 74  le_names] > 0} t
6a40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
6a50: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
6a60: 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69 6e  : The list of in
6a70: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66  terop assembly f
6a80: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
6a90: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
6aa0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6ab0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
6ac0: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
6ad0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6ae0: 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72 6f  return $::intero 6af0: 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 5f p_assembly_file_ 6b00: 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 names.. } e 6b10: 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 lseif {[isWindow 6b20: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. 6b30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 6b40: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 6b50: 2c 20 6f 6e 20 57 69 6e 33 32 2c 20 61 6c 77 61 , on Win32, alwa 6b60: 79 73 20 75 73 65 20 74 68 65 20 69 6e 74 65 72 ys use the inter 6b70: 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 op assembly file 6b80: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6b90: 20 20 6e 61 6d 65 20 22 53 51 4c 69 74 65 2e 49 name "SQLite.I 6ba0: 6e 74 65 72 6f 70 2e 64 6c 6c 22 2e 0d 0a 20 20 nterop.dll"... 6bb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6bc0: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 53 51 return [list SQ 6bd0: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 6be0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 ].. } elsei 6bf0: 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72 65 f {[isDotNetCore 6c00: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 6c10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 6c20: 20 20 20 20 20 20 57 68 65 6e 20 72 75 6e 6e 69 When runni 6c30: 6e 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c ng on .NET Core, 6c40: 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65 return the same 6c50: 20 69 6e 74 65 72 70 20 61 73 73 65 6d 62 6c 79 interp assembly 6c60: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6c70: 20 20 66 69 6c 65 20 6e 61 6d 65 20 74 68 61 74 file name that 6c80: 20 69 73 20 75 73 65 64 20 6f 6e 20 57 69 6e 64 is used on Wind 6c90: 6f 77 73 20 28 69 2e 65 2e 20 6f 74 68 65 72 77 ows (i.e. otherw 6ca0: 69 73 65 2c 20 61 73 73 75 6d 65 0d 0a 20 20 20 ise, assume.. 6cb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20 # we 6cc0: 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 4d are running on M 6cd0: 6f 6e 6f 20 61 6e 64 20 75 73 65 20 69 74 73 20 ono and use its 6ce0: 50 2f 49 6e 76 6f 6b 65 20 63 6f 6e 76 65 6e 74 P/Invoke convent 6cf0: 69 6f 6e 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 ions)... 6d00: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 6d10: 6e 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 n [list SQLite.I 6d20: 6e 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 nterop.dll].. 6d30: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 6d40: 44 61 72 77 69 6e 5d 7d 20 74 68 65 6e 20 7b 0d Darwin]} then {. 6d50: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6d60: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e # NOTE: When 6d70: 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 44 61 72 77 running on Darw 6d80: 69 6e 20 28 69 2e 65 2e 20 74 68 65 20 6b 65 72 in (i.e. the ker 6d90: 6e 65 6c 20 6f 66 20 69 4f 53 20 2f 20 4d 61 63 nel of iOS / Mac 6da0: 20 4f 53 20 58 29 2c 0d 0a 20 20 20 20 20 20 20 OS X),.. 6db0: 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 # return 6dc0: 74 68 65 20 4d 61 63 20 4f 53 20 58 20 69 6e 74 the Mac OS X int 6dd0: 65 72 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c erp assembly fil 6de0: 65 20 6e 61 6d 65 2e 20 20 54 68 69 73 20 66 69 e name. This fi 6df0: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # 6e00: 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 72 6d name is norm 6e10: 61 6c 6c 79 20 72 65 71 75 69 72 65 64 20 66 6f ally required fo 6e20: 72 20 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 20 r Mono... 6e30: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 6e40: 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c 69 rn [list libSQLi 6e50: 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 62 te.Interop.dylib 6e60: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 6e70: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 6e80: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 # NOTE: Ot 6e90: 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 herwise, return 6ea0: 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 the generic POSI 6eb0: 58 20 69 6e 74 65 72 70 20 61 73 73 65 6d 62 6c X interp assembl 6ec0: 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 y file.. 6ed0: 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 20 20 54 # name. T 6ee0: 68 69 73 20 66 69 6c 65 20 6e 61 6d 65 20 69 73 his file name is 6ef0: 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 71 75 69 72 normally requir 6f00: 65 64 20 66 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 20 ed for Mono... 6f10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6f20: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 return [list li 6f30: 62 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e bSQLite.Interop. 6f40: 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 so].. }.. 6f50: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 6f60: 20 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69 6f getCoreExtensio 6f70: 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 nBinaryFileName 6f80: 7b 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 7d { {default ""} } 6f90: 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 {.. set fi 6fa0: 6c 65 4e 61 6d 65 20 5b 67 65 74 43 6f 72 65 42 leName [getCoreB 6fb0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d 0d 0a inaryFileName].. 6fc0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c .. if {[fil 6fd0: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
6fe0: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
6ff0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c       return $fil 7000: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a eName.. }.. 7010: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
7020: 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  default..    }..
7030: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 42 75  ...    proc isBu
7040: 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e  ildAvailable { n
7050: 61 74 69 76 65 20 73 6b 69 70 4e 61 74 69 76 65  ative skipNative
7060: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
7070: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
7080: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
7090: 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75  TE: Build the fu
70a0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69  lly qualified fi
70b0: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the
70c0: 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79  primary assembly
70d0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
70e0: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53  containing the S
70f0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
7100: 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e  e managed compon
7110: 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20 20  ents.  It..
7120: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
7130: 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74 68  be noted that th
7140: 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  is assembly file
7150: 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69   may also contai
7160: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  n the..      #
7170: 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d 70       native comp
7180: 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61 74  onents, if a nat
7190: 69 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e 20  ive build is in
71a0: 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  use...      #..
71b0: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d       set fileNam
71c0: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
71d0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64  me [file join $d 71e0: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 irectory \.. 71f0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 7200: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a a.SQLite.dll]].. 7210: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi 7220: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
7230: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
7240: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
7250: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  se..      }....
7260: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
7270: 4e 4f 54 45 3a 20 49 66 20 77 65 20 61 72 65 20  NOTE: If we are
7280: 73 6b 69 70 70 69 6e 67 20 6c 6f 6f 6b 69 6e 67  skipping looking
7290: 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65 20   for the native
72a0: 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 73 74 6f 70  components, stop
72b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
72c0: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  now...      #..
72d0: 20 20 20 20 20 69 66 20 7b 24 73 6b 69 70 4e 61       if {$skipNa 72e0: 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 tive} then {.. 72f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 7300: 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 7310: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 7320: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 OTE: Attempt to 7330: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 automatically de 7340: 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69 6d tect if the prim 7350: 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 ary assembly.. 7360: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 # cont 7370: 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 20 ains any native 7380: 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e components, if n 7390: 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 ecessary... 73a0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 #.. if {[s 73b0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 tring length$na
73c0: 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  tive] == 0} then
73d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
73e0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $73f0: 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 varName] > 0} th 7400: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 7410: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 upvar 1$varName
7420: 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20   $varName.. 7430: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 7440: 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d 69 set native [isMi 7450: 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 xedModeAssembly 7460: 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61$fileName $varNa 7470: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a me].. }.... 7480: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 7490: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 72 NOTE: If the pr 74a0: 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 61 imary assembly a 74b0: 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 lso contains the 74c0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e native componen 74d0: 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ts,.. # 74e0: 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72 79 we have every 74f0: 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a thing we need... 7500: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 7510: 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e f {$native} then
7520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
7530: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d  rn true..      }
7540: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
7550: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
7560: 65 20 6d 61 63 68 69 6e 65 20 6e 61 6d 65 20 69  e machine name i
7570: 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20 74  s unavailable, t
7580: 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67 20  here is nothing
7590: 65 6c 73 65 20 77 65 0d 0a 20 20 20 20 20 20 23  else we..      #
75a0: 20 20 20 20 20 20 20 63 61 6e 20 64 6f 2e 0d 0a         can do...
75b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
75c0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
75d0: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
75e0: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
75f0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
7600: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d  n false..      }
7610: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
7620: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 20     # NOTE: What
7630: 69 73 20 74 68 65 20 61 72 63 68 69 74 65 63 74  is the architect
7640: 75 72 65 20 66 6f 72 20 74 68 69 73 20 6d 61 63  ure for this mac
7650: 68 69 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a  hine?..      #..
7660: 20 20 20 20 20 20 73 65 74 20 61 72 63 68 69 74        set archit
7670: 65 63 74 75 72 65 20 5b 6d 61 63 68 69 6e 65 54  ecture [machineT
7680: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c  oPlatform $::tcl 7690: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e _platform(machin 76a0: 65 29 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 e) true].... 76b0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 76c0: 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20 70 E: What is the p 76d0: 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 69 73 latform for this 76e0: 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20 20 machine?.. 76f0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 6c #.. set pl 7700: 61 74 66 6f 72 6d 20 5b 6d 61 63 68 69 6e 65 54 atform [machineT 7710: 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c oPlatform$::tcl
7720: 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e  _platform(machin
7730: 65 29 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  e)]....      #..
7740: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
7750: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75  ild the fully qu
7760: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  alified file nam
7770: 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f  e for the intero
7780: 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20  p assembly..
7790: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69    #       contai
77a0: 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e  ning the System.
77b0: 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69  Data.SQLite nati
77c0: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ve components.
77d0: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23  If this..      #
77e0: 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69 73         file exis
77f0: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61  ts, we should ha
7800: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65  ve everything we
7810: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d   need...      #.
7820: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66  .      foreach f
7830: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74  ileNameOnly [get
7840: 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46  InteropAssemblyF
7850: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d  ileNamesOnly] {.
7860: 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
7870: 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69  eName [file nati
7880: 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
7890: 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a  n $directory \.. 78a0: 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63$arc
78b0: 68 69 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e  hitecture $fileN 78c0: 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 ameOnly]].... 78d0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 78e0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
78f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7900: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d      return true.
7910: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
7920: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
7930: 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  me [file nativen
7940: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ame [file join $7950: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 directory \.. 7960: 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f$platfo
7970: 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  rm $fileNameOnly 7980: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ]].... if 7990: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
79a0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
79b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  {..          ret
79c0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
79d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
79e0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
79f0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
7a00: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo 7a10: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 7a20: 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d$fileNameOnly]
7a30: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ]....        if
7a40: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f 7a50: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 7a60: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu 7a70: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 rn true.. 7a80: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 7a90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7aa0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 7ab0: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 fully qualified 7ac0: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 file name for th 7ad0: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 e SQLite core.. 7ae0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 # lib 7af0: 72 61 72 79 2e 20 20 49 66 20 74 68 69 73 20 66 rary. If this f 7b00: 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 73 ile exists, we s 7b10: 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 79 hould have every 7b20: 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20 20 20 thing we.. 7b30: 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a 20 # need... 7b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f #.. fo 7b50: 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e reach fileNameOn 7b60: 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 62 ly [getNativeLib 7b70: 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c raryFileNamesOnl 7b80: 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 y] {.. se 7b90: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 t fileName [file 7ba0: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 7bb0: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 e join$director
7bc0: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
7bd0: 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 24   $architecture$
7be0: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a  fileNameOnly]]..
7bf0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66  ..        if {[f
7c00: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file 7c10: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 7c20: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 7c30: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d true.. }. 7c40: 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 ... set f 7c50: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 ileName [file na 7c60: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a tivename [file j 7c70: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c oin$directory \
7c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 70  ..            $p 7c90: 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d latform$fileNam
7ca0: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
7cb0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
7cc0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 7cd0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7ce0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 7cf0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 7d00: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 7d10: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7d20: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
7d30: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
7d40: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName 7d50: 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 Only]].... 7d60: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 if {[file exis 7d70: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
7d80: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
7d90: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
7da0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
7db0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
7dc0: 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20 6f     # NOTE: One o
7dd0: 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63 6f  r more native co
7de0: 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64 20  mponents needed
7df0: 62 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  by System.Data.S
7e00: 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20 20  QLite..      #
7e10: 20 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e 67       are missing
7e20: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7e30: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
7e40: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
7e50: 6f 63 20 69 73 52 65 6c 65 61 73 65 41 76 61 69  oc isReleaseAvai
7e60: 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f 72  lable { director
7e70: 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d  y {varName ""} }
7e80: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   {..      if {[s
7e90: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 7ea0: 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e rName] > 0} then 7eb0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 {.. upva 7ec0: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 61 r 1$varName $va 7ed0: 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a rName.. }.. 7ee0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 7ef0: 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 isBuildAvailable 7f00: 20 22 22 20 66 61 6c 73 65 20 24 64 69 72 65 63 "" false$direc
7f10: 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a  tory $varName].. 7f20: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 7f30: 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 oc joinBuildDire 7f40: 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 70 ctory { native p 7f50: 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f 72 ath year platfor 7f60: 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 m configuration 7f70: 65 78 74 72 61 20 7d 20 7b 0d 0a 20 20 20 20 20 extra } {.. 7f80: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 7f90: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e 64 : Figure out and 7fa0: 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 65 then return the 7fb0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified 7fc0: 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 69 path to the bui 7fd0: 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ld.. # 7fe0: 20 20 64 69 72 65 63 74 6f 72 79 20 62 61 73 65 directory base 7ff0: 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 d on all the arg 8000: 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64 20 uments provided 8010: 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a by our caller... 8020: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 8030: 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e f {$native} then
8040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
8050: 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70  rn [file join $p 8060: 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 70 ath bin$year $p 8070: 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 latform$configu
8080: 72 61 74 69 6f 6e 20 24 65 78 74 72 61 5d 0d 0a  ration $extra].. 8090: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 80a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 80b0: 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 file join$path
80c0: 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69  bin $year$confi
80d0: 67 75 72 61 74 69 6f 6e 20 62 69 6e 20 24 65 78  guration bin $ex 80e0: 74 72 61 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 tra].. }.. 80f0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 8100: 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 c getBuildDirect 8110: 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e 6c ory { managedOnl 8120: 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a y } {.. #.. 8130: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 # NOTE: Se 8140: 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 65 e if the "native 8150: 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e " runtime option 8160: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 20 has been set. 8170: 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a If so, use the.. 8180: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 # di 8190: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 rectory for the 81a0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 81b0: 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 20 bly (a.k.a. the 81c0: 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d 0a native interop.. 81d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 81e0: 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e 61 sembly). To ena 81f0: 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 ble this option 8200: 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 via the command 8210: 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a 20 line, enter a.. 8220: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com 8230: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 mand similar to 8240: 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f one of the follo 8250: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 wing (all on one 8260: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 line):.. # 8270: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8280: 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d EagleShell.exe - 8290: 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e 74 initialize -runt 82a0: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 82b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 82c0: 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 -file .\path\t 82d0: 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 o\all.eagle.. 82e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 #.. # 82f0: 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 To enable th 8300: 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 is option via th 8310: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 e command line p 8320: 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 74 rior to the "bet 8330: 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 20 a 16".. # 8340: 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 20 release of 8350: 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c 6f Eagle, the follo 8360: 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 wing command mus 8370: 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 61 t be used instea 8380: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 8390: 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e (also all on on 83a0: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 e line):.. 83b0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 83c0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 83d0: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f 73 -initialize -pos 83e0: 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 20 tInitialize.. 83f0: 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f 62 # "ob 8400: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 ject invoke Inte 8410: 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 8420: 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 e AddRuntimeOpti 8430: 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 20 on native".. 8440: 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c # -fil 8450: 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e e .\path\to\all. 8460: 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a eagle.. #.. 8470: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 8480: 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f 64 exists ::build_d 8490: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a irectory] && \.. 84a0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin 84b0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c g length$::buil
84c0: 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  d_directory] > 0
84d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
84e0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
84f0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
8500: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 64  n of the build d
8510: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
8520: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
8530: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
8540: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
8550: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20   verbatim...
8560: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
8570: 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f 64  eturn $::build_d 8580: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 8590: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 85a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 85b0: 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 OTE: If the "nat 85c0: 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ive" runtime opt 85d0: 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 20 ion is set, the 85e0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 85f0: 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 bly.. # 8600: 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 65 is being te 8610: 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 63 sted. In that c 8620: 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 6f ase, the path to 8630: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 8640: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 tory.. # 8650: 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 61 will conta 8660: 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 in the platform 8670: 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 65 name and all the 8680: 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 binaries under 8690: 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 test.. # 86a0: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 should be 86b0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 20 present in that 86c0: 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 74 directory. If t 86d0: 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 he "native" runt 86e0: 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ime.. # 86f0: 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 6e option is n 8700: 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 6c ot set, the buil 8710: 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c 6c d directory will 8720: 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 74 be considered t 8730: 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 o be.. # 8740: 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d 2d "platform- 8750: 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 74 neutral", with t 8760: 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70 he notable excep 8770: 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 69 tion of any nati 8780: 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ve.. # 8790: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 2e assembly (e. 87a0: 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 g. "SQLite.Inter 87b0: 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 20 op.dll") copied 87c0: 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 65 there during the 87d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 87e0: 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 build process 87f0: 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 20 itself. If the 8800: 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 6f build process so 8810: 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d 0a mehow does not.. 8820: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8830: 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 copy the native 8840: 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 69 assembly for thi 8850: 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 s platform, most 8860: 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a 20 of the tests.. 8870: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 8880: 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c 6c n the suite will 8890: 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 70 simply be skipp 88a0: 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 73 ed. Generally s 88b0: 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d 0a peaking, there.. 88c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 88d0: 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f 20 are two ways to 88e0: 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 69 build the binari 88f0: 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e es when preparin 8900: 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 20 g to run the.. 8910: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 # te 8920: 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 20 st suite:.. 8930: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8940: 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 74 1. Build t 8950: 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e 61 he separate mana 8960: 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 61 ged and native a 8970: 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 20 ssemblies using 8980: 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 some.. # 8990: 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 command 89a0: 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 s similar to:.. 89b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 89c0: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 # bui 89d0: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 ld.bat${Configu
89e0: 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e  ration}ManagedOn
89f0: 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a  ly ${Platform}.. 8a00: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8a10: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 build.bat${C
8a20: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61 74  onfiguration}Nat
8a30: 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f  iveOnly ${Platfo 8a40: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rm}.. #.. 8a50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8a60: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 Where${Confi
8a70: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74  guration} is eit
8a80: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22  her "Debug" or "
8a90: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20  Release" and..
8aa0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
8ab0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20   ${Platform} is 8ac0: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f either "Win32" o 8ad0: 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 20 r "x64"... 8ae0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 #.. # 8af0: 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 68 2. Build th 8b00: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 8b10: 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 6f embly using a co 8b20: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f mmand similar to 8b30: 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 :.. #.. 8b40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 8b50: 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e build.bat${Con
8b60: 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50 6c  figuration} ${Pl 8b70: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 atform}.. 8b80: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 #.. # 8b90: 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 Where${C
8ba0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73  onfiguration} is
8bb0: 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20   either "Debug"
8bc0: 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64  or "Release" and
8bd0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
8be0: 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d       ${Platform} 8bf0: 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 is either "Win3 8c00: 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 66 2" or "x64". If 8c10: 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 73 this command is 8c20: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 8c30: 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 6f used, vario 8c40: 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72 65 us tests that re 8c50: 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e 74 quire supplement 8c60: 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 ary managed.. 8c70: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 8c80: 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 2e assemblies (e.g. 8c90: 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 6b LINQ) may be sk 8ca0: 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 6f ipped unless tho 8cb0: 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 20 se binaries.. 8cc0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 8cd0: 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c 79 are subsequently 8ce0: 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 65 copied into the 8cf0: 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 6f correct directo 8d00: 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 20 ry (i.e. by.. 8d10: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 8d20: 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 2e "test_all.bat"). 8d30: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8d40: 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 74 # Not 8d50: 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 68 e that all of th 8d60: 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 e build commands 8d70: 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 61 above will defa 8d80: 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 20 ult to using.. 8d90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 8da0: 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f 6e e latest version 8db0: 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 69 of MSBuild avai 8dc0: 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 74 lable and the "t 8dd0: 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a 20 est_year" may.. 8de0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e # n 8df0: 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 74 eed to be adjust 8e00: 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 74 ed accordingly t 8e10: 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 74 o actually run t 8e20: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a he test suite... 8e30: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8e40: 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f 6d Refer to the com 8e50: 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 69 ments in [getBui 8e60: 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 65 ldYear] for more 8e70: 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d information on. 8e80: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8e90: 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 73 how to set this 8ea0: 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 20 variable... 8eb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 8ec0: 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70 72 20 et native [expr 8ed0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 21 24 6d {.. !$m
8ee0: 61 6e 61 67 65 64 4f 6e 6c 79 20 26 26 20 28 5b  anagedOnly && ([
8ef0: 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 5d 20  getBuildNative]
8f00: 7c 7c 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  || [hasRuntimeOp
8f10: 74 69 6f 6e 20 6e 61 74 69 76 65 5d 29 0d 0a 20  tion native])..
8f20: 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20         }]....
8f30: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f 69       return [joi
8f40: 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20  nBuildDirectory
8f50: 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 69 6c  $native [getBuil 8f60: 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 dBaseDirectory] 8f70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 8f80: 65 78 70 72 20 7b 24 6d 61 6e 61 67 65 64 4f 6e expr {$managedOn
8f90: 6c 79 20 3f 20 5b 67 65 74 42 75 69 6c 64 59 65  ly ? [getBuildYe
8fa0: 61 72 5d 20 3a 20 5b 67 65 74 42 75 69 6c 64 4e  ar] : [getBuildN
8fb0: 61 74 69 76 65 59 65 61 72 5d 7d 5d 20 5c 0d 0a  ativeYear]}] \..
8fc0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
8fd0: 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e  BuildPlatform $n 8fe0: 61 74 69 76 65 5d 20 5b 61 70 70 65 6e 64 41 72 ative] [appendAr 8ff0: 67 73 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 gs [getBuildConf 9000: 69 67 75 72 61 74 69 6f 6e 5d 20 5c 0d 0a 20 20 iguration] \.. 9010: 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 [expr 9020: 7b 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 3f 20 {$managedOnly ?
9030: 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75  [getBuildConfigu
9040: 72 61 74 69 6f 6e 53 75 66 66 69 78 5d 20 3a 20  rationSuffix] :
9050: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
9060: 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 43 6f  getBuildNativeCo
9070: 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69  nfigurationSuffi
9080: 78 5d 7d 5d 5d 20 5b 65 78 70 72 20 7b 24 6d 61  x]}]] [expr {$ma 9090: 6e 61 67 65 64 4f 6e 6c 79 20 3f 20 5c 0d 0a 20 nagedOnly ? \.. 90a0: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 90b0: 75 69 6c 64 45 78 74 72 61 5d 20 3a 20 22 22 7d uildExtra] : ""} 90c0: 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 ]].. }.. 90d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 90e0: 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f getReleaseVersio 90f0: 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d n {} {.. #. 9100: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 9110: 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 72 65 igure out the re 9120: 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66 6f lease version fo 9130: 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20 62 r use with the b 9140: 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a uild directory.. 9150: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 # wh 9160: 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 en checking for 9170: 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61 73 available releas 9180: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 9190: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 91a0: 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f 76 ists ::release_v 91b0: 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 ersion] && \.. 91c0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 91d0: 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61 73 length$::releas
91e0: 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d 20  e_version] > 0}
91f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
9200: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
9210: 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20 76  E: The release v
9220: 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e 20  ersion has been
9230: 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65 72  overridden; ther
9240: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a 20  efore, use it..
9250: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76         #       v
9260: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
9270: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
9280: 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76  urn $::release_v 9290: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 ersion.. } 92a0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 92b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 92c0: 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76 65 E: No release ve 92d0: 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 rsion is availab 92e0: 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d le, return an em 92f0: 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 pty string... 9300: 20 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 # It 9310: 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 is important to 9320: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 9330: 73 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 string here beca 9340: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 use the.. 9350: 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 # result 9360: 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 of this procedur 9370: 65 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 e may be used wi 9380: 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d th [file join].. 9390: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 93a0: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 return "".. 93b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 93c0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 93d0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 ildFileName { fi 93e0: 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e leName managedOn 93f0: 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d ly {platform ""} 9400: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 9410: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 9420: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 urns the specifi 9430: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 ed file name as 9440: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 if it were locat 9450: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 ed in the.. 9460: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 # build d 9470: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 irectory, discar 9480: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f ding any directo 9490: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 ry information p 94a0: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 resent.. # 94b0: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c in the fil 94c0: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 e name as provid 94d0: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 94e0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 94f0: 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69 set result [fi 9500: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d le nativename \. 9510: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 . [file 9520: 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 join [getBuildD 9530: 69 72 65 63 74 6f 72 79 20 24 6d 61 6e 61 67 65 irectory$manage
9540: 64 4f 6e 6c 79 5d 20 24 70 6c 61 74 66 6f 72 6d  dOnly] $platform 9550: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f 9560: 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 ile tail$fileNa
9570: 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  me]]]....      #
9580: 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20  ..      # HACK:
9590: 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20  When running on
95a0: 57 6f 57 36 34 2c 20 61 73 73 75 6d 65 20 74 68  WoW64, assume th
95b0: 65 20 74 65 73 74 20 65 78 65 63 75 74 61 62 6c  e test executabl
95c0: 65 73 20 61 72 65 20 70 72 65 73 65 6e 74 0d 0a  es are present..
95d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69        #       wi
95e0: 74 68 20 74 68 65 20 22 33 32 22 20 73 75 66 66  th the "32" suff
95f0: 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20 20  ix on them...
9600: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
9610: 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34 5d  [isRunningWoW64]
9620: 20 26 26 20 5b 66 69 6c 65 20 65 78 74 65 6e 73   && [file extens
9630: 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20 65 71 20  ion $result] eq 9640: 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 7b 0d 0a ".exe"} then {.. 9650: 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73 75 set resu 9660: 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b lt [appendArgs [ 9670: 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 72 file rootname$r
9680: 65 73 75 6c 74 5d 20 33 32 2e 65 78 65 5d 0d 0a  esult] 32.exe]..
9690: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
96a0: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result. 96b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 96c0: 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c 44 roc getExternalD 96d0: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 96e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 96f0: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 9700: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 9710: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 9720: 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 69 the external bi 9730: 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 nary.. # 9740: 20 20 20 20 66 69 6c 65 73 20 61 72 65 20 6c 6f files are lo 9750: 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d cated... #. 9760: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 . return [f 9770: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 9780: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 9790: 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 e dirname [file 97a0: 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di 97b0: 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e 61 rname [info bina 97c0: 72 79 5d 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a ry]]]]].. }.. 97d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 97e0: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 7b inaryDirectory { 97f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 9800: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 # NOTE: This 9810: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 procedure retur 9820: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 ns the directory 9830: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 where the test 9840: 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 application.. 9850: 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c # itsel 9860: 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 6c f (i.e. the Eagl 9870: 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61 e shell) is loca 9880: 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 ted. This will 9890: 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 20 be used as.. 98a0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 65 # the de 98b0: 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 stination for th 98c0: 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d 2e e copied System. 98d0: 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 Data.SQLite nati 98e0: 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 ve and.. # 98f0: 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 managed as 9900: 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 62 semblies (i.e. b 9910: 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20 6f ecause this is o 9920: 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 6c ne of the few pl 9930: 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 aces.. # 9940: 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43 4c where the CL 9950: 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 R will actually 9960: 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 68 find and load th 9970: 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a 20 em properly)... 9980: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 9990: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 99a0: 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 :binary_director 99b0: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 99c0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 99d0: 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 h$::binary_dire
99e0: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e  ctory] > 0} then
99f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
9a00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
9a10: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
9a20: 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63 74  he binary direct
9a30: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ory has been ove
9a40: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20  rridden;..
9a50: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66    #       theref
9a60: 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62  ore, use it verb
9a70: 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  atim...        #
9a80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
9a90: 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63   $::binary_direc 9aa0: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c tory.. } el 9ab0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 9ac0: 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 turn [info binar 9ad0: 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 y].. }.. 9ae0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 9af0: 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 4e getExternalFileN 9b00: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d ame { fileName } 9b10: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 9b20: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 9b30: 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 ns the specified 9b40: 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 66 file name as if 9b50: 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 64 it were located 9b60: 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 in the.. # 9b70: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory 9b80: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the 9b90: 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65 external binarie 9ba0: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 9bb0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 9bc0: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 9bd0: 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 6e join [getExtern 9be0: 61 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 69 alDirectory]$fi
9bf0: 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d  leName]]..    }.
9c00: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
9c10: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b  BinaryFileName {
9c20: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
9c30: 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  orm ""} } {..
9c40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
9c50: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20  TE: Returns the
9c60: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e  specified file n
9c70: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72  ame as if it wer
9c80: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  e located in the
9c90: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
9ca0: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79  binary directory
9cb0: 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e 79  , discarding any
9cc0: 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f 72   directory infor
9cd0: 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a  mation present..
9ce0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
9cf0: 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 61   the file name a
9d00: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75  s provided by ou
9d10: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20  r caller...
9d20: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
9d30: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
9d40: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  e \..          [
9d50: 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69  file join [getBi
9d60: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24  naryDirectory] $9d70: 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20 74 platform [file t 9d80: 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d ail$fileName]]]
9d90: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
9da0: 70 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e 61  proc getCoreBina
9db0: 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70 6c  ryFileName { {pl
9dc0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61 6e  atform ""} {stan
9dd0: 64 61 72 64 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  dard ""} } {..
9de0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
9df0: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65  OTE: Returns the
9e00: 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20 74   full path for t
9e10: 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  he file containi
9e20: 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ng the SQLite co
9e30: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  re..      #
9e40: 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79    native library
9e50: 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73 20 70   code for this p
9e60: 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73 74 2c  latform.  First,
9e70: 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65 20 69   check and see i
9e80: 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  f..      #
9e90: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
9ea0: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20   native library
9eb0: 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e  has already been
9ec0: 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c 0d   loaded.  Next,.
9ed0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
9ee0: 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61 74 20  allback to what
9ef0: 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 73 68  the full path sh
9f00: 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64 20 6f  ould be, based o
9f10: 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d 0a 20  n whether the..
9f20: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78       #       mix
9f30: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79  ed-mode assembly
9f40: 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20 61   is being used a
9f50: 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  nd the name of t
9f60: 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20 20  he current..
9f70: 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f    #       platfo
9f80: 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  rm...      #..
9f90: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
9fa0: 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
9fb0: 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
9fc0: 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
9fd0: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
9fe0: 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
9ff0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
a000: 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64  _SQLiteNativeMod
a010: 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  uleFileName..
a020: 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20 3d     } fileName] =
a030: 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67 20 6c  = 0 && [string l
a040: 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d  ength $fileName] a050: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. a060: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. a070: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 4c # NOTE: The SQL a080: 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 20 ite core native a090: 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 65 library has alre a0a0: 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 20 ady been loaded a0b0: 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 20 20 via.. # a0c0: 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 65 20 the native a0d0: 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 64 library pre-load a0e0: 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 61 74 er. Return that a0f0: 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d file name now.. a100: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a110: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
a120: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  Name..      }...
a130: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
a140: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22  # NOTE: If the "
a150: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20  native" runtime
a160: 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20  option has been
a170: 73 65 74 2c 20 61 6c 77 61 79 73 20 72 65 74 75  set, always retu
a180: 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  rn the..      #
a190: 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20        file name
a1a0: 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  for the mixed-mo
a1b0: 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  de assembly...
a1c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
a1d0: 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69  {[hasRuntimeOpti
a1e0: 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e  on native]} then
a1f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
a200: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
a210: 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 64 2d  eturn the mixed-
a220: 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66 69  mode assembly fi
a230: 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20  le name...
a240: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
a250: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  urn [file native
a260: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
a270: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b      [file join [
a280: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f  getBinaryDirecto
a290: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 79  ry] $platform Sy a2a0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a2b0: 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d .dll]].. }. a2c0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. a2d0: 20 20 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 65 # NOTE: Are we a2e0: 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 61 attempting to a a2f0: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 utomatically det a300: 65 63 74 20 77 68 65 74 68 65 72 20 6f 72 20 6e ect whether or n a310: 6f 74 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 ot the.. # a320: 20 20 20 20 20 20 69 6e 74 65 72 6f 70 20 61 73 interop as a330: 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 65 sembly should be a340: 20 75 73 65 64 3f 0d 0a 20 20 20 20 20 20 23 0d used?.. #. a350: 0a 20 20 20 20 20 20 73 65 74 20 61 75 74 6f 6d . set autom a360: 61 74 69 63 20 5b 65 78 70 72 20 7b 5b 73 74 72 atic [expr {[str a370: 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 74 61 6e ing length$stan
a380: 64 61 72 64 5d 20 3d 3d 20 30 7d 5d 0d 0a 0d 0a  dard] == 0}]....
a390: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
a3a0: 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 69 6e   NOTE: First, in
a3b0: 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61 74   either "automat
a3c0: 69 63 22 20 6f 72 20 22 6e 6f 6e 2d 73 74 61 6e  ic" or "non-stan
a3d0: 64 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74  dard" modes, att
a3e0: 65 6d 70 74 0d 0a 20 20 20 20 20 20 23 20 20 20  empt..      #
a3f0: 20 20 20 20 74 6f 20 66 69 6e 64 20 74 68 65 20      to find the
a400: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65  native-only inte
a410: 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  rop assembly...
a420: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
a430: 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c 20   {$automatic || a440: 21 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e !$standard} then
a450: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
a460: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
a470: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
a480: 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d 6f  ine the native-o
a490: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65  nly interop asse
a4a0: 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20  mbly file..
a4b0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20     #       name
a4c0: 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72  for this platfor
a4d0: 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72  m and then retur
a4e0: 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  n it...        #
a4f0: 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
a500: 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b  h fileNameOnly [
a510: 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62  getInteropAssemb
a520: 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d  lyFileNamesOnly]
a530: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
a540: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
a550: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20   nativename \..
a560: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
a570: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
a580: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c  ryDirectory] $pl a590: 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 atform$fileName
a5a0: 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  Only]]....
a5b0: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78      if {[file ex
a5c0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} a5d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. a5e0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c return$fil
a5f0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20  eName..
a600: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
a610: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
a620: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
a630: 20 54 68 65 6e 2c 20 69 6e 20 65 69 74 68 65 72   Then, in either
a640: 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20   "automatic" or
a650: 22 73 74 61 6e 64 61 72 64 22 20 6d 6f 64 65 73  "standard" modes
a660: 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20 20  , attempt to..
a670: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6e 64      #       find
a680: 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 53 51   the standard SQ
a690: 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  Lite library...
a6a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
a6b0: 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c 20   {$automatic || a6c0: 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20$standard} then
a6d0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
a6e0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
a6f0: 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69  tempt to determi
a700: 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e  ne the native-on
a710: 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69  ly standard SQLi
a720: 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20  te library..
a730: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
a740: 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20 70   name for this p
a750: 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65 6e  latform and then
a760: 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20 20   return it...
a770: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a780: 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
a790: 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
a7a0: 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
a7b0: 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  nly] {..
a7c0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
a7d0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
a7e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
a7f0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
a800: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
a810: 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65   $platform$file
a820: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20  NameOnly]]....
a830: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
a840: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa a850: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. a860: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return a870: 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
a880: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
a890: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
a8a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
a8b0: 4f 54 45 3a 20 57 61 73 20 74 68 65 20 6d 61 6e  OTE: Was the man
a8c0: 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 63 6f  aged assembly co
a8d0: 6d 70 69 6c 65 64 20 65 78 70 65 63 74 69 6e 67  mpiled expecting
a8e0: 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 74 68   to deal with th
a8f0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
a900: 20 73 74 61 6e 64 61 72 64 20 63 6f 72 65 20 6c   standard core l
a910: 69 62 72 61 72 79 3f 0d 0a 20 20 20 20 20 20 23  ibrary?..      #
a920: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
a930: 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  eSQLiteDefineCon
a940: 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 53 54 41  stant SQLITE_STA
a950: 4e 44 41 52 44 5d 7d 20 74 68 65 6e 20 7b 0d 0a  NDARD]} then {..
a960: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a970: 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62     # NOTE: Fallb
a980: 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e 67  ack to returning
a990: 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79   the native-only
a9a0: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
a9b0: 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20   library..
a9c0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e    #       file n
a9d0: 61 6d 65 20 66 6f 72 20 74 68 65 20 70 6c 61 74  ame for the plat
a9e0: 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23  form...        #
a9f0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
aa00: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 5b 67 65 74  leNamesOnly [get
aa10: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c  NativeLibraryFil
aa20: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20  eNamesOnly]....
aa30: 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e         if {[llen
aa40: 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e  gth $fileNamesOn aa50: 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ly] == 0} then { aa60: 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 .. retu aa70: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d rn "".. } aa80: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu aa90: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen aaa0: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c ame [file join \ aab0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 .. [g aac0: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 etBinaryDirector aad0: 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 y]$platform [li
aae0: 6e 64 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f  ndex $fileNamesO aaf0: 6e 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 nly 0]]].. ab00: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. ab10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N ab20: 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f OTE: Fallback to ab30: 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e returning the n ab40: 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 ative-only inter ab50: 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 op assembly file ab60: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # ab70: 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 name for the p ab80: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... ab90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set aba0: 20 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 5b fileNamesOnly [ abb0: 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb abc0: 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d lyFileNamesOnly] abd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { abe0: 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 [llength$fileNa
abf0: 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d 20 74  mesOnly] == 0} t
ac00: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
ac10: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
ac20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
ac30: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61   return [file na
ac40: 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
ac50: 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
ac60: 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72     [getBinaryDir
ac70: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor ac80: 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 4e m [lindex$fileN
ac90: 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a 20  amesOnly 0]]]..
aca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
acb0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f  ..    proc getCo
acc0: 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b 7d  mmonDirectory {}
acd0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
ace0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
acf0: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
ad00: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  s the directory
ad10: 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20 73  where the test s
ad20: 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23 20  cripts..      #
ad30: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20        should be
ad40: 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65 66  located.  By def
ad50: 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20  ault, this just
ad60: 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67 6c  returns the Eagl
ad70: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
ad80: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
ad90: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  y...      #..
ada0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
adb0: 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72  sts ::common_dir
adc0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
add0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
ade0: 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e  length $::common adf0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} ae00: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. ae10: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO ae20: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location ae30: 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 64 of the common d ae40: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee ae50: 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 n set;.. ae60: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 # therefor ae70: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 e, use it... ae80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r ae90: 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f eturn$::common_
aea0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
aeb0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f   } elseif {[info
aec0: 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f 72   exists ::vendor
aed0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
aee0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
aef0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76 65  ing length $::ve af00: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 ndor_directory] af10: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. af20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. af30: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca af40: 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e 64 tion of the vend af50: 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 or directory has af60: 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 been set;.. af70: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 # ther af80: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a efore, use it... af90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. afa0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 6e return$::ven
afb0: 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  dor_directory..
afc0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
afd0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63  info exists ::tc
afe0: 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c 0d  l_library] && \.
aff0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
b000: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63 6c  ng length $::tcl b010: 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 26 _library] > 0 && b020: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 \.. [f b030: 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 ile isdirectory b040: 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 7d$::tcl_library]}
b050: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b060: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
b070: 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c 65  TE: The variable
b080: 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74 69   with the locati
b090: 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70 74  on of the script
b0a0: 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20 20   library is..
b0b0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
b0c0: 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f 20   and appears to
b0d0: 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63 74  be a real direct
b0e0: 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65 6d  ory (i.e. not em
b0f0: 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20 20  bedded..
b100: 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20 61  #       within a
b110: 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f 72   file); therefor
b120: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
b130: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
b140: 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69 62  eturn $::tcl_lib b150: 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c rary.. } el b160: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. b170: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: b180: 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 65 Fallback to the b190: 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 directory conta b1a0: 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 74 ining the execut b1b0: 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 able... # b1c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return b1d0: 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a [info binary].. b1e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. b1f0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 ... proc getD b200: 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 atabaseDirectory b210: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. b220: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th b230: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret b240: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f urns the directo b250: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 ry where the tes b260: 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 20 t databases.. b270: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c # shoul b280: 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 d be located. B b290: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 y default, this b2a0: 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 65 just uses the te b2b0: 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 mporary.. # b2c0: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory b2d0: 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 configured for b2e0: 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 20 this system... b2f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if b300: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: b310: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f database_directo b320: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. b330: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng b340: 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 th$::database_d
b350: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74  irectory] > 0} t
b360: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
b370: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
b380: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f  : The location o
b390: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 64  f the database d
b3a0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
b3b0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
b3c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
b3d0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
b3e0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b3f0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: b400: 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f database_directo b410: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else b420: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists b430: 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 ::scratch_direc b440: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. b450: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le b460: 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f ngth$::scratch_
b470: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
b480: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b490: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
b4a0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
b4b0: 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20 64  of the scratch d
b4c0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65  irectory has bee
b4d0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20  n overridden;..
b4e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
b4f0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74  herefore, use it
b500: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b510: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: b520: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director b530: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 y.. } else b540: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur b550: 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 n [getTemporaryP b560: 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 ath].. }.. b570: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro b580: 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 c getTemporaryDi b590: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. b5a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N b5b0: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced b5c0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the b5d0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where b5e0: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 69 the temporary fi b5f0: 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 les.. # b600: 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f 63 should be loc b610: 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 6c ated. By defaul b620: 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 65 t, this just use b630: 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 0d s the temporary. b640: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d b650: 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 75 irectory configu b660: 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 73 red for this sys b670: 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 tem... #.. b680: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e b690: 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 72 xists ::temporar b6a0: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 y_directory] && b6b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st b6c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 ring length$::t
b6d0: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f  emporary_directo
b6e0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
b6f0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
b700: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
b710: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
b720: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
b730: 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ory has been ove
b740: 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20  rridden;..
b750: 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66    #       theref
b760: 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20  ore, use it...
b770: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b780: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70 6f   return $::tempo b790: 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a rary_directory.. b7a0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { b7b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 [info exists ::s b7c0: 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 cratch_directory b7d0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. b7e0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length b7f0: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65$::scratch_dire
b800: 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e  ctory] > 0} then
b810: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
b820: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54         # NOTE: T
b830: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
b840: 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65 63  he scratch direc
b850: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
b860: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
b870: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
b880: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
b890: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b8a0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72 61    return $::scra b8b0: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 tch_directory.. b8c0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. b8d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 return [g b8e0: 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 5d etTemporaryPath] b8f0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } b900: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge b910: 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 20 tExecuteOnSetup b920: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b {} {.. if { b930: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 [info exists ::e b940: 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d xecute_on_setup] b950: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. b960: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length b970: 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65$::execute_on_se
b980: 74 75 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tup] > 0} then {
b990: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b9a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
b9b0: 75 72 6e 20 74 68 65 20 63 6f 6e 66 69 67 75 72  urn the configur
b9c0: 65 64 20 53 51 4c 20 74 6f 20 65 78 65 63 75 74  ed SQL to execut
b9d0: 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f 6e  e during the con
b9e0: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  nection..
b9f0: 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20 70   #       setup p
ba00: 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20 66  rocedure (i.e. f
ba10: 6f 72 20 65 76 65 72 79 20 74 65 73 74 20 64 61  or every test da
ba20: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
ba30: 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n)...        #..
ba40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $ba50: 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 ::execute_on_set ba60: 75 70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 up.. } else ba70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. ba80: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B ba90: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 72 65 y default, there baa0: 20 69 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 78 is no SQL to ex bab0: 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 65 ecute during the bac0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 connection.. bad0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 # set bae0: 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 2e up procedure (i. baf0: 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 73 e. for every tes bb00: 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 t database conne bb10: 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 ction)... bb20: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu bb30: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rn "".. }.. bb40: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr bb50: 6f 63 20 67 65 74 53 74 72 69 6e 67 4d 61 70 46 oc getStringMapF bb60: 6f 72 54 63 6c 45 73 63 61 70 65 20 7b 7d 20 7b orTclEscape {} { bb70: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ bb80: 6c 69 73 74 20 5c 5c 20 5c 5c 5c 5c 20 5c 5b 20 list \\ \\\\ $bb90: 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20 5c 24 20 \\\[$ \\\] \$
bba0: 5c 5c 5c 24 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  \\\$].. }.... bbb0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 73 . proc getTes bbc0: 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d 62 tOverridesPreamb bbd0: 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 le { {extraVarNa bbe0: 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 mes ""} } {.. bbf0: 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 20 set varNames bc00: 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... bc10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: bc20: 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 If available, s bc30: 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d 61 tart with the ma bc40: 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 73 ster list of tes bc50: 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 t override.. bc60: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab bc70: 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 les... #.. bc80: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e bc90: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 xists ::test_ove bca0: 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 rrides] && \.. bcb0: 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 [llength bcc0: 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64$::test_overrid
bcd0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
bce0: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61  .        eval la
bcf0: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24  ppend varNames $bd00: 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 ::test_overrides bd10: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... bd20: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO bd30: 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 64 TE: If requested bd40: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 by our caller, bd50: 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f 6e add any addition bd60: 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 al variable.. bd70: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 73 # names bd80: 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 to copy now... bd90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if bda0: 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 {[llength$extr
bdb0: 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20  aVarNames] > 0}
bdc0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
bdd0: 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72  eval lappend var
bde0: 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72 4e  Names $extraVarN bdf0: 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ames.. }... be00: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. be10: 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 # NOTE: Build th be20: 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e e script fragmen be30: 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 t to be returned be40: 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 65 by processing e be50: 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ach.. # be60: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 variable name be70: 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 20 and adding the be80: 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72 69 nececessary scri be90: 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 pt fragments for bea0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # beb0: 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 each one... bec0: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 #.. set re bed0: 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 sult "".... bee0: 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65 foreach varName bef0: 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20$varNames {..
bf00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
bf10: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
bf20: 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c 6f  he qualified glo
bf30: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  bal variable nam
bf40: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
bf50: 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c 56         set fullV
bf60: 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  arName [appendAr
bf70: 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d  gs :: $varName]. bf80: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. bf90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do bfa0: 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 es the variable bfb0: 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 6e exist in this in bfc0: 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 terpreter contex bfd0: 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t?.. #.. bfe0: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f if {[info bff0: 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 72 exists$fullVar
c000: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
c010: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
c020: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 70        # NOTE: Ap
c030: 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66 72  pend a script fr
c040: 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72 65  agment to the re
c050: 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20 63  sult that will c
c060: 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20 20  orrectly..
c070: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79      #       copy
c080: 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20 76   any contained v
c090: 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72 20  alue to another
c0a0: 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74  interpreter cont
c0b0: 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ext...
c0c0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70 70  #..          app
c0d0: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22 73  end result \n "s
c0e0: 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d  et " $fullVarNam c0f0: 65 20 22 20 5c 7b 22 20 5b 73 74 72 69 6e 67 20 e " \{" [string c100: 6d 61 70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 map \.. c110: 20 20 20 20 20 5b 67 65 74 53 74 72 69 6e 67 4d [getStringM c120: 61 70 46 6f 72 54 63 6c 45 73 63 61 70 65 5d 20 apForTclEscape] c130: 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e 61 6d [set$fullVarNam
c140: 65 5d 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20 20  e]] \}..
c150: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
c160: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
c170: 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73 75  OTE: If the resu
c180: 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65 20  lt contains one
c190: 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20 66  or more script f
c1a0: 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e 64  ragments, append
c1b0: 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20   a..      #
c1c0: 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20 20    newline...
c1d0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
c1e0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 72  string length $r c1f0: 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 6e esult] > 0} then c200: 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe c210: 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 20 nd result \n.. c220: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r c230: 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
c240: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
c250: 63 20 6d 6f 76 65 53 79 73 74 65 6d 44 61 74 61  c moveSystemData
c260: 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67 20  SQLiteDllConfig
c270: 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73 65  { {restore false
c280: 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d  } {verbose true}
c290: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
c2a0: 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 69  directory [getBi
c2b0: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a  naryDirectory]..
c2c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
c2d0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65  ing length $dire c2e0: 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 ctory] == 0} the c2f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if c300: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
c310: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
c320: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann c330: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c340: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c350: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f "---- skipped mo c360: 76 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44 61 ving \"System.Da c370: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f ta.SQLite.dll.co c380: 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 nfig\", " \.. c390: 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 "no b c3a0: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c inary directory\ c3b0: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. c3c0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return c3d0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... c3e0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 set fileName( c3f0: 31 29 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 1) [file normali c400: 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ze \.. c410: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 [file join$dire
c420: 63 74 6f 72 79 20 53 79 73 74 65 6d 2e 44 61 74  ctory System.Dat
c430: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e  a.SQLite.dll.con
c440: 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 73  fig]]....      s
c450: 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 20 5b  et fileName(2) [
c460: 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65  appendArgs $file c470: 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64 5d 0d Name(1) .moved]. c480: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 72 65 ... if {$re
c490: 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  store} then {..
c4a0: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
c4b0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam c4c0: 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 e(2)]} then {.. c4d0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 file re c4e0: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 32 name$fileName(2
c4f0: 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d 0a  ) $fileName(1).. c500: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { c510: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
c520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
c530: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan c540: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs c550: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. c560: 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c "---- moved \ c570: 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 ""$fileName(2)
c580: 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20  "\" to \"" \..
c590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66                $f c5a0: 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c 6e 5d ileName(1) \"\n] c5b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. c5c0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. c5d0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
c5e0: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
c5f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
c600: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann c610: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c620: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c630: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped c640: 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 moving \""$file
c650: 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 20 20  Name(2) \..
c660: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
c670: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
c680: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  t\n"]..
c690: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
c6a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
c6b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65         if {[file
c6c0: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam c6d0: 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 e(1)]} then {.. c6e0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 65 file re c6f0: 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 31 name$fileName(1
c700: 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 0d 0a  ) $fileName(2).. c710: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { c720: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
c730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
c740: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan c750: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs c760: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. c770: 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 5c "---- moved \ c780: 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 ""$fileName(1)
c790: 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20  "\" to \"" \..
c7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66                $f c7b0: 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c 6e 5d ileName(2) \"\n] c7c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. c7d0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. c7e0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 . if {$
c7f0: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
c800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
c810: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann c820: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ c830: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. c840: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped c850: 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c 65 moving \""$file
c860: 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 20 20  Name(1) \..
c870: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20             "\",
c880: 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
c890: 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  t\n"]..
c8a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
c8b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
c8c0: 0d 0a 20 20 20 20 70 72 6f 63 20 77 72 69 74 65  ..    proc write
c8d0: 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  SystemDataSQLite
c8e0: 44 6c 6c 43 6f 6e 66 69 67 20 7b 20 64 61 74 61  DllConfig { data
c8f0: 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20   {verbose true}
c900: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 64  } {..      set d
c910: 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 69 6e  irectory [getBin
c920: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d  aryDirectory]...
c930: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
c940: 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65 63  ng length $direc c950: 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e tory] == 0} then c960: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { c970: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
c980: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
c990: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe c9a0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. c9b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " c9c0: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 ---- skipped mov c9d0: 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 ing \"System.Dat c9e0: 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e a.SQLite.dll.con c9f0: 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 fig\", " \.. ca00: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69 "no bi ca10: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e nary directory\n ca20: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d "].. }... ca30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. ca40: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... ca50: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b set fileName [ ca60: 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c file normalize \ ca70: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil ca80: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 e join$director
ca90: 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
caa0: 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
cab0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 72 69 74 65  ]....      write
cac0: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  File $fileName$
cad0: 64 61 74 61 0d 0a 0d 0a 20 20 20 20 20 20 69 66  data....      if
cae0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then caf0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput cb00: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
cb10: 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
cb20: 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 20 5c 22 53   "---- wrote \"S
cb30: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
cb40: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 5c 6e  e.dll.config\"\n
cb50: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
cb60: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65      return $file cb70: 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a Name.. }..... cb80: 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 45 61 67 proc moveEag cb90: 6c 65 53 68 65 6c 6c 4d 64 61 43 6f 6e 66 69 67 leShellMdaConfig cba0: 20 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73 { {restore fals cbb0: 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 e} {verbose true cbc0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set cbd0: 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 directory [getB cbe0: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d inaryDirectory]. cbf0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st cc00: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 ring length$dir
cc10: 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68  ectory] == 0} th
cc20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
cc30: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then cc40: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp cc50: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
cc60: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
cc70: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
cc80: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d   "---- skipped m
cc90: 6f 76 69 6e 67 20 5c 22 45 61 67 6c 65 53 68 65  oving \"EagleShe
cca0: 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  ll.exe.mda.confi
ccb0: 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20 20  g\", " \..
ccc0: 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69 6e 61          "no bina
ccd0: 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22 5d  ry directory\n"]
cce0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
ccf0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20         return..
cd00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
cd10: 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 31 29 20  set fileName(1)
cd20: 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20  [file normalize
cd30: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69  \..          [fi
cd40: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo cd50: 72 79 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 ry EagleShell.ex cd60: 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 5d 0d 0a e.mda.config]].. cd70: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 .. set file cd80: 4e 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41 Name(2) [appendA cd90: 72 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 rgs$fileName(1)
cda0: 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20   .moved]....
cdb0: 20 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20    if {$restore} cdc0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. cdd0: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists cde0: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20$fileName(2)]}
cdf0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ce00: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66    file rename $f ce10: 69 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65 ileName(2)$file
ce20: 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20  Name(1)....
ce30: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos ce40: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. ce50: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
ce60: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
ce70: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
ce90: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c  - moved \"" $fil cea0: 65 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20 eName(2) "\" to ceb0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. cec0: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65$fileName
ced0: 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  (1) \"\n]..
cee0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
cef0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
cf00: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65      if {$verbose cf10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. cf20: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
cf30: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
cf40: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
cf50: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
cf60: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20   skipped moving
cf70: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29  \"" $fileName(2) cf80: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. cf90: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does cfa0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. cfb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. cfc0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } cfd0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. cfe0: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists cff0: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20$fileName(1)]}
d000: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d010: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66    file rename $f d020: 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65 ileName(1)$file
d030: 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20  Name(2)....
d040: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos d050: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. d060: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
d070: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
d080: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
d090: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d0a0: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c  - moved \"" $fil d0b0: 65 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20 eName(1) "\" to d0c0: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. d0d0: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65$fileName
d0e0: 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  (2) \"\n]..
d0f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
d100: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
d110: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65      if {$verbose d120: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d130: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
d140: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
d150: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
d160: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
d170: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20   skipped moving
d180: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  \"" $fileName(1) d190: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. d1a0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does d1b0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. d1c0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. d1d0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. d1e0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p d1f0: 72 6f 63 20 77 72 69 74 65 45 61 67 6c 65 53 68 roc writeEagleSh d200: 65 6c 6c 4d 64 61 43 6f 6e 66 69 67 20 7b 20 64 ellMdaConfig { d d210: 61 74 61 20 7b 76 65 72 62 6f 73 65 20 74 72 75 ata {verbose tru d220: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se d230: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get d240: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d BinaryDirectory] d250: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s d260: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 tring length$di
d270: 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74  rectory] == 0} t
d280: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
d290: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the d2a0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t d2b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
d2c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
d2d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d2e0: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
d2f0: 6d 6f 76 69 6e 67 20 5c 22 45 61 67 6c 65 53 68  moving \"EagleSh
d300: 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
d310: 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20  ig\", " \..
d320: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69 6e           "no bin
d330: 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22  ary directory\n"
d340: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
d350: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
d360: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
d370: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
d380: 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d  ile normalize \.
d390: 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
d3a0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79   join $directory d3b0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e EagleShell.exe. d3c0: 6d 64 61 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a mda.config]].... d3d0: 20 20 20 20 20 20 77 72 69 74 65 46 69 6c 65 20 writeFile d3e0: 24 66 69 6c 65 4e 61 6d 65 20 24 64 61 74 61 0d$fileName $data. d3f0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 ... if {$ve
d400: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
d410: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: d420: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. d430: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- d440: 2d 20 77 72 6f 74 65 20 5c 22 45 61 67 6c 65 53 - wrote \"EagleS d450: 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con d460: 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 20 20 20 20 fig\"\n".. d470: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur d480: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
d490: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
d4a0: 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 61  getAppDomainPrea
d4b0: 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 22  mble { {prefix "
d4c0: 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7d  "} {suffix ""} }
d4d0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
d4e0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
d4f0: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
d500: 73 20 61 20 74 65 73 74 20 73 65 74 75 70 20 73  s a test setup s
d510: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 73  cript fragment s
d520: 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20 20  uitable for..
d530: 20 20 20 23 20 20 20 20 20 20 20 65 76 61 6c 75     #       evalu
d540: 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74 65  ation by an inte
d550: 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64 20  rpreter created
d560: 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 61  in an isolated a
d570: 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20  pplication..
d580: 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61 69 6e    #       domain
d590: 2e 20 20 54 68 65 20 73 63 72 69 70 74 20 66 72  .  The script fr
d5a0: 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74  agment being ret
d5b0: 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75  urned will be su
d5c0: 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20 20  rrounded by..
d5d0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 70     #       the p
d5e0: 72 65 66 69 78 20 61 6e 64 20 73 75 66 66 69 78  refix and suffix
d5f0: 20 22 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e   "script fragmen
d600: 74 73 22 20 73 70 65 63 69 66 69 65 64 20 62 79  ts" specified by
d610: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20 20   our caller,..
d620: 20 20 20 20 23 20 20 20 20 20 20 20 69 66 20 61      #       if a
d630: 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72 65 20  ny.  The entire
d640: 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 65 74  script being ret
d650: 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75  urned will be su
d660: 62 73 74 69 74 75 74 65 64 20 76 69 61 0d 0a 20  bstituted via..
d670: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 75       #       [su
d680: 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f 6e  bst], in the con
d690: 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c  text of our call
d6a0: 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69 6e 67  er, before being
d6b0: 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...
d6c0: 20 20 23 20 20 20 20 20 20 20 54 68 69 73 20 73    #       This s
d6d0: 74 65 70 20 69 73 20 6e 65 63 65 73 73 61 72 79  tep is necessary
d6e0: 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c 69   so that some li
d6f0: 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20 69 6e  mited context in
d700: 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20 20  formation,..
d710: 20 20 23 20 20 20 20 20 20 20 70 72 69 6d 61 72    #       primar
d720: 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f 20 74  ily related to t
d730: 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63  he testing direc
d740: 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65 20 74  tories, can be t
d750: 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20 20 20  ransferred..
d760: 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 65    #       to the
d770: 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20   interpreter in
d780: 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70  the isolated app
d790: 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c  lication domain,
d7a0: 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20 20   making it..
d7b0: 20 20 23 20 20 20 20 20 20 20 61 62 6c 65 20 74    #       able t
d7c0: 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72  o successfully r
d7d0: 75 6e 20 74 65 73 74 73 20 74 68 61 74 20 72 65  un tests that re
d7e0: 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72  quire one or mor
d7f0: 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  e of the..
d800: 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 69 6e  #       files in
d810: 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74   one of the test
d820: 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2e  ing directories.
d830: 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c 64    Callers should
d840: 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20 20 20   keep in..
d850: 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74 68 61  #       mind tha
d860: 74 20 74 68 65 20 74 65 73 74 20 73 63 72 69 70  t the test scrip
d870: 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67  t fragment being
d880: 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f 74   returned cannot
d890: 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20 20   rely on..
d8a0: 23 20 20 20 20 20 20 20 61 6e 79 20 73 63 72 69  #       any scri
d8b0: 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65  pt library proce
d8c0: 64 75 72 65 73 20 74 68 61 74 20 61 72 65 20 6e  dures that are n
d8d0: 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 74  ot provided by t
d8e0: 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  he Eagle..
d8f0: 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 20  #       library
d900: 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20 22 69  package (i.e. "i
d910: 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e 63  nit.eagle"), inc
d920: 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70 72 6f  luding those pro
d930: 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20  vided by..
d940: 23 20 20 20 20 20 20 20 74 68 65 20 45 61 67 6c  #       the Eagl
d950: 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 2c 20  e test package,
d960: 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c 65 20  unless the file
d970: 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 20  containing them
d980: 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20  is loaded..
d990: 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c   #       manuall
d9a0: 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68 65 72  y via some other
d9b0: 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e 67 2e   mechanism (e.g.
d9c0: 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 70   by including ap
d9d0: 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20  propriate..
d9e0: 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67   #       [packag
d9f0: 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20 5b 73  e require] or [s
da00: 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73 20  ource] commands
da10: 69 6e 20 74 68 65 20 70 72 65 66 69 78 20 6f 72  in the prefix or
da20: 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20 20 23   suffix..      #
da30: 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72         script fr
da40: 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f 2c  agments).  Also,
da50: 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20 72 65   all variable re
da60: 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c  ferences and all
da70: 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20 20 23   nested..      #
da80: 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20         commands
da90: 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20 73  (i.e. those in s
daa0: 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 29 20  quare brackets)
dab0: 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65  contained in the
dac0: 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23 20   final..      #
dad0: 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61        script fra
dae0: 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20 75  gment will end u
daf0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
db00: 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  d in the context
db10: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23   of the..      #
db20: 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67 20 69         calling i
db30: 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 20 6e  nterpreter and n
db40: 6f 74 20 74 68 65 20 74 61 72 67 65 74 20 69 6e  ot the target in
db50: 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65  terpreter create
db60: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
db70: 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74 65 64  #       isolated
db80: 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d   application dom
db90: 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65 20 64  ain unless the d
dba0: 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e 64 2f  ollar signs and/
dbb0: 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20 20 20  or square..
dbc0: 20 23 20 20 20 20 20 20 20 62 72 61 63 6b 65 74   #       bracket
dbd0: 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c 79 20  s are specially
dbe0: 71 75 6f 74 65 64 20 77 69 74 68 20 62 61 63 6b  quoted with back
dbf0: 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20 20 20  slashes...
dc00: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
dc10: 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74  [uplevel 1 [list
dc20: 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64 41 72   subst [appendAr
dc30: 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a 20 20  gs $prefix {.. dc40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. dc50: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c 5b 6f # NOTE: The $o dc60: 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e 64 20 bject$ command dc70: 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 20 69 may be missing i dc80: 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 6f 72 n some Eagle cor dc90: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # dca0: 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e 66 69 library confi dcb0: 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c 6f 6e gurations. Clon dcc0: 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 74 68 ing and using th dcd0: 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 e procedure.. dce0: 20 20 20 20 20 23 20 20 20 20 20 20 20 5c 5b 63 # $c dcf0: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 hangeNativeRunti dd00: 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 20 68 meOption$ may h dd10: 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 65 20 elp to mitigate dd20: 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 this... # dd30: 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 63 .. proc c dd40: 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 hangeNativeRunti dd50: 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 meOption \.. dd60: 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 61 {[info a dd70: 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 76 65 rgs changeNative dd80: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 20 RuntimeOption]} dd90: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b \.. { dda0: 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 6e 67 [info body chang ddb0: 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 eNativeRuntimeOp ddc0: 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 20 20 tion]}.... ddd0: 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. dde0: 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 69 76 changeNativ ddf0: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 5b eRuntimeOption [ de00: 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e hasRuntimeOption de10: 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 20 native].. de20: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 65 }.. } [ge de30: 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 72 tTestOverridesPr de40: 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 74 eamble [list pat de50: 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d 5d h test_channel]] de60: 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 20$suffix]]]..
de70: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
de80: 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c 46  tryCopyExternalF
de90: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ile {..
dea0: 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61     fileName {pla
deb0: 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69  tform ""} {newFi
dec0: 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 62  leName ""} {verb
ded0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ose true} } {..
dee0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46       set sourceF
def0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78 74 65  ileName [getExte
df00: 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66 69  rnalFileName $fi df10: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... df20: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis df30: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 ts$sourceFileNa
df40: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
df50: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos df60: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} 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 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
dfb0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 65 78  ipped copying ex
dfc0: 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22 20  ternal file \""
dfd0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName dfe0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. dff0: 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no e000: 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. e010: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... e020: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. e030: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ e040: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
e050: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d  ewFileName] > 0}
e060: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e070: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
e080: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
e090: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e  leName $newFileN e0a0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
e0b0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
e0c0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
e0d0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
e0e0: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66  inaryFileName $f e0f0: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 ileName$platfor
e100: 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  m]..      }....
e110: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44       set targetD
e120: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64  irectory [file d
e130: 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69  irname $targetFi e140: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... e150: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. e160: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c if {![fil e170: 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74 e exists$target
e180: 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  Directory]} then
e190: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69   {..          fi
e1a0: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74  le mkdir $target e1b0: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. e1c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... e1d0: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 file copy -force e1e0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
e1f0: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65   $targetFileName e200: 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} e210: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. e220: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
e230: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
e240: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
e250: 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65    "---- copied e
e260: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f  xternal file fro
e270: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil e280: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 eName "\" to \"" e290: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e2a0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20$targetFileName
e2b0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
e2c0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
e2d0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha e2e0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs e2f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e300: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 "---- failed to e310: 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 copy external fi e320: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
e330: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  rceFileName \..
e340: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 74             "\" t
e350: 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c  o \"" $targetFil e360: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. e370: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... e380: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 proc tryCopy e390: 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 BinaryFile {.. e3a0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa e3b0: 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b me managedOnly { e3c0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne e3d0: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 wFileName ""}.. e3e0: 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 72 62 {verb e3f0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. e400: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 set sourceF e410: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 ileName [getBina e420: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ryFileName$file
e430: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. e440: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 ... if {![f e450: 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 72 ile exists$sour
e460: 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  ceFileName]} the
e470: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
e480: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then e490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu e4a0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
e4b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
e4c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
e4d0: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63 6f  "---- skipped co
e4e0: 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66 69 6c  pying binary fil
e4f0: 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  e \"" $sourceFil e500: 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. e510: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 "\", it d e520: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" e530: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ].. }.... e540: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a return.. e550: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e560: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len e570: 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 gth$newFileName
e580: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
e590: 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65         set targe
e5a0: 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75  tFileName [getBu
e5b0: 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  ildFileName \..
e5c0: 20 20 20 20 20 20 20 20 20 20 20 24 6e 65 77 46             $newF e5d0: 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 ileName$managed
e5e0: 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Only $platform]. e5f0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. e600: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar e610: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get e620: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d BuildFileName \. e630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 .$fi
e640: 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f  leName $managedO e650: 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a nly$platform]..
e660: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
e670: 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63   set targetDirec
e680: 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61  tory [file dirna
e690: 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61  me $targetFileNa e6a0: 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 me].... if e6b0: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. e6c0: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex e6d0: 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 ists$targetDire
e6e0: 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ctory]} then {..
e6f0: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d            file m
e700: 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65  kdir $targetDire e710: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d ctory.. } e720: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 .... file e730: 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 6f copy -force$so
e740: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74 61  urceFileName $ta e750: 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 rgetFileName.. e760: 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 }] == 0} the e770: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu e780: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
e790: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
e7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
e7b0: 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61 72  --- copied binar
e7c0: 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  y file from \""
e7d0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName e7e0: 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 "\" to \"" \.. e7f0: 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65$targe
e800: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
e810: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
e820: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $e830: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ e840: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. e850: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- e860: 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 failed to copy b e870: 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 inary file from e880: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
e890: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
e8a0: 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74     "\" to \"" $t e8b0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 argetFileName \" e8c0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. e8d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc e8e0: 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c tryCopyBuildFil e8f0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. e900: 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 fileName manage e910: 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 dOnly {platform e920: 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 ""} {newFileName e930: 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 ""}.. e940: 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d {verbose true} e950: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set e960: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b sourceFileName [ e970: 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 getBuildFileName e980: 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61$fileName $mana e990: 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 gedOnly$platfor
e9a0: 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  m]....      if {
e9b0: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 73  ![file exists $s e9c0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 ourceFileName]} e9d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. e9e0: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
e9f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
ea00: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch ea10: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg ea20: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. ea30: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped ea40: 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 66 copying build f ea50: 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 ile \""$sourceF
ea60: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
ea70: 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74           "\", it
ea80: 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
ea90: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  n"]..        }..
eaa0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
eab0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
eac0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
ead0: 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61  ength $newFileNa eae0: 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d me] > 0} then {. eaf0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar eb00: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get eb10: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
eb20: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c 61  newFileName $pla eb30: 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 20 tform].. } eb40: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. eb50: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61 set targetFileNa eb60: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil eb70: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
eb80: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20  $platform].. eb90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 }.... set eba0: 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 targetDirectory ebb0: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
ebc0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d  targetFileName].
ebd0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
ebe0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  tch {..        i
ebf0: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
ec00: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector ec10: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. ec20: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 file mkdir ec30: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72$targetDirector
ec40: 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  y..        }....
ec50: 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70          file cop
ec60: 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65  y -force $source ec70: 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 FileName$target
ec80: 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  FileName..
ec90: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
eca0: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $ecb0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ ecc0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. ecd0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- ece0: 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 6c copied build fil ecf0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 e from \""$sour
ed00: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74  ceFileName "\" t
ed10: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..
ed20: 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65       $targetFile ed30: 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 Name \"\n].. ed40: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. ed50: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
ed60: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
ed70: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
ed80: 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65       "---- faile
ed90: 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64 20  d to copy build
eda0: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s edb0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. edc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" edd0: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 to \""$targetF
ede0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
edf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
ee00: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65  ..    proc tryDe
ee10: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 7b  leteBinaryFile {
ee20: 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66   fileName {platf
ee30: 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 65  orm ""} {verbose
ee40: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
ee50: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
ee60: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d  getBinaryFileNam
ee70: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61  e $fileName$pla
ee80: 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tform]....
ee90: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
eea0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th eeb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if eec0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
eed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
eee0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan eef0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs ef00: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. ef10: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 "---- skipped d ef20: 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 20 66 eleting binary f ef30: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
ef40: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
ef50: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
ef60: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
ef70: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
ef80: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20      return..
ef90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
efa0: 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65  {[catch {file de
efb0: 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d  lete $fileName}] efc0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. efd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
efe0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
eff0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
f000: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65          "---- de
f010: 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c  leted binary fil
f020: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName f030: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e f040: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t f050: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
f060: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
f070: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
f080: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
f090: 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69  delete binary fi
f0a0: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName f0b0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d \"\n].. }. f0c0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p f0d0: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 69 roc tryDeleteBui f0e0: 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 ldFile {.. f0f0: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d fileName m f100: 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 anagedOnly {plat f110: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73 form ""} {verbos f120: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 e true} } {.. f130: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName f140: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam f150: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e e$fileName $man f160: 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f agedOnly$platfo
f170: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
f180: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $f190: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then f1a0: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 {.. if {$
f1b0: 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d  verbose} then {.
f1c0: 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
f1d0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel f1e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- f200: 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 --- skipped dele f210: 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 ting build file f220: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d \""$fileName \.
f230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
f240: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  \", it does not
f250: 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20  exist\n"]..
f260: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
f270: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
f280: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
f290: 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
f2a0: 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20   $fileName}] == f2b0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. f2c0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
f2d0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
f2e0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
f2f0: 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65      "---- delete
f300: 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22  d build file \""
f310: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d   $fileName \"\n] f320: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { f330: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs f340: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
f350: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
f360: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
f370: 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74   failed to delet
f380: 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22  e build file \""
f390: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d   $fileName \"\n] f3a0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } f3b0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 ..... proc tr f3c0: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 0d yCopyAssembly {. f3d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c . fil f3e0: 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c eName managedOnl f3f0: 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 y {platform ""} f400: 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 {pdb true} {verb f410: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. f420: 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c tryCopyBuil f430: 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 dFile$fileName
f440: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c  $managedOnly$pl
f450: 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62 6f  atform "" $verbo f460: 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b se.... if { f470: 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$pdb} then {..
f480: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69        tryCopyBui
f490: 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72  ldFile [appendAr
f4a0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
f4b0: 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65    [file rootname
f4c0: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62   $fileName] .pdb f4d0: 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 ]$managedOnly $f4e0: 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 platform ""$ver
f4f0: 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  bose..      }..
f500: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
f510: 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d  c tryDeleteAssem
f520: 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  bly {..
f530: 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61     fileName {pla
f540: 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74  tform ""} {pdb t
f550: 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72  rue} {verbose tr
f560: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ue} } {..      t
f570: 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69  ryDeleteBinaryFi
f580: 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  le $fileName$pl
f590: 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d  atform $verbose. f5a0: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 64 ... if {$pd
f5b0: 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  b} then {..
f5c0: 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e 61     tryDeleteBina
f5d0: 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 72  ryFile [appendAr
f5e0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
f5f0: 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65    [file rootname
f600: 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 62   $fileName] .pdb f610: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72 ]$platform $ver f620: 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 bose.. }.. f630: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro f640: 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c c tryLoadAssembl f650: 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c y { fileName {pl f660: 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a atform ""} } {.. f670: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa f680: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c me [getBinaryFil f690: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
f6a0: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20  $platform].... f6b0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { f6c0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 73 .. set as f6d0: 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 20 6c sembly [object l f6e0: 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 69 oad -loadtype Fi f6f0: 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 4e le -alias$fileN
f700: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 20 3d  ame]..      }] =
f710: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
f720: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
f730: 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64  # NOTE: Now, add
f740: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 74   the necessary t
f750: 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d  est constraint..
f760: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f770: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
f780: 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65  t [file rootname
f790: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c   [file tail $fil f7a0: 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 eName]].... f7b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # f7c0: 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 69 NOTE: Grab the i f7d0: 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 72 mage runtime ver f7e0: 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 73 sion from the as f7f0: 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 0d 0a sembly because.. f800: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # f810: 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 72 65 several tests re f820: 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 20 ly on it having f830: 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 65 2e a certain value. f840: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. f850: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai f860: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b nt [appendArgs [ f870: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e file tail$fileN
f880: 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20 20  ame] _ \..
f890: 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62 6c 79        [$assembly f8a0: 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 72 ImageRuntimeVer f8b0: 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 sion]].... f8c0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N f8d0: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 OTE: Return the f8e0: 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 65 full path of the f8f0: 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a 20 loaded file... f900: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. f910: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 return$fileNa
f920: 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  me..      }....
f930: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
f940: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
f950: 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61 64 79  oc isSQLiteReady
f960: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
f970: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
f980: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 75 73  is procedure mus
f990: 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72  t return non-zer
f9a0: 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 53 51  o only if the SQ
f9b0: 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20 20 20  Lite native..
f9c0: 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 61     #       libra
f9d0: 72 79 20 61 6e 64 20 74 68 65 20 53 79 73 74 65  ry and the Syste
f9e0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61  m.Data.SQLite ma
f9f0: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 61  naged assembly a
fa00: 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20  re loaded..
fa10: 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61   #       and rea
fa20: 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68  dy for use by th
fa30: 65 20 74 65 73 74 20 73 75 69 74 65 2e 20 20 43  e test suite.  C
fa40: 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20 70  urrently, this p
fa50: 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20 20  rocedure..
fa60: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62  #       should b
fa70: 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61 66  e called only af
fa80: 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f 61 64  ter the [tryLoad
fa90: 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65 64  Assembly] proced
faa0: 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20 20 23  ure has..      #
fab0: 20 20 20 20 20 20 20 62 65 65 6e 20 63 61 6c 6c         been call
fac0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 20  ed to probe for
fad0: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
fae0: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61  SQLite managed a
faf0: 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23  ssembly..      #
fb00: 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20 5b         and the [
fb10: 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d 20  checkForSQLite]
fb20: 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 62 65  procedure has be
fb30: 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f  en called to pro
fb40: 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20  be for..      #
fb50: 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65        the SQLite
fb60: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 3b   native library;
fb70: 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69 73   otherwise, this
fb80: 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c 20   procedure will
fb90: 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23 20  simply..      #
fba0: 20 20 20 20 20 20 61 6c 77 61 79 73 20 72 65 74        always ret
fbb0: 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20  urn zero...
fbc0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
fbd0: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20   [expr {..
fbe0: 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e    [haveConstrain
fbf0: 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t System.Data.SQ
fc00: 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65 43 6f  Lite] && [haveCo
fc10: 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 5d  nstraint SQLite]
fc20: 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20  ..      }]..
fc30: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d  }.....    proc m
fc40: 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 7b 20 70  atchPlatform { p
fc50: 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20 20  latform } {..
fc60: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
fc70: 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 74 72  TE: An empty str
fc80: 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c 61 74  ing for the plat
fc90: 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 74 20  form means that
fca0: 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e 6f 74  the build is not
fcb0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
fcc0: 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e 61  [primarily] a na
fcd0: 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68 65 72  tive build; ther
fce0: 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 79 73  efore, it always
fcf0: 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 20 20   matches...
fd00: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73   #..      if {[s
fd10: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl fd20: 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 atform] == 0} th fd30: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re fd40: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. fd50: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. fd60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If fd70: 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 6d 65 the machine name fd80: 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c is unavailable, fd90: 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e there is nothin fda0: 67 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 20 20 g else we.. fdb0: 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 6f 2e # can do. fdc0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. fdd0: 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis fde0: 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor fdf0: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 m(machine)]} the fe00: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret fe10: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 urn false.. fe20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. fe30: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 # NOTE: Doe fe40: 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified fe50: 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 75 platform match u fe60: 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e 74 p to the current fe70: 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 20 process?.. fe80: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 #.. if {$p
fe90: 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63 68  latform eq [mach
fea0: 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a  ineToPlatform $: feb0: 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 :tcl_platform(ma fec0: 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d chine)]} then {. fed0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return fee0: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d true.. }... fef0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. ff00: 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 63 # NOTE: The spec ff10: 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 64 ified platform d ff20: 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 70 oes not match up ff30: 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 66 6f with the platfo ff40: 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 rm.. # ff50: 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e for the curren ff60: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 t process... ff70: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur ff80: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a n false.. }.. ff90: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 76 65 ... proc have ffa0: 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm ffb0: 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 and {} {.. ffc0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: ffd0: 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d Is the [object] ffe0: 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 6e 74 command current fff0: 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 ly available?.. 10000 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 10010 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 turn [expr {[lle 10020 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma 10030 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 nds object]] > 0 10040 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }].. }..... 10050 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 proc checkForS 10060 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma 10070 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b nd { channel } { 10080 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 .. tputs$c
10090 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65  hannel "---- che
100a0 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62 6a 65  cking for \"obje
100b0 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75 73 61  ct\" command usa
100c0 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ge... "....
100d0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
100e0 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 4f 62  ts ::no(sqliteOb
100f0 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20 26 26  jectCommand)] &&
10100 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68   \..          [h
10110 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
10120 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
10130 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $10140 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. 10150 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 10160 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 10170 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 73 73 # NOTE: Unless 10180 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 64 65 we are forbidde 10190 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 6f 2c n from doing so, 101a0 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 74 72 add some constr 101b0 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 23 aints.. # 101c0 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c that will 101d0 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 20 74 allow most of t 101e0 68 65 20 74 65 73 74 20 73 75 69 74 65 20 74 6f he test suite to 101f0 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f 73 65 run (i.e. those 10200 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 10210 20 20 74 65 73 74 73 20 74 68 61 74 20 64 6f 20 tests that do 10220 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 65 6c not directly rel 10230 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 6a 65 y upon the [obje 10240 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d 0a 20 ct] command)... 10250 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 10260 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 10270 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c sts ::no(shimSQL 10280 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e 73 74 iteAssemblyConst 10290 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b raints)]} then { 102a0 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC 102b0 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 onstraint SQLite 102c0 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC 102d0 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 onstraint SQLite 102e0 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 Interop.. 102f0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 10300 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 10310 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 ite.. a 10320 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 ddConstraint Sys 10330 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 10340 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 20 Encryption.. 10350 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra 10360 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e int System.Data. 10370 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d 0a 20 SQLite.Linq.... 10380 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 addCons 10390 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 103a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 103b0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 103c0 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b 67 65 SQLite.dll_v [ge 103d0 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 6f 6e tBuildClrVersion 103e0 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ]].. }... 103f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 10400 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 10410 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 6e 65 shimSQLiteDefine 10420 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 61 69 ConstantConstrai 10430 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 nts)]} then {.. 10440 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 10450 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 defineConstant 10460 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 [list \.. 10470 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 INTEROP_E 10480 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f XTENSION_FUNCTIO 10490 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 5f NS INTEROP_FTS5_ 104a0 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 EXTENSION \.. 104b0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 104c0 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 OP_JSON1_EXTENSI 104d0 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 45 ON INTEROP_PERCE 104e0 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e 20 NTILE_EXTENSION 104f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10500 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 5f INTEROP_REGEXP_ 10510 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f EXTENSION INTERO 10520 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e P_TEST_EXTENSION 10530 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10540 20 20 49 4e 54 45 52 4f 50 5f 53 45 53 53 49 4f INTEROP_SESSIO 10550 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 N_EXTENSION INTE 10560 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 49 ROP_SHA1_EXTENSI 10570 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. 10580 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 INTEROP_TOTY 10590 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 PE_EXTENSION INT 105a0 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 105b0 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 LE \.. 105c0 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f USE_INTEROP_ 105d0 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 DLL] {.. 105e0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 105f0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d t [appendArgs \. 10600 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10610 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e [getSQLiteDefin 10620 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 5d eConstantPrefix] 10630 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
10640 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
10650 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
10660 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
10670 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d  exists ::no(shim
10680 53 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75 64  SQLiteVisualStud
10690 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d  ioConstraints)]}
106a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
106b0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
106c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69 73   [appendArgs vis
106d0 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42 75  ualStudio [getBu
106e0 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20 20  ildYear]]..
106f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
10700 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n 10710 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 o\n.. }.. 10720 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 10730 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e changeNativeRun 10740 74 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 74 timeOption { nat 10750 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 ive } {.. i 10760 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 f {[llength [inf 10770 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 o commands debug 10780 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 ]] > 0 && \.. 10790 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 [llength 107a0 5b 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e 64 [info subcommand 107b0 73 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f s debug runtimeo 107c0 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 5b ption]] > 0 && [ 107d0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 107e0 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f 70 debug runtimeop 107f0 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 tion [expr {$nat
10800 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72  ive ? "add" : "r
10810 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65 0d  emove"}] native.
10820 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20  .      }] == 0}
10830 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
10840 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
10850 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
10860 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
10870 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5b  ectCommand] && [
10880 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
10890 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49   object invoke I
108a0 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
108b0 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74  tive [expr {$nat 108c0 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 ive ? \.. 108d0 20 20 20 20 20 22 41 64 64 52 75 6e 74 69 6d 65 "AddRuntime 108e0 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f 76 Option" : "Remov 108f0 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 7d eRuntimeOption"} 10900 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 ] native.. 10910 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d }] == 0} then {. 10920 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 10930 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d true.. }... 10940 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 . return fa 10950 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 lse.. }..... 10960 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor 10970 53 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 63 SQLiteBuilds { c 10980 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 hannel {select f 10990 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 109a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 109b0 3a 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 72 : Check for ever 109c0 79 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 64 y possible valid 109d0 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 20 combination of 109e0 76 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 6e values used when 109f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 10a00 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 65 locating out the 10a10 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 build output di 10a20 72 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e 67 rectory, showing 10a30 20 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 0d each available. 10a40 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b 10a50 75 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 61 uild variation a 10a60 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a 20 long the way... 10a70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 6f #.. fo 10a80 72 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c 69 reach native [li 10a90 73 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 7b st false true] { 10aa0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 10ab0 68 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64 h year [getBuild 10ac0 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 20 Years] {.. 10ad0 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e 66 foreach conf 10ae0 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 75 iguration [getBu 10af0 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration 10b00 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s] {.. 10b10 20 20 66 6f 72 65 61 63 68 20 73 75 66 66 69 78 foreach suffix 10b20 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 [getBuildConfig 10b30 75 72 61 74 69 6f 6e 53 75 66 66 69 78 65 73 5d urationSuffixes] 10b40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10b50 20 20 66 6f 72 65 61 63 68 20 65 78 74 72 61 20 foreach extra 10b60 5b 67 65 74 42 75 69 6c 64 45 78 74 72 61 73 5d [getBuildExtras] 10b70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 10b80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 10b90 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 # NOTE: F 10ba0 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 igure out the ef 10bb0 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c fective build pl 10bc0 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 atform. This is 10bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10be0 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64 20 # based 10bf0 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f on whether or no 10c00 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 t a [primarily] 10c10 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 native build.. 10c20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 10c30 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 75 is being u 10c40 73 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 6d 61 sed. For [prima 10c50 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 65 rily] non-native 10c60 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 20 20 builds,.. 10c70 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 10c80 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20 61 this will be a 10c90 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d n empty string.. 10ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10cb0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 10cc0 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d set platform 10cd0 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f [getBuildPlatfo 10ce0 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 rm$native]....
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
10d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10d10 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
10d20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
10d30 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68  ied directory wh
10d40 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ere the..
10d50 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
10d60 20 6e 65 63 65 73 73 61 72 79 20 63 6f 6d 70 6f   necessary compo
10d70 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d  nents for System
10d80 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f  .Data.SQLite sho
10d90 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20  uld..
10da0 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
10db0 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20  found...
10dc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10dd0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64             set d
10de0 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75  irectory [joinBu
10df0 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61  ildDirectory $na 10e00 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 tive \.. 10e10 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 10e20 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f BuildBaseDirecto 10e30 72 79 5d 20 24 79 65 61 72 20 24 70 6c 61 74 66 ry]$year $platf 10e40 6f 72 6d 20 5b 61 70 70 65 6e 64 41 72 67 73 20 orm [appendArgs 10e50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10e60 20 20 20 20 20 20 20 24 63 6f 6e 66 69 67 75 72$configur
10e70 61 74 69 6f 6e 20 24 73 75 66 66 69 78 5d 20 24  ation $suffix]$
10e80 65 78 74 72 61 5d 0d 0a 0d 0a 20 20 20 20 20 20  extra]....
10e90 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
10ea0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 10eb0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 10ec0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 10ed0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 10ee0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 10ef0 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 70 e build \"" [exp 10f00 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r \.. 10f10 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 76 {$nativ
10f20 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20  e ? "native/" :
10f30 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72  ""}] [expr {[str
10f40 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20  ing length \..
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10f60 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30    $platform] > 0 10f70 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 ? [appendArgs$
10f80 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22  platform /] : ""
10f90 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  }] \..
10fa0 20 20 20 20 20 20 20 20 20 20 24 79 65 61 72 20            $year 10fb0 2f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 63 / [appendArgs$c
10fc0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 73 75  onfiguration $su 10fd0 66 66 69 78 5d 20 22 5c 22 2e 2e 2e 20 22 5d 0d ffix] "\"... "]. 10fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 10ff0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 11000 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do 11010 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 66 the necessary f 11020 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43 75 72 iles exist? Cur 11030 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 72 rently, no other 11040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 11050 20 20 23 20 20 20 20 20 20 20 73 74 65 70 73 20 # steps 11060 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 72 are taken to ver 11070 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 69 ify this build i 11080 73 20 61 63 74 75 61 6c 6c 79 0d 0a 20 20 20 20 s actually.. 11090 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 110a0 20 20 20 20 76 69 61 62 6c 65 2e 0d 0a 20 20 20 viable... 110b0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 110d0 73 65 74 20 73 6b 69 70 4e 61 74 69 76 65 20 5b set skipNative [ 110e0 65 78 70 72 20 7b 5b 69 73 44 6f 74 4e 65 74 43 expr {[isDotNetC 110f0 6f 72 65 5d 20 26 26 20 5b 69 73 57 69 6e 64 6f ore] && [isWindo 11100 77 73 5d 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ws]}].... 11110 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 if {[is 11120 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 24 BuildAvailable$
11130 6e 61 74 69 76 65 20 24 73 6b 69 70 4e 61 74 69  native $skipNati 11140 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 ve$directory]}
11150 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11160 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
11170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
11180 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20 22   NOTE: When in "
11190 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61 75  select" mode, au
111a0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65  tomatically sele
111b0 63 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  ct the..
111c0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
111d0 20 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c    first availabl
111e0 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65  e build of Syste
111f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e  m.Data.SQLite an
11200 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d..
11210 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
11220 6e 20 72 65 74 75 72 6e 20 69 6d 6d 65 64 69 61  n return immedia
11230 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20  tely...
11240 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
11250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11260 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61   {$select && [ma 11270 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 tchPlatform$pla
11280 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
112a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
112b0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
112c0 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72  E: Manually over
112d0 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75 69  ride all the bui
112e0 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ld directory..
112f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11300 20 20 23 20 20 20 20 20 20 20 73 65 6c 65 63 74    #       select
11310 69 6f 6e 20 72 65 6c 61 74 65 64 20 74 65 73 74  ion related test
11320 20 73 65 74 74 69 6e 67 73 20 69 6e 20 6f 72 64   settings in ord
11330 65 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20  er to..
11340 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
11350 20 20 20 66 6f 72 63 65 20 74 68 69 73 20 62 75     force this bu
11360 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e 44 61  ild of System.Da
11370 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65 0d  ta.SQLite to be.
11380 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
11390 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
113a0 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d...
113b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
113d0 66 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69 76  f {![changeNativ
113e0 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24  eRuntimeOption $113f0 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d native]} then {. 11400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11410 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
11420 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
11430 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11450 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20 22 20  no, failed to "
11460 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f  [expr {$native ? 11470 20 22 61 64 64 22 20 3a 20 5c 0d 0a 20 20 20 20 "add" : \.. 11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11490 20 20 20 20 20 20 22 72 65 6d 6f 76 65 22 7d 5d "remove"}] 114a0 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65 5c " the \"native\ 114b0 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e " runtime option 114c0 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n"].... 114d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re 114e0 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. 114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11500 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 11510 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t 11520 65 73 74 5f 6e 61 74 69 76 65 20 24 73 6b 69 70 est_native$skip
11530 4e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20  Native..
11540 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
11550 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79 65 61  ::test_year $yea 11560 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r.... 11570 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t 11580 65 73 74 5f 6e 61 74 69 76 65 5f 79 65 61 72 20 est_native_year 11590 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 115a0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 115b0 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72 46 6f uildNativeYearFo 115c0 72 44 6f 74 4e 65 74 43 6f 72 65 20 24 79 65 61 rDotNetCore$yea
115d0 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  r]....
115e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
115f0 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70  test_platform $p 11600 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 11610 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 11620 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 ::test_configur 11630 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 61 ation$configura
11640 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  tion..
11650 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
11660 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
11670 6f 6e 5f 73 75 66 66 69 78 20 24 73 75 66 66 69  on_suffix $suffi 11680 78 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x.... 11690 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 set ::t 116a0 65 73 74 5f 6e 61 74 69 76 65 5f 63 6f 6e 66 69 est_native_confi 116b0 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 20 guration_suffix 116c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 116d0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 116e0 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 uildNativeConfig 116f0 75 72 61 74 69 6f 6e 53 75 66 66 69 78 46 6f 72 urationSuffixFor 11700 44 6f 74 4e 65 74 43 6f 72 65 20 5c 0d 0a 20 20 DotNetCore \.. 11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11720 20 20 20 20 20 20 24 73 75 66 66 69 78 5d 0d 0a$suffix]..
11730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
11740 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74        set ::test
11750 5f 65 78 74 72 61 20 24 65 78 74 72 61 0d 0a 0d  _extra $extra... 11760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11770 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
11780 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
11790 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
117a0 20 20 20 20 20 20 20 20 20 20 20 22 79 65 73 2c             "yes,
117b0 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b 65 78   selected (" [ex
117c0 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e  pr {$native ? "n 117d0 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5c ative/" : ""}] \ 117e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 117f0 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 [expr 11800 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 11810 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20 3f$platform] > 0 ?
11820 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
11830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11840 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 11850 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 m /] : ""}]$yea
11860 72 20 2f 20 5b 61 70 70 65 6e 64 41 72 67 73 20  r / [appendArgs
11870 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
11880 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 6e 66             $conf 11890 69 67 75 72 61 74 69 6f 6e 20 24 73 75 66 66 69 iguration$suffi
118a0 78 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e  x] [expr {[strin
118b0 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20 20  g length \..
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
118d0 20 20 20 20 24 65 78 74 72 61 5d 20 3e 20 30 20      $extra] > 0 118e0 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 2f 20 ? [appendArgs / 118f0 24 65 78 74 72 61 5d 20 3a 20 22 22 7d 5d 20 22$extra] : ""}] "
11900 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  )\n"]....
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
11920 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
11930 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
11940 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
11950 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
11960 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. 11970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11980 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 11990 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 119a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 119b0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
119c0 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  no\n..
119d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
119e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
119f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
11a00 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
11a10 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
11a20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
11a30 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
11a40 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  oc checkForSQLit
11a50 65 52 65 6c 65 61 73 65 73 20 7b 20 63 68 61 6e  eReleases { chan
11a60 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c 73  nel {select fals
11a70 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
11a80 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
11a90 68 65 63 6b 20 66 6f 72 20 70 61 73 74 20 72 65  heck for past re
11aa0 6c 65 61 73 65 73 20 6f 66 20 53 79 73 74 65 6d  leases of System
11ab0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 69 6e 20  .Data.SQLite in
11ac0 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  the directory..
11ad0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
11ae0 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 22 53  tained in the "S
11af0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
11b00 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  e" environment v
11b10 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20 20 20  ariable, if..
11b20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65     #       prese
11b30 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  nt...      #..
11b40 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
11b50 69 73 74 73 20 3a 3a 65 6e 76 28 53 79 73 74 65  ists ::env(Syste
11b60 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d 20  m.Data.SQLite)]
11b70 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
11b80 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $11b90 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 ::env(System.Dat 11ba0 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 7d 20 a.SQLite)] > 0} 11bb0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11bc0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11bd0 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c E: Build the ful 11be0 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72 ly qualified dir 11bf0 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 ectory where the 11c00 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 necessary.. 11c10 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 # comp 11c20 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 onents for Syste 11c30 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 m.Data.SQLite sh 11c40 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a ould be found... 11c50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 11c60 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 79 set directory 11c70 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 11c80 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a e [file join \.. 11c90 20 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a 65$::e
11ca0 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nv(System.Data.S
11cb0 51 4c 69 74 65 29 20 5b 67 65 74 52 65 6c 65 61  QLite) [getRelea
11cc0 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a  seVersion]]]....
11cd0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 11ce0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 11cf0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 11d00 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 11d10 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 11d20 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 20 .SQLite release 11d30 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 11d40 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c$directory "\
11d50 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20  "... "]....
11d60 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73     if {[isReleas
11d70 65 41 76 61 69 6c 61 62 6c 65 20 24 64 69 72 65  eAvailable $dire 11d80 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d 5d 7d ctory platform]} 11d90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11da0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 11db0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
11dc0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
11dd0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
11de0 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d  latform unknown.
11df0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
11e00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 73            if {$s 11e10 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 50 elect && [matchP 11e20 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 latform$platfor
11e30 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  m]} then {..
11e40 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62 75          set ::bu
11e50 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24 64  ild_directory $d 11e60 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 irectory.... 11e70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
11e80 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
11e90 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65  gs "yes, selecte
11ea0 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  d (" $platform " 11eb0 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 )\n"].... 11ec0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 11ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 11ee0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 11ef0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11f00 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65   [appendArgs "ye
11f10 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22  s (" $platform " 11f20 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 )\n"].. 11f30 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 11f40 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 11f50 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e tputs$channel n
11f60 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  o\n....
11f70 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
11f80 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20 7c  ts $directory] | 11f90 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 | \.. 11fa0 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 65 ![file isdire 11fb0 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 79 ctory$directory
11fc0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
11fd0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 11fe0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 11ff0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 12000 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 "---- envir 12010 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 onment variable 12020 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 12030 4c 69 74 65 5c 22 20 69 73 20 61 6e 20 22 20 5c Lite\" is an " \ 12040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12050 20 20 22 69 6e 76 61 6c 69 64 20 64 69 72 65 63 "invalid direc 12060 74 6f 72 79 2c 20 73 6b 69 70 70 69 6e 67 20 63 tory, skipping c 12070 68 65 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 65 heck for release 12080 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 s...\n"].... 12090 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 return f 120a0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 120b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 }.... f 120c0 6f 72 65 61 63 68 20 70 61 74 68 20 5b 6c 73 6f oreach path [lso 120d0 72 74 20 2d 64 65 63 72 65 61 73 69 6e 67 20 5b rt -decreasing [ 120e0 66 69 6c 65 20 6c 69 73 74 20 24 64 69 72 65 63 file list$direc
120f0 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20  tory *]] {..
12100 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
12110 65 20 65 78 69 73 74 73 20 24 70 61 74 68 5d 20  e exists $path] 12120 26 26 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 && [file isdirec 12130 74 6f 72 79 20 24 70 61 74 68 5d 7d 20 74 68 65 tory$path]} the
12140 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
12150 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 12160 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 12170 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12180 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 12190 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat 121a0 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 a.SQLite release 121b0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 121c0 20 20 20 20 20 20 20 20 20 20 24 70 61 74 68 20$path
121d0 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20  "\"... "]....
121e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
121f0 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62  isReleaseAvailab
12200 6c 65 20 24 70 61 74 68 20 70 6c 61 74 66 6f 72  le $path platfor 12210 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 m]} then {.. 12220 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 12230 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
12240 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20  platform] == 0}
12250 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12260 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
12270 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a  atform unknown..
12280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12290 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
122a0 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74       if {$select 122b0 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f && [matchPlatfo 122c0 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 rm$platform]} t
122d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
122e0 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62           set ::b
122f0 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24  uild_directory $12300 70 61 74 68 0d 0a 0d 0a 20 20 20 20 20 20 20 20 path.... 12310 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 12320 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
12330 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63  Args "yes, selec
12340 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d  ted (" $platform 12350 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ")\n"].... 12360 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret 12370 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 12380 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 12390 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 123a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
123b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
123c0 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 6f   "yes (" $platfo 123d0 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 rm ")\n"].. 123e0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 123f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 12400 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 12410 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
12420 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20  nnel no\n..
12430 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
12440 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12450 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
12460 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
12470 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
12480 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 12490 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 124a0 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 72 "---- envir 124b0 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 onment variable 124c0 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \"System.Data.SQ 124d0 4c 69 74 65 5c 22 20 69 73 20 6e 6f 74 20 22 20 Lite\" is not " 124e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 124f0 73 65 74 2c 20 73 6b 69 70 70 69 6e 67 20 63 68 set, skipping ch 12500 65 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 65 73 eck for releases 12510 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d ...\n"].. } 12520 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 12530 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c false.. }... 12540 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b .. proc check 12550 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 ForSQLiteLibrary 12560 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a { channel } {.. 12570 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
12580 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b  nnel "---- check
12590 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 63  ing for SQLite c
125a0 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22  ore library... "
125b0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
125c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
125d0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
125e0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
125f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
12600 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
12610 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65  e.SQLite3 SQLite
12620 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d  Version..      }
12630 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20   version] == 0}
12640 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12650 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
12660 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
12670 72 65 74 75 72 6e 65 64 20 76 65 72 73 69 6f 6e  returned version
12680 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 20 73   was null.  If s
12690 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 0d  o, make it easy.
126a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
126b0 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20   to spot...
126c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
126d0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
126e0 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d   $version] == 0} 126f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 12700 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e set version n 12710 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ull.. }.. 12720 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12730 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 12740 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74 68 empt to query th 12750 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 e Fossil source 12760 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 identifier for t 12770 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 he SQLite.. 12780 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 20 # core 12790 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 library... 127a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 127b0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 127c0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 127d0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 127e0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 127f0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 12800 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 12810 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d SQLiteSourceId. 12820 0a 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 63 . } sourc 12830 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 eId]} then {.. 12840 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 12850 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 12860 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 79 20 failed to query 12870 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 the Fossil sourc 12880 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 e identifier... 12890 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 128a0 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 set source 128b0 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 Id unknown.. 128c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 128d0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 128e0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 TE: Check if the 128f0 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 69 6c returned Fossil 12900 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 source identifi 12910 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 er was null. If 12920 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 12930 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 so, make it ea 12940 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 sy to spot... 12950 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12960 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 12970 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d th$sourceId] ==
12980 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
12990 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
129a0 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20  Id null..
129b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
129c0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
129d0 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74 65   Yes, the SQLite
129e0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 61 70   core library ap
129f0 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69  pears to be avai
12a00 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  lable...
12a10 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  #..        addCo
12a20 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65 0d  nstraint SQLite.
12a30 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
12a40 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
12a50 63 6f 72 64 20 76 65 72 73 69 6f 6e 20 6f 66 20  cord version of
12a60 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
12a70 6c 69 62 72 61 72 79 20 66 6f 72 20 6c 61 74 65  library for late
12a80 72 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23  r use..        #
12a90 20 20 20 20 20 20 20 62 79 20 74 65 73 74 20 63         by test c
12aa0 6f 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65 73  onstraint expres
12ab0 73 69 6f 6e 73 2c 20 65 74 63 2e 20 20 49 66 20  sions, etc.  If
12ac0 74 68 69 73 20 76 61 6c 75 65 20 68 61 73 0d 0a  this value has..
12ad0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
12ae0 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 65 74  already been set
12af0 20 28 6f 72 20 6f 76 65 72 72 69 64 64 65 6e 29   (or overridden)
12b00 2c 20 73 6b 69 70 20 73 65 74 74 69 6e 67 20 69  , skip setting i
12b10 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
12b20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
12b30 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 72 65 5f  o exists ::core_
12b40 6c 69 62 72 61 72 79 5f 76 65 72 73 69 6f 6e 5d  library_version]
12b50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12b60 20 20 20 20 73 65 74 20 3a 3a 63 6f 72 65 5f 6c      set ::core_l
12b70 69 62 72 61 72 79 5f 76 65 72 73 69 6f 6e 20 24  ibrary_version $12b80 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 version.. 12b90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 }.... tp 12ba0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
12bb0 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22  pendArgs "yes ("
12bc0 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73   $version " "$s
12bd0 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a  ourceId ")\n"]..
12be0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
12bf0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12c00 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. 12c10 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 12c20 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 12c30 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 7b rSQLiteInterop { 12c40 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 channel } {.. 12c50 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
12c60 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e  el "---- checkin
12c70 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e 74  g for SQLite int
12c80 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e 2e  erop assembly...
12c90 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   "....      if {
12ca0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
12cb0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
12cc0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
12cd0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
12ce0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
12cf0 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 65  ite.SQLite3 Inte
12d00 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  ropVersion..
12d10 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20    } version] ==
12d20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
12d30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
12d40 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
12d50 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72 73  he returned vers
12d60 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49  ion was null.  I
12d70 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61  f so, make it ea
12d80 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  sy..        #
12d90 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20      to spot...
12da0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
12db0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
12dc0 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d  gth $version] == 12dd0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 12de0 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f set versio 12df0 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 n null.. 12e00 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 12e10 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 12e20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 Attempt to query 12e30 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 the Fossil sour 12e40 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f ce identifier fo 12e50 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 r the SQLite.. 12e60 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 12e70 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 re library... 12e80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12e90 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 12ea0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 12eb0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 12ec0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 12ed0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 12ee0 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 12ef0 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 te3 InteropSourc 12f00 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 eId.. } s 12f10 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b ourceId]} then { 12f20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 12f30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 12f40 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 75 We failed to qu 12f50 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 ery the Fossil s 12f60 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 ource identifier 12f70 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 12f80 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f set so 12f90 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a urceId unknown.. 12fa0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 12fb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12fc0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 12fd0 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 6f the returned Fo 12fe0 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 12ff0 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e tifier was null. 13000 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 20 If.. # 13010 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 so, make i 13020 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d t easy to spot.. 13030 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 13040 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 13050 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 length$sourceId
13060 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
13070 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6f            set so
13080 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20  urceId null..
13090 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
130a0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
130b0 4f 54 45 3a 20 42 65 66 6f 72 65 20 61 63 74 75  OTE: Before actu
130c0 61 6c 6c 79 20 61 64 64 69 6e 67 20 74 68 65 20  ally adding the
130d0 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2c  test constraint,
130e0 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 0d 0a   make sure the..
130f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13100 76 65 72 73 69 6f 6e 20 69 73 20 76 61 6c 69 64  version is valid
13110 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73 74 20   (i.e. not just
13120 74 68 61 74 20 77 65 20 63 6f 75 6c 64 20 71 75  that we could qu
13130 65 72 79 20 69 74 29 2e 0d 0a 20 20 20 20 20 20  ery it)...
13140 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
13150 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20 22 6e 75  {$version ne "nu 13160 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ll"} then {.. 13170 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 13180 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c # NOTE: Yes, 13190 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 the SQLite inte 131a0 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 70 rop assembly app 131b0 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 6c ears to be avail 131c0 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 able... 131d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 #.. ad 131e0 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 dConstraint SQLi 131f0 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 20 teInterop.... 13200 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 65 set answe 13210 72 20 79 65 73 0d 0a 20 20 20 20 20 20 20 20 7d r yes.. } 13220 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 13230 20 20 20 73 65 74 20 61 6e 73 77 65 72 20 6e 6f set answer no 13240 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 13250 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
13260 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
13270 73 20 24 61 6e 73 77 65 72 20 22 20 28 22 20 24  s $answer " ("$
13280 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f 75  version " " $sou 13290 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 20 rceId ")\n"].. 132a0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 132b0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
132c0 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20  nnel no\n..
132d0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
132e0 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
132f0 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
13300 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61  ant { channel na
13310 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70  me } {..      tp
13320 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13330 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13340 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 13350 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 13360 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 69 Data.SQLite defi 13370 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 20 ne constant \"" 13380 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20$name \..
13390 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a     "\"... "]....
133a0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
133b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
133c0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
133d0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
133e0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
133f0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
13400 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73  Lite3 DefineCons
13410 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 64  tants..      } d
13420 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20  efineConstants]
13430 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
13440 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72        if {[lsear
13450 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73  ch -exact -nocas
13460 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e  e $defineConstan 13470 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d ts$name] != -1}
13480 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13490 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
134a0 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69  # NOTE: Yes, thi
134b0 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e  s define constan
134c0 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77 68  t was enabled wh
134d0 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d 0a  en the managed..
134e0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
134f0 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 63    assembly was c
13500 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20  ompiled...
13510 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
13520 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b   addConstraint [
13530 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74 53  appendArgs [getS
13540 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
13550 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61 6d 65  antPrefix] $name 13560 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 ].... t 13570 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 puts$channel ye
13580 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  s\n..        } e
13590 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
135a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 135b0 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d no\n.. }. 135c0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 135d0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
135e0 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d  channel error\n.
135f0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
13600 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65  ....    proc che
13610 63 6b 46 6f 72 53 51 4c 69 74 65 43 6f 6d 70 69  ckForSQLiteCompi
13620 6c 65 4f 70 74 69 6f 6e 20 7b 20 63 68 61 6e 6e  leOption { chann
13630 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  el name } {..
13640 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 13650 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 13660 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d . "---- 13670 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 checking for SQ 13680 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 13690 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 20 6f 70 embly compile op 136a0 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 tion \"" \.. 136b0 20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22 2e$name "\".
136c0 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  .. "]....      i
136d0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
136e0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
136f0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
13700 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
13710 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
13720 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49  SQLite.SQLite3 I
13730 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74  nteropCompileOpt
13740 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 63 6f  ions..      } co
13750 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d  mpileOptions] ==
13760 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
13770 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68      if {[lsearch
13780 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20   -exact -nocase
13790 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 20  $compileOptions 137a0 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68$name] != -1} th
137b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
137c0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
137d0 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20 63  OTE: Yes, this c
137e0 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 77 61  ompile option wa
137f0 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74  s enabled when t
13800 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20  he interop..
13810 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73        #       as
13820 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70 69  sembly was compi
13830 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  led...
13840 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  #..          add
13850 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
13860 6e 64 41 72 67 73 20 5b 67 65 74 53 51 4c 69 74  ndArgs [getSQLit
13870 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 50 72  eCompileOptionPr
13880 65 66 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a  efix] $name].... 13890 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 138a0 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a$channel yes\n..
138b0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
138c0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
138d0 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d  s $channel no\n. 138e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 138f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 13900 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
13910 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20  el error\n..
13920 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75    }....      tpu
13930 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 13940 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 13950 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 13960 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 63 ing for SQLite c 13970 6f 72 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70 ore library comp 13980 69 6c 65 20 6f 70 74 69 6f 6e 20 5c 22 22 20 5c ile option \"" \ 13990 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d ..$nam
139a0 65 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20  e "\"... "]....
139b0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
139c0 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
139d0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
139e0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
139f0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
13a00 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
13a10 69 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69  ite3 SQLiteCompi
13a20 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  leOptions..
13a30 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e   } compileOption
13a40 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
13a50 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73  .        if {[ls
13a60 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f  earch -exact -no
13a70 63 61 73 65 20 24 63 6f 6d 70 69 6c 65 4f 70 74  case $compileOpt 13a80 69 6f 6e 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d ions$name] != -
13a90 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  1} then {..
13aa0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13ab0 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74    # NOTE: Yes, t
13ac0 68 69 73 20 63 6f 6d 70 69 6c 65 20 6f 70 74 69  his compile opti
13ad0 6f 6e 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77  on was enabled w
13ae0 68 65 6e 20 74 68 65 20 53 51 4c 69 74 65 0d 0a  hen the SQLite..
13af0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
13b00 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77    core library w
13b10 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20  as compiled...
13b20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13b30 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
13b40 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  nt [appendArgs [
13b50 67 65 74 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65  getSQLiteCompile
13b60 4f 70 74 69 6f 6e 50 72 65 66 69 78 5d 20 24 6e  OptionPrefix] $n 13b70 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ame].... 13b80 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
13b90 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20   yes\n..
13ba0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
13bb0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 13bc0 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 el no\n.. 13bd0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 13be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 13bf0 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 s$channel error
13c00 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
13c10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13c20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d 61  getDateTimeForma
13c30 74 20 7b 20 7b 74 69 6d 65 5a 6f 6e 65 20 74 72  t { {timeZone tr
13c40 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ue} } {..      #
13c50 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
13c60 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73  This procedure s
13c70 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68  imply returns th
13c80 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65  e "default" Date
13c90 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64  Time format used
13ca0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
13cb0 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74  by the test suit
13cc0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
13cd0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
13ce0 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66  sts ::datetime_f
13cf0 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20  ormat] && \..
13d00 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
13d10 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d  ength $::datetim 13d20 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 e_format] > 0} t 13d30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 13d40 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 13d50 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e : Return the man 13d60 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e ually overridden 13d70 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44 value for the D 13d80 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d ateTime format.. 13d90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 13da0 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61 return$::da
13db0 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20  tetime_format..
13dc0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
13dd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
13de0 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
13df0 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65   an ISO8601 Date
13e00 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70  Time format comp
13e10 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69  atible with SQLi
13e20 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  te,..        #
13e30 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
13e40 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69  .SQLite, and sui
13e50 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d  table for round-
13e60 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68  tripping with th
13e70 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
13e80 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73     DateTime clas
13e90 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f  s of the framewo
13ea0 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  rk.  If this val
13eb0 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a  ue is changed,..
13ec0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
13ed0 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61  various tests ma
13ee0 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20  y fail...
13ef0 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
13f00 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  rn [appendArgs \
13f10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 79  ..            "y
13f20 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a  yyy-MM-dd HH:mm:
13f30 73 73 2e 46 46 46 46 46 46 46 22 20 5b 65 78 70  ss.FFFFFFF" [exp
13f40 72 20 7b 24 74 69 6d 65 5a 6f 6e 65 20 3f 20 22  r {$timeZone ? " 13f50 4b 22 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 20 K" : ""}]].. 13f60 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 13f70 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 54 proc getDateT 13f80 69 6d 65 54 69 63 6b 73 20 7b 20 76 61 6c 75 65 imeTicks { value 13f90 20 7b 6c 6f 63 61 6c 20 22 22 7d 20 7b 64 65 66 {local ""} {def 13fa0 61 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 ault ""} } {.. 13fb0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 13fc0 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d length$value] =
13fd0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
13fe0 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65 66       return $def 13ff0 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ault.. }... 14000 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 14010 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 h {.. set 14020 20 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 dateTime [objec 14030 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 t invoke -create 14040 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14050 2d 70 61 72 61 6d 65 74 65 72 74 79 70 65 73 20 -parametertypes 14060 5b 6c 69 73 74 20 53 74 72 69 6e 67 20 53 74 72 [list String Str 14070 69 6e 67 20 49 46 6f 72 6d 61 74 50 72 6f 76 69 ing IFormatProvi 14080 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 der \.. 14090 20 20 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 6c System.Global 140a0 69 7a 61 74 69 6f 6e 2e 44 61 74 65 54 69 6d 65 ization.DateTime 140b0 53 74 79 6c 65 73 5d 20 44 61 74 65 54 69 6d 65 Styles] DateTime 140c0 20 50 61 72 73 65 45 78 61 63 74 20 5c 0d 0a 20 ParseExact \.. 140d0 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75$valu
140e0 65 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46 6f  e [getDateTimeFo
140f0 72 6d 61 74 5d 20 6e 75 6c 6c 20 41 64 6a 75 73  rmat] null Adjus
14100 74 54 6f 55 6e 69 76 65 72 73 61 6c 5d 0d 0a 20  tToUniversal]..
14110 20 20 20 20 20 7d 5d 7d 20 74 68 65 6e 20 7b 0d       }]} then {.
14120 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
14130 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20  $default.. 14140 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 14150 73 74 72 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 string is boolea 14160 6e 20 2d 73 74 72 69 63 74 20 24 6c 6f 63 61 6c n -strict$local
14170 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
14180 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65 20     set dateTime
14190 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
141a0 63 72 65 61 74 65 20 44 61 74 65 54 69 6d 65 20  create DateTime
141b0 53 70 65 63 69 66 79 4b 69 6e 64 20 5c 0d 0a 20  SpecifyKind \..
141c0 20 20 20 20 20 20 20 20 20 20 20 24 64 61 74 65             $date 141d0 54 69 6d 65 20 55 74 63 5d 0d 0a 20 20 20 20 20 Time Utc].. 141e0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 141f0 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 return [objec 14200 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 t invoke$dateTi
14210 6d 65 20 54 69 63 6b 73 5d 0d 0a 20 20 20 20 20  me Ticks]..
14220 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
14230 24 6c 6f 63 61 6c 7d 20 74 68 65 6e 20 7b 0d 0a  $local} then {.. 14240 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 14250 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 object invoke$d
14260 61 74 65 54 69 6d 65 20 54 6f 4c 6f 63 61 6c 54  ateTime ToLocalT
14270 69 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20  ime.Ticks]..
14280 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
14290 20 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65      return [obje
142a0 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54  ct invoke $dateT 142b0 69 6d 65 20 54 6f 55 6e 69 76 65 72 73 61 6c 54 ime ToUniversalT 142c0 69 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 20 ime.Ticks].. 142d0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 142e0 20 20 20 70 72 6f 63 20 67 65 74 50 72 6f 70 65 proc getPrope 142f0 72 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 76 rties { object v 14300 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 arName } {.. 14310 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
14320 6d 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d  me properties...
14330 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74  .      set count
14340 20 30 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 61   0..      set na
14350 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  mes [list]....
14360 20 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 63      if {[isObjec
14370 74 48 61 6e 64 6c 65 20 24 6f 62 6a 65 63 74 5d  tHandle $object] 14380 20 26 26 20 24 6f 62 6a 65 63 74 20 6e 65 20 22 &&$object ne "
14390 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20  null"} then {..
143a0 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70         eval lapp
143b0 65 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63  end names [objec
143c0 74 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20  t members \..
143d0 20 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65 72           -member
143e0 74 79 70 65 73 20 50 72 6f 70 65 72 74 79 20 2d  types Property -
143f0 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63 74  nameonly $object 14400 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 ].... eva 14410 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 20 l lappend names 14420 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 20 [object members 14430 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2d \.. - 14440 6d 65 6d 62 65 72 74 79 70 65 73 20 46 69 65 6c membertypes Fiel 14450 64 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a d -nameonly$obj
14460 65 63 74 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ect]..      }...
14470 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e  .      foreach n
14480 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20  ame $names {.. 14490 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 144a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 144b0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 6a ject invoke -obj 144c0 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 ectflags +NoDisp 144d0 6f 73 65 20 24 6f 62 6a 65 63 74 20 24 6e 61 6d ose$object $nam 144e0 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61 6c e.. } val 144f0 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b ue] == 0} then { 14500 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 14510 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 [isObjectHandle 14520 24 76 61 6c 75 65 5d 20 26 26 20 24 76 61 6c 75$value] && $valu 14530 65 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 65 e ne "null"} the 14540 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 14550 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b set error null; 14560 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 14570 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 14580 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14590 20 20 20 20 2d 6d 61 72 73 68 61 6c 66 6c 61 67 -marshalflag 145a0 73 20 2b 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 65 s +NoHandle Inte 145b0 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 145c0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 145d0 20 20 20 20 20 41 64 64 4f 62 6a 65 63 74 52 65 AddObjectRe 145e0 66 65 72 65 6e 63 65 20 4f 6b 20 24 76 61 6c 75 ference Ok$valu
145f0 65 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 20 20 20  e error....
14600 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70         lappend p
14610 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74  roperties(object
14620 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24  s) [list $name$
14630 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20  value]..
14640 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
14650 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
14660 70 72 6f 70 65 72 74 69 65 73 28 76 61 6c 75 65  properties(value
14670 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24  s) [list $name$
14680 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20 20  value]..
14690 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
146a0 20 69 6e 63 72 20 63 6f 75 6e 74 0d 0a 20 20 20   incr count..
146b0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
146c0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
146d0 20 70 72 6f 70 65 72 74 69 65 73 28 65 72 72 6f   properties(erro
146e0 72 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20  rs) [list $name 146f0 24 3a 3a 65 72 72 6f 72 43 6f 64 65 5d 0d 0a 20$::errorCode]..
14700 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
14710 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
14720 6e 20 24 63 6f 75 6e 74 0d 0a 20 20 20 20 7d 0d  n $count.. }. 14730 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 14740 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 7b 20 AllProperties { 14750 6f 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 7d object varName } 14760 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 {.. upvar 14770 31 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 65 1$varName prope
14780 72 74 69 65 73 0d 0a 20 20 20 20 20 20 73 65 74  rties..      set
14790 20 76 61 6c 75 65 20 24 6f 62 6a 65 63 74 0d 0a   value $object.. 147a0 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 7b 74 .. while {t 147b0 72 75 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 rue} {.. 147c0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 147d0 73 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 s properties(see 147e0 6e 4f 62 6a 65 63 74 73 29 5d 20 7c 7c 20 5c 0d nObjects)] || \. 147f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61 .$va
14800 6c 75 65 20 6e 69 20 24 70 72 6f 70 65 72 74 69  lue ni $properti 14810 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 7d es(seenObjects)} 14820 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 14830 20 20 20 67 65 74 50 72 6f 70 65 72 74 69 65 73 getProperties 14840 20 24 76 61 6c 75 65 20 70 72 6f 70 65 72 74 69$value properti
14850 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61  es..          la
14860 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65 73  ppend properties
14870 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 24 76  (seenObjects) $v 14880 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d alue.. }. 14890 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 ... if {! 148a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f [info exists pro 148b0 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 perties(objects) 148c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 148d0 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 20 break.. 148e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 148f0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 if {[llength$p
14900 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74  roperties(object
14910 73 29 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  s)] == 0} then {
14920 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73 65  ..          unse
14930 74 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a  t properties(obj
14940 65 63 74 73 29 3b 20 62 72 65 61 6b 0d 0a 20 20  ects); break..
14950 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
14960 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6c 69     set value [li
14970 6e 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 70 72  ndex [lindex $pr 14980 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 operties(objects 14990 29 20 30 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 20 ) 0] end].. 149a0 20 20 20 73 65 74 20 70 72 6f 70 65 72 74 69 65 set propertie 149b0 73 28 6f 62 6a 65 63 74 73 29 20 5b 6c 72 61 6e s(objects) [lran 149c0 67 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 6f ge$properties(o
149d0 62 6a 65 63 74 73 29 20 31 20 65 6e 64 5d 0d 0a  bjects) 1 end]..
149e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
149f0 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
14a00 73 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 65  s properties(see
14a10 6e 4f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e  nObjects)]} then
14a20 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   {..        fore
14a30 61 63 68 20 76 61 6c 75 65 20 24 70 72 6f 70 65  ach value $prope 14a40 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 14a50 73 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 s) {.. 14a60 69 66 20 7b 24 76 61 6c 75 65 20 65 71 20 24 6f if {$value eq $o 14a70 62 6a 65 63 74 7d 20 63 6f 6e 74 69 6e 75 65 0d bject} continue. 14a80 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 14a90 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 {object dispose 14aa0 20 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20$value}..
14ab0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75    }....        u
14ac0 6e 73 65 74 20 70 72 6f 70 65 72 74 69 65 73 28  nset properties(
14ad0 73 65 65 6e 4f 62 6a 65 63 74 73 29 0d 0a 20 20  seenObjects)..
14ae0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
14af0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 56 61 72  .    proc getVar
14b00 69 61 62 6c 65 73 20 7b 20 76 61 72 4e 61 6d 65  iables { varName
14b10 73 20 7b 6f 62 6a 65 63 74 73 20 66 61 6c 73 65  s {objects false
14b20 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
14b30 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a   result [list]..
14b40 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
14b50 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65  varName $varName 14b60 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 s {.. if 14b70 7b 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 {[uplevel 1 [lis 14b80 74 20 61 72 72 61 79 20 65 78 69 73 74 73 20 24 t array exists$
14b90 76 61 72 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e 20  varName]]} then
14ba0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
14bb0 20 61 72 72 61 79 4e 61 6d 65 20 24 76 61 72 4e   arrayName $varN 14bc0 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ame.... 14bd0 20 66 6f 72 65 61 63 68 20 65 6c 65 6d 65 6e 74 foreach element 14be0 4e 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 Name [uplevel 1 14bf0 5b 6c 69 73 74 20 61 72 72 61 79 20 6e 61 6d 65 [list array name 14c00 73 20 24 61 72 72 61 79 4e 61 6d 65 5d 5d 20 7b s$arrayName]] {
14c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
14c20 74 20 6e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72  t name [appendAr
14c30 67 73 20 24 61 72 72 61 79 4e 61 6d 65 20 28 20  gs $arrayName ( 14c40 24 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 29 5d 0d$elementName )].
14c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74  .            set
14c60 20 76 61 72 56 61 6c 75 65 20 5b 75 70 6c 65 76   varValue [uplev
14c70 65 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 20 24  el 1 [list set $14c80 6e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 name]].... 14c90 20 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 if {$objec
14ca0 74 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74 48  ts && [isObjectH
14cb0 61 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65 5d  andle $varValue] 14cc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 14cd0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 14ce0 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 ocomplain proper 14cf0 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ties.. 14d00 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 72 getAllProper 14d10 74 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 70 ties$varValue p
14d20 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20  roperties....
14d30 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
14d40 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  nd result [list
14d50 24 6e 61 6d 65 20 5b 61 72 72 61 79 20 67 65 74  $name [array get 14d60 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a 20 properties]].. 14d70 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 14d80 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 14d90 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c lappend resul 14da0 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 76 t [list$name $v 14db0 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 arValue].. 14dc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 14dd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 14de0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 14df0 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 5b set varValue [ 14e00 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 14e10 73 65 74 20 24 76 61 72 4e 61 6d 65 5d 5d 0d 0a set$varName]]..
14e20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
14e30 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73 4f  $objects && [isO 14e40 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 72 bjectHandle$var
14e50 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Value]} then {..
14e60 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73 65              unse
14e70 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72  t -nocomplain pr
14e80 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20  operties..
14e90 20 20 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70        getAllProp
14ea0 65 72 74 69 65 73 20 24 76 61 72 56 61 6c 75 65  erties $varValue 14eb0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 properties.... 14ec0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 lappe 14ed0 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20 nd result [list 14ee0 24 76 61 72 4e 61 6d 65 20 5b 61 72 72 61 79 20$varName [array
14ef0 67 65 74 20 70 72 6f 70 65 72 74 69 65 73 5d 5d  get properties]]
14f00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
14f10 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
14f20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
14f30 20 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65 20   [list $varName 14f40 24 76 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20$varValue]..
14f50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
14f60 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
14f70 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 14f80 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 14f90 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 62 proc enumerab 14fa0 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d 65 leToList { enume 14fb0 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 20 rable } {.. 14fc0 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 set result [lis 14fd0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b t].... if { 14fe0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
14ff0 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20 30  enumerable] == 0
15000 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65 20   || $enumerable 15010 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 eq "null"} then 15020 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 {.. retur 15030 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 n$result..
15040 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65   }....      obje
15050 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
15060 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62  s item $enumerab 15070 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 le {.. if 15080 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 15090 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65$item] > 0} the
150a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  n {..          l
150b0 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b 24  append result [$150c0 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d 0a item ToString].. 150d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 150e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 150f0 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
15100 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
15110 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b 20  atchAndReturn {
15120 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72 61  script {stackTra
15130 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69 63  ce false} {stric
15140 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..
15150 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
15160 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65  TE: Evaluate the
15170 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65 64   script provided
15180 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69   by our caller i
15190 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2c  n their context,
151a0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
151b0 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20 74  capturing both t
151c0 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74 68  he result and th
151d0 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
151e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
151f0 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 7b  et code [catch {
15200 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70  uplevel 1 $scrip 15210 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 20 t} result].... 15220 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 15230 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 72 OTE: Did the scr 15240 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 20 ipt provided by 15250 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 72 our caller NOT r 15260 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d 0a aise an error?.. 15270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 15280 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 63 f {$strict && $c 15290 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 74 ode == 0 || !$st
152a0 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 21 3d  rict && $code != 152b0 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1} then {.. 152c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 152d0 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e 20 NOTE: Success. 152e0 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 77 Return a list w 152f0 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 63 ith the return c 15300 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 75 ode and the resu 15310 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a lt... #.. 15320 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 15330 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 list$code $resu 15340 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 lt].. } els 15350 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 65 eif {$stackTrace
15360 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15370 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
15380 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f  OTE: Failure.  O
15390 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20  ur caller wants
153a0 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61  a full stack tra
153b0 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 62 6c  ce (if applicabl
153c0 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  e),..        #
153d0 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c 69       return a li
153e0 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75  st with the retu
153f0 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65 20  rn code and the
15400 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e  result verbatim.
15410 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
15420 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
15430 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74 5d  t $code$result]
15440 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
15450 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
15460 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
15470 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65  lure.  Our calle
15480 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74 20  r does not want
15490 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72 61  a full stack tra
154a0 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20 20  ce (if..
154b0 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 62  #       applicab
154c0 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c 69  le), return a li
154d0 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74 75  st with the retu
154e0 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72 72  rn code, the err
154f0 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  or..        #
15500 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68 65      code for the
15510 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61 6e   interpreter, an
15520 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  d the error mess
15530 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a 20  age up to the..
15540 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
15550 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20 73  oint where the s
15560 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75 6c  tack trace shoul
15570 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20 20  d start...
15580 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
15590 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20  urn [list $code 155a0 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5c 0d 0a$::errorCode \..
155b0 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 74              [ext
155c0 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51  ractSystemDataSQ
155d0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73  LiteExceptionMes
155e0 73 61 67 65 20 24 72 65 73 75 6c 74 5d 5d 0d 0a  sage $result]].. 155f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 15600 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 65 ... proc rese 15610 74 45 78 63 65 70 74 69 6f 6e 20 7b 7d 20 7b 0d tException {} {. 15620 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 15630 23 20 4e 4f 54 45 3a 20 52 65 73 65 74 20 65 78 # NOTE: Reset ex 15640 63 65 70 74 69 6f 6e 20 61 73 73 6f 63 69 61 74 ception associat 15650 65 64 20 77 69 74 68 20 74 68 69 73 20 69 6e 74 ed with this int 15660 65 72 70 72 65 74 65 72 20 28 74 6f 20 6e 75 6c erpreter (to nul 15670 6c 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 l)... # 15680 20 20 20 54 68 69 73 20 28 70 72 69 76 61 74 65 This (private 15690 29 20 70 72 6f 70 65 72 74 79 20 69 73 20 6d 61 ) property is ma 156a0 69 6e 74 61 69 6e 65 64 20 6f 6e 20 61 20 70 65 intained on a pe 156b0 72 2d 74 68 72 65 61 64 20 62 61 73 69 73 2e 0d r-thread basis.. 156c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 156d0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 156e0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 156f0 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 15700 63 74 69 76 65 20 45 78 63 65 70 74 69 6f 6e 20 ctive Exception 15710 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 72 65 74 75 null.. retu 15720 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d rn "".. }.... 15730 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 . proc catchA 15740 6e 64 53 65 74 45 78 63 65 70 74 69 6f 6e 20 7b ndSetException { 15750 20 73 63 72 69 70 74 20 7b 76 61 72 4e 61 6d 65 script {varName 15760 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 15770 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 15780 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 63 Evaluate the sc 15790 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 ript provided by 157a0 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 74 our caller in t 157b0 68 65 69 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 heir context... 157c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 63 61 #.. ca 157d0 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 24 tch {uplevel 1$
157e0 73 63 72 69 70 74 7d 0d 0a 0d 0a 20 20 20 20 20  script}....
157f0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
15800 3a 20 47 72 61 62 20 74 68 65 20 28 70 72 69 76  : Grab the (priv
15810 61 74 65 29 20 65 78 63 65 70 74 69 6f 6e 20 70  ate) exception p
15820 72 6f 70 65 72 74 79 20 66 72 6f 6d 20 74 68 69  roperty from thi
15830 73 20 69 6e 74 65 72 70 72 65 74 65 72 2c 0d 0a  s interpreter,..
15840 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
15850 72 20 74 68 69 73 20 74 68 72 65 61 64 2c 20 61  r this thread, a
15860 6e 64 20 61 64 64 20 61 73 20 61 6e 20 6f 70 61  nd add as an opa
15870 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
15880 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  e in the..
15890 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 20  #       context
158a0 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a  of our caller...
158b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
158c0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
158d0 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 158e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 158f0 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
15900 65 20 65 78 63 65 70 74 69 6f 6e 0d 0a 20 20 20  e exception..
15910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
15920 74 20 65 78 63 65 70 74 69 6f 6e 20 5b 6f 62 6a  t exception [obj
15930 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20 20  ect invoke \..
15940 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20 2d          -alias -
15950 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
15960 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74   Interpreter.Get
15970 41 63 74 69 76 65 20 45 78 63 65 70 74 69 6f 6e  Active Exception
15980 5d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ]....      retur
15990 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  n ""..    }.....
159a0 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65      proc compile
159b0 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20  CSharpWith {..
159c0 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d            text m
159d0 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74  emory symbols st
159e0 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e  rict resultsVarN
159f0 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d  ame errorsVarNam
15a00 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20  e fileNames..
15a10 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20           args }
15a20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a  {..      try {..
15a30 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
15a40 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65     # NOTE: Since
15a50 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f   we are going to
15a60 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64   use this method
15a70 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73   name a lot, ass
15a80 69 67 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ign..        #
15a90 20 20 20 20 20 69 74 20 74 6f 20 61 20 76 61 72       it to a var
15aa0 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20  iable first...
15ab0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15ac0 20 73 65 74 20 61 64 64 20 52 65 66 65 72 65 6e   set add Referen
15ad0 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41 64  cedAssemblies.Ad
15ae0 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  d....        #..
15af0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15b00 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65 20  Create the base
15b10 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75  command to evalu
15b20 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65 20  ate and add the
15b30 70 72 6f 70 65 72 74 79 0d 0a 20 20 20 20 20 20  property..
15b40 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69 6e    #       settin
15b50 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 6d 6f  gs that are almo
15b60 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65 64  st always needed
15b70 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65 73   by our unit tes
15b80 74 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ts..        #
15b90 20 20 20 20 28 69 2e 65 2e 20 74 68 65 20 53 79      (i.e. the Sy
15ba0 73 74 65 6d 20 61 6e 64 20 53 79 73 74 65 6d 2e  stem and System.
15bb0 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65  Data assembly re
15bc0 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20  ferences)...
15bd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
15be0 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74  et command [list
15bf0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
15c00 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74  compileCSharp $t 15c10 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 6d ext$memory $sym 15c20 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 73 bols$strict res
15c30 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  ults \..
15c40 20 20 20 20 65 72 72 6f 72 73 20 24 61 64 64 20      errors $add 15c50 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 20 System.dll$add
15c60 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 20  System.Data.dll
15c70 24 61 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20  $add \.. 15c80 20 20 20 20 53 79 73 74 65 6d 2e 54 72 61 6e 73 System.Trans 15c90 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 24 61 64 64 actions.dll$add
15ca0 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d   System.Xml.dll]
15cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
15cc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
15cd0 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76 69  dd all the provi
15ce0 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20 61  ded file names a
15cf0 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65 72  s assembly refer
15d00 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  ences...
15d10 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  #..        forea
15d20 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c  ch fileName $fil 15d30 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 15d40 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d lappend comm 15d50 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e and$add [getBin
15d60 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c  aryFileName $fil 15d70 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 eName].. 15d80 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 15d90 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 15da0 41 64 64 20 65 78 74 72 61 20 61 72 67 75 6d 65 Add extra argume 15db0 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 nts, if any, to 15dc0 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 the command to e 15dd0 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 20 valuate... 15de0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 65 76 61 #.. eva 15df0 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e l lappend comman 15e00 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 20 d$args....
15e10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
15e20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65 20  NOTE: Alias the
15e30 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20 72  compiler local r
15e40 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f 72  esults and error
15e50 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 0d 0a  s variables to..
15e60 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
15e70 74 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61 6d  the variable nam
15e80 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  es provided by o
15e90 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...
15ea0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
15eb0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
15ec0 68 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d  h $resultsVarNam 15ed0 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 15ee0 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 upvar 15ef0 31 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 1$resultsVarNam
15f00 65 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 20  e results..
15f10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
15f20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
15f30 74 68 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d  th $errorsVarNam 15f40 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 15f50 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 upvar 15f60 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 1$errorsVarName
15f70 20 65 72 72 6f 72 73 0d 0a 20 20 20 20 20 20 20   errors..
15f80 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
15f90 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
15fa0 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f   Evaluate the co
15fb0 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69  nstructed [compi
15fc0 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e  leCSharp] comman
15fd0 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23  d and..        #
15fe0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 68         return th
15ff0 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20  e result...
16000 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 65 76     #..        ev
16010 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20  al $command.. 16020 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a } finally {.. 16030 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 16040 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 # NOTE: If th 16050 65 20 43 23 20 63 6f 6d 70 69 6c 65 72 20 77 61 e C# compiler wa 16060 73 20 69 6e 76 6f 6b 65 64 20 75 73 69 6e 67 20 s invoked using 16070 5b 65 78 65 63 5d 2c 20 72 65 73 65 74 20 74 68 [exec], reset th 16080 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 16090 20 20 20 70 72 65 76 69 6f 75 73 20 70 72 6f 63 previous proc 160a0 65 73 73 20 69 64 65 6e 74 69 66 69 65 72 20 6e ess identifier n 160b0 6f 77 20 28 69 2e 65 2e 20 74 68 61 74 20 77 61 ow (i.e. that wa 160c0 79 2c 20 69 74 20 64 6f 65 73 0d 0a 20 20 20 20 y, it does.. 160d0 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 74 20 # not 160e0 73 68 6f 77 20 75 70 20 61 73 20 62 65 69 6e 67 show up as being 160f0 20 22 6c 65 61 6b 65 64 22 29 2e 0d 0a 20 20 20 "leaked")... 16100 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 16110 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72 if {[isDotNetCor 16120 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 16130 20 20 20 20 20 20 63 61 74 63 68 20 7b 69 6e 66 catch {inf 16140 6f 20 70 72 65 76 69 6f 75 73 70 69 64 20 74 72 o previouspid tr 16150 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ue}.. }.. 16160 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 16170 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d 65 ... proc isMe 16180 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d moryDb { fileNam 16190 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a e } {.. #.. 161a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 # NOTE: Is 161b0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 the specified d 161c0 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d atabase file nam 161d0 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d e really an in-m 161e0 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f 0d emory database?. 161f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 16200 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 return [expr {$f
16210 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d  ileName eq ":mem
16220 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20  ory:" || \..
16230 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72 61        [string ra
16240 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30 20  nge $fileName 0 16250 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 12] eq "file::me 16260 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d mory:"}].. }. 16270 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 54 .... proc isT 16280 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 ableInDb { name 16290 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b {varName db} } { 162a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 162b0 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 # NOTE: Refer t 162c0 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 o the specified 162d0 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 variable (e.g. " 162e0 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 db") in the cont 162f0 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 ext of our.. 16300 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 # caller 16310 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 . It contains t 16320 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e he database conn 16330 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 ection handle th 16340 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 at will be.. 16350 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 74 # used t 16360 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 71 75 o execute the qu 16370 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 65 ery used to dete 16380 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d rmine if the nam 16390 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 ed table is.. 163a0 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 # prese 163b0 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 62 nt in that datab 163c0 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ase... #.. 163d0 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
163e0 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
163f0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
16400 45 3a 20 55 73 65 20 74 68 65 20 73 71 6c 69 74  E: Use the sqlit
16410 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20 74  e_master table t
16420 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 74  o determine if t
16430 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69  he named table i
16440 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
16450 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20   present in the
16460 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
16470 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 71   #..      set sq
16480 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 45 4c  l {..        SEL
16490 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f  ECT COUNT(*) FRO
164a0 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72 20  M sqlite_master
164b0 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74 61  WHERE type = 'ta
164c0 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20  ble' AND name =
164d0 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ?;..      }....
164e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
164f0 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e  NOTE: Return non
16500 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61 6d  -zero if the nam
16510 65 64 20 74 61 62 6c 65 20 69 73 20 70 72 65 73  ed table is pres
16520 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ent...      #..
16530 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70       return [exp
16540 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73 71  r {..        [sq
16550 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
16560 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 24 73  te scalar $db$s
16570 71 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d 31 20  ql [list param1
16580 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e  String $name]] > 16590 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 0.. }].. 165a0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 165b0 20 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 67 getDbDefaultPag 165c0 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 eSize {} {.. 165d0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 if {[catch {ex 165e0 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d 41 ecuteSql "PRAGMA 165f0 20 70 61 67 65 5f 73 69 7a 65 3b 22 20 73 63 61 page_size;" sca 16600 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 lar} result] == 16610 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 16620 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
16630 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  t..      } else
16640 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
16650 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  n 0..      }..
16660 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
16670 20 67 65 74 44 62 44 65 66 61 75 6c 74 43 61 63   getDbDefaultCac
16680 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20  heSize {} {..
16690 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65     if {[catch {e
166a0 78 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d  xecuteSql "PRAGM
166b0 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 20 73  A cache_size;" s
166c0 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d  calar} result] =
166d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
166e0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 166f0 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ult.. } els 16700 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 e {.. ret 16710 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a urn 0.. }.. 16720 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 16730 6f 63 20 75 73 65 4c 65 67 61 63 79 44 62 50 61 oc useLegacyDbPa 16740 67 65 41 6e 64 43 61 63 68 65 53 69 7a 65 73 20 geAndCacheSizes 16750 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 { varName } {.. 16760 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 16770 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 NOTE: Refer to t 16780 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 he specified var 16790 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 iable (e.g. "db" 167a0 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 ) in the context 167b0 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 of our.. # 167c0 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 caller. 167d0 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 It contains the 167e0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect 167f0 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20 ion handle that 16800 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23 will be.. # 16810 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65 used to e 16820 78 65 63 75 74 65 20 71 75 65 72 69 65 73 20 75 xecute queries u 16830 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 70 sed to set the p 16840 61 67 65 20 61 6e 64 20 63 61 63 68 65 20 73 69 age and cache si 16850 7a 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 zes... #.. 16860 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
16870 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
16880 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64    sql execute $d 16890 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 50 52 41 b {.. PRA 168a0 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d 20 GMA page_size = 168b0 31 30 32 34 3b 0d 0a 20 20 20 20 20 20 20 20 50 1024;.. P 168c0 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 RAGMA cache_size 168d0 20 3d 20 32 30 30 30 3b 0d 0a 20 20 20 20 20 20 = 2000;.. 168e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 168f0 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 n [list \.. 16900 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 74 [sql execut 16910 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 e -execute scala 16920 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 61 r$db "PRAGMA pa
16930 67 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d 0a 20 20  ge_size;"] \..
16940 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65          [sql exe
16950 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73 63  cute -execute sc
16960 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d 41  alar $db "PRAGMA 16970 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d 5d 0d cache_size;"]]. 16980 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 16990 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a 65 45 78 63 roc normalizeExc 169a0 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 7b 20 eptionMessage { 169b0 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 20 20 20 20 value } {.. 169c0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 169d0 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 30 gth$value] == 0
169e0 7d 20 74 68 65 6e 20 7b 72 65 74 75 72 6e 20 24  } then {return $169f0 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20 72 65 value}.. re 16a00 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 70 turn [string map 16a10 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 22 20 3d 3d [list \r\n " == 16a20 3e 20 22 20 5c 6e 20 22 20 3d 3d 3e 20 22 5d 20 > " \n " ==> "] 16a30 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20 7d 0d 0a$value]..    }..
16a40 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 74 72  ...    proc extr
16a50 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51 4c  actSystemDataSQL
16a60 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73 73  iteExceptionMess
16a70 61 67 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b 0d  age { value } {.
16a80 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
16a90 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 73  # NOTE: If the s
16aa0 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d 73 20 74  tring conforms t
16ab0 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65 20  o format of the
16ac0 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 69 6f 6e  normal exception
16ad0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
16ae0 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2c 20 65  error strings, e
16af0 78 74 72 61 63 74 20 61 6e 64 20 72 65 74 75 72  xtract and retur
16b00 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 72 6f 72  n only the error
16b10 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20 20   message..
16b20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20  #       portion
16b30 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20 23  itself...      #
16b40 0d 0a 20 20 20 20 20 20 73 65 74 20 70 61 74 74  ..      set patt
16b50 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  erns [list \..
16b60 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61 74      {System\.Dat
16b70 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69 74  a\.SQLite\.SQLit
16b80 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78 28  eException $$0x( 16b90 3f 3a 30 7c 38 29 5b 30 2d 39 41 2d 46 61 2d 66 ?:0|8)[0-9A-Fa-f 16ba0 5d 7b 37 7d 5c 29 3a 5c 0d 0a 20 20 20 20 20 20 ]{7}$$:\..
16bb0 20 20 20 20 28 2e 2b 3f 29 20 20 28 3f 3a 20 29      (.+?)  (?: )
16bc0 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b 53  ?at} \..      {S
16bd0 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c  ystem\.Data\.SQL
16be0 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70  ite\.SQLiteExcep
16bf0 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f 3a  tion: (.+?)  (?:
16c00 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20   )?at} \..
16c10 7b 45 61 67 6c 65 5c 2e 5f 43 6f 6d 70 6f 6e 65  {Eagle\._Compone
16c20 6e 74 73 5c 2e 50 75 62 6c 69 63 5c 2e 53 63 72  nts\.Public\.Scr
16c30 69 70 74 45 78 63 65 70 74 69 6f 6e 3a 20 28 2e  iptException: (.
16c40 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 5d 0d  +?)  (?: )?at}].
16c50 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
16c60 20 70 61 74 74 65 72 6e 20 24 70 61 74 74 65 72   pattern $patter 16c70 6e 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 ns {.. if 16c80 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 61 {[regexp --$pa
16c90 74 74 65 72 6e 20 24 76 61 6c 75 65 20 64 75 6d  ttern $value dum 16ca0 6d 79 20 6d 65 73 73 61 67 65 5d 7d 20 74 68 65 my message]} the 16cb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 16cc0 65 74 20 6d 65 73 73 61 67 65 20 5b 73 74 72 69 et message [stri 16cd0 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 5c ng map [list \r\ 16ce0 6e 20 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 74 72 n \n] [string tr 16cf0 69 6d 20 24 6d 65 73 73 61 67 65 5d 5d 0d 0a 20 im$message]]..
16d00 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 69 6e           set lin
16d10 65 73 20 5b 73 70 6c 69 74 20 24 6d 65 73 73 61  es [split $messa 16d20 67 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ge \n].... 16d30 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 if {[llength 16d40 20 24 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 74$lines] == 2} t
16d50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16d60 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20 24     if {[lindex $16d70 6c 69 6e 65 73 20 30 5d 20 65 71 20 5b 6c 69 6e lines 0] eq [lin 16d80 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 7d 20 74 dex$lines 1]} t
16d90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
16da0 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 6e       return [lin
16db0 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 0d 0a 20  dex $lines 0].. 16dc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 16dd0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 retu 16de0 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b rn [appendArgs [ 16df0 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d lindex$lines 0]
16e00 20 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 78 20   " -- " [lindex
16e10 24 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 20 20  $lines 1]].. 16e20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 16e30 20 20 20 20 20 72 65 74 75 72 6e 20 24 6d 65 73 return$mes
16e40 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d  sage..        }.
16e50 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
16e60 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65 0d    return $value. 16e70 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 16e80 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 71 roc trimSql { sq 16e90 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 l } {.. ret 16ea0 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c 6c urn [regsub -all 16eb0 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 6e -- {\s+} [strin 16ec0 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 22 g trim$sql] " "
16ed0 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
16ee0 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 71 6c   proc executeSql
16ef0 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65 20   { sql {execute
16f00 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e 6f  none} {format no
16f10 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22 22  ne} {fileName ""
16f20 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20  } } {..      if
16f30 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
16f40 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 7d  $fileName] == 0} 16f50 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 4e then {set fileN 16f60 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 ame :memory:}.. 16f70 20 20 20 20 20 73 65 74 75 70 44 62 20 24 66 69 setupDb$fi
16f80 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22 20  leName "" "" ""
16f90 22 22 20 22 22 20 66 61 6c 73 65 20 66 61 6c 73  "" "" false fals
16fa0 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 64 62  e false false db
16fb0 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 74   true....      t
16fc0 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  ry {..        re
16fd0 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 20  turn [uplevel 1
16fe0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
16ff0 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65       sql execute
17000 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 63 75   -execute $execu 17010 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 6d te -format$form
17020 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a 20  at $db$sql]]..
17030 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b       } finally {
17040 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
17050 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62 43  nnection [getDbC
17060 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  onnection]....
17070 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 20        try {..
17080 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62         cleanupDb
17090 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 66 61   $fileName db fa 170a0 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 0d lse false false. 170b0 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 6c . } final 170c0 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ly {.. 170d0 6f 62 6a 65 63 74 20 66 6c 61 67 73 20 24 63 6f object flags$co
170e0 6e 6e 65 63 74 69 6f 6e 20 2d 4e 6f 44 69 73 70  nnection -NoDisp
170f0 6f 73 65 3b 20 66 72 65 65 44 62 43 6f 6e 6e 65  ose; freeDbConne
17100 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d  ction..        }
17110 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
17120 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61  .....    proc ha
17130 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72 4e 61  sNoFlags { varNa
17140 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20  me none } {..
17150 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 17160 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 ame flags.... 17170 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 17180 69 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 68 65 ists flags]} the 17190 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 n {.. ret 171a0 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 171b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 171c0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
171d0 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  lags] == 0} then
171e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
171f0 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d  rn true..      }
17200 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e  ....      if {$n 17210 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 20 65 71 one &&$flags eq
17220 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20 7b 0d   "None"} then {.
17230 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
17240 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
17250 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61  .      return fa
17260 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  lse..    }.....
17270 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e 6e 65     proc getConne
17280 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 69 6c  ctionFlags { fil
17290 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 75 69  eName flags {qui
172a0 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
172b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
172c0 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74  NOTE: Figure out
172d0 20 77 68 69 63 68 20 64 61 74 61 62 61 73 65 20   which database
172e0 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 6f 6e  file name or con
172f0 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74  nection string t
17300 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20  hese..      #
17310 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66      connection f
17320 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75 61 6c  lags will actual
17330 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 54 68  ly apply to.  Th
17340 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 73 73  is is not necess
17350 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
17360 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f 64 65     in quiet mode
17370 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69 6e   because this in
17380 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f 6e 6c  formation is onl
17390 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67 69  y used for loggi
173a0 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ng..      #
173b0 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e 67 20    and reporting
173c0 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20 20  purposes...
173d0 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24   #..      if {!$173e0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 173f0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 17400 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e ng length$fileN
17410 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
17420 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
17430 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64  database [append
17440 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d 65 20  Args "file name
17450 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22  \"" $fileName \" 17460 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 ].. } els 17470 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 17480 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 20 s ::dataSource] 17490 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 174a0 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 74 73 ![array exists 174b0 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 7d 20 ::dataSource]} 174c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 174d0 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 5b set database [ 174e0 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 74 61 appendArgs "data 174f0 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a 3a 64 source \""$::d
17500 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d 0a 20  ataSource \"]..
17510 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
17520 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64  .          set d
17530 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e  atabase <unknown
17540 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  >..        }..
17550 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
17560 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
17570 45 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65 72  Even though ther
17580 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 73 6f  e is only one so
17590 75 72 63 65 20 6f 66 20 66 6c 61 67 73 20 73 6f  urce of flags so
175a0 20 66 61 72 2c 20 74 68 65 79 0d 0a 20 20 20 20   far, they..
175b0 20 20 23 20 20 20 20 20 20 20 6d 75 73 74 20 62    #       must b
175c0 65 20 63 6f 6d 62 69 6e 65 64 20 75 73 69 6e 67  e combined using
175d0 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 79 6e   the correct syn
175e0 74 61 78 20 66 6f 72 20 65 6e 75 6d 65 72 61 74  tax for enumerat
175f0 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
17600 20 20 66 6c 61 67 20 76 61 6c 75 65 73 20 66 6f    flag values fo
17610 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65  r the .NET Frame
17620 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  work...      #..
17630 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20        set flags
17640 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66  [combineFlags $f 17650 6c 61 67 73 20 22 22 5d 0d 0a 0d 0a 20 20 20 20 lags ""].... 17660 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 17670 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 E: Show (and log 17680 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e 6e ) the local conn 17690 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 ection flags and 176a0 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d the associated. 176b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 176c0 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 69 ata source or fi 176d0 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 le name... 176e0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 #.. if {!$q
176f0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
17700 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
17710 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
17720 74 4c 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26 26  tLocalFlags)] &&
17730 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17740 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  (![info exists :
17750 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c 61  :no(emitLocalFla
17760 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d  gsIfNone)] || \.
17770 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b  .             ![
17780 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73  hasNoFlags flags
17790 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 7b   false])} then {
177a0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
177b0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 177c0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 177d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 177e0 2d 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 ---- local conne 177f0 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 ction flags for 17800 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 "$database \..
17810 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61               " a
17820 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68  re: " [expr {![h
17830 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 20  asNoFlags flags
17840 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20  false] ? \..
17850 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
17860 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73 20  dArgs \" $flags 17870 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d \"] : "<none>"}] 17880 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. 17890 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 178a0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 178b0 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 E: Show (and log 178c0 29 20 74 68 65 20 73 68 61 72 65 64 20 63 6f 6e ) the shared con 178d0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d 0a nection flags... 178e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 178f0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
17900 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
17910 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
17920 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
17930 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
17940 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
17950 63 74 69 6f 6e 20 53 68 61 72 65 64 46 6c 61 67  ction SharedFlag
17960 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 68 61  s..        } sha
17970 72 65 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d 20  redFlags] == 0}
17980 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17990 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
179a0 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 61  sts ::no(emitSha
179b0 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d  redFlags)] && \.
179c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28  .              (
179d0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
179e0 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61  no(emitSharedFla
179f0 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d  gsIfNone)] || \.
17a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
17a10 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68 61  ![hasNoFlags sha
17a20 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 29 7d  redFlags true])}
17a30 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17a40 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 17a50 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 17a60 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 17a70 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 17a80 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f shared connectio 17a90 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 64 n flags for "$d
17aa0 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20 20  atabase \..
17ab0 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72 65             " are
17ac0 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61 73  : " [expr {![has
17ad0 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c  NoFlags sharedFl
17ae0 61 67 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a 20  ags true] ? \..
17af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
17b00 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73  appendArgs \" $s 17b10 68 61 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 3a haredFlags \"] : 17b20 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d "<none>"}] \n]. 17b30 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 17b40 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 17b50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 17b60 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 17b70 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 73 (emitSharedFlags 17b80 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 )] && \.. 17b90 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 78 ![info ex 17ba0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 ists ::no(emitSh 17bb0 61 72 65 64 46 6c 61 67 73 49 66 55 6e 61 76 61 aredFlagsIfUnava 17bc0 69 6c 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20 7b ilable)]} then { 17bd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 17be0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
17bf0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
17c00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
17c10 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20     "---- shared
17c20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
17c30 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database 17c40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17c50 20 20 20 20 22 20 61 72 65 3a 20 3c 75 6e 61 76 " are: <unav 17c60 61 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 20 ailable>\n"].. 17c70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17c80 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 17c90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17ca0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e # NOTE: Show (an 17cb0 64 20 6c 6f 67 29 20 74 68 65 20 64 65 74 65 63 d log) the detec 17cc0 74 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 ted global conne 17cd0 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66 20 ction flags, if 17ce0 61 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 any... #.. 17cf0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
17d00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17d10 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
17d20 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c 6f  sts ::no(emitGlo
17d30 62 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d  balFlags)] && \.
17d40 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b  .            (![
17d50 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
17d60 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 73  (emitGlobalFlags
17d70 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a 20  IfNone)] || \..
17d80 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68 61              ![ha
17d90 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65  sNoFlags ::conne
17da0 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c 73  ction_flags fals
17db0 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  e])} then {..
17dc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 17dd0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 17de0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 17df0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 17e00 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f global connectio 17e10 6e 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20 5c n flags are: " \ 17e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17e30 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c [expr {![hasNoFl 17e40 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e ags ::connection 17e50 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f 20 _flags false] ? 17e60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17e70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" 17e80 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c$::connection_fl
17e90 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
17ea0 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
17eb0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
17ec0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
17ed0 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65 20   NOTE: If there
17ee0 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20 28  are any global (
17ef0 70 65 72 20 74 65 73 74 20 72 75 6e 29 20 63 6f  per test run) co
17f00 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63  nnection flags c
17f10 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20 20  urrently..
17f20 23 20 20 20 20 20 20 20 73 65 74 2c 20 75 73 65  #       set, use
17f30 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e 20   them now (i.e.
17f40 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 65  by combining the
17f50 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73 20  m with the ones
17f60 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20  for this..
17f70 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
17f80 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  on)...      #..
17f90 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
17fa0 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69  xists ::connecti
17fb0 6f 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20  on_flags]} then
17fc0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
17fd0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f        # NOTE: Co
17fe0 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70  mbine and/or rep
17ff0 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74  lace the connect
18000 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68  ion flags and th
18010 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20  en show the..
18020 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77       #       new
18030 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...
18040 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
18050 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c  flags [combineFl
18060 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f  ags $flags$::co
18070 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d  nnection_flags].
18080 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
18090 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68        # NOTE: Sh
180a0 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65  ow (and log) the
180b0 20 6e 65 77 20 65 66 66 65 63 74 69 76 65 20 63   new effective c
180c0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e  onnection flags.
180d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
180e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 180f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 18100 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 18110 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 xists ::no(emitC 18120 6f 6d 62 69 6e 65 64 46 6c 61 67 73 29 5d 20 26 ombinedFlags)] & 18130 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 18140 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 (![info exist 18150 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 s ::no(emitCombi 18160 6e 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 5d nedFlagsIfNone)] 18170 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 18180 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 ![hasNoFla 18190 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 29 gs flags false]) 181a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 181b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
181c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
181d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
181e0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
181f0 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63   combined connec
18200 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22  tion flags for "
18210 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20   $database \.. 18220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 " 18230 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b are: " [expr {![ 18240 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73 hasNoFlags flags 18250 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 false] ? \.. 18260 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 [ap 18270 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 pendArgs \"$fla
18280 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e  gs \"] : "<none>
18290 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  "}] \n]..
182a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
182b0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
182c0 20 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73 0d    return $flags. 182d0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 182e0 72 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f 70 roc getFlagsProp 182f0 65 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 22 erty { {flags "" 18300 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 } {quiet false} 18310 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 18320 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 # NOTE: Dete 18330 72 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 63 rmine what the c 18340 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c 20 ombined (global 18350 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e 65 and local) conne 18360 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 ction.. # 18370 20 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 6c flags shoul 18380 64 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 71 d be, possibly q 18390 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 23 uietly... # 183a0 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 .. set flag 183b0 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e s [getConnection 183c0 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 20 Flags ""$flags
183d0 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20  $quiet].... 183e0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 183f0 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 6f : If no global o 18400 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 r local connecti 18410 6f 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 70 on flags were sp 18420 65 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 20 ecified, the.. 18430 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 61 # defa 18440 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 ult connection f 18450 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 75 lags should be u 18460 73 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 sed; therefore, 18470 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 20 return.. # 18480 20 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 an empty s 18490 74 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 61 tring in that ca 184a0 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 se... #.. 184b0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 184c0 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d length$flags] =
184d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
184e0 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
184f0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18500 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18510 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63 68  : In order to ch
18520 65 63 6b 20 69 66 20 74 68 65 20 64 65 66 61 75  eck if the defau
18530 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  lt connection fl
18540 61 67 73 20 61 72 65 20 62 65 69 6e 67 20 75 73  ags are being us
18550 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
18560 20 20 69 74 20 69 73 20 6e 65 63 65 73 73 61 72    it is necessar
18570 79 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20 63  y to attempt a c
18580 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68 65  onversion to the
18590 20 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61 74   actual enumerat
185a0 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
185b0 20 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e 67    type.  Failing
185c0 20 74 68 61 74 2c 20 74 68 65 20 63 68 65 63 6b   that, the check
185d0 20 61 67 61 69 6e 73 74 20 74 68 65 20 64 65 66   against the def
185e0 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20  ault value will
185f0 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  be..      #
18600 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20    skipped...
18610 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18620 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
18630 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c 3b   set error null;
18640 20 23 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20 20   # IGNORED....
18650 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
18660 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79 50  oke Utility TryP
18670 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22 22  arseFlagsEnum ""
18680 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18690 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
186a0 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  te.SQLiteConnect
186b0 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61  ionFlags "" $fla 186c0 67 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d 0a gs null true \.. 186d0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75 65 true 186e0 20 74 72 75 65 20 65 72 72 6f 72 0d 0a 20 20 20 true error.. 186f0 20 20 20 7d 20 76 61 6c 75 65 5d 7d 20 74 68 65 } value]} the 18700 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 18710 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 18720 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 70 61 Attempting to pa 18730 72 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 rse the connecti 18740 6f 6e 20 66 6c 61 67 73 20 63 61 75 73 65 64 20 on flags caused 18750 61 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20 a script.. 18760 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 2e # error. 18770 20 20 45 6d 69 74 20 61 20 77 61 72 6e 69 6e 67 Emit a warning 18780 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 to the test log 18790 20 66 69 6c 65 20 61 6e 64 20 63 6f 6e 74 69 6e file and contin 187a0 75 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ue.. # 187b0 20 20 20 20 75 73 69 6e 67 20 61 6e 20 65 6d 74 using an emt 187c0 70 79 20 73 74 72 69 6e 67 20 69 6e 73 74 65 61 py string instea 187d0 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 187e0 20 20 20 20 20 20 20 74 6c 6f 67 20 5b 61 70 70 tlog [app 187f0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 18800 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 18810 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 18820 70 61 72 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e parse connection 18830 20 66 6c 61 67 73 2c 20 65 72 72 6f 72 3a 20 22 flags, error: " 18840 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18850 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d \n\t$value \n].
18860 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76  ...        set v
18870 61 6c 75 65 20 22 22 0d 0a 20 20 20 20 20 20 7d  alue ""..      }
18880 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
18890 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
188a0 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67 73  e combined flags
188b0 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 6e 6f   string could no
188c0 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20 63 6f  t actually be co
188d0 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20 20 23  nverted..      #
188e0 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 65 6e         to the en
188f0 75 6d 65 72 61 74 65 64 20 74 79 70 65 20 69 74  umerated type it
18900 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74 20   is the default
18910 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 73 74  value, then just
18920 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20   use..      #
18930 20 20 20 20 69 74 20 76 65 72 62 61 74 69 6d 3b      it verbatim;
18940 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73 74   otherwise, just
18950 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
18960 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 68 61   string.  In tha
18970 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
18980 20 63 61 73 65 2c 20 74 68 65 20 64 65 66 61 75   case, the defau
18990 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  lt connection fl
189a0 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ags will be used
189b0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
189c0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
189d0 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20  ngth $value] == 189e0 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65 20 22 0 ||$value ne "
189f0 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e 20 7b  Default"} then {
18a00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
18a10 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47 3a 20       # WARNING:
18a20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65  This returns the
18a30 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 6f 66   string value of
18a40 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c   the combined fl
18a50 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 20 20  ags, not..
18a60 20 20 23 20 20 20 20 20 20 20 20 20 20 74 68 65    #          the
18a70 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61 6c 75   enumerated valu
18a80 65 2e 20 20 54 68 69 73 20 69 73 20 62 79 20 64  e.  This is by d
18a90 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 6c 64  esign and should
18aa0 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20   not..        #
18ab0 20 20 20 20 20 20 20 20 20 62 65 20 63 68 61 6e           be chan
18ac0 67 65 64 20 77 69 74 68 6f 75 74 20 63 61 72 65  ged without care
18ad0 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 69 6f  ful consideratio
18ae0 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 6c 64  n (e.g. it would
18af0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
18b00 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 68 65       prevent the
18b10 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
18b20 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 6c 6c  n class from all
18b30 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d 0a 20  owing invalid..
18b40 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
18b50 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 6d 65    ["magical"] me
18b60 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 20 20  ta-flags)...
18b70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
18b80 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67  eturn [appendArg
18b90 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c 61 67  s "Flags=" $flag 18ba0 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a s \;].. }.. 18bb0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 .. return " 18bc0 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ".. }..... 18bd0 20 70 72 6f 63 20 67 65 74 54 65 73 74 50 72 6f proc getTestPro 18be0 70 65 72 74 69 65 73 20 7b 20 7b 66 6c 61 67 73 perties { {flags 18bf0 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 ""} {quiet fals 18c00 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d e} } {.. #. 18c10 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 18c20 74 61 72 74 20 77 69 74 68 20 22 46 6c 61 67 73 tart with "Flags 18c30 22 20 70 72 6f 70 65 72 74 79 20 66 6f 72 20 74 " property for t 18c40 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f he new connectio 18c50 6e 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 n, if any... 18c60 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 #.. set r 18c70 65 73 75 6c 74 20 5b 67 65 74 46 6c 61 67 73 50 esult [getFlagsP 18c80 72 6f 70 65 72 74 79 20 24 66 6c 61 67 73 20 24 roperty$flags $18c90 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 quiet].... 18ca0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 18cb0 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 Add the name of 18cc0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 73 the current tes 18cd0 74 20 66 69 6c 65 2c 20 69 66 20 61 76 61 69 6c t file, if avail 18ce0 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0d 0a able. This is.. 18cf0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 6e # on 18d00 6c 79 20 75 73 65 64 20 66 6f 72 20 64 65 62 75 ly used for debu 18d10 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d gging... #. 18d20 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 18d30 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 66 exists ::test_f 18d40 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ile]} then {.. 18d50 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 append res 18d60 75 6c 74 20 54 65 73 74 46 69 6c 65 3d 20 24 3a ult TestFile=$:
18d70 3a 74 65 73 74 5f 66 69 6c 65 20 5c 3b 0d 0a 20  :test_file \;..
18d80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
18d90 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
18da0 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f 66   Add the name of
18db0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 73   the current tes
18dc0 74 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e  t, if available.
18dd0 20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0d 0a    This is only..
18de0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
18df0 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67  ed for debugging
18e00 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
18e10 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
18e20 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73  ts ::eagle_tests
18e30 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 5d 7d 20  (CurrentName)]}
18e40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
18e50 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 54 65  append result Te
18e60 73 74 4e 61 6d 65 3d 20 24 3a 3a 65 61 67 6c 65  stName= $::eagle 18e70 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61 _tests(CurrentNa 18e80 6d 65 29 20 5c 3b 0d 0a 20 20 20 20 20 20 7d 0d me) \;.. }. 18e90 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 18ea0 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a$result..    }..
18eb0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 61 62  ...    proc enab
18ec0 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 7b 20  leSharedCache {
18ed0 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b  channel enable {
18ee0 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
18ef0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
18f00 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
18f10 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
18f20 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
18f30 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
18f40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
18f50 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
18f60 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ods \..
18f70 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c     sqlite3_enabl
18f80 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20 5b  e_shared_cache [
18f90 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62 6c 65  expr int($enable 18fa0 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 )].. } resu 18fb0 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 18fc0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
18fd0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
18fe0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $18ff0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 19000 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 19010 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 "---- call 19020 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 sqlite3_enable_s 19030 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 hared_cache("$e
19040 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  nable \..
19050 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a         ")... ok:
19060 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a   " $result \n].. 19070 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 19080 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 19090 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
190a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
190b0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 190c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 190d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 190e0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 190f0 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 _enable_shared_c 19100 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c ache("$enable \
19110 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19120 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c  ")... error: " \
19130 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 19140 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 19150 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 19160 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 20 proc setupDb 19170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f 19180 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 ileName {mode "" 19190 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 } {dateTimeForma 191a0 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b t ""} {dateTimeK 191b0 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 ind ""} {flags " 191c0 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "}.. 191d0 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c {extra ""} {qual 191e0 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 ify true} {delet 191f0 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c e true} {uri fal 19200 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 se}.. 19210 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65 {temporary true 19220 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b } {varName db} { 19230 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b quiet false} } { 19240 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19250 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 # NOTE: First, 19260 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 see if our calle 19270 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 r has requested 19280 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 an in-memory dat 19290 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. 192a0 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d . set isMem 192b0 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 ory [isMemoryDb 192c0 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
192d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
192e0 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c  OTE: For now, al
192f0 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73  l test databases
19300 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73   used by the tes
19310 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63  t suite are plac
19320 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
19330 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62    into the datab
19340 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20  ase directory.
19350 45 61 63 68 20 64 61 74 61 62 61 73 65 20 61 6e  Each database an
19360 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d  d related files.
19370 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
19380 73 65 64 20 62 79 20 61 20 74 65 73 74 20 73 68  sed by a test sh
19390 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20  ould be cleaned
193a0 75 70 20 62 79 20 74 68 61 74 20 74 65 73 74 20  up by that test
193b0 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20  using the..
193c0 20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75   #       "cleanu
193d0 70 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20  pDb" procedure,
193e0 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  below...      #.
193f0 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d  .      if {!$isM 19400 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 emory &&$qualif
19410 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  y} then {..
19420 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
19430 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44  [file join [getD
19440 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 79  atabaseDirectory
19450 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  ] [file tail $fi 19460 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 leName]].. 19470 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 19480 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 # NOTE: By d 19490 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 efault, delete a 194a0 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 ny pre-existing 194b0 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 68 database with th 194c0 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 e same file.. 194d0 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name 194e0 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 if it currently 194f0 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 exists... # 19500 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 .. if {!$is
19510 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74  Memory && $delet 19520 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 e && [file exist 19530 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
19540 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
19550 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
19560 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65   Attempt to dele
19570 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74  te any pre-exist
19580 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74  ing database wit
19590 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d  h the same file.
195a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
195b0 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20   name...
195c0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
195d0 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
195e0 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72  te $fileName} er 195f0 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. 19600 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19610 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 19620 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 19630 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c o delete the fil 19640 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 19650 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 19660 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
19670 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
19680 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 19690 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 196a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 196b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 196c0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 196d0 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat 196e0 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
196f0 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
19700 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
19710 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72  during setup, er
19720 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 19730 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 19740 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 19750 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 19760 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 19770 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 19780 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 19790 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 197a0 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 197b0 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 197c0 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 caller. The 197d0 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 handle to the op 197e0 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 69 ened database wi 197f0 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 ll be stored the 19800 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 19810 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
19820 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
19830 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
19840 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67  : Start building
19850 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
19860 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c  string.  The onl
19870 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74 69  y required porti
19880 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
19890 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
198a0 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68  ion string is th
198b0 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77  e data source, w
198c0 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68  hich contains th
198d0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
198e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
198f0 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20  ame itself.  If
19900 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73  our caller wants
19910 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61 73   to use a URI as
19920 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
19930 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c  the data source,
19940 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69   use the FullUri
19950 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
19960 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a  ng property to..
19970 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72        #       pr
19980 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20 73  event the data s
19990 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f  ource string fro
199a0 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e  m being mangled.
199b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
199c0 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20   if {$uri} then 199d0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 {.. set c 199e0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 onnection {FullU 199f0 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d ri=${fileName}}.
19a00 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
19a10 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
19a20 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f  nection {Data So
19a30 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d  urce=${fileName} 19a40 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... 19a50 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 19a60 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20 OTE: Since this 19a70 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f procedure has no 19a80 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 special knowled 19a90 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 64 ge of what the d 19aa0 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 efault.. # 19ab0 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 73 setting is 19ac0 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 for the ToFullP 19ad0 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 ath connection s 19ae0 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 tring propery, a 19af0 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20 lways.. # 19b00 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 6c add the val 19b10 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 ue we know about 19b20 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 to the connecti 19b30 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 on string... 19b40 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e #.. appen 19b50 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 d connection {;T 19b60 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c oFullPath=${qual
19b70 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23  ify}}....      #
19b80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
19b90 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
19ba0 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61  ecified a journa
19bb0 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20  l mode, add the
19bc0 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f  necessary portio
19bd0 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
19be0 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
19bf0 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
19c00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
19c10 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
19c20 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68  h $mode] > 0} th 19c30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 19c40 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 19c50 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 {;Journal Mode=$
19c60 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d  {mode}}..      }
19c70 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
19c80 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75     # NOTE: If ou
19c90 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69  r caller specifi
19ca0 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f  ed a DateTime fo
19cb0 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65  rmat, add the ne
19cc0 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23  cessary..      #
19cd0 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f         portion o
19ce0 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
19cf0 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20   string now...
19d00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
19d10 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
19d20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d  $dateTimeFormat] 19d30 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 19d40 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 19d50 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 nection {;DateTi 19d60 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 meFormat=${dateT
19d70 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20  imeFormat}}..
19d80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
19d90 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
19da0 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65  f our caller spe
19db0 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69 6d  cified a DateTim
19dc0 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e  eKind, add the n
19dd0 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e  ecessary portion
19de0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
19df0 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
19e00 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20  n string now...
19e10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
19e20 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
19e30 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20   $dateTimeKind] 19e40 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 19e50 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e append conn 19e60 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d ection {;DateTim 19e70 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 eKind=${dateTime
19e80 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d  Kind}}..      }.
19e90 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
19ea0 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65    # NOTE: Figure
19eb0 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 66 69   out what the fi
19ec0 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68  nal flags for th
19ed0 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65  is connection ne
19ee0 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20  ed to be...
19ef0 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c   #..      set fl
19f00 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69  ags [getConnecti
19f10 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d  onFlags $fileNam 19f20 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d e$flags $quiet] 19f30 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 19f40 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 19f50 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 19f60 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f ed some SQLiteCo 19f70 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 nnectionFlags, a 19f80 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 dd the.. # 19f90 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 20 necessary 19fa0 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 portion of the c 19fb0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 onnection string 19fc0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a now... #.. 19fd0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 19fe0 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d g length$flags]
19ff0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1a000 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e        append con
1a010 6e 65 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d  nection {;Flags=
1a020 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20  ${flags}}.. 1a030 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 1a040 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If 1a050 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 our caller speci 1a060 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 61 fied an extra pa 1a070 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e yload to the con 1a080 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 nection.. # 1a090 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61 string, a 1a0a0 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 ppend it now... 1a0b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1a0c0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 1a0d0 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68$extra] > 0} th
1a0e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70  en {..        ap
1a0f0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  pend connection
1a100 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20  \; $extra.. 1a110 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 1a120 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 # NOTE: Add 1a130 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 the name of the 1a140 20 63 75 72 72 65 6e 74 20 74 65 73 74 20 66 69 current test fi 1a150 6c 65 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 le, if available 1a160 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 . This is.. 1a170 20 20 23 20 20 20 20 20 20 20 6f 6e 6c 79 20 75 # only u 1a180 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e sed for debuggin 1a190 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 g... #.. 1a1a0 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 1a1b0 73 74 73 20 3a 3a 74 65 73 74 5f 66 69 6c 65 5d sts ::test_file] 1a1c0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a1d0 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 append connect 1a1e0 69 6f 6e 20 7b 3b 54 65 73 74 46 69 6c 65 3d 24 ion {;TestFile=$
1a1f0 7b 3a 3a 74 65 73 74 5f 66 69 6c 65 7d 7d 0d 0a  {::test_file}}..
1a200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1a210 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1a220 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f  : Add the name o
1a230 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65  f the current te
1a240 73 74 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65  st, if available
1a250 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0d  .  This is only.
1a260 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
1a270 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
1a280 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  g...      #..
1a290 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1a2a0 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65 73 74  sts ::eagle_test
1a2b0 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 5d 7d  s(CurrentName)]}
1a2c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1a2d0 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69   append connecti
1a2e0 6f 6e 20 7b 3b 54 65 73 74 4e 61 6d 65 3d 24 7b  on {;TestName=${ 1a2f0 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 43 75 ::eagle_tests(Cu 1a300 72 72 65 6e 74 4e 61 6d 65 29 7d 7d 0d 0a 20 20 rrentName)}}.. 1a310 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 1a320 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1a330 46 6f 72 20 63 6c 61 72 69 74 79 2c 20 61 70 70 For clarity, app 1a340 65 6e 64 20 61 20 66 69 6e 61 6c 20 73 65 6d 69 end a final semi 1a350 63 6f 6c 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e colon to the con 1a360 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d nection string.. 1a370 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1a380 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f append connectio 1a390 6e 20 5c 3b 0d 0a 0d 0a 20 20 20 20 20 20 23 0d n \;.... #. 1a3a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f . # NOTE: O 1a3b0 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 pen the database 1a3c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c connection now, 1a3d0 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 61 placing the opa 1a3e0 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 65 que handle value 1a3f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1a400 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 62 6c into the variabl 1a410 65 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f e specified by o 1a420 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 ur caller... 1a430 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 #.. set d 1a440 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70 b [sql open -typ 1a450 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20 e SQLite [subst 1a460 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d$connection]]...
1a470 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1a480 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75 72  # NOTE: Configur
1a490 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20  e the temporary
1a4a0 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
1a4b0 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20 64  e newly opened d
1a4c0 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 23  atabase..      #
1a4d0 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
1a4e0 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72  n now unless our
1a4f0 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20   caller forbids
1a500 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  it...      #..
1a510 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f 72 61      if {$tempora 1a520 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 ry && ![info exi 1a530 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 sts ::no(setTemp 1a540 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 29 5d oraryDirectory)] 1a550 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1a560 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 sql execute$d
1a570 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  b [appendArgs \.
1a580 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50 52  .            "PR
1a590 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
1a5a0 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22 22 20  directory = \""
1a5b0 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69 72  [getTemporaryDir
1a5c0 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20  ectory] \"\;]..
1a5d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1a5e0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1a5f0 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 65 78 74   Perform any ext
1a600 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  ra per-connectio
1a610 6e 20 73 65 74 75 70 20 66 6f 72 20 74 68 65 20  n setup for the
1a620 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a 20 20  newly opened..
1a630 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74 61      #       data
1a640 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73 73 20  base now unless
1a650 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69  our caller forbi
1a660 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d  ds it...      #.
1a670 0a 20 20 20 20 20 20 73 65 74 20 65 78 65 63 75  .      set execu
1a680 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 74 45 78  teOnSetup [getEx
1a690 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d  ecuteOnSetup]...
1a6a0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
1a6b0 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 65 63 75  ng length $execu 1a6c0 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 20 26 teOnSetup] > 0 & 1a6d0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 21 & \.. ! 1a6e0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1a6f0 6f 28 65 78 65 63 75 74 65 4f 6e 53 65 74 75 70 o(executeOnSetup 1a700 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1a710 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1a720 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f 6d 6d NOTE: This comm 1a730 61 6e 64 20 6d 61 79 20 72 61 69 73 65 20 61 6e and may raise an 1a740 20 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c 20 74 error; if so, t 1a750 68 61 74 20 69 73 20 66 69 6e 65 2c 20 61 73 0d hat is fine, as. 1a760 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1a770 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 74 the enclosing t 1a780 65 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 66 61 est will then fa 1a790 69 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 74 5d il. The [subst] 1a7a0 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 command is.. 1a7b0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 1a7c0 64 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 6e 20 d on the SQL in 1a7d0 63 61 73 65 20 69 74 20 6e 65 65 64 73 20 74 6f case it needs to 1a7e0 20 72 65 66 65 72 20 74 6f 20 73 74 61 74 65 20 refer to state 1a7f0 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 20 20 in our.. 1a800 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 2e # context. 1a810 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1a820 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute 1a830 20 24 64 62 20 5b 73 75 62 73 74 20 24 65 78 65$db [subst $exe 1a840 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 cuteOnSetup].. 1a850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 1a860 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1a870 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 Always return th 1a880 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 1a890 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 73 dle upon success 1a8a0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1a8b0 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 20 return$db..
1a8c0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1a8d0 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e   getDbConnection
1a8e0 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20   { {varName db}
1a8f0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
1a900 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
1a910 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
1a920 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
1a930 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
1a940 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20  ontext of our..
1a950 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c       #       cal
1a960 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65  ler.  The handle
1a970 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
1a980 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65 6e   previously open
1a990 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20 20  ed via the..
1a9a0 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75 70    #       [setup
1a9b0 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73 68  Db] procedure sh
1a9c0 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 74  ould be stored t
1a9d0 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  here...      #..
1a9e0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 1a9f0 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 arName db.... 1aa00 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1aa10 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 TE: This returns 1aa20 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 62 the ADO.NET IDb 1aa30 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 Connection objec 1aa40 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 74 t instance for t 1aa50 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 1aa60 20 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 specified data 1aa70 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 6e bse handle. Sin 1aa80 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 20 ce getting this 1aa90 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 70 object relies up 1aaa0 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 on.. # 1aab0 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 6c Eagle internal 1aac0 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 68 s, great care sh 1aad0 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 6f ould be taken to 1aae0 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e 67 avoid disposing 1aaf0 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 of.. # 1ab00 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 6f this object o 1ab10 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 74 r otherwise putt 1ab20 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 69 ing it into an i 1ab30 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a 20 nvalid state... 1ab40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1ab50 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 {[info exists d 1ab60 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 b]} then {.. 1ab70 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1ab80 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 1ab90 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 1aba0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 6a +NonPublic -obj 1abb0 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 70 ectflags +NoDisp 1abc0 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 ose -alias \.. 1abd0 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 Inte 1abe0 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 rpreter.GetActiv 1abf0 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 74 e.connections It 1ac00 65 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 20 20 em$db..
1ac10 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20  } result] == 0}
1ac20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ac30 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
1ac40 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c 20   NOTE: Success,
1ac50 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71 75  return the opaqu
1ac60 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e  e object handle.
1ac70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1ac80 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
1ac90 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20  $result.. 1aca0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1acb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1acc0 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 # NOTE: Failur 1acd0 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a e, report why... 1ace0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1acf0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1ad00 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1ad10 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1ad20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1ad30 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
1ad40 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69 6f  to get connectio
1ad50 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61 74  n handle for dat
1ad60 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  abase \"" \..
1ad70 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20 22             $db " 1ad80 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 1ad90 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 t$result \n]..
1ada0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1adb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
1adc0 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c      # NOTE: Fail
1add0 75 72 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 6f  ure, return an o
1ade0 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 6c 69 64  bviously invalid
1adf0 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68   opaque object h
1ae00 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d  andle...      #.
1ae10 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22  .      return ""
1ae20 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1ae30 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e 65  proc freeDbConne
1ae40 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65  ction { {varName
1ae50 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b   connection} } {
1ae60 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1ae70 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74   # NOTE: Refer t
1ae80 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  o the specified
1ae90 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22  variable (e.g. "
1aea0 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e 20  connection") in
1aeb0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
1aec0 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75     context of ou
1aed0 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f  r caller.  The o
1aee0 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
1aef0 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e 4e  dle for an ADO.N
1af00 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ET..      #
1af10 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65    connection pre
1af20 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64  viously returned
1af30 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63   by [getDbConnec
1af40 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65 0d  tion] should be.
1af50 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
1af60 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20  tored there...
1af70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76      #..      upv
1af80 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f  ar 1 $varName co 1af90 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 nnection.... 1afa0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1afb0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 65 E: Attempt to re 1afc0 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 20 move the opaque 1afd0 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 72 object handle fr 1afe0 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 om the interpret 1aff0 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 er.. # 1b000 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f 62 now. This [ob 1b010 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 61 ject dispose] ca 1b020 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 75 ll will not actu 1b030 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 20 ally dispose of 1b040 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 1b050 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f 62 underlying ob 1b060 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 65 ject because the 1b070 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 67 +NoDispose flag 1b080 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d 0a was set on it.. 1b090 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 75 # du 1b0a0 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f 66 ring creation of 1b0b0 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 1b0c0 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 ct handle... 1b0d0 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 1b0e0 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e 6e info exists conn 1b0f0 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 ection] && \.. 1b100 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 7b [catch { 1b110 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 24 object dispose$
1b120 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72 6f  connection} erro
1b130 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
1b140 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1b150 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
1b160 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f  w failed to remo
1b170 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20 72  ve the handle, r
1b180 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20  eport why...
1b190 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
1b1a0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 1b1b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1b1c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1b1d0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1b1e0 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 ailed to remove 1b1f0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c connection handl 1b200 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 6f e \""$connectio
1b210 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
1b220 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
1b230 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 1b240 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 1b250 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 44 ... proc addD 1b260 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 6f bConnection { co 1b270 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 6d nnection {varNam 1b280 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 1b290 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1b2a0 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 1b2b0 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 1b2c0 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 1b2d0 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 1b2e0 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 1b2f0 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 caller... 1b300 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 1b310 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 1$varName db..
1b320 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1b330 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20   # NOTE: Create
1b340 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72 6d  a correctly form
1b350 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20 74  atted name for t
1b360 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
1b370 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20 20  ection to..
1b380 20 23 20 20 20 20 20 20 20 62 65 20 61 64 64 65   #       be adde
1b390 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d 61  d to the list ma
1b3a0 6e 61 67 65 64 20 62 79 20 74 68 65 20 45 61 67  naged by the Eag
1b3b0 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  le interpreter..
1b3c0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1b3d0 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20 69  set db [object i
1b3e0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
1b3f0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
1b400 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d 70       Eagle._Comp
1b410 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e 46  onents.Private.F
1b420 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61 73  ormatOps Databas
1b430 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f 6e  eObjectName $con 1b440 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 nection \.. 1b450 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 SQLiteConne 1b460 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e ction [object in 1b470 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 voke Interpreter 1b480 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 49 .GetActive NextI 1b490 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a d]].... #.. 1b4a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 1b4b0 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63 d the database c 1b4c0 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 64 onnection provid 1b4d0 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 1b4e0 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 20 to the list.. 1b4f0 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 # of t 1b500 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 hose known to th 1b510 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 65 e Eagle interpre 1b520 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ter... #.. 1b530 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1b540 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1b550 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 72 blic Interpreter 1b560 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 .GetActive.conne 1b570 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 20 ctions Add \.. 1b580 20 20 20 20 20 20 20 20 24 64 62 20 24 63 6f 6e$db $con 1b590 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a nection.. }.. 1b5a0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 6d 6f ... proc remo 1b5b0 76 65 44 62 54 72 61 6e 73 61 63 74 69 6f 6e 20 veDbTransaction 1b5c0 7b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7d 20 { transaction } 1b5d0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 1b5e0 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 # NOTE: Remove 1b5f0 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 72 the database tr 1b600 61 6e 73 61 63 74 69 6f 6e 20 70 72 6f 76 69 64 ansaction provid 1b610 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 ed by our caller 1b620 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 from the.. 1b630 20 23 20 20 20 20 20 20 20 6c 69 73 74 20 6f 66 # list of 1b640 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 those known to 1b650 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 the Eagle interp 1b660 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d reter... #. 1b670 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e . object in 1b680 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1b690 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 Public Interpret 1b6a0 65 72 2e 47 65 74 41 63 74 69 76 65 2e 74 72 61 er.GetActive.tra 1b6b0 6e 73 61 63 74 69 6f 6e 73 20 5c 0d 0a 20 20 20 nsactions \.. 1b6c0 20 20 20 20 20 20 20 52 65 6d 6f 76 65 20 24 74 Remove$t
1b6d0 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20  ransaction..
1b6e0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
1b6f0 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 61 54 61  etRowsFromDataTa
1b700 62 6c 65 20 7b 20 64 61 74 61 54 61 62 6c 65 20  ble { dataTable
1b710 7b 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20 22  {valueCallback "
1b720 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  "} } {..      se
1b730 74 20 72 6f 77 73 20 5b 6c 69 73 74 5d 0d 0a 20  t rows [list]..
1b740 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20 5b       set count [
1b750 24 64 61 74 61 54 61 62 6c 65 20 43 6f 6c 75 6d  $dataTable Colum 1b760 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 20 ns.Count].... 1b770 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 for {set inde 1b780 78 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 24 x 0} {$index < $1b790 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e 64 count} {incr ind 1b7a0 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 ex} {.. s 1b7b0 65 74 20 64 61 74 61 43 6f 6c 75 6d 6e 20 5b 24 et dataColumn [$
1b7c0 64 61 74 61 54 61 62 6c 65 20 2d 61 6c 69 61 73  dataTable -alias
1b7d0 20 43 6f 6c 75 6d 6e 73 2e 67 65 74 5f 49 74 65   Columns.get_Ite
1b7e0 6d 20 24 69 6e 64 65 78 5d 0d 0a 20 20 20 20 20  m $index].. 1b7f0 20 20 20 73 65 74 20 6e 61 6d 65 73 28 24 69 6e set names($in
1b800 64 65 78 29 20 5b 24 64 61 74 61 43 6f 6c 75 6d  dex) [$dataColum 1b810 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a 20 n ColumnName].. 1b820 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1b830 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1b840 20 53 65 74 75 70 20 73 6f 6d 65 20 54 63 6c 20 Setup some Tcl 1b850 72 65 74 75 72 6e 20 63 6f 64 65 20 63 6f 6e 73 return code cons 1b860 74 61 6e 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d tants... #. 1b870 0a 20 20 20 20 20 20 73 65 74 20 4f 6b 20 30 3b . set Ok 0; 1b880 20 73 65 74 20 45 72 72 6f 72 20 31 3b 20 73 65 set Error 1; se 1b890 74 20 52 65 74 75 72 6e 20 32 3b 20 73 65 74 20 t Return 2; set 1b8a0 42 72 65 61 6b 20 33 3b 20 73 65 74 20 43 6f 6e Break 3; set Con 1b8b0 74 69 6e 75 65 20 34 0d 0a 0d 0a 20 20 20 20 20 tinue 4.... 1b8c0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 object foreach 1b8d0 2d 61 6c 69 61 73 20 64 61 74 61 52 6f 77 20 5b -alias dataRow [ 1b8e0 73 65 74 20 64 61 74 61 52 6f 77 73 20 5b 24 64 set dataRows [$d
1b8f0 61 74 61 54 61 62 6c 65 20 52 6f 77 73 5d 5d 20  ataTable Rows]]
1b900 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 72  {..        set r
1b910 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  ow [list]....
1b920 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e       for {set in
1b930 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c  dex 0} {$index < 1b940 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69$count} {incr i
1b950 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20  ndex} {..
1b960 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 24 64     set value [$d 1b970 61 74 61 52 6f 77 20 2d 63 72 65 61 74 65 20 2d ataRow -create - 1b980 61 6c 69 61 73 20 67 65 74 5f 49 74 65 6d 20 24 alias get_Item$
1b990 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20 20 20 20  index]....
1b9a0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
1b9b0 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 43 61 6c  length $valueCal 1b9c0 6c 62 61 63 6b 5d 20 3e 20 30 7d 20 74 68 65 6e lback] > 0} then 1b9d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1b9e0 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20 set code [catch 1b9f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ba00 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20$valueCallback
1ba10 24 64 61 74 61 54 61 62 6c 65 20 24 64 61 74 61  $dataTable$data
1ba20 52 6f 77 20 24 69 6e 64 65 78 20 24 76 61 6c 75  Row $index$valu
1ba30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
1ba40 20 6e 65 77 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20   newValue]....
1ba50 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 63            if {$c 1ba60 6f 64 65 20 3d 3d 20 24 4f 6b 7d 20 74 68 65 6e ode ==$Ok} then
1ba70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ba80 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1ba90 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
1baa0 68 65 20 73 70 65 63 69 66 69 65 64 20 28 6e 65  he specified (ne
1bab0 77 3f 29 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a  w?) row value...
1bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1bad0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c  .              l
1bae0 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74  append row [list
1baf0 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20   $names($index)
1bb00 24 6e 65 77 56 61 6c 75 65 5d 0d 0a 20 20 20 20  $newValue].. 1bb10 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 } elseif 1bb20 20 7b 24 63 6f 64 65 20 3d 3d 20 24 45 72 72 6f {$code == $Erro 1bb30 72 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 r} then {.. 1bb40 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1bb50 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1bb60 3a 20 55 73 65 20 74 68 65 20 28 6e 65 77 3f 29 : Use the (new?) 1bb70 20 4e 55 4c 4c 20 72 6f 77 20 76 61 6c 75 65 2e NULL row value. 1bb80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bb90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1bba0 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 lappend row [li 1bbb0 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 st$names($index 1bbc0 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 )].. 1bbd0 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 20 } elseif {$code
1bbe0 3d 3d 20 24 52 65 74 75 72 6e 7d 20 74 68 65 6e  == $Return} then 1bbf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1bc00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1bc10 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 1bc20 72 65 6d 61 69 6e 69 6e 67 20 76 61 6c 75 65 73 remaining values 1bc30 20 66 6f 72 20 74 68 69 73 20 72 6f 77 2e 0d 0a for this row... 1bc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1bc50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 . b 1bc60 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 reak.. 1bc70 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 } elseif {$cod
1bc80 65 20 3d 3d 20 24 42 72 65 61 6b 7d 20 74 68 65  e == $Break} the 1bc90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1bca0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1bcb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 1bcc0 20 70 72 6f 63 65 73 73 69 6e 67 20 74 68 69 73 processing this 1bcd0 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 row value... 1bce0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1bcf0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1bd00 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 6f if {$code == $Co 1bd10 6e 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d 0a ntinue} then {.. 1bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 1bd30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1bd40 20 4e 4f 54 45 3a 20 55 73 65 20 64 65 66 61 75 NOTE: Use defau 1bd50 6c 74 20 72 6f 77 20 76 61 6c 75 65 20 68 61 6e lt row value han 1bd60 64 6c 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 dling... 1bd70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1bd80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1bd90 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1bda0 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 set code 1bdb0 20 24 43 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20$Continue..
1bdc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1bdd0 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20 3d       if {$code = 1bde0 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 65 =$Continue} the
1bdf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1be00 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
1be10 67 74 68 20 24 76 61 6c 75 65 5d 20 3e 20 30 20  gth $value] > 0 1be20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1be30 20 20 20 20 20 20 21 5b 6f 62 6a 65 63 74 20 69 ![object i 1be40 6e 76 6f 6b 65 20 43 6f 6e 76 65 72 74 20 49 73 nvoke Convert Is 1be50 44 42 4e 75 6c 6c 20 24 76 61 6c 75 65 5d 7d 20 DBNull$value]}
1be60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1be70 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f        lappend ro
1be80 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28 24  w [list $names($
1be90 69 6e 64 65 78 29 20 5b 24 76 61 6c 75 65 20 54  index) [$value T 1bea0 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 20 20 20 20 oString]].. 1beb0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1bec0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c . l 1bed0 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74 append row [list 1bee0 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d$names($index)] 1bef0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1bf00 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1bf10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1bf20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 20 lappend rows 1bf30 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d$row..      }...
1bf40 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72  .      return $r 1bf50 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ows.. }..... 1bf60 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 73 proc dumpRows 1bf70 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 FromDataTable { 1bf80 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 7b channel rows } { 1bf90 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 75 .. set sequ 1bfa0 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 20 ence 1.... 1bfb0 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f 77 foreach row$row
1bfc0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  s {..        tpu
1bfd0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 1bfe0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 1bff0 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 73 [expr {$s
1c000 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22 5c  equence > 1 ? "\
1c010 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d 20  n" : ""}] "----
1c020 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63 65  ROW #" $sequence 1c030 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 :\n].... 1c040 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 72 foreach pair$r
1c050 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ow {..
1c060 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 61  if {[llength $pa 1c070 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 7b ir] >= 2} then { 1c080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 1c090 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
1c0a0 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a 20  pendArgs \t \..
1c0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
1c0c0 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61  list [lindex $pa 1c0d0 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 73 ir 0]] ": " [lis 1c0e0 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 20 t [lindex$pair
1c0f0 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  1]] \n]..
1c100 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c 6c     } elseif {[ll
1c110 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d 20  ength $pair] == 1c120 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 1} then {.. 1c130 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1c140 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1c150 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  s \t \..
1c160 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c          [list [l
1c170 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20  index $pair 0]] 1c180 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a 20 ": <null>\n"].. 1c190 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 } else 1c1a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1c1b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 74 puts$channel \t
1c1c0 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f 54  <empty>\n; # NOT
1c1d0 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20 20  E: No data?..
1c1e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1c1f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
1c200 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20 20  ncr sequence..
1c210 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
1c220 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75  .    proc cleanu
1c230 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b  pDb { fileName {
1c240 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f 6c  varName db} {col
1c250 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 6c  lect true} {qual
1c260 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 20  ify true}..
1c270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c280 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d 20  {delete true} }
1c290 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1c2a0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
1c2b0 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70  t to force all p
1c2c0 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22  ending "garbage"
1c2d0 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63   objects to be c
1c2e0 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20  ollected,..
1c2f0 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69   #       includi
1c300 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d  ng SQLite statem
1c310 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20  ents and backup
1c320 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68  objects; this sh
1c330 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20  ould allow..
1c340 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e    #       the un
1c350 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73  derlying databas
1c360 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c  e file to be del
1c370 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  eted...      #..
1c380 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65        if {$colle 1c390 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ct} then {.. 1c3a0 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 collectGarba 1c3b0 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ge$::test_chann
1c3c0 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  el..      }....
1c3d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1c3e0 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
1c3f0 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
1c400 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
1c410 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
1c420 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
1c430 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
1c440 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68  The handle to th
1c450 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69  e database previ
1c460 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61  ously opened via
1c470 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
1c480 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72      [setupDb] pr
1c490 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62  ocedure should b
1c4a0 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d  e stored there..
1c4b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1c4c0 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName 1c4d0 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a db.... #.. 1c4e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6c # NOTE: Cl 1c4f0 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ose the connecti 1c500 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 on to the databa 1c510 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 68 se now. This sh 1c520 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a 20 ould allow us.. 1c530 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 # to 1c540 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 72 delete the under 1c550 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 lying database f 1c560 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ile... #.. 1c570 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 1c580 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 61 xists db] && [ca 1c590 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 tch {sql close$
1c5a0 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e  db} error]} then
1c5b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
1c5c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57         # NOTE: W
1c5d0 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64  e somehow failed
1c5e0 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 61   to close the da
1c5f0 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 77  tabase, report w
1c600 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  hy...        #..
1c610 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1c620 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1c630 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1c640 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1c650 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1c660 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 65 o close database 1c670 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 72 \""$db "\", er
1c680 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
1c690 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 6f        \n\t $erro 1c6a0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a r \n].. }.. 1c6b0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1c6c0 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 # NOTE: First, 1c6d0 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 see if our calle 1c6e0 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 20 r has requested 1c6f0 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 an in-memory dat 1c700 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. 1c710 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d . set isMem 1c720 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 ory [isMemoryDb 1c730 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20$fileName]....
1c740 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1c750 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66  OTE: Build the f
1c760 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 20  ull path to the
1c770 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
1c780 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 6c  me.  For now, al
1c790 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 20  l test..      #
1c7a0 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 66        database f
1c7b0 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 20  iles are stored
1c7c0 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  in the temporary
1c7d0 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...
1c7e0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1c7f0 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71  !$isMemory &&$q
1c800 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a  ualify} then {..
1c810 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
1c820 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join
1c830 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65  [getDatabaseDire
1c840 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69  ctory] [file tai
1c850 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20  l $fileName]].. 1c860 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1c870 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1c880 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 69 Check if the fi 1c890 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 3b le still exists; 1c8a0 20 69 6e 69 74 69 61 6c 6c 79 2c 20 61 73 73 75 initially, assu 1c8b0 6d 65 20 61 6c 6c 20 66 69 6c 65 73 20 77 69 6c me all files wil 1c8c0 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 l.. # 1c8d0 20 62 65 20 64 65 6c 65 74 65 64 20 73 75 63 63 be deleted succ 1c8e0 65 73 73 66 75 6c 6c 79 2c 20 69 66 20 6e 65 63 essfully, if nec 1c8f0 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 essary... # 1c900 0d 0a 20 20 20 20 20 20 73 65 74 20 73 75 63 63 .. set succ 1c910 65 73 73 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 ess true.... 1c920 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 if {!$isMemory
1c930 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b   && $delete && [ 1c940 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
1c950 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
1c960 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1c970 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
1c980 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73  deleting databas
1c990 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62  e files if someb
1c9a0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f  ody sets the glo
1c9b0 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20  bal..        #
1c9c0 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f       variable to
1c9d0 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20   prevent it...
1c9e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c9f0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1ca00 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44  ts ::no(cleanupD
1ca10 62 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b  bFiles)]} then {
1ca20 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
1ca30 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1ca40 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65   Attempt to dele
1ca50 74 65 20 74 68 65 20 74 65 73 74 20 57 41 4c 20  te the test WAL
1ca60 66 69 6c 65 2c 20 69 66 20 61 6e 79 2c 20 6e 6f  file, if any, no
1ca70 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  w...          #.
1ca80 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 77  .          set w
1ca90 61 6c 46 69 6c 65 4e 61 6d 65 20 5b 61 70 70 65  alFileName [appe
1caa0 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61 6d 65  ndArgs $fileName 1cab0 20 2d 77 61 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20 -wal].... 1cac0 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 1cad0 69 73 74 73 20 24 77 61 6c 46 69 6c 65 4e 61 6d ists$walFileNam
1cae0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
1caf0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1cb00 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
1cb10 66 20 74 68 65 72 65 20 69 73 20 61 20 57 41 4c  f there is a WAL
1cb20 20 66 69 6c 65 2c 20 69 74 20 73 68 6f 75 6c 64   file, it should
1cb30 20 62 65 20 7a 65 72 6f 20 62 79 74 65 73 20 61   be zero bytes a
1cb40 74 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20  t this..
1cb50 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69 6e      #       poin
1cb60 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...
1cb70 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  #..            i
1cb80 66 20 7b 5b 73 65 74 20 73 69 7a 65 20 5b 66 69  f {[set size [fi
1cb90 6c 65 20 73 69 7a 65 20 24 77 61 6c 46 69 6c 65  le size $walFile 1cba0 4e 61 6d 65 5d 5d 20 3d 3d 20 30 7d 20 74 68 65 Name]] == 0} the 1cbb0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1cbc0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1cbd0 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 1cbe0 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 1cbf0 20 64 65 6c 65 74 65 20 74 68 65 20 57 41 4c 20 delete the WAL 1cc00 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 file, report why 1cc10 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 1cc20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1cc30 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi 1cc40 6c 65 20 64 65 6c 65 74 65 20 24 77 61 6c 46 69 le delete$walFi
1cc50 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20  leName} error]}
1cc60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1cc70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1cc80 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1cc90 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ccb0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1ccc0 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 1ccd0 20 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 24 77 WAL file \""$w
1cce0 61 6c 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20  alFileName \..
1ccf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cd00 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
1cd10 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  anup, error: " \
1cd20 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 1cd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cd40 20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 61 set success fa 1cd50 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. 1cd60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1cd70 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1cd80 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1cd90 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1cda0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1cdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cdc0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1cdd0 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 24 77 61  WAL file \"" $wa 1cde0 6c 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 69 73 lFileName "\" is 1cdf0 20 22 20 24 73 69 7a 65 20 5c 0d 0a 20 20 20 20 "$size \..
1ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                "
1ce10 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2c 20 73  bytes in size, s
1ce20 6b 69 70 70 69 6e 67 20 61 6c 6c 20 66 69 6c 65  kipping all file
1ce30 20 64 65 6c 65 74 69 6f 6e 73 2e 2e 2e 5c 6e 22   deletions...\n"
1ce40 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
1ce50 20 20 20 72 65 74 75 72 6e 20 31 3b 20 23 20 65     return 1; # e
1ce60 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20 20  rror..
1ce70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
1ce80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
1ce90 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1cea0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65  E: Attempt to de
1ceb0 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 53 48  lete the test SH
1cec0 4d 20 66 69 6c 65 2c 20 69 66 20 61 6e 79 2c 20  M file, if any,
1ced0 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  now...
1cee0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
1cef0 20 73 68 6d 46 69 6c 65 4e 61 6d 65 20 5b 61 70   shmFileName [ap
1cf00 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61  pendArgs $fileNa 1cf10 6d 65 20 2d 73 68 6d 5d 0d 0a 0d 0a 20 20 20 20 me -shm].... 1cf20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 1cf30 65 78 69 73 74 73 20 24 73 68 6d 46 69 6c 65 4e exists$shmFileN
1cf40 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ame] && \..
1cf50 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20           [catch
1cf60 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 73 68  {file delete $sh 1cf70 6d 46 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 mFileName} error 1cf80 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1cf90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1cfa0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 1cfb0 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed 1cfc0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 53 48 to delete the SH 1cfd0 4d 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 M file, report w 1cfe0 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 hy... 1cff0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1d000 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1d010 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1d020 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1d030 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1d040 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65  NG: failed to de
1d050 6c 65 74 65 20 53 48 4d 20 66 69 6c 65 20 5c 22  lete SHM file \"
1d060 22 20 24 73 68 6d 46 69 6c 65 4e 61 6d 65 20 5c  " $shmFileName \ 1d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d080 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 1d090 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c anup, error: " \ 1d0a0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
1d0b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
1d0c0 74 20 73 75 63 63 65 73 73 20 66 61 6c 73 65 0d  t success false.
1d0d0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1d0e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1d0f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
1d100 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65  ttempt to delete
1d110 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 61   the test databa
1d120 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20  se file now...
1d130 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
1d140 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
1d150 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69  {file delete $fi 1d160 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 leName} error]} 1d170 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d180 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1d190 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f # NOTE: We so 1d1a0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 mehow failed to 1d1b0 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c delete the file, 1d1c0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 1d1d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1d1e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1d1f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1d200 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1d210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1d220 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1d230 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61  led to delete da
1d240 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20  tabase file \""
1d250 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 1d260 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 1d270 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c during cleanup, 1d280 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
1d290 65 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  error \n]....
1d2a0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 75 63           set suc
1d2b0 63 65 73 73 20 66 61 6c 73 65 0d 0a 20 20 20 20  cess false..
1d2c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1d2d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1d2e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1d2f0 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74    # NOTE: Show t
1d300 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64  hat we skipped d
1d310 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65  eleting the file
1d320 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1d330 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d340 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1d350 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1d360 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 1d370 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 == WARNING: skip 1d380 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61 74 ped deleting dat 1d390 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
1d3a0 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
1d3b0 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
1d3c0 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 5d  ring cleanup\n"]
1d3d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1d3e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
1d3f0 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 73 75 63  turn [expr {$suc 1d400 63 65 73 73 20 3f 20 30 20 3a 20 31 7d 5d 0d 0a cess ? 0 : 1}].. 1d410 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1d420 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 oc saveEnvironme 1d430 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 ntVariables { na 1d440 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d mes {varName ""} 1d450 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 1d460 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 1d470 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 each name, does 1d480 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f the live enviro 1d490 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65 nment variable e 1d4a0 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20 xist? If.. 1d4b0 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61 76 # so, sav 1d4c0 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 20 e the value for 1d4d0 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73 65 later; otherwise 1d4e0 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 , make sure the 1d4f0 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20 20 saved.. # 1d500 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73 20 value does 1d510 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 72 not exist either 1d520 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76 69 . The live envi 1d530 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 1d540 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 1d550 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65 64 ARE NOT changed 1d560 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64 75 by this procedu 1d570 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 re... #.. 1d580 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 1d590 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d length$varName]
1d5a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
1d5b0 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e 61         set varNa
1d5c0 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  me savedEnv..
1d5d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70     }....      up
1d5e0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 73  var 1 $varName s 1d5f0 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 avedEnv.... 1d600 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e foreach name$n
1d610 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
1d620 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
1d630 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d 20   ::env($name)]} 1d640 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d650 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 28 24 set savedEnv($
1d660 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e 61  name) $::env($na
1d670 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20 65  me)..        } e
1d680 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
1d690 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1d6a0 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d  in savedEnv($nam 1d6b0 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 e).. }.. 1d6c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1d6d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1d6e0 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 6c This is self-cl 1d6f0 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 73 eaning. If no s 1d700 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 aved environment 1d710 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d 0a variables now.. 1d720 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 1d730 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 ist, remove the 1d740 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d array... #. 1d750 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 61 . if {[arra 1d760 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 5d y size savedEnv] 1d770 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1d780 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 1d790 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e complain savedEn 1d7a0 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 v.. }.. 1d7b0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 1d7c0 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e estoreEnvironmen 1d7d0 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 6d tVariables { nam 1d7e0 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 es {varName ""} 1d7f0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 1d800 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 # NOTE: For 1d810 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 20 each name, does 1d820 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 72 6f the saved enviro 1d830 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 65 nment variable e 1d840 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 20 xist? If.. 1d850 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65 73 # so, res 1d860 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20 76 tore the saved v 1d870 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20 69 alue and unset i 1d880 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 t; otherwise, ma 1d890 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20 23 ke sure.. # 1d8a0 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 65 20 the live 1d8b0 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 environment vari 1d8c0 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 able does not ex 1d8d0 69 73 74 20 65 69 74 68 65 72 20 28 69 2e 65 2e ist either (i.e. 1d8e0 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 it.. # 1d8f0 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20 74 was not set t 1d900 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20 20 o begin with). 1d910 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20 6c Both saved and l 1d920 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 0d ive environment. 1d930 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 1d940 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 68 61 ariables ARE cha 1d950 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 6f nged by this pro 1d960 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 cedure... # 1d970 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 1d980 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e ing length$varN
1d990 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ame] == 0} then
1d9a0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 76  {..        set v
1d9b0 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 0d  arName savedEnv.
1d9c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1d9d0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 1d9e0 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 me savedEnv.... 1d9f0 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d foreach nam 1da00 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 e$names {..
1da10 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
1da20 69 73 74 73 20 73 61 76 65 64 45 6e 76 28 24 6e  ists savedEnv($n 1da30 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ame)]} then {.. 1da40 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 65 set ::e 1da50 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65 64 nv($name) $saved 1da60 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 Env($name)..
1da70 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63        unset -noc
1da80 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e 76  omplain savedEnv
1da90 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20 20  ($name).. 1daa0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 1dab0 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 1dac0 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e 61 mplain ::env($na
1dad0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  me)..        }..
1dae0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1daf0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1db00 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63  : This is self-c
1db10 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20  leaning.  If no
1db20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e  saved environmen
1db30 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d  t variables now.
1db40 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65  .      #       e
1db50 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65  xist, remove the
1db60 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23   array...      #
1db70 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72  ..      if {[arr
1db80 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76  ay size savedEnv
1db90 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1dba0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1dbb0 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45  ocomplain savedE
1dbc0 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  nv..      }..
1dbd0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1dbe0 73 61 76 65 45 61 67 6c 65 53 68 65 6c 6c 45 6e  saveEagleShellEn
1dbf0 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a  vironment {} {..
1dc00 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73 61        upvar 1 sa
1dc10 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d  vedEnv savedEnv.
1dc20 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76  ...      saveEnv
1dc30 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65  ironmentVariable
1dc40 73 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 65 78 65  s [list NoMutexe
1dc50 73 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  s] savedEnv..
1dc60 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1dc70 72 65 73 74 6f 72 65 45 61 67 6c 65 53 68 65 6c  restoreEagleShel
1dc80 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20  lEnvironment {}
1dc90 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
1dca0 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45   savedEnv savedE
1dcb0 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74  nv....      rest
1dcc0 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  oreEnvironmentVa
1dcd0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 4e 6f  riables [list No
1dce0 4d 75 74 65 78 65 73 5d 20 73 61 76 65 64 45 6e  Mutexes] savedEn
1dcf0 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  v..    }.....
1dd00 20 70 72 6f 63 20 73 61 76 65 4d 64 61 43 6f 6e   proc saveMdaCon
1dd10 66 69 67 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b  figEnvironment {
1dd20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
1dd30 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65   1 savedEnv save
1dd40 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61  dEnv....      sa
1dd50 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  veEnvironmentVar
1dd60 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43 4f 4d  iables [list COM
1dd70 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65 64 45  PLUS_MDA] savedE
1dd80 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  nv..    }.....
1dd90 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 4d 64    proc restoreMd
1dda0 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e 6d 65  aConfigEnvironme
1ddb0 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75  nt {} {..      u
1ddc0 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20  pvar 1 savedEnv
1ddd0 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
1dde0 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e    restoreEnviron
1ddf0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c  mentVariables [l
1de00 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44 41 5d  ist COMPLUS_MDA]
1de10 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d   savedEnv..    }
1de20 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61  .....    proc sa
1de30 76 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75  veGetSettingValu
1de40 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20  eEnvironment {}
1de50 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  {..      upvar 1
1de60 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45   savedEnv savedE
1de70 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65  nv....      save
1de80 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
1de90 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  bles [list \..
1dea0 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 70 61 6e          No_Expan
1deb0 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53 65  d No_SQLiteGetSe
1dec0 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53 51  ttingValue No_SQ
1ded0 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69 6c  LiteXmlConfigFil
1dee0 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e] \..
1def0 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d  savedEnv..    }.
1df00 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73  ....    proc res
1df10 74 6f 72 65 47 65 74 53 65 74 74 69 6e 67 56 61  toreGetSettingVa
1df20 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b  lueEnvironment {
1df30 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
1df40 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65   1 savedEnv save
1df50 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65  dEnv....      re
1df60 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74  storeEnvironment
1df70 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20  Variables [list
1df80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f 5f  \..          No_
1df90 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74 65  Expand No_SQLite
1dfa0 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 20  GetSettingValue
1dfb0 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e 66  No_SQLiteXmlConf
1dfc0 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20 20  igFile] \..
1dfd0 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20       savedEnv..
1dfe0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1dff0 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e 6e  c saveSQLiteConn
1e000 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e  ectionEnvironmen
1e010 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70  t {} {..      up
1e020 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20 73  var 1 savedEnv s
1e030 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20  avedEnv....
1e040 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74   saveEnvironment
1e050 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20  Variables [list
1e060 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 66  \..          Def
1e070 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65  aultFlags_SQLite
1e080 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51  Connection No_SQ
1e090 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65  LiteConnectionNe
1e0a0 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20  wParser] \..
1e0b0 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a        savedEnv..
1e0c0 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
1e0d0 73 61 76 65 64 43 6f 6e 6e 65 63 74 69 6f 6e 46  savedConnectionF
1e0e0 6c 61 67 73 20 73 61 76 65 64 43 6f 6e 6e 65 63  lags savedConnec
1e0f0 74 69 6f 6e 46 6c 61 67 73 0d 0a 0d 0a 20 20 20  tionFlags....
1e100 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1e110 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e  sts ::connection
1e120 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d  _flags]} then {.
1e130 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 61 76  .        set sav
1e140 65 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  edConnectionFlag
1e150 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  s $::connection_ 1e160 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 7d 20 65 flags.. } e 1e170 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 lse {.. u 1e180 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e nset -nocomplain 1e190 20 73 61 76 65 64 43 6f 6e 6e 65 63 74 69 6f 6e savedConnection 1e1a0 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 7d 0d 0a Flags.. }.. 1e1b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1e1c0 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 65 oc restoreSQLite 1e1d0 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f ConnectionEnviro 1e1e0 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 nment {} {.. 1e1f0 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45 upvar 1 savedE 1e200 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 nv savedEnv.... 1e210 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 restoreEnvi 1e220 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 ronmentVariables 1e230 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 1e240 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 73 DefaultFlags 1e250 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f _SQLiteConnectio 1e260 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 n No_SQLiteConne 1e270 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d 20 ctionNewParser] 1e280 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 \.. sav 1e290 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 75 edEnv.... u 1e2a0 70 76 61 72 20 31 20 73 61 76 65 64 43 6f 6e 6e pvar 1 savedConn 1e2b0 65 63 74 69 6f 6e 46 6c 61 67 73 20 73 61 76 65 ectionFlags save 1e2c0 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 dConnectionFlags 1e2d0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 .... if {[i 1e2e0 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76 65 64 nfo exists saved 1e2f0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 5d ConnectionFlags] 1e300 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e310 20 20 73 65 74 20 3a 3a 63 6f 6e 6e 65 63 74 69 set ::connecti 1e320 6f 6e 5f 66 6c 61 67 73 20 24 73 61 76 65 64 43 on_flags$savedC
1e330 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 0d 0a  onnectionFlags..
1e340 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1e350 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 43  ocomplain savedC
1e360 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 0d 0a  onnectionFlags..
1e370 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1e380 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e          unset -n
1e390 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 63 6f 6e 6e  ocomplain ::conn
1e3a0 65 63 74 69 6f 6e 5f 66 6c 61 67 73 0d 0a 20 20  ection_flags..
1e3b0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
1e3c0 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53 51  .    proc saveSQ
1e3d0 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69 72  LiteConvertEnvir
1e3e0 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20  onment {} {..
1e3f0 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64     upvar 1 saved
1e400 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a  Env savedEnv....
1e410 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f        saveEnviro
1e420 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b  nmentVariables [
1e430 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
1e440 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76    Use_SQLiteConv
1e450 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79 70  ert_DefaultDbTyp
1e460 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e 76  e Use_SQLiteConv
1e470 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65 4e  ert_DefaultTypeN
1e480 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  ame] \..
1e490 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20    savedEnv..
1e4a0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
1e4b0 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e 76  estoreSQLiteConv
1e4c0 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b  ertEnvironment {
1e4d0 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72  } {..      upvar
1e4e0 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65   1 savedEnv save
1e4f0 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65  dEnv....      re
1e500 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74  storeEnvironment
1e510 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20  Variables [list
1e520 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55 73 65  \..          Use
1e530 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44  _SQLiteConvert_D
1e540 65 66 61 75 6c 74 44 62 54 79 70 65 20 55 73 65  efaultDbType Use
1e550 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44  _SQLiteConvert_D
1e560 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20  efaultTypeName]
1e570 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 76  \..          sav
1e580 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  edEnv..    }....
1e590 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44  .    proc setupD
1e5a0 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61  bInterruptCallba
1e5b0 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f 67  ck { channel log
1e5c0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
1e5d0 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- 1e5e0 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 75 setting up debu 1e5f0 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 63 gger interrupt c 1e600 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a allback... ".... 1e610 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1e620 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 76 65 {.. save 1e630 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 EnvironmentVaria 1e640 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 bles [list \.. 1e650 20 20 20 20 20 20 20 20 20 20 71 75 69 65 74 46 quietF 1e660 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54 65 indInterpreterTe 1e670 73 74 50 61 74 68 20 71 75 69 65 74 53 65 74 75 stPath quietSetu 1e680 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 pInterpreterTest 1e690 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 Path].... 1e6a0 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 try {.. 1e6b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1e6c0 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 20 74 NOTE: Prevent t 1e6d0 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 70 74 he vendor script 1e6e0 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f 69 73 from being nois 1e6f0 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 0d y when creating. 1e700 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 1e710 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 the isolated 1e720 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 1e730 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e740 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 set ::env(q 1e750 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 uietFindInterpre 1e760 74 65 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a terTestPath) 1.. 1e770 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 1e780 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 49 6e env(quietSetupIn 1e790 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 terpreterTestPat 1e7a0 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 h) 1.... 1e7b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1e7c0 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 NOTE: Make sure 1e7d0 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 the script debu 1e7e0 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 6f gger and the iso 1e7f0 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete 1e800 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 r.. # 1e810 20 20 20 20 20 61 72 65 20 73 65 74 75 70 20 61 are setup a 1e820 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 nd ready for use 1e830 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1e840 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 debug 1e850 73 65 74 75 70 20 74 72 75 65 20 74 72 75 65 0d setup true true. 1e860 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1e870 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1e880 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 73 : Load the neces 1e890 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 6e sary packages in 1e8a0 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 to the isolated 1e8b0 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 interpreter... 1e8c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1e8d0 20 20 20 20 20 64 65 62 75 67 20 65 76 61 6c 20 debug eval 1e8e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 {.. p 1e8f0 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 ackage require E 1e900 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 agle.. 1e910 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 package requir 1e920 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 0d e Eagle.Library. 1e930 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 63 . pac 1e940 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67 kage require Eag 1e950 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20 le.Test.. 1e960 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1e970 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1e980 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20 NOTE: Copy the 1e990 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61 62 necessary variab 1e9a0 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f les into the iso 1e9b0 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete 1e9c0 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. 1e9d0 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 1e9e0 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a invoke 0 set :: 1e9f0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 68 test_channel$ch
1ea00 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20 46  annel; # NOTE: F
1ea10 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20 20  or [tputs]...
1ea20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e 76         debug inv
1ea30 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73 74  oke 0 set ::test
1ea40 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f 54  _log $log; # NOT 1ea50 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d 0a E: For [tlog]... 1ea60 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1ea70 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1ea80 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c Install the cal 1ea90 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20 lback script to 1eaa0 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 be evaluated in 1eab0 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20 the isolated.. 1eac0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1ead0 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 6e interpreter when 1eae0 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 this interprete 1eaf0 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 r is interrupted 1eb00 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 by script.. 1eb10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 # ca 1eb20 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 2e ncellation, etc. 1eb30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1eb40 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 63 debug c 1eb50 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b 7b allback apply {{ 1eb60 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 20 sender e} {.. 1eb70 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1eb80 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1eb90 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 64 65 Check if this de 1eba0 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 6b 20 bugger callback 1ebb0 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20 63 is one that we c 1ebc0 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 are about... 1ebd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1ebe0 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 65 72 set inter 1ebf0 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c 69 74 ruptTypes [split 1ec00 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 79 [$e InterruptTy
1ec10 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 20 20  pe] ", "]....
1ec20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 43 61           if {"Ca
1ec30 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e 74 65  nceled" in $inte 1ec40 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 5c 0d rruptTypes || \. 1ec50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1ec60 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 24 69 "Unwound" in$i
1ec70 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d 20 74  nterruptTypes} t
1ec80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ec90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1eca0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61        # NOTE: Ma
1ecb0 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f 62 6a  ke sure the [obj
1ecc0 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ect] command is
1ecd0 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e 63  available.  Sinc
1ece0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
1ecf0 20 23 20 20 20 20 20 20 20 74 68 69 73 20 69 73   #       this is
1ed00 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e 74   an isolated int
1ed10 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 6b 20  erpreter, check
1ed20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 64 0d  for it the hard.
1ed30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
1ed40 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 20 20         way...
1ed50 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1ed60 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1ed70 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63  [llength [info c
1ed80 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d  ommands object]]
1ed90 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
1eda0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1edb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1edc0 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74 65   # NOTE: Iterate
1edd0 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61 74   through all dat
1ede0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
1edf0 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d 0a  s known to the..
1ee00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ee10 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 69  #       parent i
1ee20 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
1ee30 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
1ee40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ee50 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d  object foreach -
1ee60 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 6a 65  alias pair [obje
1ee70 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
1ee80 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
1ee90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1eea0 20 20 20 24 65 20 49 6e 74 65 72 70 72 65 74 65     $e Interprete 1eeb0 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 7b r.connections] { 1eec0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1eed0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1eee0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1eef0 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e 63 Attempt to canc 1ef00 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 69 el any SQL queri 1ef10 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 6f es in progress o 1ef20 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 n.. 1ef30 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 # thi 1ef40 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 s database conne 1ef50 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 ction... 1ef60 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1ef70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 i 1ef80 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 f {[catch {$pair
1ef90 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65   Value.Cancel} e
1efa0 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  rror]} then {..
1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1efc0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1efd0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1efe0 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 Args \n \.. 1eff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f000 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 1f010 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e 63 : failed to canc 1f020 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 20 5c el query for " \ 1f030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1f040 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e 65 "conne 1f050 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69 72 ction \"" [$pair
1f060 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72   Key] "\", error
1f070 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20  : " \n\t \..
1f080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f090 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a      $error \n].. 1f0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f0b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 1f0c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f0d0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f0f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1f100 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1f110 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  s \n \..
1f120 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
1f130 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e 6f  = WARNING: canno
1f140 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75 65  t cancel any que
1f150 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20  ries: " \..
1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1f170 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63  the \"object\" c
1f180 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61 76  ommand is not av
1f190 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20 20  ailable\n"]..
1f1a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1f1b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1f1c0 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20 20         }}..
1f1d0 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a     } finally {..
1f1e0 20 20 20 20 20 20 20 20 20 20 72 65 73 74 6f 72            restor
1f1f0 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
1f200 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  ables [list \..
1f210 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75 69               qui
1f220 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65  etFindInterprete
1f230 72 54 65 73 74 50 61 74 68 20 71 75 69 65 74 53  rTestPath quietS
1f240 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 54  etupInterpreterT
1f250 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 20 20  estPath]..
1f260 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72 72    }..      } err
1f270 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  or] == 0} then {
1f280 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
1f290 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75 70  straint interrup
1f2a0 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74 65  tCallback.sqlite
1f2b0 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  3....        tpu
1f2c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c  ts $channel yes\ 1f2d0 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else 1f2e0 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 1f2f0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
1f300 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f 72  dArgs "no, error
1f310 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 1f320 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 \n].. }.. 1f330 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1f340 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 66 cleanupFile { f 1f350 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 ileName {collect 1f360 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 61 true} {force fa 1f370 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 1f380 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1f390 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 Attempt to forc 1f3a0 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 67 e all pending "g 1f3b0 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 20 arbage" objects 1f3c0 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 2c to be collected, 1f3d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1f3e0 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 65 including SQLite 1f3f0 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 20 statements and 1f400 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b 20 backup objects; 1f410 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c 6f this should allo 1f420 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 w.. # 1f430 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 the underlying 1f440 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 6f database file to 1f450 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 20 be deleted... 1f460 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1f470 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e 20 {$collect} then
1f480 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c 65  {..        colle
1f490 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 73  ctGarbage $::tes 1f4a0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 1f4b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 1f4c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1f4d0 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 73 ck if the file s 1f4e0 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 20 till exists... 1f4f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1f500 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 {[file exists$f
1f510 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
1f520 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1f530 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
1f540 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20  p deleting test
1f550 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f 64  files if somebod
1f560 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62 61  y sets the globa
1f570 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20  l variable..
1f580 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 70      #       to p
1f590 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20 20  revent it...
1f5a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
1f5b0 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b 69  f {$force || ![i 1f5c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1f5d0 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 74 cleanupFile)]} t 1f5e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1f5f0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 1f600 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 1f610 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 delete the test 1f620 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 file now... 1f630 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f640 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 65 if {[set code 1f650 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 [catch {file de 1f660 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 lete$fileName}
1f670 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d  error]]} then {.
1f680 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1f690 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1f6a0 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66  TE: We somehow f
1f6b0 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
1f6c0 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74  the file, report
1f6d0 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20   why...
1f6e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1f6f0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1f700 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 1f710 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 1f720 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 1f730 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 1f740 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c 65 delete test file 1f750 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
1f760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1f770 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65    "\" during cle
1f780 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c  anup, error: " \
1f790 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 1f7a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1f7b0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 1f7c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1f7d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 1f7e0 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 ow that we skipp 1f7f0 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 ed deleting the 1f800 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file... 1f810 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 1f820 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 t code 0.... 1f830 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
1f840 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
1f850 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
1f860 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1f870 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20  ARNING: skipped
1f880 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69  deleting test fi
1f890 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 1f8a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f8b0 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 "\" during cle 1f8c0 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 anup\n"].. 1f8d0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 1f8e0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. 1f8f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1f900 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e 6f The file does no 1f910 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 73 t exist, success 1f920 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 !.. #.. 1f930 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 set code 0 1f940 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 1f950 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 0d return$code.
1f960 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
1f970 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d 6f 72  roc cleanupMemor
1f980 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 75 69  y { varName {qui
1f990 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  et false} } {..
1f9a0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
1f9b0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
1f9c0 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  d] && \..
1f9d0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
1f9e0 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 1f9f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1fa00 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1fa10 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 TE: Refer to the 1fa20 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 specified varia 1fa30 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 ble (e.g. "conne 1fa40 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a ction") in the.. 1fa50 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1fa60 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 context of our c 1fa70 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 aller. The opaq 1fa80 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 ue object handle 1fa90 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 20 20 for an.. 1faa0 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e 45 54 # ADO.NET 1fab0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 connection prev 1fac0 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 20 iously returned 1fad0 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 by [getDbConnect 1fae0 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 ion].. # 1faf0 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 should be 1fb00 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 stored there... 1fb10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1fb20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
1fb30 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d  me connection...
1fb40 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
1fb50 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1fb60 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24   object invoke $1fb70 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65 61 connection Relea 1fb80 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 20 seMemory.. 1fb90 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 65 } result]} the 1fba0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 1fbb0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
1fbc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1fbd0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1fbe0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1fbf0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1fc00 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 1fc10 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 1fc20 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 20 6d lease database m 1fc30 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 22 20 emory, error: " 1fc40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1fc50 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
1fc60 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
1fc70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
1fc80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
1fc90 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f   {[llength [info
1fca0 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 5d   commands debug]
1fcb0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1fcc0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
1fcd0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75  h {..          u
1fce0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64  plevel 1 [list d
1fcf0 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 20 20  ebug purge]..
1fd00 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
1fd10 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fd20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 1fd30 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1fd40 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1fd50 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1fd60 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1fd70 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
1fd80 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
1fd90 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72 61 6d   purge call fram
1fda0 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
1fdb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
1fdc0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 1fdd0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1fde0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1fdf0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 1fe00 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 . uplev 1fe10 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75 67 el 1 [list debug 1fe20 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 20 20 cleanup].. 1fe30 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 } result]} th 1fe40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1fe50 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1fe60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1fe70 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1fe80 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1fe90 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1fea0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1feb0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 ING: failed to c 1fec0 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 65 74 leanup interpret 1fed0 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a er, error: " \.. 1fee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1fef0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d \n\t$result \n]
1ff00 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1ff10 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ff20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
1ff30 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c 65  ..          uple
1ff40 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75  vel 1 [list debu
1ff50 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 20 20  g collect]..
1ff60 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74      } result]} t
1ff70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ff80 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 1ff90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1ffa0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1ffb0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1ffc0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1ffd0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1ffe0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
1fff0 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 2c  collect garbage,
20000 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
20010 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c               \n\
20020 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 20030 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 20040 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 20050 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 20060 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 43 6f oc setupMemoryCo 20070 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 6d 65 unters { varName 20080 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b } {.. if { 20090 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 200a0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 200b0 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 {.. upvar 200c0 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 6e 1$varName coun
200d0 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ter....        s
200e0 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20 5b 6f  et counter(1) [o
200f0 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61 6c  bject create -al
20100 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
20110 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f     System.Diagno
20120 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e 63  stics.Performanc
20130 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73 73  eCounter Process
20140 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20150 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 5b 66  "Working Set" [f
20160 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69  ile rootname [fi
20170 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66  le tail $::bin_f 20180 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ile]]].... 20190 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 32 29 set counter(2) 201a0 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 [object create 201b0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 201c0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 System.Dia 201d0 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d gnostics.Perform 201e0 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 anceCounter Proc 201f0 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ess \.. 20200 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 20 "Working Set 20210 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f 6f 74 Peak" [file root 20220 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 name [file tail 20230 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a$::bin_file]]]..
20240 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
20250 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 63 74  unter(3) [object
20260 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c   create -alias \
20270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
20280 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73  stem.Diagnostics
20290 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e  .PerformanceCoun
202a0 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20  ter Process \..
202b0 20 20 20 20 20 20 20 20 20 20 20 22 50 72 69 76             "Priv
202c0 61 74 65 20 42 79 74 65 73 22 20 5b 66 69 6c 65  ate Bytes" [file
202d0 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20   rootname [file
202e0 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c 65  tail $::bin_file 202f0 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a ]]].. }.... 20300 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d return "". 20310 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 20320 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f 72 79 roc reportMemory 20330 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 6e 6e Counters { chann 20340 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 66 69 el varName prefi 20350 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 x } {.. if 20360 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 20370 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 20380 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 {.. upva 20390 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 r 1$varName cou
203a0 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nter....
203b0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 203c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 203d0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 203e0 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 6e "$prefix " coun
203f0 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ter \"" \..
20400 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69         [object i
20410 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31  nvoke $counter(1 20420 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 22 ) CounterName] " 20430 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c 0d \" value is " \. 20440 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f 62 . [ob 20450 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 ject invoke$cou
20460 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c 75 65  nter(1) RawValue
20470 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
20480 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 20490 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 204a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 204b0 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 "$prefix " cou
204c0 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20  nter \"" \..
204d0 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object
204e0 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28  invoke $counter( 204f0 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 2) CounterName] 20500 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c "\" value is " \ 20510 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f .. [o 20520 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f bject invoke$co
20530 75 6e 74 65 72 28 32 29 20 52 61 77 56 61 6c 75  unter(2) RawValu
20540 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  e] \n]....
20550 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 20560 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 20570 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20580 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f - "$prefix " co
20590 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20  unter \"" \..
205a0 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
205b0 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 205c0 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d (3) CounterName] 205d0 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 "\" value is " 205e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 205f0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
20600 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56 61 6c  ounter(3) RawVal
20610 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  ue] \n]..      }
20620 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
20630 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72 62  proc collectGarb
20640 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 6d  age { channel {m
20650 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30 30  illiseconds 1000
20660 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20 7d  } {quiet true} }
20670 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68   {..      if {[h
20680 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  aveSQLiteObjectC
20690 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d  ommand]} then {.
206a0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
206b0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
206c0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47   object invoke G
206d0 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79  C GetTotalMemory
206e0 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20   false..
206f0 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20  } result] == 0}
20700 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
20710 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 20720 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 20730 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
20740 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
20750 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20760 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e   "---- memory in
20770 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 20   use by the CLR
20780 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f  before collectio
20790 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20  n... " \..
207a0 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c            $resul 207b0 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 t " bytes\n"].. 207c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 207d0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 207e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
207f0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
20800 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $20810 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20820 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20830 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 20840 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 20850 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 get CLR memory u 20860 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c sage, error: " \ 20870 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 20880 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c \n\t$result \
20890 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
208a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
208b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23    }....      ###
208c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
208d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
208e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
208f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20900 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20  ######....
20910 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
20920 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74 65   Repeatedly atte
20930 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67  mpt to collect g
20940 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68 65  arbage until the
20950 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65 72   allotted number
20960 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
20970 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds
20980 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41 6c  has elapsed.  Al
20990 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f 20  ways attempt to
209a0 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 0d  collect garbage.
209b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
209c0 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a 20  t least once...
209d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
209e0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
209f0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65  ectCommand]} the
20a00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
20a10 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73 65   start [clock se
20a20 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 20  conds]..
20a30 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20 7b  set stop [expr {
20a40 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c 69  $start + ($milli
20a50 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29 7d  seconds / 1000)}
20a60 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f 20  ]....        do
20a70 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
20a80 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
20a90 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
20aa0 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61 67  ce a full garbag
20ab0 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77  e collection now
20ac0 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20  .  Report any..
20ad0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
20ae0 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20 65   error that is e
20af0 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77 65  ncountered if we
20b00 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 20   fail...
20b10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
20b20 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
20b30 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
20b40 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74  invoke GC GetTot
20b50 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a 20  alMemory true..
20b60 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72           } error
20b70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
20b80 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 20b90 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 20ba0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 20bb0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
20bc0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
20bd0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
20be0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
20bf0 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c  full garbage col
20c00 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a 20  lection, error:
20c10 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
20c20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72         \n\t $err 20c30 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 20c40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 20c50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 20c60 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 set now [clock s 20c70 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20 econds].. 20c80 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 74 } while {$start
20c90 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f 77   <= $now &&$now
20ca0 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20 20   < $stop}.. 20cb0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 23 }.... #### 20cc0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20cd0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20ce0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20cf0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20d00 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 69 #####.... i 20d10 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 f {[haveSQLiteOb 20d20 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 jectCommand]} th 20d30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if 20d40 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 20d50 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 20d60 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c 4d oke GC GetTotalM 20d70 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 20 emory false.. 20d80 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d } result] = 20d90 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 20da0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
20db0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
20dc0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 20dd0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 20de0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 20df0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f "---- memo 20e00 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 ry in use by the 20e10 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c 65 CLR after colle 20e20 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 ction... " \.. 20e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 72$r
20e40 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e 22  esult " bytes\n"
20e50 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
20e60 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
20e70 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
20e80 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 20e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 20ea0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
20eb0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
20ec0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
20ed0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
20ee0 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f   to get CLR memo
20ef0 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a  ry usage, error:
20f00 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
20f10 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 20f20 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 20f30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 20f40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 20f50 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 ... proc getS 20f60 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 QLiteHandleCount 20f70 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 s { channel {qui 20f80 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 et false} } {.. 20f90 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 20fa0 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 [list].... 20fb0 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 20fc0 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 bjectCommand] && 20fd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 \.. [h 20fe0 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 aveSQLiteDefineC 20ff0 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54 5f 48 41 onstant COUNT_HA 21000 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 NDLE]} then {.. 21010 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 21020 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 # NOTE: Add ea 21030 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 ch critical hand 21040 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 le count to the 21050 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d resulting list.. 21060 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 21070 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 foreach name 21080 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 21090 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e connection 210a0 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 Count statementC 210b0 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 ount backupCount 210c0 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b 0d 0a 20 blobCount] {.. 210d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 210e0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 210f0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 21100 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 21110 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 21120 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 21130 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 a.SQLite.DebugDa 21140 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 ta$name..
21150 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20      } value] ==
21160 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
21170 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 21180 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 21190 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 211a0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
211b0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
211c0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
211d0 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
211e0 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20  count \"" $name 211f0 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 20 "\" is "$value
21200 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
21210 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
21220 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74    lappend result
21230 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20   $value.. 21240 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 21250 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
21260 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
21270 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
21280 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 21290 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 212a0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 212b0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 212c0 64 20 74 6f 20 67 65 74 20 63 72 69 74 69 63 61 d to get critica 212d0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c l handle count \ 212e0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 212f0 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c$name "\
21300 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  ", error: " \n\t
21310 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 20   $value \n].. 21320 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 21330 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 21340 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 21350 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
21360 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
21370 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
21380 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64 6c  The actual handl
21390 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f 74  e counts are not
213a0 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65 72   available; ther
213b0 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20 20  efore, just..
213c0 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74       #       ret
213d0 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69 73  urn an empty lis
213e0 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
213f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 21400 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 74 annel "---- crit 21410 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e ical handle coun 21420 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c 6e ts unavailable\n 21430 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... 21440 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
21450 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
21460 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e 53    proc shutdownS
21470 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c 20  QLite { channel
21480 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b 71  {force false} {q
21490 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  uiet false} } {.
214a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
214b0 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72  # NOTE: Make sur
214c0 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 63 6f  e that SQLite co
214d0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 63 6f  re library is co
214e0 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f 77  mpletely shutdow
214f0 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20  n.  This..
21500 23 20 20 20 20 20 20 20 69 73 20 75 73 65 64 20  #       is used
21510 62 79 20 74 65 73 74 73 20 74 68 61 74 20 63 68  by tests that ch
21520 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74 69  ange configurati
21530 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f 6f  on options and/o
21540 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 23  r those..      #
21550 20 20 20 20 20 20 20 74 68 61 74 20 6e 65 65 64         that need
21560 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c 6f   to make sure lo
21570 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61 6c  gging is initial
21580 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74 20  ized (i.e. just
21590 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20 23  in case..      #
215a0 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74         the SQLit
215b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77  e core library w
215c0 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69  as initialized i
215d0 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 70 72  n the process pr
215e0 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23 20  ior to..      #
215f0 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74 65        the SQLite
21600 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67 20  Log class being
21610 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69 74  able to setup it
21620 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61  s logging callba
21630 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20  ck)...      #
21640 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68      Normally, th
21650 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20 62  is should only b
21660 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53  e performed if S
21670 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20  QLite is loaded
21680 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  and..      #
21690 20 20 20 72 65 61 64 79 20 66 6f 72 20 75 73 65     ready for use
216a0 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
216b0 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
216c0 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20 7c      if {$force | 216d0 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 | [isSQLiteReady 216e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 216f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 21700 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 72 BUGFIX: Make sur 21710 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 61 6b e that any "leak 21720 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 ed" transactions 21730 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 69 and/or connecti 21740 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ons.. # 21750 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 61 6e are clean 21760 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 61 6c ed up before cal 21770 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 ling the native 21780 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 6f shutdown functio 21790 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 n... #.. 217a0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 foreach t 217b0 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 6f ransaction [info 217c0 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 7b transactions] { 217d0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 217e0 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c 0d [string match \. 217f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 21800 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 74 ystem#Data#SQLit 21810 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 e#SQLiteTransact 21820 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 69 ion#*$transacti
21830 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  on]} then {..
21840 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
21850 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
21860 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73 61 63       sql transac
21870 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24 74  tion rollback $t 21880 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 20 ransaction.. 21890 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d } error] 218a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 218b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 218c0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b {!$quiet} then {
218d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
218e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 218f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 21900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21910 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 64 "---- rolled 21920 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61 back leaked tra 21930 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a nsaction \"" \.. 21940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21950 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e$transaction
21960 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20   \"\n]..
21970 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21980 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
21990 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
219a0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 219b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 219c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
219d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
219e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
219f0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
21a00 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 6f 6c  G: failed to rol
21a10 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 61  lback leaked tra
21a20 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a  nsaction \"" \..
21a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
21a40 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f 6e      $transaction 21a50 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c "\", error: " \ 21a60 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
21a80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
21a90 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
21aa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21ab0 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b 69 6e    foreach db [in
21ac0 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20  fo connections]
21ad0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
21ae0 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c  {[string match \
21af0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21b00 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69  System#Data#SQLi
21b10 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  te#SQLiteConnect
21b20 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65 6e  ion#* $db]} then 21b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21b40 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c 20 if {[catch {sql 21b50 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f 72 close$db} error
21b60 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
21b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21b80 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 21b90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21ba0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
21bb0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
21bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21bd0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73 65       "---- close
21be0 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61 73  d leaked databas
21bf0 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d 0d  e \"" $db \"\n]. 21c00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 21c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 21c20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 21c30 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
21c40 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
21c50 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
21c60 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 21c70 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 21c80 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 21c90 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 21ca0 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 6b ed to close leak 21cb0 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 ed database \"" 21cc0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21cd0 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20$db "\",
21ce0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 21cf0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 21d00 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21d10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 21d20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 21d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 21d40 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a # BUGFIX: 21d50 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 Before calling 21d60 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 the native shutd 21d70 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 own function, ma 21d80 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 20 ke sure both.. 21d90 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 21da0 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 65 of the PRAGMA re 21db0 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 20 lated directory 21dc0 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 2e names are freed. 21dd0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 21de0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 21df0 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 iteDirectories$
21e00 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a  channel true....
21e10 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
21e20 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
21e30 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
21e40 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
21e50 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21e60 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
21e70 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65  ite.UnsafeNative
21e80 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f  Methods sqlite3_
21e90 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20 20  shutdown..
21ea0 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30    } result] == 0
21eb0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21ec0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 21ed0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21ee0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
21ef0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
21f00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21f10 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
21f20 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28 29  lite3_shutdown()
21f30 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c  ... ok: " $resul 21f40 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 t \n].. 21f50 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 21f60 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 21f70 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
21f80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
21f90 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 21fa0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 21fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 21fc0 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 21fd0 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 3_shutdown()... 21fe0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
21ff0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
22000 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
22010 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
22020 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
22030 65 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75  etSettingReadCou
22040 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 61 46 69  nt { name {viaFi
22050 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  le false} } {..
22060 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f       if {[haveCo
22070 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f  nstraint buildCo
22080 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 75  nfiguration.Debu
22090 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a  g] && [catch {..
220a0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
220b0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
220c0 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c  nPublic -alias \
220d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
220e0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
220f0 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 53 65  .DebugData GetSe
22100 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20  ttingReadCounts
22110 24 76 69 61 46 69 6c 65 0d 0a 20 20 20 20 20 20  $viaFile.. 22120 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 } settingReadCou 22130 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nts] == 0} then 22140 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 22150 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
22160 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
22170 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
22180 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75  [$settingReadCou 22190 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 20 nts TryGetValue 221a0 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74 68$name value]} th
221b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
221c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 221d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 221e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 221f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 "---- set 22200 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d 65 20 22 ting \""$name "
22210 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 24 76  \" was read " $v 22220 61 6c 75 65 20 22 20 74 69 6d 65 73 22 20 5c 0d alue " times" \. 22230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 22240 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c 65 [expr {$viaFile
22250 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f   ? " from the co
22260 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
22270 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a  " : ""}] \n]....
22280 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
22290 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20  rn $value.. 222a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 222b0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 222c0 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e set nameCoun 222d0 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 t [$settingReadC
222e0 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20  ounts Count]..
222f0 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75          set valu
22300 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20  eCount 0....
22310 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
22320 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72  each -alias pair
22330 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75   $settingReadCou 22340 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 nts {.. 22350 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 incr valueCou 22360 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d nt [$pair Value]
22370 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
22380 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 22390 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 223a0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 223b0 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 "---- setti 223c0 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 ng \"" [$pair Ke
223d0 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20  y] "\" was read
223e0 22 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20  " [$pair Value] 223f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22400 20 20 20 22 20 74 69 6d 65 73 22 20 5b 65 78 70 " times" [exp 22410 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 22 20 r {$viaFile ? "
22420 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75  from the configu
22430 72 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 5c  ration file" : \
22440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22450 20 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20    ""}] \n]..
22460 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
22470 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
22480 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 24 76 61  t $nameCount$va
22490 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  lueCount]..
224a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
224b0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
224c0 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d  ng length $name] 224d0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 224e0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
224f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
22500 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
22510 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74         "---- set
22520 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d 65 20 22  ting \"" $name " 22530 5c 22 20 77 61 73 20 6e 6f 74 20 72 65 61 64 22 \" was not read" 22540 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c 65 [expr {$viaFile
22550 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
22560 20 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e    " from the con
22570 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 22  figuration file"
22580 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20   : ""}] \n]..
22590 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
225a0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 225b0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 225c0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 225d0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6e 6f 20 73 "---- no s 225e0 65 74 74 69 6e 67 73 20 77 65 72 65 20 72 65 61 ettings were rea 225f0 64 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 d" [expr {$viaFi
22600 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  le ? \..
22610 20 20 20 20 22 20 66 72 6f 6d 20 74 68 65 20 63      " from the c
22620 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
22630 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20  e" : ""}] \n]..
22640 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
22650 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 20 20 7d  return -1..    }
22660 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
22670 74 4f 74 68 65 72 43 6f 75 6e 74 20 7b 20 6e 61  tOtherCount { na
22680 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  me } {..      if
22690 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e   {[haveConstrain
226a0 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61  t buildConfigura
226b0 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b  tion.Debug] && [
226c0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
226d0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
226e0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
226f0 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..
22700 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
22710 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44  ta.SQLite.DebugD
22720 61 74 61 20 47 65 74 4f 74 68 65 72 43 6f 75 6e  ata GetOtherCoun
22730 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f 74 68 65  ts..      } othe
22740 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74  rCounts] == 0} t
22750 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
22760 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
22770 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68  h $name] > 0} th 22780 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 22790 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f 75 6e 74 if {[$otherCount
227a0 73 20 54 72 79 47 65 74 56 61 6c 75 65 20 24 6e  s TryGetValue $n 227b0 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74 68 65 6e ame value]} then 227c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 227d0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
227e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
227f0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
22800 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72       "---- other
22810 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 24 6e 61   counter \"" $na 22820 6d 65 20 22 5c 22 20 68 61 73 20 76 61 6c 75 65 me "\" has value 22830 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 0d "$value \n]...
22840 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
22850 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20  urn $value.. 22860 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 22870 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 22880 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 set nameCou 22890 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e 74 73 nt [$otherCounts
228a0 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20   Count]..
228b0 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e     set valueCoun
228c0 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  t 0....
228d0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
228e0 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f 74 68  -alias pair $oth 228f0 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 erCounts {.. 22900 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 6c incr val 22910 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 ueCount [$pair V
22920 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  alue]....
22930 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 22940 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 22950 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 22960 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 22970 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 other counter \" 22980 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c " [$pair Key] "\
22990 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c 0d  " has value " \.
229a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
229b0 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20 5c   [$pair Value] \ 229c0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 229d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 ... ret 229e0 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65 43 urn [list$nameC
229f0 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e 74  ount $valueCount 22a00 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 22a10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 }.... i 22a20 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 22a30 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 h$name] > 0} th
22a40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
22a50 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 22a60 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22a70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 22a80 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 ---- other count 22a90 65 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 er \""$name "\"
22aa0 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 5c 6e 22   has no value\n"
22ab0 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
22ac0 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
22ad0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 22ae0 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20 61 72 65 "---- there are 22af0 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 no other counte 22b00 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a rs\n".. }.. 22b10 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 2d .. return - 22b20 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 1.. }..... 22b30 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c 69 proc reportSQLi 22b40 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a 20 teResources {.. 22b50 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e 6e chann 22b60 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d el {quiet false} 22b70 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b 63 {reset true} {c 22b80 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 7b ollect true} } { 22b90 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 22ba0 20 23 20 4e 4f 54 45 3a 20 49 66 20 70 6f 73 73 # NOTE: If poss 22bb0 69 62 6c 65 2c 20 61 6c 77 61 79 73 20 72 65 73 ible, always res 22bc0 65 74 20 74 68 65 20 63 61 63 68 65 64 20 61 73 et the cached as 22bd0 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79 sembly directory 22be0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 22bf0 61 6e 64 20 74 68 65 20 63 61 63 68 65 64 20 58 and the cached X 22c00 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ML configuration 22c10 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 file name... 22c20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 22c30 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 22c40 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 tCommand]} then 22c50 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b {.. if {[ 22c60 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 22c70 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 22c80 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 22c90 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 22ca0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 22cb0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 22cc0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 22cd0 20 20 20 20 20 20 20 20 20 20 20 20 52 65 73 65 Rese 22ce0 74 43 61 63 68 65 64 41 73 73 65 6d 62 6c 79 44 tCachedAssemblyD 22cf0 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 22d00 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d } error] == 0} 22d10 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 22d20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
22d30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
22d40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 22d50 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 63 el "---- reset c 22d60 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 20 64 ached assembly d 22d70 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a 20 20 20 irectory\n".. 22d80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 22d90 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 22da0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
22db0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
22dc0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 22dd0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 22de0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 22df0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 22e00 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 NG: failed to re 22e10 73 65 74 20 63 61 63 68 65 64 20 61 73 73 65 6d set cached assem 22e20 62 6c 79 20 64 69 72 65 63 74 6f 72 79 2c 20 22 bly directory, " 22e30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22e40 20 20 20 20 22 65 72 72 6f 72 3a 20 22 20 5c 6e "error: " \n 22e50 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 \t$error \n]..
22e60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
22e70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
22e80 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
22e90 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
22ea0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
22eb0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
22ec0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
22ed0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
22ee0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
22ef0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22f00 20 20 52 65 73 65 74 43 61 63 68 65 64 58 6d 6c    ResetCachedXml
22f10 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 0d 0a  ConfigFileName..
22f20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d          } error]
22f30 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
22f40 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 22f50 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 22f60 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 22f70 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 72$channel "---- r
22f80 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c 20  eset cached XML
22f90 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
22fa0 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 20 20 20  le name\n"..
22fb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
22fc0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
22fd0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 22fe0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22ff0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
23000 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
23010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23020 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
23030 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73  G: failed to res
23040 65 74 20 63 61 63 68 65 64 20 58 4d 4c 20 63 6f  et cached XML co
23050 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 20 5c 0d  nfiguration " \.
23060 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23070 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 65 72 72   "file name, err
23080 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 23090 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 230a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 230b0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 230c0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 230d0 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 If available, r 230e0 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 6f eport on (and po 230f0 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 68 ssibly reset) th 23100 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 20 e runtime.. 23110 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 # configu 23120 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 63 ration statistic 23130 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 23140 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 23150 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 23160 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 23170 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 [haveConstraint 23180 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 buildConfigurat 23190 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74 68 65 6e ion.Debug]} then 231a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 231b0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 231c0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 231d0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 231e0 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 lic -alias \.. 231f0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 23200 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 23210 65 62 75 67 44 61 74 61 20 47 65 74 53 65 74 74 ebugData GetSett 23220 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 66 61 ingReadCounts fa 23230 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 lse.. } s 23240 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 ettingReadCounts 23250 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 23260 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 set na 23270 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e meCount [$settin
23280 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e  gReadCounts Coun
23290 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  t]..          se
232a0 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a  t valueCount 0..
232b0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
232c0 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
232d0 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 52  s pair $settingR 232e0 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 eadCounts {.. 232f0 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 incr va 23300 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 lueCount [$pair
23310 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
23320 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 23330 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 23340 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
23350 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
23360 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
23370 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
23380 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61 69  etting \"" [$pai 23390 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 72 r Key] "\" was r 233a0 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 ead " \.. 233b0 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 [$pai
233c0 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65 73  r Value] " times
233d0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
233e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
233f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
23400 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 23410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 23420 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 23430 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 23440 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 23450 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 NonPublic -alias 23460 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23470 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 23480 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 a.SQLite.DebugDa 23490 74 61 20 43 6c 65 61 72 53 65 74 74 69 6e 67 52 ta ClearSettingR 234a0 65 61 64 43 6f 75 6e 74 73 20 66 61 6c 73 65 0d eadCounts false. 234b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 . } e 234c0 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e rror] == 0} then 234d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 234e0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
234f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
23500 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 23510 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 23520 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 23530 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 "---- r 23540 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 eset setting sta 23550 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 tistics for the 23560 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 previous " \.. 23570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23580 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e$nameCount " n
23590 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75  ames and " $valu 235a0 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 eCount " values 235b0 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 read\n"].. 235c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 235d0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 235e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 235f0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
23600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
23610 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 23620 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 23630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23640 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 23650 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 ING: failed to r 23660 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 eset setting sta 23670 74 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c 0d tistics for " \. 23680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 23690 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f "the previo 236a0 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 us "$nameCount
236b0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76  " names and " $v 236c0 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 alueCount \.. 236d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 236e0 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 2c 20 " values read, 236f0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 error: " \n\t$e
23700 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  rror \n]..
23710 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
23720 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
23730 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
23740 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
23750 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
23760 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
23770 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
23780 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20  lic -alias \..
23790 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
237a0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44  em.Data.SQLite.D
237b0 65 62 75 67 44 61 74 61 20 47 65 74 53 65 74 74  ebugData GetSett
237c0 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 74 72  ingReadCounts tr
237d0 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 65  ue..        } se
237e0 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75  ttingFileReadCou
237f0 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  nts] == 0} then
23800 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
23810 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74   nameCount [$set 23820 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 6e tingFileReadCoun 23830 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 ts Count].. 23840 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f set valueCo 23850 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 unt 0.... 23860 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 object foreac 23870 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 73 h -alias pair$s
23880 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f  ettingFileReadCo
23890 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  unts {..
238a0 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f      incr valueCo
238b0 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65  unt [$pair Value 238c0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 238d0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
238e0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
238f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 23900 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 23910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23920 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e "---- settin 23930 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 g \"" [$pair Key
23940 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20 22  ] "\" was read "
23950 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23960 20 20 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c        [$pair Val 23970 75 65 5d 20 22 20 74 69 6d 65 73 20 66 72 6f 6d ue] " times from 23980 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 the configurati 23990 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 20 on file\n"].. 239a0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 239b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 239c0 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d if {$reset}
239d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
239e0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
239f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
23a00 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
23a10 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
23a20 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..
23a30 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
23a40 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
23a50 44 65 62 75 67 44 61 74 61 20 43 6c 65 61 72 53  DebugData ClearS
23a60 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73  ettingReadCounts
23a70 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20   true..
23a80 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30     } error] == 0
23a90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23aa0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 23ab0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 23ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 23ad0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
23ae0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
23af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
23b00 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74 69  ---- reset setti
23b10 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f  ng statistics fo
23b20 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 20 22  r the previous "
23b30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23b40 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f 75          $nameCou 23b50 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 nt " names and " 23b60 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 76$valueCount " v
23b70 61 6c 75 65 73 20 72 65 61 64 20 22 20 5c 0d 0a  alues read " \..
23b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23b90 20 20 20 20 22 66 72 6f 6d 20 74 68 65 20 63 6f      "from the co
23ba0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
23bb0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
23bc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
23bd0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
23be0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
23bf0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 23c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23c10 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
23c20 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23c40 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
23c50 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74   failed to reset
23c60 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73 74   setting statist
23c70 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20  ics for " \..
23c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23c90 20 22 74 68 65 20 70 72 65 76 69 6f 75 73 20 22   "the previous "
23ca0 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61   $nameCount " na 23cb0 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 mes and "$value
23cc0 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20  Count \..
23cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 76               " v
23ce0 61 6c 75 65 73 20 72 65 61 64 20 66 72 6f 6d 20  alues read from
23cf0 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  the configuratio
23d00 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72 3a 20 22  n file, error: "
23d10 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20   \n\t \..
23d20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72               $er 23d30 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 23d40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 23d50 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 23d60 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 23d70 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 23d80 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 23d90 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 23da0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 23db0 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 ic -alias \.. 23dc0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 Syste 23dd0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 m.Data.SQLite.De 23de0 62 75 67 44 61 74 61 20 47 65 74 4f 74 68 65 72 bugData GetOther 23df0 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 Counts.. 23e00 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d 20 3d } otherCounts] = 23e10 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 23e20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 set nameC 23e30 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e ount [$otherCoun
23e40 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20  ts Count]..
23e50 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f       set valueCo
23e60 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20  unt 0....
23e70 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
23e80 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f  h -alias pair $o 23e90 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 therCounts {.. 23ea0 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 23eb0 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
23ec0 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
23ed0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 23ee0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 23ef0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 23f00 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
23f10 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
23f20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
23f30 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22  other counter \"
23f40 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c  " [$pair Key] "\ 23f50 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c 0d " has value " \. 23f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 23f70 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d [$pair Value]
23f80 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
23f90 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
23fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
23fb0 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b   {$reset} then { 23fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 23fd0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 23fe0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 23ff0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 24000 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 NonPublic -alias 24010 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24020 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 24030 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 a.SQLite.DebugDa 24040 74 61 20 43 6c 65 61 72 4f 74 68 65 72 43 6f 75 ta ClearOtherCou 24050 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 nts.. 24060 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 } error] == 0} 24070 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 24080 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
24090 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
240a0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
240b0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 240c0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 240d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 240e0 2d 2d 20 72 65 73 65 74 20 6f 74 68 65 72 20 63 -- reset other c 240f0 6f 75 6e 74 65 72 73 20 66 6f 72 20 74 68 65 20 ounters for the 24100 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 previous " \.. 24110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24120 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e$nameCount " n
24130 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75  ames and " $valu 24140 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 5c eCount " values\ 24150 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n"].. 24160 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 24170 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 24180 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
24190 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
241a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
241b0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 241c0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 241d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 241e0 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 241f0 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 failed to reset 24200 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 73 20 66 other counters f 24210 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 or " \.. 24220 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 65 "the 24230 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d previous "$nam
24240 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61  eCount " names a
24250 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74  nd " $valueCount 24260 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 24270 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 " values 24280 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 24290 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
242a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
242b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
242c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
242d0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
242e0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
242f0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
24300 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  d] && \..
24310 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44 65     [haveSQLiteDe
24320 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54  fineConstant INT
24330 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
24340 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  LE] && \..
24350 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44      [haveSQLiteD
24360 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 54 52  efineConstant TR
24370 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45 53  ACK_MEMORY_BYTES
24380 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24390 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 243a0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 243b0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
243c0 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d   "---- current m
243d0 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20  emory in use by
243e0 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20  SQLiteMemory...
243f0 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  "..        }....
24400 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
24410 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
24420 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
24430 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
24440 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
24450 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
24460 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79  ite.SQLiteMemory
24470 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d   bytesAllocated.
24480 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72  .        } memor
24490 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
244a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
244b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 244c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 244d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
244e0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 244f0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 24500 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 24510 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 24520 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 24530 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 unknown.... 24540 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
24550 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
24560 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 24570 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 24580 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20$memory \n]..
24590 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
245a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
245b0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 245c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t 245d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
245e0 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f  --- maximum memo
245f0 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c  ry in use by SQL
24600 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a  iteMemory... "..
24610 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24620 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
24630 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
24640 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
24650 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
24660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
24670 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
24680 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 6d 61  .SQLiteMemory ma
24690 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 61  ximumBytesAlloca
246a0 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d  ted..        } m
246b0 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65  emory] == 0} the
246c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
246d0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 246e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 246f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
24700 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 24710 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a ry " bytes\n"].. 24720 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 24730 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 24740 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 24750 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 ory unknown.... 24760 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
24770 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
24780 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
24790 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 247a0 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d Args$memory \n]
247b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
247c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
247d0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  }....      if {!
247e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 247f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
24800 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
24810 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
24820 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e 20  se by SQLite...
24830 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  "..      }....
24840 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c      if {[haveSQL
24850 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
24860 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
24870 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
24880 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
24890 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
248a0 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
248b0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
248c0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
248d0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
248e0 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds sqlite3_memor
248f0 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20  y_used..
24900 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20  } memory] == 0}
24910 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
24920 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 24930 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 24940 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
24950 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 24960 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 emory " bytes\n" 24970 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 24980 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 24990 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 249a0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 249b0 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 Maybe the SQLit 249c0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 249d0 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a s unavailable?.. 249e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 249f0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 24a00 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 y unknown.... 24a10 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
24a20 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
24a30 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 24a40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 24a50 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
24a60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
24a70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
24a80 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
24a90 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61  set memory unava
24aa0 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20  ilable....
24ab0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 24ac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 24ad0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
24ae0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 24af0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 24b00 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 24b10 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 set result 24b20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45 3a$memory; # NOTE:
24b30 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20 69   Return memory i
24b40 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61 6c  n-use to our cal
24b50 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ler.....      if
24b60 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 24b70 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs 24b80 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
24b90 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69  maximum memory i
24ba0 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e  n use by SQLite.
24bb0 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  .. "..      }...
24bc0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
24bd0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
24be0 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  and]} then {..
24bf0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
24c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
24c10 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
24c20 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
24c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
24c40 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
24c50 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
24c60 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20  thods \..
24c70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6d         sqlite3_m
24c80 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72 20  emory_highwater
24c90 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  0..        } mem
24ca0 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
24cb0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
24cc0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 24cd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 24ce0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
24cf0 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 24d00 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 " bytes\n"].. 24d10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 24d20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 24d30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 24d40 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 # NOTE: Mayb 24d50 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 e the SQLite cor 24d60 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 e library is una 24d70 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 vailable?.. 24d80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24d90 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 24da0 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 24db0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
24dc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24dd0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 24de0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
24df0 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
24e00 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
24e10 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
24e20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d  {..        set m
24e30 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c  emory unavailabl
24e40 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e....        if
24e50 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 24e60 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 24e70 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
24e80 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c  ndArgs $memory \ 24e90 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. 24ea0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 24eb0 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 if {$collect} th
24ec0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f  en {..        co
24ed0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63 68  llectGarbage $ch 24ee0 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. 24ef0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
24f00 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
24f10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 24f20 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e nel "---- curren 24f30 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 t memory in use 24f40 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 0d by the CLR... ". 24f50 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 24f60 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 24f70 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 24f80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24f90 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 24fa0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 24fb0 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 24fc0 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a alMemory false.. 24fd0 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 } memory 24fe0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 24ff0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 25000 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 72 tring is integer 25010 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 -strict$memory
25020 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
25030 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 25040 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 25050 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 25060 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
25070 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62  Args $memory " b 25080 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 25090 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 250a0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 250b0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d set mem 250c0 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a 20 ory invalid.... 250d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 250e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
250f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
25100 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 25110 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 pendArgs$memory
25120 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
25130 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
25140 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
25150 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
25160 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e  t memory unknown
25170 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
25180 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 25190 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 251a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
251b0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 251c0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 y \n].. 251d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 251e0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 251f0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 set memor 25200 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d y unavailable... 25210 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 . if {!$q
25220 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
25230 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 25240 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 25250 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a gs$memory \n]..
25260 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
25270 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
25280 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20  rn $result.. 25290 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 252a0 65 73 65 74 53 51 4c 69 74 65 44 69 72 65 63 74 esetSQLiteDirect 252b0 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 ories { channel 252c0 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 native } {.. 252d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 252e0 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 75 73 E: Attempt to us 252f0 65 20 74 68 65 20 6e 61 74 69 76 65 20 41 50 49 e the native API 25300 20 28 76 69 61 20 74 68 65 20 6d 61 6e 61 67 65 (via the manage 25310 64 20 61 73 73 65 6d 62 6c 79 29 3f 0d 0a 20 20 d assembly)?.. 25320 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 25330 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b {$native} then {
25340 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
25350 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
25360 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
25370 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70  atabase and temp
25380 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65  orary directorie
25390 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23  s are..        #
253a0 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68 65         reset the
253b0 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ir default value
253c0 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20  s, which should
253d0 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68  be null for both
253e0 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #
253f0 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c     Since the sql
25400 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
25410 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
25420 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d  n is available,.
25430 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
25440 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20   use it...
25450 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72    #..        for
25460 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20 7b   {set index 1} {
25470 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e 63  $index < 3} {inc 25480 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 r index} {.. 25490 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 254a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 254b0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 254c0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 254d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 254e0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 254f0 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 25500 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 25510 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c sql 25520 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 25530 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 78 20 irectory$index
25540 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  null..
25550 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20  } result] == 0}
25560 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
25570 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 25580 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 25590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 255a0 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c "---- call sql 255b0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 255c0 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 irectory("$inde
255d0 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  x \..
255e0 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e       ", null)...
255f0 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c   ok: " $result \ 25600 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 25610 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 25620 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
25630 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
25640 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
25650 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c    "---- call sql
25660 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
25670 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65  irectory(" $inde 25680 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x \.. 25690 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e ", null)... 256a0 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
256b0 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
256c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
256d0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
256e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
256f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e         # NOTE: N
25700 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65  ow make sure the
25710 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65   database and te
25720 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
25730 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20  ies are..
25740 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74   #       reset t
25750 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c  heir default val
25760 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
25770 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
25780 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20  th...        #
25790 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73       Since the s
257a0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
257b0 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74  _directory funct
257c0 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20  ion does not..
257d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 70        #       ap
257e0 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69 6c  pear to be avail
257f0 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61 73  able, use the as
25800 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41 20  sociated PRAGMA
25810 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20 20  commands..
25820 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65 61    #       instea
25830 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  d...        #..
25840 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64         foreach d
25850 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64  irectory [list d
25860 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
25870 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  ory temp_store_d
25880 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20  irectory] {..
25890 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b         set sql [
258a0 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47  appendArgs "PRAG
258b0 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  MA " $directory 258c0 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 " = \"\";"].... 258d0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 258e0 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 tch {executeSql 258f0 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d$sql} result] ==
25900 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
25910 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 25920 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 25930 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 25940 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 "---- exec 25950 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 ute PRAGMA "$di
25960 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b 3a  rectory "... ok:
25970 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
25980 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20          $result 25990 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 \"\n].. 259a0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 259b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
259c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
259d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
259e0 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75       "---- execu
259f0 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69 72  te PRAGMA " $dir 25a00 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f ectory "... erro 25a10 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 r: " \.. 25a20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 \n\t$re
25a30 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  sult \n]..
25a40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
25a50 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
25a60 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
25a70 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
25a80 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65  ctories { channe
25a90 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65 7d 20  l {reset false}
25aa0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
25ab0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
25ac0 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33  k if the sqlite3
25ad0 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
25ae0 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69 73  tory function is
25af0 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20   available...
25b00 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74     #..      tput
25b10 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  s $channel \.. 25b20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 25b30 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 74 ecking for funct 25b40 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 ion sqlite3_win3 25b50 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 2e 2_set_directory. 25b60 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 0d .. ".... #. 25b70 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 25b80 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 20 his call to the 25b90 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 25ba0 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 25bb0 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a 20 tion uses the.. 25bc0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 76 # inv 25bd0 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66 6f 72 alid value 0 for 25be0 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 6d the first argum 25bf0 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 65 20 ent. This code 25c00 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 20 is designed.. 25c10 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 63 68 # to ch 25c20 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 74 eck if calling t 25c30 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c 6c he function will 25c40 20 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 74 raise an except 25c50 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 ion (i.e... 25c60 20 23 20 20 20 20 20 20 20 74 68 65 20 61 63 74 # the act 25c70 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 68 ual result of th 25c80 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 e function does 25c90 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20 6c 6f not matter as lo 25ca0 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 20 ng as no.. 25cb0 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 25cc0 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e 0d 0a y is changed)... 25cd0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 25ce0 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 20 26 f {[isWindows] & 25cf0 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 & [catch {.. 25d00 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 25d10 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 25d20 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 25d30 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 25d40 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 25d50 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 25d60 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 sqlite3 25d70 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 25d80 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 20 tory 0 null.. 25d90 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e }] == 0} then 25da0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 25db0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 25dc0 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 alling the sqlit 25dd0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 25de0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 ectory function 25df0 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 does not.. 25e00 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65 20 # cause 25e10 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 an exception; th 25e20 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 erefore, it must 25e30 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 be available (i 25e40 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 .e... # 25e50 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 even though 25e60 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 it should retur 25e70 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 n a failure retu 25e80 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d rn code in this. 25e90 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 25ea0 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 case)... 25eb0 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 #.. addC 25ec0 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 onstraint sqlite 25ed0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 25ee0 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 ctory.... 25ef0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
25f00 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20  yes\n....
25f10 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
25f20 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c  TE: Does our cal
25f30 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65  ler want to rese
25f40 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69 65  t the directorie
25f50 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s?..        #..
25f60 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese 25f70 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 25f80 20 20 20 20 20 72 65 73 65 74 53 51 4c 69 74 65 resetSQLite 25f90 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 Directories$cha
25fa0 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20 20  nnel true..
25fb0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
25fc0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
25fd0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c  uts $channel no\ 25fe0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n.... #.. 25ff0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 26000 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 Does our caller 26010 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 68 want to reset th 26020 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 20 e directories? 26030 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 This can only.. 26040 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 # b 26050 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 53 e performed if S 26060 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 20 QLite is loaded 26070 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 26080 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a 20 e by the test.. 26090 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 260a0 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 uite... # 260b0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
260c0 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 74  eset && [isSQLit
260d0 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d  eReady]} then {.
260e0 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 65 74  .          reset
260f0 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65  SQLiteDirectorie
26100 73 20 24 63 68 61 6e 6e 65 6c 20 66 61 6c 73 65  s $channel false 26110 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 26120 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 26130 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 26140 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65 inally, show the 26150 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f current value o 26160 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 f the database a 26170 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 nd temporary.. 26180 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 26190 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20 63 ctories. This c 261a0 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f an only be perfo 261b0 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 rmed if SQLite i 261c0 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 s loaded.. 261d0 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64 # and read 261e0 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 y for use by the 261f0 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 test suite... 26200 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 26210 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d {[isSQLiteReady] 26220 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 26230 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 foreach direct 26240 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 ory [list data_s 26250 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 tore_directory t 26260 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 emp_store_direct 26270 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ory] {.. 26280 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
26290 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d   [appendArgs "--
262a0 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 64  -- checking " $d 262b0 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d irectory "... "] 262c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 .... se 262d0 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67 t sql [appendArg 262e0 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72 s "PRAGMA "$dir
262f0 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20  ectory \;]....
26300 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
26310 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24  ch {executeSql $26320 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73 75 sql scalar} resu 26330 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b lt] == 0} then { 26340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 26350 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
26360 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22  pendArgs "ok: \"
26370 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d  " $result \"\n]. 26380 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 26390 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 263a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
263b0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 72  [appendArgs "err
263c0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75  or: " \n\t $resu 263d0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 263e0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 263f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 26400 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61 64 ... proc load 26410 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e SQLiteTestSettin 26420 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75 gs { channel {su 26430 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74 20 ffix ""} {quiet 26440 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 26450 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 26460 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20 E: Skip loading 26470 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 66 20 the settings if 26480 74 68 65 69 72 20 75 73 61 67 65 20 68 61 73 20 their usage has 26490 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a been disabled... 264a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 264b0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 264c0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73 74 ::no(sqliteTest 264d0 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e Settings)]} then 264e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 264f0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c # NOTE: L 26500 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 oad custom per-u 26510 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 ser and/or per-h 26520 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67 ost test setting 26530 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 26540 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 26550 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc 26560 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29 l_platform(user) 26570 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 26580 20 20 20 20 20 73 65 74 20 75 73 65 72 53 65 74 set userSet 26590 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 tingsFileName [f 265a0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d ile join [getCom 265b0 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d monDirectory] \. 265c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b . [ 265d0 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 appendArgs setti 265e0 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a ngs$suffix . $: 265f0 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 :tcl_platform(us 26600 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a er) .eagle]].... 26610 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 if {[f 26620 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 65 72 ile exists$user
26630 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65  SettingsFileName
26640 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
26650 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 26660 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 26670 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 26680 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
26690 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
266a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
266b0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72  loading per-user
266c0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66   test settings f
266d0 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
266e0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73               $us 266f0 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 26700 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 me \"...\n].. 26710 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 26720 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 26730 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 26740 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 uplevel 1 26750 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75 73 [list source$us
26760 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
26770 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  me]..
26780 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20   } error]} then
26790 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
267a0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 267b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 267c0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
267d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
267e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
267f0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
26800 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
26810 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20 73   load per-user s
26820 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
26830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26840 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65 74          $userSet 26850 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c tingsFileName "\ 26860 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 ", error: " \n\t 26870 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
26880 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
26890 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
268a0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
268b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
268c0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 268d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 268e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
268f0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
26900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26910 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f  "---- skipped lo
26920 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20 74  ading per-user t
26930 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c  est settings fil
26940 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
26950 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65 72             $user 26960 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 26970 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f "\", it does no 26980 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 t exist\n"].. 26990 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 269a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 269b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 23 }.... ## 269c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 269d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 269e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 269f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26a00 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 20 #####.... 26a10 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 26a20 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d s ::tcl_platform 26a30 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b 0d (host)]} then {. 26a40 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 68 . set h 26a50 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 26a60 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 26a70 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f getCommonDirecto 26a80 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ry] \.. 26a90 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 [appendArgs 26aa0 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 settings$suffi
26ab0 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66  x . $::tcl_platf 26ac0 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c 65 orm(host) .eagle 26ad0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ]].... 26ae0 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 if {[file exists 26af0 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69$hostSettingsFi
26b00 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
26b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
26b20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 26b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26b40 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
26b50 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
26b60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26b70 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65  "---- loading pe
26b80 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74  r-host test sett
26b90 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d  ings file \"" \.
26ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26bb0 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73     $hostSettings 26bc0 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e FileName \"...\n 26bd0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 26be0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 26bf0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 26c00 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 uple 26c10 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 vel 1 [list sour 26c20 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 ce$hostSettings
26c30 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20  FileName]..
26c40 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d         } error]}
26c50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
26c60 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 26c70 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 26c80 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 26c90 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
26ca0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
26cb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
26cc0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
26cd0 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d  led to load per-
26ce0 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  host settings fi
26cf0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
26d00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 68                $h 26d10 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e ostSettingsFileN 26d20 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 ame "\", error: 26d30 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
26d40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
26d50 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
26d60 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  }..          } e
26d70 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
26d80 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 26d90 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 26da0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
26db0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
26dc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26dd0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70        "---- skip
26de0 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d  ped loading per-
26df0 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e  host test settin
26e00 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
26e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26e20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69   $hostSettingsFi 26e30 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 leName "\", it d 26e40 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 oes not exist\n" 26e50 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 26e60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 26e70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 26e80 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 26e90 20 70 72 6f 63 20 63 6f 70 79 53 61 6d 70 6c 65 proc copySample 26ea0 44 61 74 61 62 61 73 65 46 69 6c 65 73 20 7b 7d DatabaseFiles {} 26eb0 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 65 {.. upleve 26ec0 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 l 1 {.. # 26ed0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 26ee0 3a 20 43 6f 70 79 20 28 6f 72 20 72 65 2d 63 6f : Copy (or re-co 26ef0 70 79 29 20 74 68 65 20 72 65 66 65 72 65 6e 63 py) the referenc 26f00 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 e database file 26f10 75 73 65 64 20 66 6f 72 20 74 68 69 73 0d 0a 20 used for this.. 26f20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 # u 26f30 6e 69 74 20 74 65 73 74 20 74 6f 20 74 68 65 20 nit test to the 26f40 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 build directory 26f50 69 6e 20 63 61 73 65 20 69 74 20 68 61 73 20 62 in case it has b 26f60 65 65 6e 20 63 68 61 6e 67 65 64 0d 0a 20 20 20 een changed.. 26f70 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 20 # by 26f80 61 20 70 72 65 76 69 6f 75 73 20 74 65 73 74 20 a previous test 26f90 72 75 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d run... #. 26fa0 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f . file co 26fb0 70 79 20 2d 66 6f 72 63 65 20 24 6e 6f 72 74 68 py -force$north
26fc0 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5c 0d 0a  windEfDbFile \..
26fd0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
26fe0 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69  join [getBuildDi
26ff0 72 65 63 74 6f 72 79 20 74 72 75 65 5d 20 5b 66  rectory true] [f
27000 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77  ile tail $northw 27010 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a 20 indEfDbFile]].. 27020 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 27030 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 54 .. proc moveT 27040 65 73 74 4c 6f 67 46 69 6c 65 20 7b 20 70 61 74 estLogFile { pat 27050 68 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 h } {.. if 27060 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 27070 74 65 73 74 5f 6c 6f 67 5d 20 26 26 20 5b 66 69 test_log] && [fi 27080 6c 65 20 65 78 69 73 74 73 20 24 3a 3a 74 65 73 le exists$::tes
27090 74 5f 6c 6f 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a  t_log]} then {..
270a0 20 20 20 20 20 20 20 20 73 65 74 20 6f 6c 64 5f          set old_
270b0 74 65 73 74 5f 6c 6f 67 20 24 3a 3a 74 65 73 74  test_log $::test 270c0 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 73 65 _log.. se 270d0 74 20 6e 65 77 5f 74 65 73 74 5f 6c 6f 67 20 5b t new_test_log [ 270e0 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 file join$path
270f0 5b 66 69 6c 65 20 74 61 69 6c 20 24 6f 6c 64 5f  [file tail $old_ 27100 74 65 73 74 5f 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 test_log]].... 27110 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 file copy 27120 24 6f 6c 64 5f 74 65 73 74 5f 6c 6f 67 20 24 6e$old_test_log $n 27130 65 77 5f 74 65 73 74 5f 6c 6f 67 3b 20 66 69 6c ew_test_log; fil 27140 65 20 64 65 6c 65 74 65 20 24 6f 6c 64 5f 74 65 e delete$old_te
27150 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20  st_log..
27160 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24  set ::test_log $27170 6e 65 77 5f 74 65 73 74 5f 6c 6f 67 0d 0a 0d 0a new_test_log.... 27180 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf 27190 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 271a0 6c 6f 67 5f 70 61 74 68 5d 7d 20 74 68 65 6e 20 log_path]} then 271b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 271c0 20 3a 3a 74 65 73 74 5f 6c 6f 67 5f 70 61 74 68 ::test_log_path 271d0 20 24 70 61 74 68 0d 0a 20 20 20 20 20 20 20 20$path..
271e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  }....        tpu
271f0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 27200 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 27210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 27220 2d 2d 2d 20 6d 6f 76 65 64 20 74 65 73 74 20 6c --- moved test l 27230 6f 67 20 66 72 6f 6d 20 5c 22 22 20 24 6f 6c 64 og from \""$old
27240 5f 74 65 73 74 5f 6c 6f 67 20 22 5c 22 20 74 6f  _test_log "\" to
27250 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
27260 20 20 20 20 24 6e 65 77 5f 74 65 73 74 5f 6c 6f      $new_test_lo 27270 67 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d g \"\n].. } 27280 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 27290 70 72 6f 63 20 73 68 6f 77 53 51 4c 69 74 65 42 proc showSQLiteB 272a0 75 69 6c 64 50 61 72 61 6d 65 74 65 72 73 20 7b uildParameters { 272b0 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 channel } {.. 272c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 272d0 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 272e0 65 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 66 e native build f 272f0 6c 61 67 20 68 61 73 20 62 65 65 6e 20 66 6f 72 lag has been for 27300 63 69 62 6c 79 20 73 65 74 2e 0d 0a 20 20 20 20 cibly set... 27310 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 27320 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20$channel \..
27330 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
27340 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
27350 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
27360 6c 64 20 6e 61 74 69 76 65 20 6f 76 65 72 72 69  ld native overri
27370 64 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  de... "....
27380 20 73 65 74 20 6e 61 74 69 76 65 20 5b 67 65 74   set native [get
27390 42 75 69 6c 64 4e 61 74 69 76 65 5d 0d 0a 0d 0a  BuildNative]....
273a0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
273b0 67 20 6c 65 6e 67 74 68 20 24 6e 61 74 69 76 65  g length $native 273c0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 273d0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 273e0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 273f0 20 62 75 69 6c 64 4e 61 74 69 76 65 2e 20 24 6e buildNative.$n
27400 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 20 20 20  ative]..
27410 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 27420 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 6e appendArgs \"$n
27430 61 74 69 76 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  ative \"\n]..
27440 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
27450 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
27460 6e 74 20 62 75 69 6c 64 4e 61 74 69 76 65 2e 6e  nt buildNative.n
27470 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 75  one..        tpu
27480 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e  ts $channel <non 27490 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d e>\n.. }... 274a0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 274b0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 # NOTE: Check th 274c0 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20 e current build 274d0 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c 79 year. Basically 274e0 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 73 , this indicates 274f0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 27500 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 which version of 27510 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 20 MSBuild and/or 27520 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 61 Visual Studio wa 27530 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 s used to.. 27540 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65 # compile 27550 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69 the assembly bi 27560 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 naries under tes 27570 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. 27580 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
27590 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  l \..          "
275a0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
275b0 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
275c0 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 72 2e  Lite build year.
275d0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 73 65  .. "....      se
275e0 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64  t year [getBuild
275f0 59 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  Year]....      i
27600 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
27610 68 20 24 79 65 61 72 5d 20 3e 20 30 7d 20 74 68  h $year] > 0} th 27620 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 en {.. ad 27630 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app 27640 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 61 endArgs buildYea 27650 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 r.$year]..
27660 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 27670 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 l [appendArgs \" 27680 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 20 20$year \"\n]..
27690 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
276a0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
276b0 69 6e 74 20 62 75 69 6c 64 59 65 61 72 2e 6e 6f  int buildYear.no
276c0 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  ne..        tput
276d0 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65  s $channel <none 276e0 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a >\n.. }.... 276f0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
27700 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
27710 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67    "---- checking
27720 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61   for System.Data
27730 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 6e 61  .SQLite build na
27740 74 69 76 65 20 79 65 61 72 2e 2e 2e 20 22 0d 0a  tive year... "..
27750 0d 0a 20 20 20 20 20 20 73 65 74 20 79 65 61 72  ..      set year
27760 20 5b 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65   [getBuildNative
27770 59 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  Year]....      i
27780 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
27790 68 20 24 79 65 61 72 5d 20 3e 20 30 7d 20 74 68  h $year] > 0} th 277a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 en {.. ad 277b0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app 277c0 65 6e 64 41 72 67 73 20 62 75 69 6c 64 4e 61 74 endArgs buildNat 277d0 69 76 65 59 65 61 72 2e 20 24 79 65 61 72 5d 0d iveYear.$year].
277e0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $277f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 27800 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 5c rgs \"$year \"\
27810 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  n]..      } else
27820 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
27830 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 4e  onstraint buildN
27840 61 74 69 76 65 59 65 61 72 2e 6e 6f 6e 65 0d 0a  ativeYear.none..
27850 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 27860 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d hannel <none>\n. 27870 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 27880 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
27890 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d   \..          "-
278a0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
278b0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
278c0 69 74 65 20 62 75 69 6c 64 20 70 6c 61 74 66 6f  ite build platfo
278d0 72 6d 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  rm... "....
278e0 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67   set platform [g
278f0 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  etBuildPlatform
27900 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  true]....      i
27910 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
27920 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 27930 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 27940 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 27950 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c [appendArgs buil 27960 64 50 6c 61 74 66 6f 72 6d 2e 20 24 70 6c 61 74 dPlatform.$plat
27970 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 20 20 74  form]..        t
27980 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 27990 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 70 6c ppendArgs \"$pl
279a0 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 20 20  atform \"\n]..
279b0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
279c0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
279d0 69 6e 74 20 62 75 69 6c 64 50 6c 61 74 66 6f 72  int buildPlatfor
279e0 6d 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20  m.none..
279f0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c  tputs $channel < 27a00 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d none>\n.. } 27a10 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 61 72 .... set ar 27a20 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 68 chitecture [arch 27a30 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 66 itectureForPlatf 27a40 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a orm$platform]..
27a50 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c 27a60 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 27a70 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 27a80 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da 27a90 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build 27aa0 61 72 63 68 69 74 65 63 74 75 72 65 2e 2e 2e 20 architecture... 27ab0 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ".... if {[ 27ac0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 61 string length$a
27ad0 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 30  rchitecture] > 0
27ae0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
27af0 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
27b00 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c  [appendArgs buil
27b10 64 41 72 63 68 69 74 65 63 74 75 72 65 2e 20 24  dArchitecture. $27b20 61 72 63 68 69 74 65 63 74 75 72 65 5d 0d 0a 20 architecture].. 27b30 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
27b40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
27b50 73 20 5c 22 20 24 61 72 63 68 69 74 65 63 74 75  s \" $architectu 27b60 72 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 re \"\n].. 27b70 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 27b80 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 27b90 62 75 69 6c 64 41 72 63 68 69 74 65 63 74 75 72 buildArchitectur 27ba0 65 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 e.none.. 27bb0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c tputs$channel <
27bc0 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d  none>\n..      }
27bd0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
27be0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
27bf0 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69   the current bui
27c00 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  ld .NET Framewor
27c10 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74  k.  Basically, t
27c20 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  his..      #
27c30 20 20 20 69 6e 64 69 63 61 74 65 73 20 77 68 69     indicates whi
27c40 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68  ch version of th
27c50 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  e .NET Framework
27c60 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20 20   is being..
27c70 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79   #       used by
27c80 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 69   the assembly bi
27c90 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73  naries under tes
27ca0 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
27cb0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 27cc0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 l \.. " 27cd0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo 27ce0 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ 27cf0 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e 45 54 20 Lite build .NET 27d00 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d 0a Framework... ".. 27d10 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 65 74 46 .. set netF 27d20 78 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 78 x [getBuildNetFx 27d30 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ 27d40 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
27d50 65 74 46 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20  etFx] > 0} then
27d60 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  {..        addCo
27d70 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
27d80 41 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65 77  Args buildFramew
27d90 6f 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20 20  ork. $netFx].. 27da0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
27db0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
27dc0 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e 5d   \" $netFx \"\n] 27dd0 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 27de0 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e .. addCon 27df0 73 74 72 61 69 6e 74 20 62 75 69 6c 64 46 72 61 straint buildFra 27e00 6d 65 77 6f 72 6b 2e 6e 6f 6e 65 0d 0a 20 20 20 mework.none.. 27e10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
27e20 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20  nel <none>\n..
27e30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
27e40 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
27e50 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e  Check the curren
27e60 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75 72  t build configur
27e70 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68 6f  ation.  This sho
27e80 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20  uld normally..
27e90 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65      #       be e
27ea0 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
27eb0 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20 20   "Release"...
27ec0 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74     #..      tput
27ed0 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  s $channel \.. 27ee0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 27ef0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 27f00 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 27f10 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ild configuratio 27f20 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 n... ".... 27f30 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f set configuratio 27f40 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 n [getBuildConfi 27f50 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 20 guration].... 27f60 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 27f70 65 6e 67 74 68 20 24 63 6f 6e 66 69 67 75 72 61 ength$configura
27f80 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tion] > 0} then
27f90 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  {..        addCo
27fa0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
27fb0 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69 67  Args buildConfig
27fc0 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69 67  uration. $config 27fd0 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 uration].. 27fe0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
27ff0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
28000 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5c  $configuration \ 28010 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c "\n].. } el 28020 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 se {.. ad 28030 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c dConstraint buil 28040 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 6e dConfiguration.n 28050 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 75 one.. tpu 28060 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e ts$channel <non
28070 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  e>\n..      }...
28080 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
28090 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68  # NOTE: Check th
280a0 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 20  e current build
280b0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75  configuration su
280c0 66 66 69 78 2e 20 20 54 68 69 73 20 77 69 6c 6c  ffix.  This will
280d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
280e0 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 65 69 74 68  normally be eith
280f0 65 72 20 22 4e 65 74 53 74 61 6e 64 61 72 64 32  er "NetStandard2
28100 30 22 20 6f 72 20 61 6e 20 65 6d 70 74 79 20 73  0" or an empty s
28110 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d  tring...      #.
28120 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch 28130 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 28140 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 28150 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat 28160 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 a.SQLite build c 28170 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 onfiguration suf 28180 66 69 78 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 fix... ".... 28190 20 20 73 65 74 20 73 75 66 66 69 78 20 5b 67 65 set suffix [ge 281a0 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 tBuildConfigurat 281b0 69 6f 6e 53 75 66 66 69 78 5d 0d 0a 0d 0a 20 20 ionSuffix].... 281c0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 281d0 6c 65 6e 67 74 68 20 24 73 75 66 66 69 78 5d 20 length$suffix]
281e0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
281f0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
28200 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62  nt [appendArgs b
28210 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
28220 6e 53 75 66 66 69 78 2e 20 24 73 75 66 66 69 78  nSuffix. $suffix 28230 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ].. tputs 28240 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
28250 64 41 72 67 73 20 5c 22 20 24 73 75 66 66 69 78  dArgs \" $suffix 28260 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 \"\n].. } 28270 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 28280 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 addConstraint bu 28290 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration 282a0 53 75 66 66 69 78 2e 6e 6f 6e 65 0d 0a 20 20 20 Suffix.none.. 282b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
282c0 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20  nel <none>\n..
282d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74      }....      t
282e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 282f0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 28300 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che 28310 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System 28320 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 .Data.SQLite bui 28330 6c 64 20 6e 61 74 69 76 65 20 63 6f 6e 66 69 67 ld native config 28340 75 72 61 74 69 6f 6e 20 22 20 5c 0d 0a 20 20 20 uration " \.. 28350 20 20 20 20 20 20 20 22 73 75 66 66 69 78 2e 2e "suffix.. 28360 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 . "].... se 28370 74 20 73 75 66 66 69 78 20 5b 67 65 74 42 75 69 t suffix [getBui 28380 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 75 72 ldNativeConfigur 28390 61 74 69 6f 6e 53 75 66 66 69 78 5d 0d 0a 0d 0a ationSuffix].... 283a0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 283b0 67 20 6c 65 6e 67 74 68 20 24 73 75 66 66 69 78 g length$suffix
283c0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
283d0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
283e0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
283f0 20 62 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66   buildNativeConf
28400 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78 2e  igurationSuffix.
28410 20 24 73 75 66 66 69 78 5d 0d 0a 20 20 20 20 20   $suffix].. 28420 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
28430 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
28440 20 24 73 75 66 66 69 78 20 5c 22 5c 6e 5d 0d 0a   $suffix \"\n].. 28450 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 28460 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 28470 72 61 69 6e 74 20 62 75 69 6c 64 4e 61 74 69 76 raint buildNativ 28480 65 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 eConfigurationSu 28490 66 66 69 78 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 ffix.none.. 284a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
284b0 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20  l <none>\n..
284c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
284d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
284e0 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20  eck the current
284f0 62 75 69 6c 64 20 65 78 74 72 61 20 64 69 72 65  build extra dire
28500 63 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69 6c  ctory.  This wil
28510 6c 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20 20  l normally..
28520 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69 74    #       be eit
28530 68 65 72 20 22 6e 65 74 73 74 61 6e 64 61 72 64  her "netstandard
28540 32 2e 30 22 20 6f 72 20 61 6e 20 65 6d 70 74 79  2.0" or an empty
28550 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
28560 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  #..      tputs $28570 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 28580 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 28590 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 285a0 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 285b0 20 65 78 74 72 61 2e 2e 2e 20 22 0d 0a 0d 0a 20 extra... ".... 285c0 20 20 20 20 20 73 65 74 20 65 78 74 72 61 20 5b set extra [ 285d0 67 65 74 42 75 69 6c 64 45 78 74 72 61 5d 0d 0a getBuildExtra].. 285e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 285f0 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 ing length$extr
28600 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  a] > 0} then {..
28610 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
28620 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
28630 73 20 62 75 69 6c 64 45 78 74 72 61 2e 20 24 65  s buildExtra. $e 28640 78 74 72 61 5d 0d 0a 20 20 20 20 20 20 20 20 74 xtra].. t 28650 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
28660 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 65 78  ppendArgs \" $ex 28670 74 72 61 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 tra \"\n].. 28680 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 28690 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 286a0 20 62 75 69 6c 64 45 78 74 72 61 2e 6e 6f 6e 65 buildExtra.none 286b0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 286c0 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c$channel <none>\
286d0 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..
286e0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72  }.....    proc r
286f0 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f 6c  unSQLiteTestProl
28700 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ogue {} {..
28710 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
28720 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f  : Skip running o
28730 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67  ur custom prolog
28740 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f  ue if the main o
28750 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20  ne has been..
28760 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
28770 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
28780 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
28790 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f  xists ::no(prolo
287a0 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 65  gue.eagle)]} the
287b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
287c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
287d0 53 61 76 65 20 74 68 65 20 65 6e 76 69 72 6f 6e  Save the environ
287e0 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20 74  ment variables t
287f0 68 61 74 20 77 65 20 69 6e 74 65 6e 64 20 74 6f  hat we intend to
28800 20 63 68 61 6e 67 65 20 66 6f 72 0d 0a 20 20 20   change for..
28810 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
28820 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20   test suite...
28830 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
28840 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74   saveEnvironment
28850 56 61 72 69 61 62 6c 65 73 20 5c 0d 0a 20 20 20  Variables \..
28860 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 49           [list I
28870 6e 69 74 69 61 6c 69 7a 65 5f 53 51 4c 69 74 65  nitialize_SQLite
28880 4c 6f 67 5d 20 3a 3a 74 65 73 74 53 75 69 74 65  Log] ::testSuite
28890 53 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  SavedEnv....
288a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
288b0 20 4e 4f 54 45 3a 20 46 6f 72 63 65 20 74 68 65   NOTE: Force the
288c0 20 6d 61 6e 61 67 65 64 20 6c 6f 67 67 69 6e 67   managed logging
288d0 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 61 74   subsystem to at
288e0 74 65 6d 70 74 20 74 6f 20 69 6e 69 74 69 61 6c  tempt to initial
288f0 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ize..        #
28900 20 20 20 20 20 69 74 73 65 6c 66 20 6d 6f 72 65       itself more
28910 20 74 68 61 6e 20 6f 6e 63 65 2e 0d 0a 20 20 20   than once...
28920 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28930 73 65 74 20 3a 3a 65 6e 76 28 49 6e 69 74 69 61  set ::env(Initia
28940 6c 69 7a 65 5f 53 51 4c 69 74 65 4c 6f 67 29 20  lize_SQLiteLog)
28950 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  1....        #..
28960 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
28970 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72 65  Load the "before
28980 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63 75  -constraints" cu
28990 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e  stom per-user an
289a0 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a 20  d/or per-host..
289b0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
289c0 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77  est settings now
289d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
289e0 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20        uplevel 1
289f0 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74 65  [list loadSQLite
28a00 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a 3a  TestSettings $:: 28a10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 65 test_channel .be 28a20 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 fore].... 28a30 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 28a40 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f TE: Show (and lo 28a50 67 29 20 74 68 65 20 67 6c 6f 62 61 6c 20 70 61 g) the global pa 28a60 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 63 6f rameters that co 28a70 6e 74 72 6f 6c 20 77 68 65 72 65 20 74 68 65 0d ntrol where the. 28a80 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 28a90 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 28aa0 20 73 68 6f 75 6c 64 20 62 65 2e 0d 0a 20 20 20 should be... 28ab0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 28ac0 73 68 6f 77 53 51 4c 69 74 65 42 75 69 6c 64 50 showSQLiteBuildP 28ad0 61 72 61 6d 65 74 65 72 73 20 24 3a 3a 74 65 73 arameters$::tes
28ae0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
28af0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28b00 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
28b10 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f   the [object] co
28b20 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62  mmand is availab
28b30 6c 65 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64 20  le; if not, add
28b40 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20  some..        #
28b50 20 20 20 20 20 20 73 68 69 6d 73 20 74 6f 20 6d        shims to m
28b60 61 6b 65 20 74 68 65 20 74 65 73 74 20 73 75 69  ake the test sui
28b70 74 65 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72 2e  te run smoother.
28b80 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
28b90 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
28ba0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64  iteObjectCommand
28bb0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 28bc0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 28bd0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D 28be0 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 6d etermine the nam 28bf0 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65 es of the native 28c00 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72 platform and ar 28c10 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 20 chitecture... 28c20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 28c30 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 set platform [ge 28c40 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 tBuildPlatform t 28c50 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 rue].. se 28c60 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 5b t architecture [ 28c70 61 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 50 architectureForP 28c80 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 latform$platfor
28c90 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  m]....        #.
28ca0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28cb0 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66   Build a list of
28cc0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
28cd0 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
28ce0 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
28cf0 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e  .        set con
28d00 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
28d10 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
28d20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
28d30 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d  Lite.dll.config]
28d40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
28d50 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
28d60 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20 61  uild a list of a
28d70 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65 64  uxiliary Managed
28d80 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73   Debugging Assis
28d90 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20 20  tants (MDA)..
28da0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
28db0 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73  figuration files
28dc0 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e   that we handle.
28dd0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
28de0 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
28df0 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
28e00 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
28e10 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65 78   EagleShell32.ex
28e20 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e 73  e.mda.config Ins
28e30 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e 63  taller.exe.mda.c
28e40 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20 20  onfig \..
28e50 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d 64       test.exe.md
28e60 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69 6e  a.config testlin
28e70 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  q.exe.mda.config
28e80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28e90 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61 2e  testef6.exe.mda.
28ea0 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20 20  config]....
28eb0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
28ec0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
28ed0 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61 6c  list of external
28ee0 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68   files that we h
28ef0 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66 0d  andle.  Some of.
28f00 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
28f10 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61 79   these files may
28f20 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f   be native and/o
28f30 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  r managed assemb
28f40 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a 20  lies that are..
28f50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
28f60 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66 6f  equired to perfo
28f70 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74 73  rm various tests
28f80 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
28f90 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72 6e        set extern
28fa0 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  alFileNames [lis
28fb0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
28fc0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74 69   [file join Enti
28fd0 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62 20  tyFramework lib
28fe0 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73  [string map [lis
28ff0 74 20 46 78 20 22 22 5d 20 5c 0d 0a 20 20 20 20  t Fx ""] \..
29000 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
29010 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78 34  map [list netFx4
29020 35 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78  51 netFx45 netFx
29030 34 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74 46  452 netFx45 netF
29040 78 34 36 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  x46 \..
29050 20 20 20 6e 65 74 46 78 34 35 20 6e 65 74 46 78     netFx45 netFx
29060 34 36 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46  461 netFx45 netF
29070 78 34 36 32 20 6e 65 74 46 78 34 35 20 6e 65 74  x462 netFx45 net
29080 46 78 34 37 20 6e 65 74 46 78 34 35 20 5c 0d 0a  Fx47 netFx45 \..
29090 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 74 46              netF
290a0 78 34 37 31 20 6e 65 74 46 78 34 35 20 6e 65 74  x471 netFx45 net
290b0 46 78 34 37 32 20 6e 65 74 46 78 34 35 20 6e 65  Fx472 netFx45 ne
290c0 74 53 74 61 6e 64 61 72 64 32 30 20 6e 65 74 46  tStandard20 netF
290d0 78 34 35 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20  x45] \..
290e0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 4e 65 74      [getBuildNet
290f0 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d  Fx]]] EntityFram
29100 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  ework.dll]]....
29110 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
29120 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
29130 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69  the list of nati
29140 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  ve assembly file
29150 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
29160 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
29170 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76 65        set native
29180 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 5d  FileNames [list]
29190 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c  ....        eval
291a0 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65 46   lappend nativeF
291b0 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61 74  ileNames [getNat
291c0 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61  iveLibraryFileNa
291d0 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20 20  mesOnly]..
291e0 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e    eval lappend n
291f0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 5b  ativeFileNames [
29200 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62  getInteropAssemb
29210 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d  lyFileNamesOnly]
29220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
29230 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42         # NOTE: B
29240 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66  uild the list of
29250 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
29260 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20  mbly files that
29270 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20  we handle...
29280 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73      #..        s
29290 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65  et mixedFileName
292a0 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20  s [list]....
292b0 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74      if {[hasRunt
292c0 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65  imeOption native
292d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
292e0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69 78       lappend mix
292f0 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73 74  edFileNames Syst
29300 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
29310 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ll..        }...
29320 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
29330 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
29340 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d 61  d the list of ma
29350 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 66  naged assembly f
29360 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61 6e  iles that we han
29370 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  dle...        #.
29380 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61 6e  .        set man
29390 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b 6c  agedFileNames [l
293a0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
293b0 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
293c0 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 53  QLite.Linq.dll S
293d0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
293e0 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20  e.EF6.dll]....
293f0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73 52        if {![hasR
29400 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74  untimeOption nat
29410 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ive]} then {..
29420 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
29430 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73  managedFileNames
29440 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
29450 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20  ite.dll..
29460 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
29470 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
29480 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f 75   Show the variou
29490 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65 20  s lists of file
294a0 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20 68  names that are h
294b0 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d 0a  andled by this..
294c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
294d0 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20  procedure...
294e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
294f0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 29500 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 29510 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29520 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c 22 "---- list of \" 29530 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 configuration\" 29540 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 29550 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29560 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 [expr {[llength 29570 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73$configFileNames
29580 5d 20 3e 20 30 20 3f 20 24 63 6f 6e 66 69 67 46  ] > 0 ? $configF 29590 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 ileNames : \.. 295a0 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 "<none 295b0 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 >"}] \n].... 295c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
295d0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
295e0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
295f0 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20       "---- list
29600 6f 66 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67 75  of \"MDA configu
29610 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 6e 61  ration\" file na
29620 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 20 20  mes is: " \..
29630 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
29640 5b 6c 6c 65 6e 67 74 68 20 24 6d 64 61 43 6f 6e  [llength $mdaCon 29650 66 69 67 46 69 6c 65 4e 61 6d 65 73 5d 20 3e 20 figFileNames] > 29660 30 20 3f 20 24 6d 64 61 43 6f 6e 66 69 67 46 69 0 ?$mdaConfigFi
29670 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20  leNames : \..
29680 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e           "<none>
29690 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  "}] \n]....
296a0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 296b0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 296c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 296d0 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f "---- list o 296e0 66 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 66 f \"external\" f 296f0 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 29700 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 29710 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 expr {[llength$
29720 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65  externalFileName
29730 73 5d 20 3e 20 30 20 3f 20 24 65 78 74 65 72 6e  s] > 0 ? $extern 29740 61 6c 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d alFileNames : \. 29750 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3c 6e . "<n 29760 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 one>"}] \n].... 29770 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
29780 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
29790 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
297a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69          "---- li
297b0 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c 22  st of \"native\"
297c0 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20   file names is:
297d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
297e0 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68   [expr {[llength
297f0 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 29800 73 5d 20 3e 20 30 20 3f 20 24 6e 61 74 69 76 65 s] > 0 ?$native
29810 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20  FileNames : \..
29820 20 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e             "<non
29830 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  e>"}] \n]....
29840 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 29850 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 29860 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 29870 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 "---- list 29880 20 6f 66 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 of \"mixed\" fi 29890 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c le names is: " \ 298a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 .. [e 298b0 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d xpr {[llength$m
298c0 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 5d 20 3e  ixedFileNames] >
298d0 20 30 20 3f 20 24 6d 69 78 65 64 46 69 6c 65 4e   0 ? $mixedFileN 298e0 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20 20 20 20 ames : \.. 298f0 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e 22 7d 5d "<none>"}] 29900 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 \n].... 29910 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
29920 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
29930 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
29940 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c   "---- list of \
29950 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c 65 20  "managed\" file
29960 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20  names is: " \..
29970 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72             [expr
29980 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 6e 61   {[llength $mana 29990 67 65 64 46 69 6c 65 4e 61 6d 65 73 5d 20 3e 20 gedFileNames] > 299a0 30 20 3f 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 0 ?$managedFile
299b0 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20 20 20  Names : \..
299c0 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e 22 7d         "<none>"}
299d0 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
299e0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
299f0 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20 74  TE: Remove any t
29a00 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  est constraints
29a10 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
29a20 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72 0d  e native and/or.
29a30 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
29a40 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c   managed assembl
29a50 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  y files that we
29a60 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66 6f  handle unless fo
29a70 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20 20  rbidden from..
29a80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 6f        #       do
29a90 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20 20  ing so...
29aa0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
29ab0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
29ac0 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65 43  no(sqliteRemoveC
29ad0 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68  onstraints)]} th
29ae0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
29af0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
29b00 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65   $configFileName 29b10 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 29b20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 29b30 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 29b40 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
29b50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
29b60 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
29b70 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f   fileName $mdaCo 29b80 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d nfigFileNames {. 29b90 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 29ba0 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 29bb0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 29bc0 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
29bd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
29be0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
29bf0 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 29c00 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 29c10 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f removeCo 29c20 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 29c30 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c 65 Args file_ [file 29c40 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d tail$fileName]
29c50 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
29c60 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65  ..          fore
29c70 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61  ach fileName $na 29c80 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d tiveFileNames {. 29c90 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d . rem 29ca0 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 oveConstraint [a 29cb0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 29cc0 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20$fileName]..
29cd0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
29ce0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
29cf0 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65  eName $mixedFile 29d00 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 29d10 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 29d20 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 29d30 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
29d40 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
29d50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
29d60 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 29d70 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 29d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 29d90 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 emoveConstraint 29da0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 29db0 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 _$fileName]..
29dc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
29dd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
29de0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
29df0 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65  E: Check for the
29e00 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72 75   "autoSelect" ru
29e10 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20 49  ntime option.  I
29e20 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20 20  f present,..
29e30 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74 65      #       atte
29e40 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  mpt to automatic
29e50 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 20  ally select the
29e60 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65 0d  first available.
29e70 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
29e80 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c 65   build (or "rele
29e90 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65 20  ase") of SQLite
29ea0 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  and System.Data.
29eb0 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20  SQLite..
29ec0 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65 20  #       for use
29ed0 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73 75  with the test su
29ee0 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ite...        #.
29ef0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
29f00 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61  sRuntimeOption a
29f10 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e  utoSelect]} then
29f20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
29f30 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69   {![checkForSQLi
29f40 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74  teBuilds $::test 29f50 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 _channel true]} 29f60 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 29f70 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 checkForSQLi 29f80 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 teReleases$::te
29f90 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d  st_channel true.
29fa0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
29fb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
29fc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
29fd0 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
29fe0 65 20 67 6c 6f 62 61 6c 20 70 61 72 61 6d 65 74  e global paramet
29ff0 65 72 73 20 74 68 61 74 20 63 6f 6e 74 72 6f 6c  ers that control
2a000 20 77 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20   where..
2a010 20 20 23 20 20 20 20 20 20 20 74 68 65 20 62 75    #       the bu
2a020 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73 68  ild directory sh
2a030 6f 75 6c 64 20 62 65 2e 20 20 54 68 65 20 61 75  ould be.  The au
2a040 74 6f 2d 73 65 6c 65 63 74 69 6f 6e 20 6d 61 79  to-selection may
2a050 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
2a060 20 20 20 20 68 61 76 65 20 6d 6f 64 69 66 69 65      have modifie
2a070 64 20 73 6f 6d 65 20 6f 66 20 74 68 65 73 65 20  d some of these
2a080 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20  parameters...
2a090 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2a0a0 20 20 20 20 73 68 6f 77 53 51 4c 69 74 65 42 75      showSQLiteBu
2a0b0 69 6c 64 50 61 72 61 6d 65 74 65 72 73 20 24 3a  ildParameters $: 2a0c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 :test_channel.. 2a0d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2a0e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2a0f0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c 20 NOTE: Skip all 2a100 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2a110 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 20 te related file 2a120 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 69 handling (deleti 2a130 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ng,.. # 2a140 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 6e copying, an 2a150 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 6e d loading) if in 2a160 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 2a170 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 2a180 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 2a190 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 ::no(sqliteFiles 2a1a0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 2a1b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a1c0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 2a1d0 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 65 trying to delete 2a1e0 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 6e any files if in 2a1f0 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 2a200 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a210 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 2a220 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 2a230 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 qliteFiles)]} th 2a240 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2a250 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 2a260 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 sts ::no(deleteS 2a270 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 73 qliteConfigFiles 2a280 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 2a290 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 2a2a0 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 h fileName$conf
2a2b0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
2a2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a2d0 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69  ryDeleteBinaryFi
2a2e0 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  le $fileName.. 2a2f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2a300 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2a310 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2a320 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 2a330 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 45 no(deleteSqliteE 2a340 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 2a350 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2a360 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 2a370 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 leName$mdaConfi
2a380 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
2a390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2a3a0 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65  yDeleteBuildFile
2a3b0 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d   $fileName true. 2a3c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 2a3d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2a3e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 2a3f0 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 me$externalFile
2a400 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
2a410 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65           tryDele
2a420 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69  teBinaryFile $fi 2a430 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 2a440 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2a450 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2a460 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 2a470 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 2a480 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65 46 eteSqliteNativeF 2a490 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 2a4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 2a4b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 2a4c0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 2a4d0 65 49 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 46 eImplicitNativeF 2a4e0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 2a4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a500 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 2a510 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65$nativeFileName
2a520 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
2a530 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65         tryDelete
2a540 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 2a550 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 me.. 2a560 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2a570 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2a580 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2a590 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 2a5a0 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d eleteSqliteNonIm 2a5b0 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 plicitFiles)]} t 2a5c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2a5d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2a5e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 2a5f0 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f leteSqlitePlatfo 2a600 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a rmFiles)] && \.. 2a610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a620 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 2a630 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 th$platform] >
2a640 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2a650 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
2a660 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 2a670 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 2a680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a690 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 tryDeleteA 2a6a0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
2a6b0 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  e $platform.. 2a6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 2a6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a6e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2a6f0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2a700 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 2a710 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 leteSqliteArchit 2a720 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 2a730 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2a740 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string 2a750 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
2a760 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
2a770 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2a780 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
2a790 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c  eName $nativeFil 2a7a0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 2a7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 2a7c0 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 yDeleteAssembly 2a7d0 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68 69$fileName $archi 2a7e0 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 tecture.. 2a7f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2a800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 2a810 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 2a820 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2a830 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 2a840 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2a850 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 2a860 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d 20 teMixedFiles)]} 2a870 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2a880 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a890 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 2a8a0 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 f the "native" r 2a8b0 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 untime option is 2a8c0 20 73 65 74 2c 20 64 65 6c 65 74 65 20 69 6d 70 set, delete imp 2a8d0 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 20 licit.. 2a8e0 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 78 # mix 2a8f0 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 ed-mode assembly 2a900 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e 20 files as well. 2a910 20 54 68 69 73 20 72 75 6e 74 69 6d 65 20 6f 70 This runtime op 2a920 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 tion.. 2a930 20 20 20 20 23 20 20 20 20 20 20 20 63 68 65 63 # chec 2a940 6b 20 69 73 20 68 61 6e 64 6c 65 64 20 77 68 65 k is handled whe 2a950 6e 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 6c n building the l 2a960 69 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f 64 ist of mixed-mod 2a970 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 2a980 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c # assembl 2a990 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a 20 y file names... 2a9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 2a9b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 2a9c0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 2a9d0 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 ::no(deleteSqlit 2a9e0 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 46 69 eImplicitMixedFi 2a9f0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 2aa00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 f 2aa10 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 oreach fileName 2aa20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20$mixedFileNames
2aa30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2aa40 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
2aa50 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65  sembly $fileName 2aa60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2aa70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2aa80 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2aa90 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 2aaa0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 2aab0 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c eteSqliteNonImpl 2aac0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 icitFiles)]} the 2aad0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2aae0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2aaf0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 2ab00 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d teSqlitePlatform 2ab10 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Files)] && \.. 2ab20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2ab30 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 2ab40 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d$platform] > 0}
2ab50 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2ab60 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61             forea
2ab70 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78  ch fileName $mix 2ab80 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 2ab90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2aba0 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 tryDeleteAsse 2abb0 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 mbly$fileName $2abc0 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. 2abd0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 2abf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2ac00 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 2ac10 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 xists ::no(delet 2ac20 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74 eSqliteArchitect 2ac30 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ureFiles)] && \. 2ac40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2ac50 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 2ac60 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72 gth$architectur
2ac70 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
2ac80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ac90 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
2aca0 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d  me $mixedFileNam 2acb0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 2acc0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 2acd0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c eteAssembly$fil
2ace0 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 74  eName $architect 2acf0 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 2ad00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2ad10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2ad20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2ad30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 2ad40 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 2ad50 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 2ad60 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d 61 o(deleteSqliteMa 2ad70 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 nagedFiles)]} th 2ad80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2ad90 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 2ada0 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c Name$managedFil
2adb0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
2adc0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
2add0 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  eteAssembly $fil 2ade0 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 eName.. 2adf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2ae00 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2ae10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 2ae20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2ae30 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l 2ae40 6f 67 29 20 74 68 65 20 67 6c 6f 62 61 6c 20 70 og) the global p 2ae50 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 63 arameters that c 2ae60 6f 6e 74 72 6f 6c 20 77 68 65 72 65 0d 0a 20 20 ontrol where.. 2ae70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2ae80 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 the build direct 2ae90 6f 72 79 20 73 68 6f 75 6c 64 20 62 65 2e 0d 0a ory should be... 2aea0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2aeb0 20 20 20 20 20 20 20 73 68 6f 77 53 51 4c 69 74 showSQLit 2aec0 65 42 75 69 6c 64 50 61 72 61 6d 65 74 65 72 73 eBuildParameters 2aed0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2aee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  ....          #.
2aef0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
2af00 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
2af10 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75 69  o verify the bui
2af20 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66 20  ld directory if
2af30 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20 20  instructed;..
2af40 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
2af50 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 73  therwise, make s
2af60 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79 20  ure it actually
2af70 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20 74  exists or halt t
2af80 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20 20  he entire..
2af90 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73       #       tes
2afa0 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66 20  ting process if
2afb0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73  it does not exis
2afc0 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  t...          #.
2afd0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
2afe0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
2aff0 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69 72  o(verifyBuildDir
2b000 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 7b  ectory)]} then {
2b010 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
2b020 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
2b030 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f 69  OTE: At this poi
2b040 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69  nt, the build di
2b050 72 65 63 74 6f 72 69 65 73 20 4d 55 53 54 20 65  rectories MUST e
2b060 78 69 73 74 20 66 6f 72 0d 0a 20 20 20 20 20 20  xist for..
2b070 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
2b080 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
2b090 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a  s to continue...
2b0a0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
2b0b0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64             set d
2b0c0 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69  irectory [getBui
2b0d0 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c 73  ldDirectory fals
2b0e0 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e]....
2b0f0 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
2b100 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20  sts $directory] 2b110 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 2b120 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 ![file isd 2b130 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 irectory$direct
2b140 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ory]} then {..
2b150 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
2b160 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e               # N
2b170 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 20  OTE: Just prior
2b180 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c 74  to actually halt
2b190 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 20  ing the testing
2b1a0 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 20  process,..
2b1b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2b1c0 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f 20  add an error to
2b1d0 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 6c  the test log fil
2b1e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...
2b1f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
2b200 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2b210 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 2b220 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 2b230 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 2b240 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 79 could not verify 2b250 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 64 69 native build di 2b260 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 rectory \"" \.. 2b270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b280 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22 2c$directory "\",
2b290 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c   all testing hal
2b2a0 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20  ted\n"]....
2b2b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2b2c0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2b2d0 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72 69  : Raising a scri
2b2e0 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74 68  pt error from th
2b2f0 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64 20  is point should
2b300 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20 20  halt..
2b310 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
2b320 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e  testing process.
2b330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2b340 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
2b350 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41 72   error [appendAr
2b360 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2b370 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20 6e          "could n
2b380 6f 74 20 76 65 72 69 66 79 20 6e 61 74 69 76 65  ot verify native
2b390 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
2b3a0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
2b3b0 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63            $direc 2b3c0 74 6f 72 79 20 22 5c 22 2c 20 61 6c 6c 20 74 65 tory "\", all te 2b3d0 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d 0a sting halted"].. 2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 2b3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 2b400 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 directory [getB 2b410 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 74 72 uildDirectory tr 2b420 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ue].... 2b430 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 if {![file ex 2b440 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d ists$directory]
2b450 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   || \..
2b460 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73         ![file is
2b470 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63  directory $direc 2b480 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tory]} then {.. 2b490 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 2b4a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 2b4b0 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72 NOTE: Just prior 2b4c0 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c to actually hal 2b4d0 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67 ting the testing 2b4e0 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20 process,.. 2b4f0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2b500 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f add an error to 2b510 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69 the test log fi 2b520 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 le... 2b530 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2b540 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
2b550 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
2b560 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
2b570 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2b580 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66   could not verif
2b590 79 20 6d 61 6e 61 67 65 64 20 62 75 69 6c 64 20  y managed build
2b5a0 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d  directory \"" \.
2b5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2b5c0 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c     $directory "\ 2b5d0 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 ", all testing h 2b5e0 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 alted\n"].... 2b5f0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 2b600 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 2b610 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 TE: Raising a sc 2b620 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 ript error from 2b630 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c this point shoul 2b640 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 d halt.. 2b650 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 2b660 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 e testing proces 2b670 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 s... 2b680 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 2b690 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 error [append 2b6a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 2b6b0 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 "could 2b6c0 20 6e 6f 74 20 76 65 72 69 66 79 20 6d 61 6e 61 not verify mana 2b6d0 67 65 64 20 62 75 69 6c 64 20 64 69 72 65 63 74 ged build direct 2b6e0 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ory \"" \.. 2b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69$di
2b700 72 65 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c 6c  rectory "\", all
2b710 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22   testing halted"
2b720 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ]..            }
2b730 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2b740 73 65 74 20 6c 6f 67 44 69 72 65 63 74 6f 72 79  set logDirectory
2b750 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20   $directory.. 2b760 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 2b770 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set 2b780 20 6c 6f 67 44 69 72 65 63 74 6f 72 79 20 5b 67 logDirectory [g 2b790 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 etBuildDirectory 2b7a0 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 true].. 2b7b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2b7c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 2b7d0 4e 4f 54 45 3a 20 57 65 27 72 65 20 67 6f 69 6e NOTE: We're goin 2b7e0 67 20 74 6f 20 6d 6f 76 65 20 74 68 65 20 74 65 g to move the te 2b7f0 73 74 20 6c 6f 67 20 66 69 6c 65 20 74 6f 20 74 st log file to t 2b800 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 he directory.. 2b810 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2b820 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6d containing the m 2b830 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 2b840 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 0d s being tested.. 2b850 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 2b860 20 20 20 20 20 20 20 20 6d 6f 76 65 54 65 73 74 moveTest 2b870 4c 6f 67 46 69 6c 65 20 24 6c 6f 67 44 69 72 65 LogFile$logDire
2b880 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20  ctory....
2b890 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2b8a0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79  # NOTE: Skip try
2b8b0 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20  ing to copy any
2b8c0 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63  files if instruc
2b8d0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ted...
2b8e0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
2b8f0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
2b900 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69  :no(copySqliteFi
2b910 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
2b920 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2b930 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
2b940 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66  o(copySqliteConf
2b950 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  igFiles)]} then
2b960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2b970 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2b980 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 2b990 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 2b9a0 2d 20 63 6f 70 79 69 6e 67 20 5c 22 63 6f 6e 66 - copying \"conf 2b9b0 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 iguration\" file 2b9c0 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 s...\n".... 2b9d0 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 foreach 2b9e0 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 69 fileName$confi
2b9f0 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  gFileNames {..
2ba00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72                tr
2ba10 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24  yCopyBuildFile $2ba20 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d 0a 20 fileName true.. 2ba30 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 2ba40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 2ba50 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 2ba60 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 2ba70 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 78 :no(copySqliteEx 2ba80 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 74 ternalFiles)]} t 2ba90 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2baa0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2bab0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f # NOTE: Co 2bac0 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44 py the Managed D 2bad0 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61 ebugging Assista 2bae0 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67 nts (MDA) config 2baf0 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 uration.. 2bb00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 # f 2bb10 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c ile for the Eagl 2bb20 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 e shell to the b 2bb30 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 uild output dire 2bb40 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 ctory,.. 2bb50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 # wh 2bb60 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 6f ile using each o 2bb70 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 f the names of t 2bb80 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 63 he various legac 2bb90 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 y test.. 2bba0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 # ex 2bbb0 65 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 73 ecutables. This 2bbc0 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d 61 will help to ma 2bbd0 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c 6c ke sure that all 2bbe0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 2bbf0 20 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 61 # lega 2bc00 63 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 74 cy tests run wit 2bc10 68 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 61 h exactly the sa 2bc20 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 65 me set of Manage 2bc30 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 d.. 2bc40 20 23 20 20 20 20 20 20 20 44 65 62 75 67 67 69 # Debuggi 2bc50 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 6f ng Assistants co 2bc60 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 20 nfigured... 2bc70 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 2bc80 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 2bc90 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2bca0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2bcb0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69       "---- copyi
2bcc0 6e 67 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67 75  ng \"MDA configu
2bcd0 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 73 2e 2e  ration\" files..
2bce0 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .\n"....
2bcf0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
2bd00 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69  leName $mdaConfi 2bd10 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 gFileNames {.. 2bd20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 2bd30 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 20 yCopyBinaryFile 2bd40 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d EagleShell.exe.m 2bd50 64 61 2e 63 6f 6e 66 69 67 20 74 72 75 65 20 22 da.config true " 2bd60 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 "$fileName..
2bd70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2bd80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
2bd90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
2bda0 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 20   NOTE: Copy the
2bdb0 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 65  external binarie
2bdc0 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68  s, if any, to th
2bdd0 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61 74  e directory that
2bde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2bdf0 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 73  #       contains
2be00 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
2be10 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 69 63  .  This is typic
2be20 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d 61 6b  ally used to mak
2be30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
2be40 20 23 20 20 20 20 20 20 20 73 75 72 65 20 61 73   #       sure as
2be50 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 65 6e  semblies referen
2be60 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 73 20  ced by the ones
2be70 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 72 65  being tested are
2be80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2be90 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c  #       availabl
2bea0 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 65 73  e during the tes
2beb0 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20  ting process...
2bec0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
2bed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
2bee0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2bef0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e nel "---- copyin 2bf00 67 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 66 g \"external\" f 2bf10 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 iles...\n".... 2bf20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 2bf30 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 ach fileName$ex
2bf40 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20  ternalFileNames
2bf50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
2bf60 20 20 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e     tryCopyExtern
2bf70 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  alFile $fileName 2bf80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2bf90 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 2bfa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2bfb0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2bfc0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 2bfd0 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d 20 eNativeFiles)]} 2bfe0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2bff0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2c000 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 # NOTE: I 2c010 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 74 66 f the test platf 2c020 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 68 orm is likely th 2c030 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 68 e default for th 2c040 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 is.. 2c050 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 69 6e # machin 2c060 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 63 e, also try to c 2c070 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 66 opy the native f 2c080 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 iles to the.. 2c090 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 2c0a0 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 69 binary locati 2c0b0 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 on... 2c0c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2c0d0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 2c0e0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 2c0f0 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 qliteImplicitNat 2c100 69 76 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d iveFiles)] && \. 2c110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2c120 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42 75 69 [isDefaultBui 2c130 6c 64 50 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 ldPlatform]} the 2c140 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2c150 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2c160 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
2c170 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c180 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20    "---- copying
2c190 69 6d 70 6c 69 63 69 74 20 5c 22 6e 61 74 69 76  implicit \"nativ
2c1a0 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d  e\" files...\n".
2c1b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
2c1c0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
2c1d0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 2c1e0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 2c1f0 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 tryCop 2c200 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e yAssembly$fileN
2c210 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20  ame false..
2c220 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2c230 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2c240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
2c250 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
2c260 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65   ::no(copySqlite
2c270 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73  NonImplicitFiles
2c280 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
2c290 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2c2a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2c2b0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61  no(copySqlitePla
2c2c0 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20  tformFiles)] &&
2c2d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2c2e0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2c2f0 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] 2c300 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 2c310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c320 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2c330 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2c340 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
2c350 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2c360 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69 76   copying \"nativ
2c370 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70 6c  e\" files for pl
2c380 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20 20  atform \"" \..
2c390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c3a0 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22      $platform \" 2c3b0 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 ...\n].... 2c3c0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 fore 2c3d0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 ach fileName$na
2c3e0 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d  tiveFileNames {.
2c3f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2c400 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65       tryCopyAsse
2c410 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66  mbly $fileName f 2c420 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a alse$platform..
2c430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c440 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
2c450 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2c460 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2c470 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
2c480 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68 69  (copySqliteArchi
2c490 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
2c4a0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
2c4b0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
2c4c0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65   length $archite 2c4d0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e cture] > 0} then 2c4e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2c4f0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2c500 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2c510 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
2c520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c530 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 5c   "---- copying \
2c540 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 73 20  "native\" files
2c550 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72 65  for architecture
2c560 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
2c570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61                $a 2c580 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e 2e rchitecture \".. 2c590 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n].... 2c5a0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 2c5b0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
2c5c0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
2c5d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c5e0 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
2c5f0 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c  ly $fileName fal 2c600 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 65 se$architecture
2c610 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2c620 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
2c630 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2c640 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2c650 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2c660 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 6f 72  no(copySqliteFor
2c670 63 65 64 4e 61 74 69 76 65 46 69 6c 65 73 29 5d  cedNativeFiles)]
2c680 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
2c690 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
2c6a0 75 69 6c 64 4e 61 74 69 76 65 5d 7d 20 74 68 65  uildNative]} the
2c6b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2c6c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2c6d0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 2c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c6f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 "---- copy 2c700 69 6e 67 20 66 6f 72 63 65 64 20 5c 22 6e 61 74 ing forced \"nat 2c710 69 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e ive\" files...\n 2c720 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ".... 2c730 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 2c740 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 ileName$nativeF
2c750 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20  ileNames {..
2c760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c770 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
2c780 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65 0d  $fileName false. 2c790 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2c7a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2c7b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2c7c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2c7d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2c7e0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2c7f0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 2c800 70 79 53 71 6c 69 74 65 4d 69 78 65 64 46 69 6c pySqliteMixedFil 2c810 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 2c820 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 2c830 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 2c840 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 74 OTE: If the "nat 2c850 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 ive" runtime opt 2c860 69 6f 6e 20 69 73 20 73 65 74 2c 20 63 6f 70 79 ion is set, copy 2c870 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 implicit.. 2c880 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2c890 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 2c8a0 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 65 mbly files as we 2c8b0 6c 6c 2e 20 20 54 68 65 20 72 75 6e 74 69 6d 65 ll. The runtime 2c8c0 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 option.. 2c8d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 2c8e0 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 20 heck is handled 2c8f0 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 68 when building th 2c900 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d e list of mixed- 2c910 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 mode.. 2c920 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 # asse 2c930 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e mbly file names. 2c940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c950 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2c960 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 2c970 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 2c980 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 46 teImplicitMixedF 2c990 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c9b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2c9c0 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
2c9d0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
2c9e0 2d 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c 69  -- copying impli
2c9f0 63 69 74 20 5c 22 6d 69 78 65 64 5c 22 20 66 69  cit \"mixed\" fi
2ca00 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20  les...\n"....
2ca10 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
2ca20 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 2ca30 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d ixedFileNames {. 2ca40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2ca50 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 2ca60 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c ly$fileName fal
2ca70 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..
2ca80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
2ca90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2caa0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
2cab0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
2cac0 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c  opySqliteNonImpl
2cad0 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65  icitFiles)]} the
2cae0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2caf0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
2cb00 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79  exists ::no(copy
2cb10 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 69  SqlitePlatformFi
2cb20 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
2cb30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cb40 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $2cb50 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 platform] > 0} t 2cb60 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2cb70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
2cb80 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
2cb90 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cbb0 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e      "---- copyin
2cbc0 67 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65  g \"mixed\" file
2cbd0 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20 5c  s for platform \
2cbe0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61              $pla 2cc00 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a tform \"...\n].. 2cc10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2cc20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 foreach file 2cc30 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e Name$mixedFileN
2cc40 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
2cc50 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43              tryC
2cc60 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c  opyAssembly $fil 2cc70 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c 61 eName false$pla
2cc80 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
2cc90 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ccb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2ccc0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
2ccd0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
2cce0 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46 69  teArchitectureFi
2ccf0 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
2cd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cd10 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $2cd20 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20 architecture] > 2cd30 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 2cd40 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 2cd50 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
2cd60 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
2cd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2cd80 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f          "---- co
2cd90 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 5c 22 20  pying \"mixed\"
2cda0 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68 69 74  files for archit
2cdb0 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a 20 20  ecture \"" \..
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cdd0 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75 72      $architectur 2cde0 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 e \"...\n].... 2cdf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2ce00 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 2ce10 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
2ce20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2ce30 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41          tryCopyA
2ce40 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 2ce50 65 20 66 61 6c 73 65 20 24 61 72 63 68 69 74 65 e false$archite
2ce60 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20  cture..
2ce70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2ce90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2cea0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
2ceb0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
2cec0 74 65 46 6f 72 63 65 64 4d 69 78 65 64 46 69 6c  teForcedMixedFil
2ced0 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  es)] && \..
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
2cef0 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 5d 7d  getBuildNative]}
2cf00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2cf10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
2cf20 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2cf30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2cf40 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 2cf50 63 6f 70 79 69 6e 67 20 66 6f 72 63 65 64 20 5c copying forced \ 2cf60 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e 2e "mixed\" files.. 2cf70 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .\n".... 2cf80 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 2cf90 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 65 h fileName$mixe
2cfa0 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20  dFileNames {..
2cfb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cfc0 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
2cfd0 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73  y $fileName fals 2cfe0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 2cff0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2d000 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2d010 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2d020 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2d030 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 2d040 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 2d050 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 65 copySqliteManage 2d060 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b dFiles)]} then { 2d070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2d080 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2d090 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79  annel "---- copy
2d0a0 69 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22 20  ing \"managed\"
2d0b0 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20  files...\n"....
2d0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
2d0d0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 2d0e0 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 anagedFileNames 2d0f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d100 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 tryCopyAssemb 2d110 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 ly$fileName tru
2d120 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
2d130 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
2d140 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
2d150 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2d160 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2d170 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20   Skip trying to
2d180 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69  load any files i
2d190 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20  f instructed...
2d1a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2d1b0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
2d1c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61   exists ::no(loa
2d1d0 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20  dSqliteFiles)]}
2d1e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2d1f0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
2d200 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53  xists ::no(loadS
2d210 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c  qliteImplicitFil
2d220 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
2d230 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c              tryL
2d240 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74  oadAssembly Syst
2d250 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
2d260 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ll..
2d270 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
2d280 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
2d290 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69  ts ::no(loadSqli
2d2a0 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74  teLinqFiles)]} t
2d2b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2d2c0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
2d2d0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
2d2e0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
2d2f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2d300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2d310 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
2d320 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65   ::no(loadSqlite
2d330 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  Ef6Files)]} then
2d340 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2d350 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c    tryLoadAssembl
2d360 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
2d370 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20  Lite.EF6.dll..
2d380 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
2d390 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2d3a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
2d3b0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49  o(loadSqliteNonI
2d3c0 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20  mplicitFiles)]}
2d3d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2d3e0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
2d3f0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61   exists ::no(loa
2d400 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  dSqlitePlatformF
2d410 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
2d420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
2d430 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p 2d440 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 latform] > 0} th 2d450 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2d460 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 tryLoadAss 2d470 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 embly System.Dat 2d480 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c a.SQLite.dll$pl
2d490 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
2d4a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2d4b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
2d4c0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
2d4d0 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74  loadSqliteArchit
2d4e0 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26  ectureFiles)] &&
2d4f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2d500 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
2d510 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75  ngth $architectu 2d520 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d re] > 0} then {. 2d530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2d540 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 tryLoadAssembly 2d550 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2d560 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 ite.dll$archite
2d570 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20  cture..
2d580 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2d590 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
2d5a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
2d5b0 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
2d5c0 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e   fileNameOnly $n 2d5d0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 2d5e0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 2d5f0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 2d600 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d610 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2d620 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2d630 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
2d640 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
2d650 6e 61 74 69 76 65 2f 20 24 66 69 6c 65 4e 61 6d  native/ $fileNam 2d660 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 eOnly \.. 2d670 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 "\"... 2d680 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f \"" [file versio 2d690 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 2d6a0 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 2d6b0 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
2d6c0 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  eOnly]] \"\n]..
2d6d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2d6e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2d6f0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
2d700 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c 65  eOnly $mixedFile 2d710 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 2d720 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 2d730 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2d740 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
2d750 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
2d760 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
2d770 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20  -- file version
2d780 6f 66 20 5c 22 22 20 6d 69 78 65 64 2f 20 24 66  of \"" mixed/ $f 2d790 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 ileNameOnly \.. 2d7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 2d7b0 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 \"... \"" [file 2d7c0 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 version [getBina 2d7d0 72 79 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 ryFileName \.. 2d7e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66$f
2d7f0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c 22  ileNameOnly]] \"
2d800 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
2d810 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2d820 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
2d830 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 61 6e  ileNameOnly $man 2d840 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d agedFileNames {. 2d850 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 2d860 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d870 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2d880 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2d890 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
2d8a0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
2d8b0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d  version of \"" m
2d8c0 61 6e 61 67 65 64 2f 20 24 66 69 6c 65 4e 61 6d  anaged/ $fileNam 2d8d0 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 eOnly \.. 2d8e0 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e 20 "\"... 2d8f0 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f \"" [file versio 2d900 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 2d910 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 2d920 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
2d930 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  eOnly]] \"\n]..
2d940 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
2d950 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
2d960 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
2d970 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e  gth $platform] > 2d980 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2d990 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 foreach fi 2d9a0 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 69 leNameOnly$nati
2d9b0 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
2d9c0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68             catch
2d9d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2d9e0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2d9f0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2da00 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 2da10 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 2da20 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 2da30 22 22 20 6e 61 74 69 76 65 2f 70 6c 61 74 66 6f "" native/platfo 2da40 72 6d 2f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rm/ \.. 2da50 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f$platfo
2da60 72 6d 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  rm / $fileNameOn 2da70 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 ly "\"... \"" [f 2da80 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 2da90 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e version 2daa0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 2dab0 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c ame$fileNameOnl
2dac0 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  y \..
2dad0 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 2dae0 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 ]] \"\n].. 2daf0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2db00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2db10 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 2db20 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c meOnly$mixedFil
2db30 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
2db40 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20        catch {..
2db50 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
2db60 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 2db70 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 2db80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2db90 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 2dba0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d 69 ersion of \"" mi 2dbb0 78 65 64 2f 70 6c 61 74 66 6f 72 6d 2f 20 5c 0d xed/platform/ \. 2dbc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2dbd0 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 20 24$platform / $2dbe0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 fileNameOnly "\" 2dbf0 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 5c 0d ... \"" [file \. 2dc00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2dc10 20 20 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 version [getB 2dc20 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
2dc30 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20  ileNameOnly \..
2dc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dc50 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22 5c   $platform]] \"\ 2dc60 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 2dc70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 2dc80 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2dc90 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 2dca0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
2dcb0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
2dcc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f   {..          fo
2dcd0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e  reach fileNameOn
2dce0 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61  ly $nativeFileNa 2dcf0 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 2dd00 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 2dd10 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 2dd20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2dd30 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
2dd40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dd50 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
2dd60 69 6f 6e 20 6f 66 20 5c 22 22 20 6e 61 74 69 76  ion of \"" nativ
2dd70 65 2f 61 72 63 68 69 74 65 63 74 75 72 65 2f 20  e/architecture/
2dd80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2dd90 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 2dda0 72 65 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f 6e re /$fileNameOn
2ddb0 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66  ly "\"... \"" [f
2ddc0 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
2ddd0 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e           version
2dde0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
2ddf0 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  ame $fileNameOnl 2de00 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y \.. 2de10 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63$architec
2de20 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20  ture]] \"\n]..
2de30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2de40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2de50 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
2de60 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65  leNameOnly $mixe 2de70 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 dFileNames {.. 2de80 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 20 catch 2de90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2dea0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2deb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2dec0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2ded0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69          "---- fi
2dee0 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22  le version of \"
2def0 22 20 6d 69 78 65 64 2f 61 72 63 68 69 74 65 63  " mixed/architec
2df00 74 75 72 65 2f 20 5c 0d 0a 20 20 20 20 20 20 20  ture/ \..
2df10 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68             $arch 2df20 69 74 65 63 74 75 72 65 20 2f 20 24 66 69 6c 65 itecture /$file
2df30 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e 20  NameOnly "\"...
2df40 5c 22 22 20 5b 66 69 6c 65 20 5c 0d 0a 20 20 20  \"" [file \..
2df50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 76                 v
2df60 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72  ersion [getBinar
2df70 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e  yFileName $fileN 2df80 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 ameOnly \.. 2df90 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72$ar
2dfa0 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22 5c  chitecture]] \"\
2dfb0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
2dfc0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
2dfd0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2dfe0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2dff0 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65  # NOTE: Grab the
2e000 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64   list of managed
2e010 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72 20   assemblies for
2e020 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
2e030 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ess..        #
2e040 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74 20       and report
2e050 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61  on the System.Da
2e060 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65  ta.SQLite relate
2e070 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20  d ones...
2e080 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
2e090 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
2e0a0 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
2e0b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
2e0c0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
2e0d0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
2e0e0 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 47 65 74  voke Utility Get
2e0f0 41 73 73 65 6d 62 6c 69 65 73 0d 0a 20 20 20 20  Assemblies..
2e100 20 20 20 20 20 20 7d 20 61 73 73 65 6d 62 6c 69        } assembli
2e110 65 73 5d 20 3d 3d 20 30 20 7c 7c 20 5b 63 61 74  es] == 0 || [cat
2e120 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
2e130 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
2e140 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e  AppDomain.Curren
2e150 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d  tDomain GetAssem
2e160 62 6c 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20  blies..
2e170 20 7d 20 61 73 73 65 6d 62 6c 69 65 73 5d 20 3d   } assemblies] =
2e180 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
2e190 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
2e1a0 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c 79  foreach assembly
2e1b0 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d 0a   $assemblies {.. 2e1c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 2e1d0 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 2e1e0 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 \{System.Data.SQ 2e1f0 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d Lite*$assembly]
2e200 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2e210 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
2e220 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 2e230 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 2e240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e250 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c "---- found l 2e260 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 oaded assembly: 2e270 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d "$assembly \n].
2e280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2e290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2e2a0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
2e2b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2e2c0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
2e2d0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 2e2e0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 est_channel \.. 2e2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 2e300 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 -- define consta 2e310 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 6d nts for \"System 2e320 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e 2e .Data.SQLite\".. 2e330 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 . ".... 2e340 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 2e350 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 2e360 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 2e370 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. 2e380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 Sy 2e390 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 2e3a0 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 .SQLite3 DefineC 2e3b0 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 onstants.. 2e3c0 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e 73 } defineCons 2e3d0 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 tants] == 0} the 2e3e0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2e3f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2e400 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2e410 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b  gs [formatList [
2e420 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20  lsort \..
2e430 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e 65           $define 2e440 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 Constants] <none 2e450 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 >] \n].. 2e460 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 2e470 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2e480 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e  :test_channel un
2e490 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20  known\n..
2e4a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
2e4b0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68  ...        catch
2e4c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
2e4d0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2e4e0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 2e4f0 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 "---- sourc 2e500 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 e version of \"S 2e510 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2e520 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a e.dll\"... ".... 2e530 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 2e540 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 2e550 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 2e560 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 2e570 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 2e580 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 2e590 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 2e5a0 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 Connection Provi 2e5b0 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 derVersion.. 2e5c0 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d } version] 2e5d0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 2e5e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 2e5f0 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 string length$v
2e600 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68  ersion] == 0} th
2e610 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2e620 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20      set version
2e630 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20  null..
2e640 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
2e650 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2e660 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2e670 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d gs$version \n].
2e680 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
2e690 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
2e6a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2e6b0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e hannel unknown\n 2e6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 2e6d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2e6e0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 2e6f0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2e700 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a  test_channel \..
2e710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2e720 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b  --- source check
2e730 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e  out of \"System.
2e740 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c  Data.SQLite.dll\
2e750 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  "... "....
2e760 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
2e770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
2e780 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
2e790 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
2e7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2e7b0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2e7c0 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
2e7d0 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f 75  tion ProviderSou
2e7e0 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 20  rceId..
2e7f0 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20   } sourceId] ==
2e800 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
2e810 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
2e820 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63  ng length $sourc 2e830 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then 2e840 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e850 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 set sourceId nu 2e860 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 2e870 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 }.. t 2e880 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
2e890 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
2e8a0 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d 0a   $sourceId \n].. 2e8b0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 2e8c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e8d0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2e8e0 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d  annel unknown\n.
2e8f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
2e900 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2e910 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
2e920 4e 4f 54 45 3a 20 52 65 73 65 74 20 63 61 63 68  NOTE: Reset cach
2e930 65 64 20 22 62 72 65 61 6b 20 69 6e 74 6f 20 64  ed "break into d
2e940 65 62 75 67 67 65 72 22 20 73 65 74 74 69 6e 67  ebugger" setting
2e950 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e 20   so that it can
2e960 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  be..        #
2e970 20 20 20 20 75 73 65 64 20 64 75 72 69 6e 67 20      used during
2e980 74 68 65 20 74 65 73 74 20 66 69 6c 65 2c 20 69  the test file, i
2e990 66 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 20  f needed...
2e9a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
2e9b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
2e9c0 3a 3a 6e 6f 28 72 65 73 65 74 42 72 65 61 6b 49  ::no(resetBreakI
2e9d0 6e 74 6f 44 65 62 75 67 67 65 72 29 5d 20 26 26  ntoDebugger)] &&
2e9e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2e9f0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
2ea00 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20  tCommand]} then
2ea10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
2ea20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
2ea30 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
2ea40 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
2ea50 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
2ea60 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
2ea70 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 48 65 6c  .Data.SQLite.Hel
2ea80 70 65 72 4d 65 74 68 6f 64 73 20 52 65 73 65 74  perMethods Reset
2ea90 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67 65  BreakIntoDebugge
2eaa0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 72  r..          } r
2eab0 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
2eac0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2ead0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 2eae0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 2eaf0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 2eb00 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 2eb10 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f 44 ResetBreakIntoD 2eb20 65 62 75 67 67 65 72 28 29 2e 2e 2e 20 6f 6b 5c ebugger()... ok\ 2eb30 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 2eb40 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 2eb50 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2eb60 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2eb70 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
2eb80 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
2eb90 63 61 6c 6c 20 52 65 73 65 74 42 72 65 61 6b 49  call ResetBreakI
2eba0 6e 74 6f 44 65 62 75 67 67 65 72 28 29 2e 2e 2e  ntoDebugger()...
2ebb0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20   error: " \..
2ebc0 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c               \n\
2ebd0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 2ebe0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2ebf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2ec00 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2ec10 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 TE: Check the av 2ec20 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 ailable builds ( 2ec30 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 and "releases") 2ec40 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 of SQLite and.. 2ec50 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 # S 2ec60 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2ec70 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 2ec80 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 2ec90 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 QLiteBuilds$::t
2eca0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
2ecb0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
2ecc0 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74  iteReleases $::t 2ecd0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 2ece0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2ecf0 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 # NOTE: Now, w 2ed00 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 e need to know i 2ed10 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 f the SQLite cor 2ed20 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 e library is ava 2ed30 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 ilable.. 2ed40 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 # (i.e. be 2ed50 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 cause the manage 2ed60 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 d-only System.Da 2ed70 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 ta.SQLite assemb 2ed80 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 ly can.. 2ed90 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 # load wit 2eda0 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 hout it; however 2edb0 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 , it cannot do a 2edc0 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 nything useful w 2edd0 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 ithout.. 2ede0 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 # it). If 2edf0 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 we are using th 2ee00 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 2ee10 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 embly and we alr 2ee20 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 eady.. # 2ee30 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 found it ( 2ee40 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f above), this sho 2ee50 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 uld always succe 2ee60 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ed... #.. 2ee70 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2ee80 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a SQLiteLibrary$:
2ee90 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d  :test_channel...
2eea0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2eeb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
2eec0 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  k if the SQLite
2eed0 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79  interop assembly
2eee0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a   is available...
2eef0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2ef00 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
2ef10 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74  eInterop $::test 2ef20 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 _channel.... 2ef30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2ef40 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 NOTE: Check the 2ef50 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 SQLite database 2ef60 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 and temporary d 2ef70 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 irectories... 2ef80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2ef90 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 checkForSQLiteDi 2efa0 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 rectories$::tes
2efb0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
2efc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2efd0 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
2efe0 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
2eff0 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d  various compile-
2f000 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65  time options nee
2f010 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20  ded for..
2f020 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63 6f   #       test co
2f030 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20 65  nstraints were e
2f040 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d  nabled for the m
2f050 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e  anaged assembly.
2f060 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20    There..
2f070 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d   #       are som
2f080 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
2f090 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74  ptions that must
2f0a0 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20   also have been
2f0b0 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20  enabled..
2f0c0 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 65   #       for the
2f0d0 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
2f0e0 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65  y in order to be
2f0f0 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72   effective.  For
2f100 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20   those..
2f110 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c  #       options,
2f120 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75   it will be assu
2f130 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73 20  med that it was
2f140 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
2f150 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20  interop..
2f160 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
2f170 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61 62  y if it was enab
2f180 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61  led for the mana
2f190 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ged assembly...
2f1a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2f1b0 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65    foreach define
2f1c0 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c  Constant [list \
2f1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 48  ..            CH
2f1e0 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f  ECK_STATE COUNT_
2f1f0 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54  HANDLE DEBUG INT
2f200 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52  EROP_CODEC INTER
2f210 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20  OP_DEBUG \..
2f220 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
2f230 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49  EXTENSION_FUNCTI
2f240 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35  ONS INTEROP_FTS5
2f250 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20  _EXTENSION \..
2f260 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
2f270 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44 20  P_INCLUDE_CEROD
2f280 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f  INTEROP_INCLUDE_
2f290 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49 4e  EXTRA INTEROP_IN
2f2a0 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20 20  CLUDE_SEE \..
2f2b0 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
2f2c0 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20  _INCLUDE_ZIPVFS
2f2d0 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58  INTEROP_JSON1_EX
2f2e0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
2f2f0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c         INTEROP_L
2f300 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45  EGACY_CLOSE INTE
2f310 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f  ROP_LOG INTEROP_
2f320 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
2f330 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
2f340 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45      INTEROP_REGE
2f350 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  XP_EXTENSION INT
2f360 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54  EROP_SESSION_EXT
2f370 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20  ENSION \..
2f380 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53 48        INTEROP_SH
2f390 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  A1_EXTENSION INT
2f3a0 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53  EROP_TEST_EXTENS
2f3b0 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ION \..
2f3c0 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59 50     INTEROP_TOTYP
2f3d0 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45  E_EXTENSION INTE
2f3e0 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c  ROP_VIRTUAL_TABL
2f3f0 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  E \..
2f400 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 4e   NET_20 NET_35 N
2f410 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45 54  ET_40 NET_45 NET
2f420 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45 54  _451 NET_452 NET
2f430 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a 20  _46 NET_461 \..
2f440 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f 34             NET_4
2f450 36 32 20 4e 45 54 5f 34 37 20 4e 45 54 5f 34 37  62 NET_47 NET_47
2f460 31 20 4e 45 54 5f 34 37 32 20 4e 45 54 5f 43 4f  1 NET_472 NET_CO
2f470 4d 50 41 43 54 5f 32 30 20 4e 45 54 5f 53 54 41  MPACT_20 NET_STA
2f480 4e 44 41 52 44 5f 32 30 20 5c 0d 0a 20 20 20 20  NDARD_20 \..
2f490 20 20 20 20 20 20 20 20 50 4c 41 54 46 4f 52 4d          PLATFORM
2f4a0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
2f4b0 4b 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45  K PRELOAD_NATIVE
2f4c0 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52 47 45  _LIBRARY RETARGE
2f4d0 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20  TABLE \..
2f4e0 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54 41 4e       SQLITE_STAN
2f4f0 44 41 52 44 20 54 48 52 4f 57 5f 4f 4e 5f 44 49  DARD THROW_ON_DI
2f500 53 50 4f 53 45 44 20 54 52 41 43 45 20 54 52 41  SPOSED TRACE TRA
2f510 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 5c 0d  CE_CONNECTION \.
2f520 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52 41  .            TRA
2f530 43 45 5f 44 45 54 45 43 54 49 4f 4e 20 54 52 41  CE_DETECTION TRA
2f540 43 45 5f 48 41 4e 44 4c 45 20 54 52 41 43 45 5f  CE_HANDLE TRACE_
2f550 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f 53 48  PRELOAD TRACE_SH
2f560 41 52 45 44 20 5c 0d 0a 20 20 20 20 20 20 20 20  ARED \..
2f570 20 20 20 20 54 52 41 43 45 5f 53 54 41 54 45 4d      TRACE_STATEM
2f580 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e 49 4e  ENT TRACE_WARNIN
2f590 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42  G TRACK_MEMORY_B
2f5a0 59 54 45 53 20 5c 0d 0a 20 20 20 20 20 20 20 20  YTES \..
2f5b0 20 20 20 20 55 53 45 5f 45 4e 54 49 54 59 5f 46      USE_ENTITY_F
2f5c0 52 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45 5f 49  RAMEWORK_6 USE_I
2f5d0 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50  NTEROP_DLL USE_P
2f5e0 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57  REPARE_V2 WINDOW
2f5f0 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  S] {..
2f600 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
2f610 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
2f620 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  e compile-time o
2f630 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20  ption is listed
2f640 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a  in the list of..
2f650 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2f660 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61    "define consta
2f670 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20  nts" kept track
2f680 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65  of by the manage
2f690 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20  d assembly...
2f6a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2f6b0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
2f6c0 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74  teDefineConstant
2f6d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2f6e0 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74$defineConstant
2f6f0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
2f700 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2f710 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
2f720 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  t to determine i
2f730 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c  f various compil
2f740 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e  e-time options n
2f750 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20  eeded for..
2f760 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20     #       test
2f770 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65  constraints were
2f780 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65   enabled for the
2f790 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
2f7a0 79 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20 20  y and/or..
2f7b0 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68    #       for th
2f7c0 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
2f7d0 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20  brary...
2f7e0 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  #..        forea
2f7f0 63 68 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  ch compileOption
2f800 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
2f810 20 20 20 20 20 20 43 4f 44 45 43 20 45 58 54 45        CODEC EXTE
2f820 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53 20  NSION_FUNCTIONS
2f830 48 41 53 5f 43 4f 44 45 43 20 49 4e 43 4c 55 44  HAS_CODEC INCLUD
2f840 45 5f 43 45 52 4f 44 20 49 4e 43 4c 55 44 45 5f  E_CEROD INCLUDE_
2f850 45 58 54 52 41 20 5c 0d 0a 20 20 20 20 20 20 20  EXTRA \..
2f860 20 20 20 20 20 49 4e 43 4c 55 44 45 5f 53 45 45       INCLUDE_SEE
2f870 20 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53 20   INCLUDE_ZIPVFS
2f880 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e 20  JSON1_EXTENSION
2f890 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 4c 4f 47  LEGACY_CLOSE LOG
2f8a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2f8b0 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45 4e  PERCENTILE_EXTEN
2f8c0 53 49 4f 4e 20 52 45 47 45 58 50 5f 45 58 54 45  SION REGEXP_EXTE
2f8d0 4e 53 49 4f 4e 20 53 45 53 53 49 4f 4e 5f 45 58  NSION SESSION_EX
2f8e0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
2f8f0 20 20 20 20 20 20 20 53 48 41 31 5f 45 58 54 45         SHA1_EXTE
2f900 4e 53 49 4f 4e 20 54 45 53 54 5f 45 58 54 45 4e  NSION TEST_EXTEN
2f910 53 49 4f 4e 20 54 4f 54 59 50 45 5f 45 58 54 45  SION TOTYPE_EXTE
2f920 4e 53 49 4f 4e 20 56 49 52 54 55 41 4c 5f 54 41  NSION VIRTUAL_TA
2f930 42 4c 45 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  BLE] {..
2f940 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
2f950 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
2f960 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
2f970 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65   option is liste
2f980 64 20 69 6e 20 74 68 65 20 6c 69 73 74 0d 0a 20  d in the list..
2f990 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2f9a0 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20 62   kept track of b
2f9b0 79 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73  y the interop as
2f9c0 73 65 6d 62 6c 79 20 61 6e 64 2f 6f 72 20 74 68  sembly and/or th
2f9d0 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20  e SQLite..
2f9e0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65      #       core
2f9f0 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20   library...
2fa00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2fa10 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65    checkForSQLite
2fa20 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 24 3a  CompileOption $: 2fa30 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 :test_channel$c
2fa40 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 0d 0a 20 20  ompileOption..
2fa50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2fa60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
2fa70 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
2fa80 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  he System.Data.S
2fa90 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20 77  QLite provider w
2faa0 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68  as compiled with
2fab0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2fac0 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61 6e    support for an
2fad0 79 20 65 6e 63 72 79 70 74 65 64 20 64 61 74 61  y encrypted data
2fae0 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  bases...
2faf0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
2fb00 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65  haveSQLiteDefine
2fb10 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f 50  Constant INTEROP
2fb20 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20  _CODEC] || \..
2fb30 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 53            [haveS
2fb40 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74  QLiteDefineConst
2fb50 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c  ant INTEROP_INCL
2fb60 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20 7b  UDE_SEE]} then {
2fb70 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
2fb80 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2fb90 20 4e 6f 77 20 63 68 65 63 6b 20 69 66 20 74 68   Now check if th
2fba0 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
2fbb0 6c 79 20 77 61 73 20 61 6c 73 6f 20 63 6f 6d 70  ly was also comp
2fbc0 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20 20  iled with..
2fbd0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75 70       #       sup
2fbe0 70 6f 72 74 20 66 6f 72 20 65 6e 63 72 79 70 74  port for encrypt
2fbf0 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a 20  ed databases...
2fc00 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2fc10 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
2fc20 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69  QLiteCompileOpti
2fc30 6f 6e 20 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a  on CODEC] || \..
2fc40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 68                [h
2fc50 61 76 65 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65  aveSQLiteCompile
2fc60 4f 70 74 69 6f 6e 20 49 4e 43 4c 55 44 45 5f 53  Option INCLUDE_S
2fc70 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  EE]} then {..
2fc80 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2fc90 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2fca0 46 69 6e 61 6c 6c 79 2c 20 63 68 65 63 6b 20 69  Finally, check i
2fcb0 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
2fcc0 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63 6f  e library was co
2fcd0 6d 70 69 6c 65 64 0d 0a 20 20 20 20 20 20 20 20  mpiled..
2fce0 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68      #       with
2fcf0 20 73 75 70 70 6f 72 74 20 66 6f 72 20 65 6e 63   support for enc
2fd00 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65 73  rypted databases
2fd10 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
2fd20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
2fd30 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 43 6f 6d   {[haveSQLiteCom
2fd40 70 69 6c 65 4f 70 74 69 6f 6e 20 48 41 53 5f 43  pileOption HAS_C
2fd50 4f 44 45 43 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ODEC]} then {..
2fd60 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
2fd70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
2fd80 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20 63  NOTE: Yes, add c
2fd90 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75 73  onstraint for us
2fda0 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
2fdb0 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ite...
2fdc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2fdd0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
2fde0 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt System.Data.S
2fdf0 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e  QLite.Encryption
2fe00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2fe10 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
2fe20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2fe30 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
2fe40 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65 74  NOTE: Try to set
2fe50 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74 20  up an interrupt
2fe60 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20 74  callback using t
2fe70 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67 67  he script debugg
2fe80 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  er..        #
2fe90 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63 61      that will ca
2fea0 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75 65  ncel all SQL que
2feb0 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73  ries in progress
2fec0 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73   for all databas
2fed0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
2fee0 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b     connections k
2fef0 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e 74  nown to this int
2ff00 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20  erpreter...
2ff10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
2ff20 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
2ff30 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65 72  ::no(sqliteInter
2ff40 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d 20  ruptCallback)]}
2ff50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2ff60 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72 75    setupDbInterru
2ff70 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74 65  ptCallback $::te 2ff80 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 65 st_channel$::te
2ff90 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20  st_log..
2ffa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  }....        #..
2ffb0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2ffc0 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e 61  Check for the na
2ffd0 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70 74  tive runtime opt
2ffe0 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c 64  ion, which would
2fff0 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20 20   mean we are..
30000 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
30010 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d 6f  ing the mixed-mo
30020 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  de assembly...
30030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
30040 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65   checkForRuntime
30050 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63  Option $::test_c 30060 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a 0d hannel native... 30070 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30080 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 30090 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 k if the test su 300a0 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e 74 ite should count 300b0 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 the number of c 300c0 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 onnections.. 300d0 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 65 # "ope 300e0 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 64 ned" and "closed 300f0 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c 20 " from the pool 30100 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e 67 when determining 30110 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 20 if a test.. 30120 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 73 # pass 30130 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 74 ed. Disabling t 30140 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 20 his behavior is 30150 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 73 sometimes necess 30160 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 ary (e.g... 30170 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e # durin 30180 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 65 g the release te 30190 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 62 sting process) b 301a0 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 65 ecause there are 301b0 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 20 several.. 301c0 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 20 # tests 301d0 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 65 that rely on the 301e0 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 6f "opened from po 301f0 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 20 ol" count being 30200 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 20 greater.. 30210 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a 65 # than ze 30220 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 73 ro. These tests 30230 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f may fail due to 30240 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d 69 the non-determi 30250 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 20 nistic.. 30260 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f 72 # behavior 30270 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c 20 of the CLR GC, 30280 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 20 even when there 30290 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 65 is no bug in the 302a0 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 23 code.. # 302b0 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 73 being tes 302c0 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ted... #. 302d0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 302e0 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 rRuntimeOption$
302f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e  ::test_channel n
30300 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a 20  oPoolCounts....
30310 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
30320 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
30330 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  if the test suit
30340 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 68 61  e should use sha
30350 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e 0d  red-cache mode..
30360 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
30370 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74      checkForRunt
30380 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73  imeOption $::tes 30390 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 64 t_channel shared 303a0 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 20 Cache.... 303b0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 303c0 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 72 TE: Report the r 303d0 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 72 esource usage pr 303e0 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 ior to running a 303f0 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 ny tests... 30400 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 30410 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 72 portSQLiteResour 30420 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e ces$::test_chan
30430 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  nel....        #
30440 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
30450 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74 20  : Grab the list
30460 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c 65  of native module
30470 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  s for the curren
30480 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a 20  t process and..
30490 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
304a0 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79 73  eport on the Sys
304b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
304c0 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a 20  related ones...
304d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
304e0 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74    if {[haveSQLit
304f0 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d  eObjectCommand]}
30500 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
30510 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20 5b     set modules [
30520 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d  object invoke \.
30530 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
30540 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
30550 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 75 72  s.Process.GetCur
30560 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64 75  rentProcess Modu
30570 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  les]....
30580 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
30590 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20 24   -alias module $305a0 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20 20 modules {.. 305b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 305c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th 305d0 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e 61 e module file na 305e0 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 65 20 me here must be 305f0 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 normalized... 30600 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 30610 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 set file 30620 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 Name [file norma 30630 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 69 lize [$module Fi
30640 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20  leName]]..
30650 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
30660 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 61 69  meOnly [file tai
30670 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  l $fileName].... 30680 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 30690 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 [lsearch -exact 306a0 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 -nocase -- \.. 306b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 306c0 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 etNativeLibraryF 306d0 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66 ileNamesOnly]$f
306e0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20  ileNameOnly] !=
306f0 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..
30700 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
30710 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 30720 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 30730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30740 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 "---- found loa 30750 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69 76 ded SQLite nativ 30760 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c 65 e library module 30770 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 : " \.. 30780 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
30790 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  me \n]..
307a0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c      } elseif {[l
307b0 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e  search -exact -n
307c0 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20 20  ocase -- \..
307d0 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
307e0 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79 46  InteropAssemblyF
307f0 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 66  ileNamesOnly] $f 30800 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d 20 ileNameOnly] != 30810 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 -1} then {.. 30820 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 30830 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
30840 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
30850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30860 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61   "---- found loa
30870 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65 72  ded SQLite inter
30880 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64 75  op assembly modu
30890 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  le: " \..
308a0 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65             $file 308b0 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 Name \n].. 308c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 308d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 308e0 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch 308f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp 30900 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
30910 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  nel \..
30920 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69       "---- compi
30930 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options
30940 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20  for SQLite core
30950 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a  library... "....
30960 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
30970 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
30980 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
30990 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
309a0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
309b0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
309c0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
309d0 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f  3 SQLiteCompileO
309e0 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20  ptions..
309f0 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f    } compileOptio
30a00 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ns] == 0} then {
30a10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
30a20 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 30a30 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 30a40 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f [formatList [lso 30a50 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rt \.. 30a60 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f 70$compileOp
30a70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c  tions] <none>] \
30a80 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  n]..          }
30a90 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
30aa0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 30ab0 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 t_channel unknow 30ac0 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n\n.. } 30ad0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 30ae0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 30af0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 30b00 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
30b10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
30b20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d 74   "---- compile-t
30b30 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72 20  ime options for
30b40 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61  SQLite interop a
30b50 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a  ssembly... "....
30b60 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
30b70 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
30b80 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
30b90 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
30ba0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
30bb0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
30bc0 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
30bd0 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65  3 InteropCompile
30be0 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  Options..
30bf0 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69     } compileOpti
30c00 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ons] == 0} then
30c10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
30c20 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 30c30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 30c40 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 30c50 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 30c60 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f$compileO
30c70 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  ptions] <none>]
30c80 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
30c90 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
30ca0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 30cb0 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 30cc0 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 30cd0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 30ce0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 30cf0 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 30d00 74 68 65 20 61 63 74 69 76 65 20 74 65 73 74 20 the active test 30d10 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 20 constraints... 30d20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 30d30 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
30d40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
30d50 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72 61  gs "---- constra
30d60 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20 20  ints: " \..
30d70 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c 69         [formatLi
30d80 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43 6f  st [lsort [getCo
30d90 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f 6e  nstraints]] <non
30da0 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  e>] \n]....
30db0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
30dc0 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20 74  NOTE: Save the t
30dd0 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 20  est constraints
30de0 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 65 61  for use by threa
30df0 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  ds created in th
30e00 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  is..        #
30e10 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e 20      application
30e20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69 73  domain.  This is
30e30 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 61 75   necessary becau
30e40 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c 65  se all the Eagle
30e50 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
30e60 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74 22    "test context"
30e70 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20   information is
30e80 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20 20  per-thread...
30e90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
30ea0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
30eb0 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61  s ::test_constra
30ec0 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ints]} then {..
30ed0 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74           set ::t
30ee0 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73 20  est_constraints
30ef0 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 43  $::eagle_tests(C 30f00 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 20 onstraints).. 30f10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 30f20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 30f30 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 61 OTE: Load the "a 30f40 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 73 fter-constraints 30f50 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 " custom per-use 30f60 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 r and/or per-hos 30f70 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 30f80 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 test settings 30f90 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 now... # 30fa0 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 .. upleve 30fb0 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 l 1 [list loadSQ 30fc0 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 LiteTestSettings 30fd0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
30fe0 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20 20   .after]....
30ff0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
31000 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73   NOTE: If necess
31010 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68 61 72  ary, enable shar
31020 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e 6f  ed-cache mode no
31030 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  w...        #..
31040 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52         if {[hasR
31050 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68 61  untimeOption sha
31060 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e 20  redCache]} then
31070 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e 61  {..          ena
31080 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 24  bleSharedCache $31090 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 ::test_channel t 310a0 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a rue.. }.. 310b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 310c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 310d0 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 w when our tests 310e0 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 actually began 310f0 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 (now)... 31100 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 31110 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
31120 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
31130 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
31140 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  - System.Data.SQ
31150 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 61 6e  Lite tests began
31160 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20   at " \..
31170 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d       [clock form
31180 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64  at [clock second
31190 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d  s]] \n]..      }
311a0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
311b0 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65  proc runSQLiteTe
311c0 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65 20  stFilesPrologue
311d0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
311e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
311f0 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75  p running our cu
31200 73 74 6f 6d 20 66 69 6c 65 73 20 70 72 6f 6c 6f  stom files prolo
31210 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20  gue if the main
31220 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  one has been..
31230 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70      #       skip
31240 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ped...      #..
31250 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
31260 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c  exists ::no(prol
31270 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68  ogue.eagle)]} th
31280 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70  en {..        up
31290 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20  level 1 {..
312a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
312b0 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20    # NOTE: Setup
312c0 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 74 68  the variables th
312d0 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65 20  at refer to the
312e0 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 74 61  various non-data
312f0 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20   files..
31300 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72    #       requir
31310 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20  ed by the tests
31320 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20  in this file...
31330 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
31340 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74 79        set entity
31350 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65  FrameworkDllFile
31360 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31370 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
31380 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65 77  ame EntityFramew
31390 6f 72 6b 2e 64 6c 6c 20 74 72 75 65 5d 0d 0a 0d  ork.dll true]...
313a0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 69  .          set i
313b0 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20  nstallerExeFile
313c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
313d0 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
313e0 6d 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65  me Installer.exe
313f0 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....
31400 20 20 20 20 73 65 74 20 73 71 6c 69 74 65 44 65      set sqliteDe
31410 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5c 0d  signerDllFile \.
31420 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
31430 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65  getBuildFileName
31440 20 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65 72   SQLite.Designer
31450 2e 64 6c 6c 20 74 72 75 65 5d 0d 0a 0d 0a 20 20  .dll true]....
31460 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73 74          set syst
31470 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46  emDataSQLiteDllF
31480 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ile \..
31490 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69       [getBuildFi
314a0 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
314b0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 74 72  ta.SQLite.dll tr
314c0 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue]....
314d0 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61 53   set systemDataS
314e0 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65  QLiteLinqDllFile
314f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31500 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
31510 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
31520 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20  SQLite.Linq.dll
31530 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  true]....
31540 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74     set systemDat
31550 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c  aSQLiteEf6DllFil
31560 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
31570 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
31580 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
31590 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 20  .SQLite.EF6.dll
315a0 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  true]....
315b0 20 20 20 73 65 74 20 74 65 73 74 45 78 65 46 69     set testExeFi
315c0 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  le [getBuildFile
315d0 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 20 74 72  Name test.exe tr
315e0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ue]..          s
315f0 65 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69  et testLinqExeFi
31600 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  le [getBuildFile
31610 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65 78  Name testlinq.ex
31620 65 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20  e true]..
31630 20 20 20 73 65 74 20 74 65 73 74 45 66 36 45 78     set testEf6Ex
31640 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46  eFile [getBuildF
31650 69 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36 2e  ileName testef6.
31660 65 78 65 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20  exe true]....
31670 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
31680 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75      # NOTE: Setu
31690 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20  p the variables
316a0 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68  that refer to th
316b0 65 20 76 61 72 69 6f 75 73 20 64 61 74 61 20 66  e various data f
316c0 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  iles..
316d0 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64  #       required
316e0 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69 6e   by the tests in
316f0 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20 20   this file...
31700 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
31710 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e 71      set testLinq
31720 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  OutFile [file na
31730 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
31740 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
31750 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
31760 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65 73  estDataPath] tes
31770 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a 20  tlinq.out]]....
31780 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72           set nor
31790 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b  thwindEfDbFile [
317a0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
317b0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
317c0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
317d0 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20  e dirname [file
317e0 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69  dirname [getSQLi
317f0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 5d  teTestDataPath]]
31800 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] \..
31810 20 20 20 74 65 73 74 6c 69 6e 71 20 6e 6f 72 74     testlinq nort
31820 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d 0a  hwindEF.db]]....
31830 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
31840 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65  nWalDbFile [file
31850 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
31860 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
31870 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
31880 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
31890 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20  nonWal.db]]....
318a0 20 20 20 20 20 20 20 20 20 73 65 74 20 77 61 6c           set wal
318b0 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  DbFile [file nat
318c0 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
318d0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
318e0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
318f0 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c 2e  stDataPath] wal.
31900 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  db]]....
31910 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
31920 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f   NOTE: The vario
31930 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73  us install/unins
31940 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75  tall log files u
31950 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d  sed to test the.
31960 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
31970 20 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20 63     design-time c
31980 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c  omponent install
31990 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  er...          #
319a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
319b0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
319c0 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  5LogFile [file n
319d0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
319e0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
319f0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
31a00 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e  TestDataPath] In
31a10 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
31a20 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  005.log]]....
31a30 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 49         set testI
31a40 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46  nstallVs2008LogF
31a50 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
31a60 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
31a70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
31a80 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
31a90 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c  ataPath] Install
31aa0 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c  er_Test_Vs2008.l
31ab0 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
31ac0 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c    set testInstal
31ad0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b  lVs2010LogFile [
31ae0 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
31af0 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20  [file join \..
31b00 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
31b10 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61  SQLiteTestDataPa
31b20 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65  th] Installer_Te
31b30 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d  st_Vs2010.log]].
31b40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  ...          set
31b50 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
31b60 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  12LogFile [file
31b70 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
31b80 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
31b90 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
31ba0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
31bb0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
31bc0 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2012.log]]....
31bd0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
31be0 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  InstallVs2013Log
31bf0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
31c00 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
31c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31c20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
31c30 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
31c40 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e  ler_Test_Vs2013.
31c50 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
31c60 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
31c70 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20  llVs2015LogFile
31c80 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
31c90 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
31ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
31cb0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
31cc0 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
31cd0 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d 5d  est_Vs2015.log]]
31ce0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
31cf0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
31d00 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  017LogFile [file
31d10 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
31d20 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
31d30 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
31d40 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
31d50 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
31d60 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2017.log]]....
31d70 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
31d80 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35  tUninstallVs2005
31d90 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
31da0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
31db0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
31dc0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
31dd0 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
31de0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
31df0 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2005.log]]....
31e00 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
31e10 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c  UninstallVs2008L
31e20 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
31e30 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
31e40 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
31e50 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
31e60 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
31e70 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
31e80 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  008.log]]....
31e90 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
31ea0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f  ninstallVs2010Lo
31eb0 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
31ec0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
31ed0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
31ee0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
31ef0 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
31f00 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
31f10 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  10.log]]....
31f20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e        set testUn
31f30 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67  installVs2012Log
31f40 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
31f50 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
31f60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31f70 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
31f80 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
31f90 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
31fa0 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  2.log]]....
31fb0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
31fc0 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46  nstallVs2013LogF
31fd0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
31fe0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
31ff0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
32000 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
32010 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
32020 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33  ller_Test_Vs2013
32030 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
32040 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
32050 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69  stallVs2015LogFi
32060 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
32070 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
32080 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
32090 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
320a0 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
320b0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35 2e  ler_Test_Vs2015.
320c0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
320d0 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73     set testUnins
320e0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c  tallVs2017LogFil
320f0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
32100 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
32110 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
32120 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
32130 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c  aPath] Uninstall
32140 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e 6c  er_Test_Vs2017.l
32150 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  og]]....
32160 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23    ##############
32170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32190 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
321a0 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
321b0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
321c0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 68 65 63  exists ::no(chec
321d0 6b 46 6f 72 53 71 6c 69 74 65 46 69 6c 65 73 29  kForSqliteFiles)
321e0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
321f0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
32200 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
32210 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
32220 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
32230 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e 74   [file tail $ent 32240 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 ityFrameworkDllF 32250 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 32260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 ch 32270 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
32280 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74 79  _channel $entity 32290 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 FrameworkDllFile 322a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 322b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 322c0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 322d0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 322e0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 322f0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 32300 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 78 ail$installerEx
32310 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b  eFile]]]} then {
32320 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
32330 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65  checkForFile $te 32340 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 74 st_channel$inst
32350 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e 73  allerExeFile Ins
32360 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20 20  taller.exe..
32370 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
32380 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68           if {![h
32390 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
323a0 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
323b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
323c0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73     [file tail $s 323d0 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c qliteDesignerDll 323e0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 323f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 32400 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
32410 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69 74  t_channel $sqlit 32420 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 eDesignerDllFile 32430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 32440 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 32450 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 32460 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 32470 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 32480 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 32490 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 ail$systemDataS
324a0 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  QLiteDllFile]]]}
324b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
324c0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
324d0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 324e0 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c l$systemDataSQL
324f0 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20 20  iteDllFile..
32500 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
32510 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68           if {![h
32520 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  aveConstraint [a
32530 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20  ppendArgs file_
32540 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
32550 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 73     [file tail $s 32560 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c ystemDataSQLiteL 32570 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 inqDllFile]]]} t 32580 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 32590 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 325a0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
325b0 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  $systemDataSQLit 325c0 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 20 eLinqDllFile.. 325d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 325e0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 325f0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 32600 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 32610 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 32620 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 32630 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74$systemDataSQLit
32640 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20  eEf6DllFile]]]}
32650 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
32660 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
32670 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 32680 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
32690 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20 20  teEf6DllFile..
326a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
326b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
326c0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
326d0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
326e0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
326f0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
32700 24 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d 7d  $testExeFile]]]} 32710 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 32720 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 32730 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
32740 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20 74  l $testExeFile t 32750 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 est.exe.. 32760 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 32770 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 32780 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 32790 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 327a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 327b0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 [file tail$test
327c0 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d 20  LinqExeFile]]]}
327d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
327e0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
327f0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 32800 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c$testLinqExeFil
32810 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d 0a  e testlinq.exe..
32820 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32830 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
32840 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
32850 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
32860 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
32870 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
32880 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69 6c  l $testEf6ExeFil 32890 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 328a0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 chec 328b0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 kForFile$test_c
328c0 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36 45  hannel $testEf6E 328d0 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e 65 xeFile testef6.e 328e0 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 xe.. 328f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 32900 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 32910 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 32920 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 32930 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 [file 32940 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 4f tail$testLinqO
32950 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  utFile]]]} then
32960 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
32970 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 32980 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 est_channel$tes
32990 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20 20  tLinqOutFile..
329a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
329b0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
329c0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
329d0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65  [appendArgs file
329e0 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _ \..
329f0 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20       [file tail
32a00 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46 69  $northwindEfDbFi 32a10 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 32a20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 32a30 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
32a40 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77 69  channel $northwi 32a50 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 20 ndEfDbFile.. 32a60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 32a70 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 if {![h 32a80 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 aveConstraint [a 32a90 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 ppendArgs file_ 32aa0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 32ab0 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6e [file tail$n
32ac0 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d 20  onWalDbFile]]]}
32ad0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
32ae0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69        checkForFi
32af0 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c  le $test_channel 32b00 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d 0a$nonWalDbFile..
32b10 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
32b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
32b30 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  {![haveConstrain
32b40 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69  t [appendArgs fi
32b50 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le_ \..
32b60 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69         [file tai
32b70 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d  l $walDbFile]]]} 32b80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 32b90 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 checkForF 32ba0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 ile$test_channe
32bb0 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20 20  l $walDbFile.. 32bc0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 32bd0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 32be0 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 32bf0 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 32c00 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 32c10 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 32c20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
32c30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  05LogFile]]]} th
32c40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
32c50 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
32c60 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
32c70 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
32c80 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  5LogFile..
32c90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
32ca0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
32cb0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
32cc0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
32cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
32ce0 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 32cf0 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f tInstallVs2008Lo 32d00 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 32d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 32d20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
32d30 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 32d40 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 InstallVs2008Log 32d50 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 File.. 32d60 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 32d70 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 32d80 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 32d90 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 32da0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 32db0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
32dc0 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
32dd0 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
32de0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
32df0 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 32e00 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 hannel$testInst
32e10 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65  allVs2010LogFile
32e20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
32e30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
32e40 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
32e50 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
32e60 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
32e70 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
32e80 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  ail $testInstall 32e90 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d 5d Vs2012LogFile]]] 32ea0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 32eb0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 32ec0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
32ed0 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  el $testInstallV 32ee0 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 s2012LogFile.. 32ef0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 32f00 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 32f10 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 [haveConstraint 32f20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 [appendArgs file 32f30 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 _ \.. 32f40 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 [file tail 32f50 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
32f60 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68  13LogFile]]]} th
32f70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
32f80 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
32f90 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
32fa0 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
32fb0 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20  3LogFile..
32fc0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
32fd0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76         if {![hav
32fe0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  eConstraint [app
32ff0 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d  endArgs file_ \.
33000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
33010 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73   [file tail $tes 33020 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 33030 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b gFile]]]} then { 33040 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 33050 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
33060 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74  st_channel $test 33070 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 InstallVs2015Log 33080 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 File.. 33090 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 330a0 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e if {![haveCon 330b0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 330c0 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 rgs file_ \.. 330d0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 330e0 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 le tail$testIns
330f0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c  tallVs2017LogFil
33100 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e]]]} then {..
33110 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63              chec
33120 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63  kForFile $test_c 33130 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 hannel$testInst
33140 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65  allVs2017LogFile
33150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33160 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33170 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
33180 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
33190 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
331a0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
331b0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 331c0 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d llVs2005LogFile] 331d0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 331e0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 331f0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
33200 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 33210 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 33220 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 33230 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 33240 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 33250 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 33260 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 33270 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 33280 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
33290 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d  llVs2008LogFile]
332a0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
332b0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
332c0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 332d0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
332e0 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
332f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33300 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33310 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
33320 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
33330 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
33340 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
33350 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 33360 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d llVs2010LogFile] 33370 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 33380 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 33390 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
333a0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 333b0 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 333c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 333d0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 333e0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 333f0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 33400 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 33410 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 33420 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
33430 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d  llVs2012LogFile]
33440 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
33450 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
33460 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 33470 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
33480 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
33490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
334a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
334b0 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
334c0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
334d0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
334e0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
334f0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 33500 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d llVs2013LogFile] 33510 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 33520 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 33530 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
33540 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 33550 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 allVs2013LogFile 33560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 33570 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 33580 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 f {![haveConstra 33590 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs 335a0 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 file_ \.. 335b0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 [file t 335c0 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 ail$testUninsta
335d0 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 5d  llVs2015LogFile]
335e0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
335f0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
33600 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 33610 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 nnel$testUninst
33620 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
33630 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
33640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
33650 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61  f {![haveConstra
33660 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
33670 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20  file_ \..
33680 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74           [file t
33690 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61  ail $testUninsta 336a0 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 5d llVs2017LogFile] 336b0 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ]]} then {.. 336c0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 336d0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
336e0 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  nnel $testUninst 336f0 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 33700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 33710 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 33720 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 33730 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 33740 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 proc runSQLiteTe 33750 73 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 stFilesEpilogue 33760 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 33770 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 33780 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 33790 73 74 6f 6d 20 66 69 6c 65 73 20 65 70 69 6c 6f stom files epilo 337a0 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 gue if the main 337b0 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 one has been.. 337c0 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 # skip 337d0 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ped... #.. 337e0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 337f0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 6c exists ::no(epil 33800 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68 ogue.eagle)]} th 33810 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 en {.. up 33820 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 level 1 {.. 33830 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f unset -noco 33840 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 mplain \.. 33850 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e testUnin 33860 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 stallVs2017LogFi 33870 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c le testUninstall 33880 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5c 0d Vs2015LogFile \. 33890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 338a0 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 estUninstallVs20 338b0 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 6e 13LogFile testUn 338c0 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 installVs2012Log 338d0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 338e0 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 testUninst 338f0 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 33900 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 33910 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2008LogFile \.. 33920 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73 tes 33930 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 tUninstallVs2005 33940 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 33950 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 33960 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 33970 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 testInstallVs2 33980 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 015LogFile testI 33990 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 nstallVs2013LogF 339a0 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 339b0 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c testInstall 339c0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 65 Vs2012LogFile te 339d0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c stInstallVs2010L 339e0 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 339f0 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 testInst 33a00 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 allVs2008LogFile 33a10 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 testInstallVs20 33a20 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 20 05LogFile.... 33a30 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f unset -no 33a40 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 complain \.. 33a50 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 77 northw 33a60 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 74 indEfDbFile test 33a70 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a 20 LinqOutFile \.. 33a80 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 6c wal 33a90 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 46 DbFile nonWalDbF 33aa0 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 ile.... 33ab0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 33ac0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 in \.. 33ad0 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 69 testEf6ExeFi 33ae0 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 69 le testLinqExeFi 33af0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 le \.. 33b00 20 20 20 20 74 65 73 74 45 78 65 46 69 6c 65 20 testExeFile 33b10 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 33b20 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 Ef6DllFile \.. 33b30 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 74 syst 33b40 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e 71 emDataSQLiteLinq 33b50 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44 61 DllFile systemDa 33b60 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 taSQLiteDllFile 33b70 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 33b80 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 sqliteDesignerD 33b90 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 72 llFile installer 33ba0 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 ExeFile \.. 33bb0 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 46 entityF 33bc0 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 0d rameworkDllFile. 33bd0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 33be0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 33bf0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 proc runSQLit 33c00 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d eTestEpilogue {} 33c10 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 33c20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 33c30 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74 running our cust 33c40 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 74 om epilogue if t 33c50 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20 he main one has 33c60 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 been.. # 33c70 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 skipped... 33c80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 33c90 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 33ca0 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 67 :no(epilogue.eag 33cb0 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 le)]} then {.. 33cc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 33cd0 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 68 # NOTE: Show wh 33ce0 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 74 en our tests act 33cf0 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f 77 ually ended (now 33d00 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 33d10 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
33d20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
33d30 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
33d40 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53 79          "---- Sy
33d50 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
33d60 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74 20   tests ended at
33d70 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
33d80 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20 5b   [clock format [
33d90 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d 20  clock seconds]]
33da0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  \n]....        #
33db0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
33dc0 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 69 6c  : Load the "epil
33dd0 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 65 72  ogue" custom per
33de0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
33df0 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 20 20  -host test..
33e00 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74      #       sett
33e10 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
33e20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
33e30 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
33e40 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
33e50 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 33e60 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65 5d 0d nnel .epilogue]. 33e70 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 33e80 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 # BUGFIX: 33e90 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 Before checking 33ea0 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 the final resour 33eb0 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 ces in use by SQ 33ec0 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 Lite, make.. 33ed0 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75 # su 33ee0 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 re both of the P 33ef0 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 RAGMA related di 33f00 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 rectory names ar 33f10 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 e freed... 33f20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 33f30 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 33f40 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 tories$::test_c
33f50 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20  hannel true....
33f60 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
33f70 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72    # NOTE: Also r
33f80 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72  eport the resour
33f90 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72  ce usage after r
33fa0 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73  unning the tests
33fb0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
33fc0 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69        reportSQLi
33fd0 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74  teResources $::t 33fe0 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 33ff0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 34000 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 # NOTE: Report 34010 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 the critical ha 34020 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 ndle counts afte 34030 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 r running the te 34040 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d sts... #. 34050 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 . getSQLi 34060 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 teHandleCounts$
34070 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
34080 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
34090 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
340a0 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 61 62  necessary, disab
340b0 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20  le shared-cache
340c0 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  mode now...
340d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
340e0 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
340f0 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65 5d  ion sharedCache]
34100 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
34110 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65 64      enableShared
34120 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63 68  Cache \$::test_ch
34130 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20  annel false..
34140 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
34150 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
34160 4f 54 45 3a 20 52 65 73 74 6f 72 65 20 74 68 65  OTE: Restore the
34170 20 70 72 65 76 69 6f 75 73 6c 79 20 73 61 76 65   previously save
34180 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61  d environment va
34190 72 69 61 62 6c 65 73 20 74 68 61 74 20 77 65 0d  riables that we.
341a0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
341b0 20 63 68 61 6e 67 65 64 20 66 6f 72 20 74 68 65   changed for the
341c0 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20   test suite...
341d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
341e0 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d   restoreEnvironm
341f0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5c 0d 0a  entVariables \..
34200 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73              [lis
34210 74 20 49 6e 69 74 69 61 6c 69 7a 65 5f 53 51 4c  t Initialize_SQL
34220 69 74 65 4c 6f 67 5d 20 3a 3a 74 65 73 74 53 75  iteLog] ::testSu
34230 69 74 65 53 61 76 65 64 45 6e 76 0d 0a 20 20 20  iteSavedEnv..
34240 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
34250 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23      ############
34260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34270 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34280 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34290 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
342a0 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
342b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
342c0 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e 4c  ## END Eagle ONL
342d0 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23  Y ##############
342e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
342f0 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
34300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34310 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34320 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34330 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34340 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20  #..  }....  #..
34350 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68   # NOTE: Save th
34360 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 69  e name of the di
34370 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69  rectory containi
34380 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20  ng this file...
34390 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66 6f   #..  if {![info
343a0 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f 64   exists common_d
343b0 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20  irectory]} then
343c0 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 6f  {..    set commo
343d0 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  n_directory [fil
343e0 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20  e dirname [info
343f0 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a 0d  script]]..  }...
34400 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20  .  #..  # NOTE:
34410 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73 74  Provide the Syst
34420 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74  em.Data.SQLite t
34430 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20 74  est package to t
34440 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d  he interpreter..
34450 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65 20  .  #..  package
34460 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e 44  provide System.D
34470 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74 20  ata.SQLite.Test
34480 31 2e 30 0d 0a 7d 0d 0a                          1.0..}..