System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 7ec6e2c1d0d51416d4963cea289231d4e5543ab9:

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 20 4e   NetStandard20 N
1e00: 65 74 53 74 61 6e 64 61 72 64 32 31 5d 0d 0a 20  etStandard21]..
1e10: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1e20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e30: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
1e40: 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f  e default list o
1e50: 66 20 74 65 73 74 20 79 65 61 72 73 20 28 69 2e  f test years (i.
1e60: 65 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20 20 20 20  e. all)...
1e70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
1e80: 75 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  urn [list \..
1e90: 20 20 20 20 20 20 20 20 20 32 30 30 35 20 32 30           2005 20
1ea0: 30 38 20 32 30 31 30 20 32 30 31 32 20 32 30 31  08 2010 2012 201
1eb0: 33 20 32 30 31 35 20 32 30 31 37 20 4e 65 74 53  3 2015 2017 NetS
1ec0: 74 61 6e 64 61 72 64 32 30 20 4e 65 74 53 74 61  tandard20 NetSta
1ed0: 6e 64 61 72 64 32 31 5d 0d 0a 20 20 20 20 20 20  ndard21]..
1ee0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
1ef0: 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20   #..    # NOTE:
1f00: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 69  This procedure i
1f10: 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65 6e  s only used when
1f20: 20 61 64 64 69 6e 67 20 73 68 69 6d 6d 65 64 20   adding shimmed
1f30: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
1f40: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70 72  ...    #..    pr
1f50: 6f 63 20 67 65 74 42 75 69 6c 64 43 6c 72 56 65  oc getBuildClrVe
1f60: 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20  rsion {} {..
1f70: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
1f80: 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5d 20 26  ts ::test_clr] &
1f90: 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68  & [string length
1fa0: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5d 20 3e 20   $::test_clr] > 1fb0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1fc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1fd0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 1fe0: 65 63 69 66 69 65 64 20 74 65 73 74 20 76 65 72 ecified test ver 1ff0: 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 sion for the CLR 2000: 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 . If this varia 2010: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ble.. # 2020: 20 20 20 20 20 69 73 20 6e 6f 74 20 73 65 74 2c is not set, 2030: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c the default val 2040: 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 ue will be based 2050: 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e on whether or n 2060: 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ot.. # 2070: 20 20 20 20 45 61 67 6c 65 20 68 61 73 20 62 65 Eagle has be 2080: 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 69 en compiled agai 2090: 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e 30 nst the CLR v2.0 20a0: 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 or CLR v4.0... 20b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 20c0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
20d0: 5f 63 6c 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c  _clr..      } el
20e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
20f0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2100: 20 43 68 65 63 6b 20 69 66 20 45 61 67 6c 65 20   Check if Eagle
2110: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65  has been compile
2120: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c  d against the CL
2130: 52 20 76 34 2e 30 2e 20 20 49 66 20 73 6f 2c 0d  R v4.0.  If so,.
2140: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
2150: 20 6a 75 73 74 20 75 73 65 20 74 68 61 74 20 43   just use that C
2160: 4c 52 20 76 65 72 73 69 6f 6e 2e 20 20 4f 74 68  LR version.  Oth
2170: 65 72 77 69 73 65 2c 20 75 73 65 20 74 68 65 20  erwise, use the
2180: 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 0d  version for the.
2190: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
21a0: 20 43 4c 52 20 76 32 2e 30 2e 20 20 49 66 20 61   CLR v2.0.  If a
21b0: 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69 6e  nother major [in
21c0: 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72 73  compatible] vers
21d0: 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52 0d 0a  ion of the CLR..
21e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
21f0: 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68 69  is released, thi
2200: 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61 76  s check will hav
2210: 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  e to be changed.
2220: 20 20 54 68 65 20 64 65 66 61 75 6c 74 0d 0a 20    The default..
2230: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76         #       v
2240: 65 72 73 69 6f 6e 20 76 61 6c 75 65 20 66 6f 72  ersion value for
2250: 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 43 4c   a particular CL
2260: 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62 65  R version may be
2270: 20 6f 76 65 72 72 69 64 64 65 6e 0d 0a 20 20 20   overridden..
2280: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 20       #       by
2290: 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f 62  setting the glob
22a0: 61 6c 20 76 61 72 69 61 62 6c 65 20 22 74 65 73  al variable "tes
22b0: 74 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72  t_clr_v$X", wher 22c0: 65 20 22 24 58 22 20 6d 61 79 0d 0a 20 20 20 20 e "$X" may..
22d0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 63 75 72      #       [cur
22e0: 72 65 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65  rently] be eithe
22f0: 72 20 22 32 22 20 6f 72 20 22 34 22 2e 0d 0a 20  r "2" or "4"...
2300: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
2310: 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74    if {[haveConst
2320: 72 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69  raint imageRunti
2330: 6d 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  me40]} then {..
2340: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e           if {[in
2350: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
2360: 5f 63 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20  _clr_v4] && \..
2370: 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74               [st
2380: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t 2390: 65 73 74 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 7d est_clr_v4] > 0} 23a0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 23b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 23c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 23d0: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 23e0: 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 st version for t 23f0: 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 he CLR v4.0... 2400: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2410: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 2420: 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 0d 0a$::test_clr_v4..
2430: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
2440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2450: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
2460: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
2470: 65 66 61 75 6c 74 20 74 65 73 74 20 76 65 72 73  efault test vers
2480: 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20  ion for the CLR
2490: 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20  v4.0...
24a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
24b0: 20 20 72 65 74 75 72 6e 20 34 2e 30 2e 33 30 33    return 4.0.303
24c0: 31 39 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64  19; # TODO: Good
24d0: 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61   "fallback" defa
24e0: 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  ult?..
24f0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
2500: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  e {..          i
2510: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
2520: 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 32 5d 20 26  ::test_clr_v2] &
2530: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
2540: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
2550: 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 32  h $::test_clr_v2 2560: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 2570: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 2580: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 2590: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 25a0: 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e ied test version 25b0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e for the CLR v2. 25c0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 25d0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 25e0: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c eturn$::test_cl
25f0: 72 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20  r_v2..
2600: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
2610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2620: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
2630: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73   the default tes
2640: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
2650: 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20  e CLR v2.0...
2660: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
2670: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 32          return 2
2680: 2e 30 2e 35 30 37 32 37 3b 20 23 20 54 4f 44 4f  .0.50727; # TODO
2690: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
26a0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
26b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
26c0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
26d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
26e0: 67 65 74 42 75 69 6c 64 4e 65 74 46 78 20 7b 7d  getBuildNetFx {}
26f0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
2700: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
2710: 66 20 74 68 65 20 74 65 73 74 20 2e 4e 45 54 20  f the test .NET
2720: 46 72 61 6d 65 77 6f 72 6b 20 73 65 74 74 69 6e  Framework settin
2730: 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  g has been overr
2740: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20  idden by..
2750: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72  #       the user
2760: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f   (e.g. on the co
2770: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20  mmand line)...
2780: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
2790: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
27a0: 74 65 73 74 5f 6e 65 74 5f 66 78 5d 20 26 26 20  test_net_fx] &&
27b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
27c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t 27d0: 65 73 74 5f 6e 65 74 5f 66 78 5d 20 3e 20 30 7d est_net_fx] > 0} 27e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 27f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 2800: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 2810: 69 66 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 ified test .NET 2820: 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 Framework... 2830: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2840: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 65 eturn$::test_ne
2850: 74 5f 66 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c  t_fx..      } el
2860: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  se {..        se
2870: 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c 64  t year [getBuild
2880: 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 73  Year]..        s
2890: 65 74 20 79 65 61 72 56 61 72 4e 61 6d 65 20 5b  et yearVarName [
28a0: 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 74 65 73  appendArgs ::tes
28b0: 74 5f 6e 65 74 5f 66 78 5f 20 24 79 65 61 72 5d  t_net_fx_ $year] 28c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 28d0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 79 65 [info exists$ye
28e0: 61 72 56 61 72 4e 61 6d 65 5d 20 26 26 20 5c 0d  arVarName] && \.
28f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74  .            [st
2900: 72 69 6e 67 20 6c 65 6e 67 74 68 20 5b 73 65 74  ring length [set
2910: 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d 5d 20   $yearVarName]] 2920: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 2930: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2940: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 2950: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 2960: 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 st .NET Framewor 2970: 6b 2c 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 k, based on the 2980: 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 build.. 2990: 20 23 20 20 20 20 20 20 20 79 65 61 72 2e 0d 0a # year... 29a0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 29b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 return [s 29c0: 65 74 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d et$yearVarName]
29d0: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
29e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
29f0: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
2a00: 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74  E: Fallback to t
2a10: 68 65 20 22 77 65 6c 6c 20 6b 6e 6f 77 6e 22 20  he "well known"
2a20: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 76  .NET Framework v
2a30: 65 72 73 69 6f 6e 20 74 68 61 74 0d 0a 20 20 20  ersion that..
2a40: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
2a50: 73 20 6d 6f 73 74 20 63 6c 6f 73 65 6c 79 20 61  s most closely a
2a60: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61  ssociated with a
2a70: 20 70 61 72 74 69 63 75 6c 61 72 20 76 65 72 73   particular vers
2a80: 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 20 20 20 20  ion of..
2a90: 20 20 23 20 20 20 20 20 20 20 56 69 73 75 61 6c    #       Visual
2aa0: 20 53 74 75 64 69 6f 2e 0d 0a 20 20 20 20 20 20   Studio...
2ab0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2ac0: 20 73 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d   switch -exact -
2ad0: 2d 20 24 79 65 61 72 20 7b 0d 0a 20 20 20 20 20  - $year {.. 2ae0: 20 20 20 20 20 20 20 32 30 30 35 20 7b 0d 0a 20 2005 {.. 2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 ret 2b00: 75 72 6e 20 6e 65 74 46 78 32 30 0d 0a 20 20 20 urn netFx20.. 2b10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2b20: 20 20 20 20 20 20 20 20 32 30 30 38 20 7b 0d 0a 2008 {.. 2b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re 2b40: 74 75 72 6e 20 6e 65 74 46 78 33 35 0d 0a 20 20 turn netFx35.. 2b50: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2b60: 20 20 20 20 20 20 20 20 20 32 30 31 30 20 7b 0d 2010 {. 2b70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 . r 2b80: 65 74 75 72 6e 20 6e 65 74 46 78 34 30 0d 0a 20 eturn netFx40.. 2b90: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2ba0: 20 20 20 20 20 20 20 20 20 20 32 30 31 32 20 7b 2012 { 2bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2bc0: 72 65 74 75 72 6e 20 6e 65 74 46 78 34 35 0d 0a return netFx45.. 2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2be0: 20 20 20 20 20 20 20 20 20 20 20 32 30 31 33 20 2013 2bf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2c00: 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 35 31 return netFx451 2c10: 3b 20 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 ; # TODO: Or "ne 2c20: 74 46 78 34 35 32 22 3f 0d 0a 20 20 20 20 20 20 tFx452"?.. 2c30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2c40: 20 20 20 20 20 32 30 31 35 20 7b 0d 0a 20 20 20 2015 {.. 2c50: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur 2c60: 6e 20 6e 65 74 46 78 34 36 3b 20 23 20 54 4f 44 n netFx46; # TOD 2c70: 4f 3a 20 4f 72 20 22 6e 65 74 46 78 34 36 31 22 O: Or "netFx461" 2c80: 20 2f 20 22 6e 65 74 46 78 34 36 32 22 3f 0d 0a / "netFx462"?.. 2c90: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2ca0: 20 20 20 20 20 20 20 20 20 20 20 32 30 31 37 20 2017 2cb0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2cc0: 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 37 3b return netFx47; 2cd0: 20 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 # TODO: Or "net 2ce0: 46 78 34 37 31 22 20 2f 20 22 6e 65 74 46 78 34 Fx471" / "netFx4 2cf0: 37 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 72"?.. 2d00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2d10: 20 4e 65 74 53 74 61 6e 64 61 72 64 32 30 20 7b NetStandard20 { 2d20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2d30: 72 65 74 75 72 6e 20 6e 65 74 53 74 61 6e 64 61 return netStanda 2d40: 72 64 32 30 0d 0a 20 20 20 20 20 20 20 20 20 20 rd20.. 2d50: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2d60: 20 4e 65 74 53 74 61 6e 64 61 72 64 32 31 20 7b NetStandard21 { 2d70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2d80: 72 65 74 75 72 6e 20 6e 65 74 53 74 61 6e 64 61 return netStanda 2d90: 72 64 32 31 0d 0a 20 20 20 20 20 20 20 20 20 20 rd21.. 2da0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2db0: 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 default {.. 2dc0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 2dd0: 20 6e 65 74 46 78 33 35 3b 20 23 20 54 4f 44 4f netFx35; # TODO 2de0: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b : Good "fallback 2df0: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 " default?.. 2e00: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2e10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2e20: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 2e30: 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 }..... #.. 2e40: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 # NOTE: This pr 2e50: 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 72 ocedure should r 2e60: 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 eturn non-zero i 2e70: 66 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 f the configured 2e80: 20 74 65 73 74 0d 0a 20 20 20 20 23 20 20 20 20 test.. # 2e90: 20 20 20 70 6c 61 74 66 6f 72 6d 20 69 73 20 6d platform is m 2ea0: 6f 73 74 20 6c 69 6b 65 6c 79 20 74 68 65 20 64 ost likely the d 2eb0: 65 66 61 75 6c 74 20 66 6f 72 20 74 68 69 73 20 efault for this 2ec0: 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 20 20 23 0d machine... #. 2ed0: 0a 20 20 20 20 70 72 6f 63 20 69 73 44 65 66 61 . proc isDefa 2ee0: 75 6c 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d ultBuildPlatform 2ef0: 20 7b 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 { {verbose true 2f00: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 2f10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 75 # NOTE: Ru 2f20: 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 20 69 nning on WoW64 i 2f30: 73 20 6e 65 76 65 72 20 74 68 65 20 64 65 66 61 s never the defa 2f40: 75 6c 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 ult platform... 2f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 2f60: 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 {[isRunningWoW6 2f70: 34 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 4]} then {.. 2f80: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
2f90: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2fa0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2fb0: 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 t_channel \.. 2fc0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2fd0: 20 64 65 74 65 63 74 65 64 20 6e 6f 6e 2d 64 65 detected non-de 2fe0: 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 20 28 fault platform ( 2ff0: 57 6f 57 36 34 29 5c 6e 22 0d 0a 20 20 20 20 20 WoW64)\n".. 3000: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 3010: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 3020: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 3030: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 3040: 54 68 69 73 20 68 61 73 20 61 20 67 6f 6f 64 20 This has a good 3050: 63 68 61 6e 63 65 20 6f 66 20 62 65 69 6e 67 20 chance of being 3060: 74 68 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 the default plat 3070: 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a form... #.. 3080: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
3090: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
30a0: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 30b0: 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 t_channel "---- 30c0: 64 65 74 65 63 74 65 64 20 64 65 66 61 75 6c 74 detected default 30d0: 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d 0a 20 20 platform\n".. 30e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 30f0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 3100: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 3110: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 etBuildPlatform 3120: 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 { native } {.. 3130: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 3140: 69 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 74 ists ::test_plat 3150: 66 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 20 form] && \.. 3160: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 3170: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c 61 ngth$::test_pla
3180: 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e  tform] > 0} then
3190: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
31a0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50         # NOTE: P
31b0: 6f 73 73 69 62 6c 79 20 75 73 65 20 74 68 65 20  ossibly use the
31c0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 70  specified test p
31d0: 6c 61 74 66 6f 72 6d 2e 20 20 49 66 20 74 68 69  latform.  If thi
31e0: 73 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20  s variable..
31f0: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 6e      #       is n
3200: 6f 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 61  ot set, the defa
3210: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ult value will b
3220: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 6d  e based on the m
3230: 61 63 68 69 6e 65 0d 0a 20 20 20 20 20 20 20 20  achine..
3240: 23 20 20 20 20 20 20 20 61 72 63 68 69 74 65 63  #       architec
3250: 74 75 72 65 2e 20 20 4e 6f 72 6d 61 6c 6c 79 2c  ture.  Normally,
3260: 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 66 6f   this is done fo
3270: 72 20 62 75 69 6c 64 73 20 74 68 61 74 20 69 6e  r builds that in
3280: 76 6f 6c 76 65 0d 0a 20 20 20 20 20 20 20 20 23  volve..        #
3290: 20 20 20 20 20 20 20 74 68 65 20 6d 69 78 65 64         the mixed
32a0: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d  -mode assembly..
32b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
32c0: 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72      return [expr
32d0: 20 7b 24 6e 61 74 69 76 65 20 3f 20 24 3a 3a 74   {$native ?$::t
32e0: 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 22  est_platform : "
32f0: 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  "}]..      } els
3300: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
3310: 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65  s ::test_machine
3320: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
3330: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
3340: 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65   $::test_machine 3350: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 3360: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3370: 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 # NOTE: For na 3380: 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65 74 tive builds, ret 3390: 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d urn the platform 33a0: 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 name correspond 33b0: 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 ing to.. 33c0: 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 # the test 33d0: 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 machine archite 33e0: 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 cture; otherwise 33f0: 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 , return an empt 3400: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 3410: 20 20 20 73 74 72 69 6e 67 2e 20 20 4e 6f 72 6d string. Norm 3420: 61 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 64 6f ally, this is do 3430: 6e 65 20 66 6f 72 20 62 75 69 6c 64 73 20 74 68 ne for builds th 3440: 61 74 20 69 6e 76 6f 6c 76 65 20 74 68 65 0d 0a at involve the.. 3450: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 3460: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 3470: 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d bly... #. 3480: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 3490: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 [expr {.. 34a0: 20 20 20 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61$native ? [ma
34b0: 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20  chineToPlatform
34c0: 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d  $::test_machine] 34d0: 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d : "".. } 34e0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 ].. } elsei 34f0: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 3500: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d ::tcl_platform(m 3510: 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b achine)]} then { 3520: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 3530: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 3540: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 native builds, 3550: 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 return the platf 3560: 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 orm name corresp 3570: 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 onding to.. 3580: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6d # the m 3590: 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 achine architect 35a0: 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 ure; otherwise, 35b0: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 35c0: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 string... 35d0: 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c # Normall 35e0: 79 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65 20 y, this is done 35f0: 66 6f 72 20 62 75 69 6c 64 73 20 74 68 61 74 20 for builds that 3600: 69 6e 76 6f 6c 76 65 20 74 68 65 20 6d 69 78 65 involve the mixe 3610: 64 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 d-mode.. 3620: 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 # assembly 3630: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 3640: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex 3650: 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 pr {.. 3660: 24 6e 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69$native ? [machi
3670: 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a  neToPlatform $:: 3680: 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 tcl_platform(mac 3690: 68 69 6e 65 29 5d 20 3a 20 22 22 0d 0a 20 20 20 hine)] : "".. 36a0: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d }].. } 36b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 36c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 36d0: 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61 TE: No machine a 36e0: 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61 rchitecture is a 36f0: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e vailable, return 3700: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 an empty string 3710: 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ... # 3720: 20 20 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 It is importa 3730: 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 61 6e 20 nt to return an 3740: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 68 65 72 empty string her 3750: 65 20 62 65 63 61 75 73 65 20 74 68 65 0d 0a 20 e because the.. 3760: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 # r 3770: 65 73 75 6c 74 20 6f 66 20 74 68 69 73 20 70 72 esult of this pr 3780: 6f 63 65 64 75 72 65 20 6d 61 79 20 62 65 20 75 ocedure may be u 3790: 73 65 64 20 77 69 74 68 20 5b 66 69 6c 65 20 6a sed with [file j 37a0: 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 20 20 23 oin]... # 37b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 37c0: 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 "".. }.. 37d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 37e0: 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 getBuildConfigu 37f0: 72 61 74 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 ration {} {.. 3800: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3810: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 22 TE: See if the " 3820: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 20 73 configuration" s 3830: 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 etting has been 3840: 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 overridden by th 3850: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 3860: 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 user (e.g. on t 3870: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 he command line) 3880: 2e 20 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f . This helps co 3890: 6e 74 72 6f 6c 20 65 78 61 63 74 6c 79 0d 0a 20 ntrol exactly.. 38a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 69 # whi 38b0: 63 68 20 73 65 74 20 6f 66 20 62 69 6e 61 72 69 ch set of binari 38c0: 65 73 20 77 65 20 61 72 65 20 74 65 73 74 69 6e es we are testin 38d0: 67 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 62 75 g (i.e. those bu 38e0: 69 6c 74 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 ilt in the.. 38f0: 20 20 23 20 20 20 20 20 20 20 22 44 65 62 75 67 # "Debug 3900: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 62 " or "Release" b 3910: 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 uild configurati 3920: 6f 6e 73 29 2e 20 20 54 6f 20 6f 76 65 72 72 69 ons). To overri 3930: 64 65 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 de this.. # 3940: 20 20 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 value via 3950: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e the command lin 3960: 65 2c 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 e, enter a comma 3970: 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e nd similar to on 3980: 65 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 e of.. # 3990: 20 20 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e the followin 39a0: 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 g (all on one li 39b0: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ne):.. #.. 39c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 39d0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 39e0: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 39f0: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 3a00: 6f 6e 20 44 65 62 75 67 22 0d 0a 20 20 20 20 20 on Debug".. 3a10: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 # -file 3a20: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 3a30: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 agle.. #.. 3a40: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 # Eag 3a50: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 leShell.exe -any 3a60: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 Initialize "set 3a70: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 3a80: 6f 6e 20 52 65 6c 65 61 73 65 22 0d 0a 20 20 20 on Release".. 3a90: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 3aa0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 3ab0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 3ac0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 . # E 3ad0: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 66 agleShell.exe -f 3ae0: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 3af0: 6c 2e 65 61 67 6c 65 20 2d 70 72 65 54 65 73 74 l.eagle -preTest 3b00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 3b10: 20 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 "unset -nocomp 3b20: 6c 61 69 6e 20 74 65 73 74 5f 63 6f 6e 66 69 67 lain test_config 3b30: 75 72 61 74 69 6f 6e 22 0d 0a 20 20 20 20 20 20 uration".. 3b40: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 3b50: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 3b60: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 _configuration] 3b70: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 3b80: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
3b90: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
3ba0: 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tion] > 0} then
3bb0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
3bc0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
3bd0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
3be0: 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69  test configurati
3bf0: 6f 6e 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  on.  The default
3c00: 20 76 61 6c 75 65 20 75 73 65 64 0d 0a 20 20 20   value used..
3c10: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72       #       for
3c20: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69   this variable i
3c30: 73 20 74 79 70 69 63 61 6c 6c 79 20 22 52 65 6c  s typically "Rel
3c40: 65 61 73 65 22 2c 20 61 73 20 73 65 74 20 62 79  ease", as set by
3c50: 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 20   the test..
3c60: 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 65     #       suite
3c70: 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20   itself...
3c80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
3c90: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  urn $::test_conf 3ca0: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 iguration.. 3cb0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 3cc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 3cd0: 4e 4f 54 45 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 NOTE: Normally, 3ce0: 77 65 20 77 69 6c 6c 20 6e 65 76 65 72 20 68 69 we will never hi 3cf0: 74 20 74 68 69 73 20 63 61 73 65 20 62 65 63 61 t this case beca 3d00: 75 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 use the value of 3d10: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 3d20: 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 66 69 test confi 3d30: 67 75 72 61 74 69 6f 6e 20 76 61 72 69 61 62 6c guration variabl 3d40: 65 20 69 73 20 61 6c 77 61 79 73 20 73 65 74 20 e is always set 3d50: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit 3d60: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 3d70: 20 20 20 69 74 73 65 6c 66 3b 20 68 6f 77 65 76 itself; howev 3d80: 65 72 2c 20 69 74 20 63 61 6e 20 62 65 20 6f 76 er, it can be ov 3d90: 65 72 72 69 64 64 65 6e 20 75 73 69 6e 67 20 74 erridden using t 3da0: 68 65 20 75 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 he unset command 3db0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 3dc0: 20 20 66 72 6f 6d 20 74 68 65 20 2d 70 72 65 54 from the -preT 3dd0: 65 73 74 20 6f 70 74 69 6f 6e 20 74 6f 20 74 68 est option to th 3de0: 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 3df0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3e00: 20 20 72 65 74 75 72 6e 20 24 3a 3a 65 61 67 6c return$::eagl
3e10: 65 5f 70 6c 61 74 66 6f 72 6d 28 63 6f 6e 66 69  e_platform(confi
3e20: 67 75 72 61 74 69 6f 6e 29 0d 0a 20 20 20 20 20  guration)..
3e30: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
3e40: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43    proc getBuildC
3e50: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 7b 7d  onfigurations {}
3e60: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
3e70: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
3e80: 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65  f the list of te
3e90: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st configuration
3ea0: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
3eb0: 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20 20  idden by..
3ec0: 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65 72  #       the user
3ed0: 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f   (e.g. on the co
3ee0: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20  mmand line)...
3ef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
3f00: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
3f10: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69  test_configurati
3f20: 6f 6e 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ons] && \..
3f30: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a       [llength $: 3f40: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 :test_configurat 3f50: 69 6f 6e 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ions] > 0} then 3f60: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 3f70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 # NOTE: Us 3f80: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 e the specified 3f90: 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e list of test con 3fa0: 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 figurations... 3fb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3fc0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
3fd0: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 0d 0a  configurations..
3fe0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
3ff0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
4000: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74     # NOTE: Use t
4010: 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74 20  he default list
4020: 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72  of test configur
4030: 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20  ations...
4040: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
4050: 72 6e 20 5b 6c 69 73 74 20 44 65 62 75 67 20 52  rn [list Debug R
4060: 65 6c 65 61 73 65 5d 0d 0a 20 20 20 20 20 20 7d  elease]..      }
4070: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
4080: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e  proc getBuildCon
4090: 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78  figurationSuffix
40a0: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
40b0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65        # NOTE: Se
40c0: 65 20 69 66 20 74 68 65 20 74 65 73 74 20 63 6f  e if the test co
40d0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66  nfiguration suff
40e0: 69 78 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ix has been over
40f0: 72 69 64 64 65 6e 20 62 79 0d 0a 20 20 20 20 20  ridden by..
4100: 20 23 20 20 20 20 20 20 20 74 68 65 20 75 73 65   #       the use
4110: 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63  r (e.g. on the c
4120: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20  ommand line)...
4130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4140: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4150: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
4160: 69 6f 6e 5f 73 75 66 66 69 78 5d 20 26 26 20 5c  ion_suffix] && \
4170: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
4180: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 4190: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 41a0: 5f 73 75 66 66 69 78 5d 20 3e 20 30 7d 20 74 68 _suffix] > 0} th 41b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 41c0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 41d0: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 41e0: 65 64 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 ed test configur 41f0: 61 74 69 6f 6e 20 73 75 66 66 69 78 2e 0d 0a 20 ation suffix... 4200: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4210: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 return$::test
4220: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5f 73  _configuration_s
4230: 75 66 66 69 78 0d 0a 20 20 20 20 20 20 7d 20 65  uffix..      } e
4240: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
4250: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4260: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
4270: 74 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61  t test configura
4280: 74 69 6f 6e 20 73 75 66 66 69 78 2c 20 77 68 69  tion suffix, whi
4290: 63 68 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20  ch should be..
42a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
42b0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a   empty string...
42c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
42d0: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
42e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
42f0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69  .    proc getBui
4300: 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 75 72  ldNativeConfigur
4310: 61 74 69 6f 6e 53 75 66 66 69 78 20 7b 7d 20 7b  ationSuffix {} {
4320: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
4330: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
4340: 74 68 65 20 74 65 73 74 20 6e 61 74 69 76 65 20  the test native
4350: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75  configuration su
4360: 66 66 69 78 20 68 61 73 20 62 65 65 6e 0d 0a 20  ffix has been..
4370: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 76 65       #       ove
4380: 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75  rridden by the u
4390: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65  ser (e.g. on the
43a0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d   command line)..
43b0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
43c0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
43d0: 20 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f 63   ::test_native_c
43e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5f 73 75 66  onfiguration_suf
43f0: 66 69 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  fix] && \..
4400: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
4410: 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 61 74 69  gth $::test_nati 4420: 76 65 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e ve_configuration 4430: 5f 73 75 66 66 69 78 5d 20 3e 20 30 7d 20 74 68 _suffix] > 0} th 4440: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 4450: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 4460: 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 Use the specifi 4470: 65 64 20 74 65 73 74 20 6e 61 74 69 76 65 20 63 ed test native c 4480: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 onfiguration suf 4490: 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d fix... #. 44a0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 44b0: 24 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f 63$::test_native_c
44c0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5f 73 75 66  onfiguration_suf
44d0: 66 69 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  fix..      } els
44e0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
44f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
4500: 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20  Use the default
4510: 74 65 73 74 20 6e 61 74 69 76 65 20 63 6f 6e 66  test native conf
4520: 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66 69 78  iguration suffix
4530: 2c 20 77 68 69 63 68 0d 0a 20 20 20 20 20 20 20  , which..
4540: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
4550: 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  be an empty stri
4560: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ng...        #..
4570: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
4580: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  "..      }..
4590: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
45a0: 65 74 42 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e  etBuildNativeCon
45b0: 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78  figurationSuffix
45c0: 46 6f 72 44 6f 74 4e 65 74 43 6f 72 65 20 7b 20  ForDotNetCore {
45d0: 73 75 66 66 69 78 20 7d 20 7b 0d 0a 20 20 20 20  suffix } {..
45e0: 20 20 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43    if {[isDotNetC
45f0: 6f 72 65 5d 20 26 26 20 5b 69 73 57 69 6e 64 6f  ore] && [isWindo
4600: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ws]} then {..
4610: 20 20 20 20 20 72 65 74 75 72 6e 20 4e 61 74 69       return Nati
4620: 76 65 4f 6e 6c 79 3b 20 23 20 48 41 43 4b 3a 20  veOnly; # HACK:
4630: 53 70 65 63 69 61 6c 20 63 61 73 65 2c 20 75 73  Special case, us
4640: 65 20 32 30 31 35 20 6e 61 74 69 76 65 20 62 69  e 2015 native bi
4650: 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20 20 20 7d  naries...      }
4660: 20 65 6c 73 65 69 66 20 7b 5b 73 74 72 69 6e 67   elseif {[string
4670: 20 6c 65 6e 67 74 68 20 24 73 75 66 66 69 78 5d   length $suffix] 4680: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 4690: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 73 75 return$su
46a0: 66 66 69 78 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ffix..      } el
46b0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  se {..        re
46c0: 74 75 72 6e 20 5b 67 65 74 42 75 69 6c 64 4e 61  turn [getBuildNa
46d0: 74 69 76 65 43 6f 6e 66 69 67 75 72 61 74 69 6f  tiveConfiguratio
46e0: 6e 53 75 66 66 69 78 5d 0d 0a 20 20 20 20 20 20  nSuffix]..
46f0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
4700: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6f   proc getBuildCo
4710: 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69  nfigurationSuffi
4720: 78 65 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  xes {} {..
4730: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
4740: 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74   See if the list
4750: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75   of test configu
4760: 72 61 74 69 6f 6e 20 73 75 66 66 69 78 65 73 20  ration suffixes
4770: 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20  has been..
4780: 23 20 20 20 20 20 20 20 6f 76 65 72 72 69 64 64  #       overridd
4790: 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 20 28  en by the user (
47a0: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
47b0: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
47c0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
47d0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
47e0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  st_configuration
47f0: 5f 73 75 66 66 69 78 65 73 5d 20 26 26 20 5c 0d  _suffixes] && \.
4800: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
4810: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  gth $::test_conf 4820: 69 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 iguration_suffix 4830: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d es] > 0} then {. 4840: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 4850: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 4860: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 the specified li 4870: 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 st of test confi 4880: 67 75 72 61 74 69 6f 6e 73 20 73 75 66 66 69 78 gurations suffix 4890: 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 48a0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
48b0: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
48c0: 74 69 6f 6e 5f 73 75 66 66 69 78 65 73 0d 0a 20  tion_suffixes..
48d0: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
48e0: 69 73 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74  isDotNetCore]} t
48f0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4900: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4910: 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45  : Running on .NE
4920: 54 20 43 6f 72 65 2c 20 70 72 69 6f 72 69 74 69  T Core, prioriti
4930: 7a 65 20 69 74 73 20 74 65 73 74 20 63 6f 6e 66  ze its test conf
4940: 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20  iguration..
4950: 20 20 20 23 20 20 20 20 20 20 20 73 75 66 66 69     #       suffi
4960: 78 65 73 20 66 6f 72 20 6c 69 62 72 61 72 79 20  xes for library
4970: 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20 20  files...
4980: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
4990: 6e 20 5b 6c 69 73 74 20 4e 65 74 53 74 61 6e 64  n [list NetStand
49a0: 61 72 64 32 30 20 4e 65 74 53 74 61 6e 64 61 72  ard20 NetStandar
49b0: 64 32 31 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d  d21 ""]..      }
49c0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
49d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
49e0: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61  TE: Use the defa
49f0: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74  ult list of test
4a00: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20   configurations
4a10: 73 75 66 66 69 78 65 73 2e 0d 0a 20 20 20 20 20  suffixes...
4a20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
4a30: 74 75 72 6e 20 5b 6c 69 73 74 20 22 22 5d 0d 0a  turn [list ""]..
4a40: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4a50: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
4a60: 75 69 6c 64 45 78 74 72 61 20 7b 7d 20 7b 0d 0a  uildExtra {} {..
4a70: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
4a80: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 65 78  exists ::test_ex
4a90: 74 72 61 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  tra] && \..
4aa0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
4ab0: 67 74 68 20 24 3a 3a 74 65 73 74 5f 65 78 74 72  gth $::test_extr 4ac0: 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a a] > 0} then {.. 4ad0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 4ae0: 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 4af0: 68 65 20 73 70 65 63 69 66 69 65 64 20 65 78 74 he specified ext 4b00: 72 61 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 ra output direct 4b10: 6f 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ory... #. 4b20: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 4b30: 24 3a 3a 74 65 73 74 5f 65 78 74 72 61 0d 0a 20$::test_extra..
4b40: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
4b50: 69 73 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74  isDotNetCore]} t
4b60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
4b70: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
4b80: 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45  : Running on .NE
4b90: 54 20 43 6f 72 65 2c 20 75 73 65 20 74 68 65 20  T Core, use the
4ba0: 65 78 74 72 61 20 6f 75 74 70 75 74 20 64 69 72  extra output dir
4bb0: 65 63 74 6f 72 79 20 66 6f 72 0d 0a 20 20 20 20  ectory for..
4bc0: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
4bd0: 61 72 79 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20  ary files...
4be0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
4bf0: 65 74 75 72 6e 20 6e 65 74 73 74 61 6e 64 61 72  eturn netstandar
4c00: 64 32 2e 30 0d 0a 20 20 20 20 20 20 7d 20 65 6c  d2.0..      } el
4c10: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
4c20: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
4c30: 20 4e 6f 20 65 78 74 72 61 20 6f 75 74 70 75 74   No extra output
4c40: 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 72 65   directory is re
4c50: 71 75 69 72 65 64 2e 0d 0a 20 20 20 20 20 20 20  quired...
4c60: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
4c70: 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  rn ""..      }..
4c80: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
4c90: 6f 63 20 67 65 74 42 75 69 6c 64 45 78 74 72 61  oc getBuildExtra
4ca0: 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  s {} {..      #.
4cb0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
4cc0: 65 65 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f  ee if the list o
4cd0: 66 20 65 78 74 72 61 20 6f 75 74 70 75 74 20 64  f extra output d
4ce0: 69 72 65 63 74 6f 72 69 65 73 20 68 61 73 20 62  irectories has b
4cf0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 0d 0a  een overridden..
4d00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79        #       by
4d10: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20   the user (e.g.
4d20: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
4d30: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ine)...      #..
4d40: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
4d50: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 65 78  exists ::test_ex
4d60: 74 72 61 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tras] && \..
4d70: 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24        [llength $4d80: 3a 3a 74 65 73 74 5f 65 78 74 72 61 73 5d 20 3e ::test_extras] > 4d90: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 4da0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4db0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 4dc0: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 pecified list of 4dd0: 20 65 78 74 72 61 20 6f 75 74 70 75 74 20 64 69 extra output di 4de0: 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 rectories... 4df0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 4e00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 65 78 eturn$::test_ex
4e10: 74 72 61 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tras..      } el
4e20: 73 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43  seif {[isDotNetC
4e30: 6f 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ore]} then {..
4e40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4e50: 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67   # NOTE: Running
4e60: 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 70   on .NET Core, p
4e70: 72 69 6f 72 69 74 69 7a 65 20 69 74 73 20 65 78  rioritize its ex
4e80: 74 72 61 20 6f 75 74 70 75 74 20 64 69 72 65 63  tra output direc
4e90: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20  tory..        #
4ea0: 20 20 20 20 20 20 66 6f 72 20 6c 69 62 72 61 72        for librar
4eb0: 79 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20  y files...
4ec0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
4ed0: 75 72 6e 20 5b 6c 69 73 74 20 6e 65 74 73 74 61  urn [list netsta
4ee0: 6e 64 61 72 64 32 2e 30 20 22 22 5d 0d 0a 20 20  ndard2.0 ""]..
4ef0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
4f00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4f10: 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 64 65 66   # NOTE: Use def
4f20: 61 75 6c 74 20 6c 69 73 74 20 6f 66 20 65 78 74  ault list of ext
4f30: 72 61 20 6f 75 74 70 75 74 20 64 69 72 65 63 74  ra output direct
4f40: 6f 72 69 65 73 2c 20 77 68 69 63 68 20 69 73 20  ories, which is
4f50: 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  one..        #
4f60: 20 20 20 20 20 65 6d 70 74 79 20 73 74 72 69 6e       empty strin
4f70: 67 20 28 6e 6f 2d 6f 70 29 2e 0d 0a 20 20 20 20  g (no-op)...
4f80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
4f90: 65 74 75 72 6e 20 5b 6c 69 73 74 20 22 22 5d 0d  eturn [list ""].
4fa0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
4fb0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
4fc0: 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 6f  BuildBaseDirecto
4fd0: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ry {} {..      #
4fe0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
4ff0: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 62  Figure out the b
5000: 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  ase directory wh
5010: 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c  ere all the buil
5020: 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20  ds should be..
5030: 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63 61      #       loca
5040: 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ted.  This will
5050: 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  be the directory
5060: 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 74   that contains t
5070: 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20 20  he actual..
5080: 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 6f   #       build o
5090: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20  utput directory
50a0: 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66 20  (e.g. parent of
50b0: 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20 23  "bin")...      #
50c0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
50d0: 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64  o exists ::build
50e0: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d  _base_directory]
50f0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
5100: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
5110: 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69  $::build_base_di 5120: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 5130: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 5140: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 5150: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 5160: 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 20 the build base 5170: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 5180: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a en overridden;.. 5190: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 51a0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 therefore, use i 51b0: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 t verbatim... 51c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 51d0: 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f return$::build_
51e0: 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a  base_directory..
51f0: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
5200: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
5210: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
5220: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
5230: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
5240: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  $::common_direct 5250: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { 5260: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 5270: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 78 # NOTE: Nex 5280: 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 t, fallback to t 5290: 68 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 64 he grandparent d 52a0: 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 irectory of the 52b0: 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 one.. # 52c0: 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 containing 52d0: 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 this file (i.e. 52e0: 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c "common.eagle"), 52f0: 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a if available... 5300: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 5310: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 5320: 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 dirname [file di 5330: 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f rname$::common_
5340: 64 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20 20  directory]]..
5350: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e     } elseif {[in
5360: 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68  fo exists ::path
5370: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
5380: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
5390: 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74   $::path] > 0} t 53a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 53b0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 53c0: 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62 : Finally, fallb 53d0: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e ack to the paren 53e0: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 t directory of t 53f0: 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20 he EagleTest.. 5400: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 # pa 5410: 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65 th. The EagleTe 5420: 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61 st package guara 5430: 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20 ntees that this 5440: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 variable.. 5450: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 # will b 5460: 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72 e set to the dir 5470: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e ectory containin 5480: 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65 g the first file 5490: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 54a0: 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65 execute the 54b0: 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75 [runTestPrologu 54c0: 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 e] script librar 54d0: 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 y procedure... 54e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 54f0: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69 return [file di 5500: 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a rname$::path]..
5510: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
5520: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5530: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61     # NOTE: No pa
5540: 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  th is available,
5550: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
5560: 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70   string.  This p
5570: 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20  oint..        #
5580: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74        should not
5590: 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20   be reached...
55a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
55b0: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20   return ""..
55c0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
55d0: 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69 74     proc getSQLit
55e0: 65 54 65 73 74 44 61 74 61 50 61 74 68 20 7b 7d  eTestDataPath {}
55f0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
5600: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72     # NOTE: Figur
5610: 65 20 6f 75 74 20 74 68 65 20 64 69 72 65 63 74  e out the direct
5620: 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68  ory where all th
5630: 65 20 74 65 73 74 20 64 61 74 61 20 66 69 6c 65  e test data file
5640: 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20  s should..
5650: 23 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61 74  #       be locat
5660: 65 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c 64  ed.  This should
5670: 20 62 65 20 74 68 65 20 22 64 61 74 61 22 20 64   be the "data" d
5680: 69 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74 68  irectory beneath
5690: 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
56a0: 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f      directory co
56b0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63 74  ntaining the act
56c0: 75 61 6c 20 74 65 73 74 20 73 63 72 69 70 74 73  ual test scripts
56d0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
56e0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a    return [file j
56f0: 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74 61  oin $::path data 5700: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 5710: 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 57 proc isRunningW 5720: 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 oW64 {} {.. 5730: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 5740: 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 20 : For now, just 5750: 75 73 65 20 74 68 65 20 65 78 69 73 74 69 6e 67 use the existing 5760: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 test constraint 5770: 20 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d 0a for detecting.. 5780: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 20 # a 5790: 57 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d 0a WoW64 process... 57a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 57b0: 65 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 eturn [haveConst 57c0: 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 20 raint wow64].. 57d0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 57e0: 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 isMixedModeAsse 57f0: 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 mbly { fileName 5800: 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b {varName ""} } { 5810: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 5820: 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 # NOTE: First, 5830: 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 65 make sure the te 5840: 73 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 74 st suite infrast 5850: 72 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f 77 ructure is allow 5860: 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 ed to.. # 5870: 20 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 78 use the [ex 5880: 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 ec] command... 5890: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 58a0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 58b0: 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 5b :no(exec)] && ![ 58c0: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 58d0: 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 65 (corFlags)]} the 58e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 58f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 5900: 49 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e 20 If the location 5910: 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 70 of CorFlags is p 5920: 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 6e resent in the en 5930: 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 20 vironment,.. 5940: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 # use 5950: 69 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 73 it; otherwise as 5960: 73 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 68 sume it is in th 5970: 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 20 e PATH... 5980: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 5990: 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 7b corFlags [expr { 59a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e 66 .. [inf 59b0: 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 43 o exists ::env(C 59c0: 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a 65 orFlags)] ?$::e
59d0: 6e 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20 22  nv(CorFlags) : "
59e0: 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20 20  CorFlags"..
59f0: 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20     }]....
5a00: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
5a10: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
5a20: 78 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73 20  xecute CorFlags
5a30: 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  on the specified
5a40: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
5a50: 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
5a60: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
5a70: 20 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72 46     exec -- $corF 5a80: 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 76 lags [file nativ 5a90: 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d ename$fileName]
5aa0: 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65 63  ..        } exec
5ab0: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
5ac0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
5ad0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49         # NOTE: I
5ae0: 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20 6f  f requested by o
5af0: 75 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65 6d  ur caller, attem
5b00: 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  pt to determine
5b10: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23  the..          #
5b20: 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20         platform
5b30: 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69 65  for the specifie
5b40: 64 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e 0d  d file as well..
5b50: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
5b60: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
5b70: 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 5b80: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { 5b90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 5ba0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 5bb0: 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 70 OTE: Store the p 5bc0: 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 6e latform in the n 5bd0: 61 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 6e amed variable in 5be0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 the.. 5bf0: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 # contex 5c00: 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e t of our caller. 5c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 5c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 70 76 . upv 5c30: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 6c ar 1$varName pl
5c40: 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20  atform....
5c50: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5c60: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
5c70: 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20  empt to extract
5c80: 74 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f 6d  the PE line from
5c90: 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a 20   the captured..
5ca0: 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
5cb0: 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20 74     output.  If t
5cc0: 68 69 73 20 76 61 6c 75 65 20 69 73 20 22 50 45  his value is "PE
5cd0: 33 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c 20  32" or "PE32+",
5ce0: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  the..
5cf0: 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c   #       assembl
5d00: 79 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69 74  y file is 32-bit
5d10: 20 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73 70   or 64-bit, resp
5d20: 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20 20  ectively;..
5d30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f         #       o
5d40: 74 68 65 72 77 69 73 65 2c 20 69 74 73 20 74 79  therwise, its ty
5d50: 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d 0a  pe is unknown...
5d60: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
5d70: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
5d80: 61 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20 20  attern {^PE
5d90: 20 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32 5c     : (PE32|PE32\
5da0: 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20 20  +)\s+$}.... 5db0: 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 if {[rege 5dc0: 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 74 xp -line --$pat
5dd0: 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d 79  tern $exec dummy 5de0: 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d 0a pe32]} then {.. 5df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 5e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 5e10: 20 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 69 HACK: This [swi 5e20: 74 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 61 tch] assumes tha 5e30: 74 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 61 t 32-bit executa 5e40: 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 bles are.. 5e50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5e60: 61 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 74 always x86 and t 5e70: 68 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 75 hat 64-bit execu 5e80: 74 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 79 tables are alway 5e90: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s.. 5ea0: 20 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a 20 # x64... 5eb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 5ec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 77 sw 5ed0: 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 itch -exact --$
5ee0: 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20  pe32 {..
5ef0: 20 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d 0a          PE32 {..
5f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5f10: 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 57    set platform W
5f20: 69 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20 20  in32..
5f30: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
5f40: 20 20 20 20 20 20 20 20 20 50 45 33 32 2b 20 7b           PE32+ {
5f50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
5f60: 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
5f70: 20 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20 20   x64..
5f80: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
5f90: 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c 74           default
5fa0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
5fb0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
5fc0: 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20  rm ""..
5fd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
5fe0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
5ff0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
6000: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
6010: 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a  et platform ""..
6020: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
6030: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
6040: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6050: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74       # NOTE: Att
6060: 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74 20  empt to extract
6070: 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65 20  the ILONLY line
6080: 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72 65  from the capture
6090: 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  d..          #
60a0: 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66       output.  If
60b0: 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 7a   this value is z
60c0: 65 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66 69  ero, the specifi
60d0: 65 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20 20  ed file must..
60e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
60f0: 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65 20  be a mixed-mode
6100: 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72 77  assembly; otherw
6110: 69 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e 73  ise, it contains
6120: 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 20   only..
6130: 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64   #       managed
6140: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20 20   components...
6150: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6160: 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72 6e       set pattern
6170: 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20 28   {^ILONLY    : (
6180: 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20  0|1)\s+$}.... 6190: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 67 if {![reg 61a0: 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 exp -line --$pa
61b0: 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d  ttern $exec dumm 61c0: 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e 20 y ilOnly]} then 61d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 {.. r 61e0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. 61f0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 6200: 20 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f 6e if {!$ilOn
6210: 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ly} then {..
6220: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
6230: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  rue..          }
6240: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
6250: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
6260: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
6270: 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  f the test suite
6280: 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78 65   cannot use [exe
6290: 63 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e 20  c] or execution
62a0: 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20 20  of CorFlags..
62b0: 20 20 20 23 20 20 20 20 20 20 20 66 61 69 6c 65     #       faile
62c0: 64 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65 2e  d, return false.
62d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
62e0: 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20   return false..
62f0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
6300: 63 20 69 73 44 61 72 77 69 6e 20 7b 7d 20 7b 0d  c isDarwin {} {.
6310: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
6320: 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b  xpr {..        [
6330: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63  info exists ::tc
6340: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f 73 29 5d 20  l_platform(os)]
6350: 26 26 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  && $::tcl_platfo 6360: 72 6d 28 6f 73 29 20 65 71 20 22 44 61 72 77 69 rm(os) eq "Darwi 6370: 6e 22 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 n".. }].. 6380: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 6390: 20 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 getNativeLibrar 63a0: 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 7b yFileNamesOnly { 63b0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 63c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 # NOTE: Firs 63d0: 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 t, check if the 63e0: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c list of native l 63f0: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65 ibrary file name 6400: 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20 s has been.. 6410: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c # manual 6420: 6c 79 20 6f 76 65 72 72 69 64 64 65 6e 2e 0d 0a ly overridden... 6430: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 6440: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 6450: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 6460: 5f 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 _file_names] && 6470: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 6480: 65 6e 67 74 68 20 24 3a 3a 6e 61 74 69 76 65 5f ength$::native_
6490: 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 6d  library_file_nam
64a0: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
64b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
64c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
64d0: 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 6c  list of native l
64e0: 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d 65  ibrary file name
64f0: 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  s has been overr
6500: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
6510: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
6520: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
6530: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
6540: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $6550: 3a 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 ::native_library 6560: 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a 20 20 20 _file_names.. 6570: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 } elseif {[is 6580: 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b Windows]} then { 6590: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 65a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 65b0: 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 6e 33 32 erwise, on Win32 65c0: 2c 20 61 6c 77 61 79 73 20 75 73 65 20 74 68 65 , always use the 65d0: 20 73 74 61 6e 64 61 72 64 20 6e 61 74 69 76 65 standard native 65e0: 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 library.. 65f0: 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e # file n 6600: 61 6d 65 20 22 73 71 6c 69 74 65 33 2e 64 6c 6c ame "sqlite3.dll 6610: 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 "... #.. 6620: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 6630: 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d ist sqlite3.dll] 6640: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 .. } elseif 6650: 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72 65 5d {[isDotNetCore] 6660: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6670: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 #.. # 6680: 20 20 20 20 20 57 68 65 6e 20 72 75 6e 6e 69 6e When runnin 6690: 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 g on .NET Core, 66a0: 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d 65 20 return the same 66b0: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 0d 0a native library.. 66c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 66d0: 66 69 6c 65 20 6e 61 6d 65 20 74 68 61 74 20 69 file name that i 66e0: 73 20 75 73 65 64 20 6f 6e 20 57 69 6e 64 6f 77 s used on Window 66f0: 73 20 28 69 2e 65 2e 20 6f 74 68 65 72 77 69 73 s (i.e. otherwis 6700: 65 2c 20 61 73 73 75 6d 65 0d 0a 20 20 20 20 20 e, assume.. 6710: 20 20 20 23 20 20 20 20 20 20 20 77 65 20 61 72 # we ar 6720: 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 4d 6f 6e e running on Mon 6730: 6f 20 61 6e 64 20 75 73 65 20 69 74 73 20 50 2f o and use its P/ 6740: 49 6e 76 6f 6b 65 20 63 6f 6e 76 65 6e 74 69 6f Invoke conventio 6750: 6e 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ns)... #. 6760: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 6770: 5b 6c 69 73 74 20 73 71 6c 69 74 65 33 2e 64 6c [list sqlite3.dl 6780: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 6790: 69 66 20 7b 5b 69 73 44 61 72 77 69 6e 5d 7d 20 if {[isDarwin]} 67a0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 67b0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 67c0: 45 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20 E: When running 67d0: 6f 6e 20 44 61 72 77 69 6e 20 28 69 2e 65 2e 20 on Darwin (i.e. 67e0: 74 68 65 20 6b 65 72 6e 65 6c 20 6f 66 20 69 4f the kernel of iO 67f0: 53 20 2f 20 4d 61 63 20 4f 53 20 58 29 2c 0d 0a S / Mac OS X),.. 6800: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 6810: 72 65 74 75 72 6e 20 74 68 65 20 4d 61 63 20 4f return the Mac O 6820: 53 20 58 20 6e 61 74 69 76 65 20 6c 69 62 72 61 S X native libra 6830: 72 79 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 54 ry file name. T 6840: 68 69 73 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 his file.. 6850: 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 # name i 6860: 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 71 75 69 s normally requi 6870: 72 65 64 20 66 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 red for Mono... 6880: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6890: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c return [list l 68a0: 69 62 73 71 6c 69 74 65 33 2e 64 79 6c 69 62 5d ibsqlite3.dylib] 68b0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 68c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 68d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 74 68 # NOTE: Oth 68e0: 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 74 erwise, return t 68f0: 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 49 58 he generic POSIX 6900: 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 native library 6910: 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 file.. # 6920: 20 20 20 20 20 20 6e 61 6d 65 2e 20 20 54 68 69 name. Thi 6930: 73 20 66 69 6c 65 20 6e 61 6d 65 20 69 73 20 6e s file name is n 6940: 6f 72 6d 61 6c 6c 79 20 72 65 71 75 69 72 65 64 ormally required 6950: 20 66 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 for Mono... 6960: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6970: 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 73 eturn [list libs 6980: 71 6c 69 74 65 33 2e 73 6f 5d 0d 0a 20 20 20 20 qlite3.so].. 6990: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 69a0: 20 20 20 70 72 6f 63 20 67 65 74 49 6e 74 65 72 proc getInter 69b0: 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 opAssemblyFileNa 69c0: 6d 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20 20 mesOnly {} {.. 69d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 69e0: 4f 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 63 OTE: First, chec 69f0: 6b 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 k if the list of 6a00: 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c interop assembl 6a10: 79 20 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 y file names has 6a20: 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 been.. # 6a30: 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 manually ov 6a40: 65 72 72 69 64 64 65 6e 2e 0d 0a 20 20 20 20 20 erridden... 6a50: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 6a60: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 69 6e 74 nfo exists ::int 6a70: 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 erop_assembly_fi 6a80: 6c 65 5f 6e 61 6d 65 73 5d 20 26 26 20 5c 0d 0a le_names] && \.. 6a90: 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 [lleng 6aa0: 74 68 20 24 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 th$::interop_as
6ab0: 73 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65  sembly_file_name
6ac0: 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  s] > 0} then {..
6ad0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6ae0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
6af0: 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 20 61  ist of interop a
6b00: 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d  ssembly file nam
6b10: 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  es has been over
6b20: 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20  ridden;..
6b30: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f   #       therefo
6b40: 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61  re, use it verba
6b50: 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  tim...        #.
6b60: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
6b70: 24 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 65 6d  $::interop_assem 6b80: 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 0d 0a bly_file_names.. 6b90: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b } elseif { 6ba0: 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 [isWindows]} the 6bb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 6bc0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 6bd0: 4f 74 68 65 72 77 69 73 65 2c 20 6f 6e 20 57 69 Otherwise, on Wi 6be0: 6e 33 32 2c 20 61 6c 77 61 79 73 20 75 73 65 20 n32, always use 6bf0: 74 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 the interop asse 6c00: 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 mbly file.. 6c10: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name 6c20: 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e "SQLite.Interop. 6c30: 64 6c 6c 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 dll"... # 6c40: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6c50: 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e 49 6e [list SQLite.In 6c60: 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 20 20 terop.dll].. 6c70: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 } elseif {[isD 6c80: 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65 6e otNetCore]} then 6c90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6ca0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 57 # W 6cb0: 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 2e hen running on . 6cc0: 4e 45 54 20 43 6f 72 65 2c 20 72 65 74 75 72 6e NET Core, return 6cd0: 20 74 68 65 20 73 61 6d 65 20 69 6e 74 65 72 70 the same interp 6ce0: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 assembly.. 6cf0: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20 # file 6d00: 6e 61 6d 65 20 74 68 61 74 20 69 73 20 75 73 65 name that is use 6d10: 64 20 6f 6e 20 57 69 6e 64 6f 77 73 20 28 69 2e d on Windows (i. 6d20: 65 2e 20 6f 74 68 65 72 77 69 73 65 2c 20 61 73 e. otherwise, as 6d30: 73 75 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 sume.. # 6d40: 20 20 20 20 20 20 77 65 20 61 72 65 20 72 75 6e we are run 6d50: 6e 69 6e 67 20 6f 6e 20 4d 6f 6e 6f 20 61 6e 64 ning on Mono and 6d60: 20 75 73 65 20 69 74 73 20 50 2f 49 6e 76 6f 6b use its P/Invok 6d70: 65 20 63 6f 6e 76 65 6e 74 69 6f 6e 73 29 2e 0d e conventions).. 6d80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6d90: 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list 6da0: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e SQLite.Interop. 6db0: 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c dll].. } el 6dc0: 73 65 69 66 20 7b 5b 69 73 44 61 72 77 69 6e 5d seif {[isDarwin] 6dd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6de0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 6df0: 4f 54 45 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e OTE: When runnin 6e00: 67 20 6f 6e 20 44 61 72 77 69 6e 20 28 69 2e 65 g on Darwin (i.e 6e10: 2e 20 74 68 65 20 6b 65 72 6e 65 6c 20 6f 66 20 . the kernel of 6e20: 69 4f 53 20 2f 20 4d 61 63 20 4f 53 20 58 29 2c iOS / Mac OS X), 6e30: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6e40: 20 20 72 65 74 75 72 6e 20 74 68 65 20 4d 61 63 return the Mac 6e50: 20 4f 53 20 58 20 69 6e 74 65 72 70 20 61 73 73 OS X interp ass 6e60: 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e embly file name. 6e70: 20 20 54 68 69 73 20 66 69 6c 65 0d 0a 20 20 20 This file.. 6e80: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d # nam 6e90: 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 e is normally re 6ea0: 71 75 69 72 65 64 20 66 6f 72 20 4d 6f 6e 6f 2e quired for Mono. 6eb0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6ec0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 return [lis 6ed0: 74 20 6c 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 t libSQLite.Inte 6ee0: 72 6f 70 2e 64 79 6c 69 62 5d 0d 0a 20 20 20 20 rop.dylib].. 6ef0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 6f00: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 6f10: 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 NOTE: Otherwise 6f20: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 67 65 6e , return the gen 6f30: 65 72 69 63 20 50 4f 53 49 58 20 69 6e 74 65 72 eric POSIX inter 6f40: 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 0d p assembly file. 6f50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 6f60: 20 6e 61 6d 65 2e 20 20 54 68 69 73 20 66 69 6c name. This fil 6f70: 65 20 6e 61 6d 65 20 69 73 20 6e 6f 72 6d 61 6c e name is normal 6f80: 6c 79 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 ly required for 6f90: 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 Mono... # 6fa0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6fb0: 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c 69 74 65 [list libSQLite 6fc0: 2e 49 6e 74 65 72 6f 70 2e 73 6f 5d 0d 0a 20 20 .Interop.so].. 6fd0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 6fe0: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 72 . proc getCor 6ff0: 65 45 78 74 65 6e 73 69 6f 6e 42 69 6e 61 72 79 eExtensionBinary 7000: 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 64 65 66 61 FileName { {defa 7010: 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 ult ""} } {.. 7020: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 7030: 5b 67 65 74 43 6f 72 65 42 69 6e 61 72 79 46 69 [getCoreBinaryFi 7040: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 leName].... 7050: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 7060: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 s$fileName]} th
7070: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
7080: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a  turn $fileName.. 7090: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 70a0: 20 72 65 74 75 72 6e 20 24 64 65 66 61 75 6c 74 return$default
70b0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
70c0: 70 72 6f 63 20 69 73 42 75 69 6c 64 41 76 61 69  proc isBuildAvai
70d0: 6c 61 62 6c 65 20 7b 20 6e 61 74 69 76 65 20 73  lable { native s
70e0: 6b 69 70 4e 61 74 69 76 65 20 64 69 72 65 63 74  kipNative direct
70f0: 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d  ory {varName ""}
7100: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
7110: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
7120: 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61  ld the fully qua
7130: 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65  lified file name
7140: 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61 72 79   for the primary
7150: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
7160: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
7170: 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e 44  ing the System.D
7180: 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67  ata.SQLite manag
7190: 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20  ed components.
71a0: 49 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  It..      #
71b0: 20 20 73 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65    should be note
71c0: 64 20 74 68 61 74 20 74 68 69 73 20 61 73 73 65  d that this asse
71d0: 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79 20 61 6c  mbly file may al
71e0: 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68 65 0d 0a  so contain the..
71f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
7200: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
7210: 20 69 66 20 61 20 6e 61 74 69 76 65 20 62 75 69   if a native bui
7220: 6c 64 20 69 73 20 69 6e 20 75 73 65 2e 0d 0a 20  ld is in use...
7230: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65       #..      se
7240: 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
7250: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
7260: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director 7270: 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 y \.. S 7280: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 7290: 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 e.dll]].... 72a0: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 if {![file exis 72b0: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
72c0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  hen {..        r
72d0: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
72e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
72f0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49  .      # NOTE: I
7300: 66 20 77 65 20 61 72 65 20 73 6b 69 70 70 69 6e  f we are skippin
7310: 67 20 6c 6f 6f 6b 69 6e 67 20 66 6f 72 20 74 68  g looking for th
7320: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65  e native compone
7330: 6e 74 73 2c 20 73 74 6f 70 0d 0a 20 20 20 20 20  nts, stop..
7340: 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 0d 0a 20   #       now...
7350: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
7360: 20 7b 24 73 6b 69 70 4e 61 74 69 76 65 7d 20 74   {$skipNative} t 7370: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 7380: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 7390: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 73a0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 73b0: 74 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 tempt to automat 73c0: 69 63 61 6c 6c 79 20 64 65 74 65 63 74 20 69 66 ically detect if 73d0: 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 73 73 the primary ass 73e0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 embly.. # 73f0: 20 20 20 20 20 63 6f 6e 74 61 69 6e 73 20 61 6e contains an 7400: 79 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 y native compone 7410: 6e 74 73 2c 20 69 66 20 6e 65 63 65 73 73 61 72 nts, if necessar 7420: 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 y... #.. 7430: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 7440: 65 6e 67 74 68 20 24 6e 61 74 69 76 65 5d 20 3d ength$native] =
7450: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
7460: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
7470: 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65   length $varName 7480: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 7490: 20 20 20 20 20 20 20 20 20 75 70 76 61 72 20 31 upvar 1 74a0: 20 24 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61$varName $varNa 74b0: 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d me.. }... 74c0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 . set nat 74d0: 69 76 65 20 5b 69 73 4d 69 78 65 64 4d 6f 64 65 ive [isMixedMode 74e0: 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
74f0: 6d 65 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20  me $varName].. 7500: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 7510: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 7520: 49 66 20 74 68 65 20 70 72 69 6d 61 72 79 20 61 If the primary a 7530: 73 73 65 6d 62 6c 79 20 61 6c 73 6f 20 63 6f 6e ssembly also con 7540: 74 61 69 6e 73 20 74 68 65 20 6e 61 74 69 76 65 tains the native 7550: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 0d 0a 20 20 components,.. 7560: 20 20 20 20 23 20 20 20 20 20 20 20 77 65 20 68 # we h 7570: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 7580: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 e need... # 7590: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 .. if {$nat
75a0: 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ive} then {..
75b0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
75c0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
75d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
75e0: 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 68 69  TE: If the machi
75f0: 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 76 61  ne name is unava
7600: 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 69 73  ilable, there is
7610: 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 77 65   nothing else we
7620: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7630: 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 20 23  can do...      #
7640: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
7650: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c 5f  fo exists ::tcl_
7660: 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65  platform(machine
7670: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
7680: 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65      return false
7690: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
76a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
76b0: 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20  TE: What is the
76c0: 61 72 63 68 69 74 65 63 74 75 72 65 20 66 6f 72  architecture for
76d0: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a   this machine?..
76e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
76f0: 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20  et architecture
7700: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f  [machineToPlatfo
7710: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  rm $::tcl_platfo 7720: 72 6d 28 6d 61 63 68 69 6e 65 29 20 74 72 75 65 rm(machine) true 7730: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 7740: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74 # NOTE: What 7750: 20 69 73 20 74 68 65 20 70 6c 61 74 66 6f 72 6d is the platform 7760: 20 66 6f 72 20 74 68 69 73 20 6d 61 63 68 69 6e for this machin 7770: 65 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e?.. #.. 7780: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 set platform 7790: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f [machineToPlatfo 77a0: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f rm$::tcl_platfo
77b0: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a  rm(machine)]....
77c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
77d0: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
77e0: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
77f0: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74   file name for t
7800: 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  he interop assem
7810: 62 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  bly..      #
7820: 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68     containing th
7830: 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  e System.Data.SQ
7840: 4c 69 74 65 20 6e 61 74 69 76 65 20 63 6f 6d 70  Lite native comp
7850: 6f 6e 65 6e 74 73 2e 20 20 49 66 20 74 68 69 73  onents.  If this
7860: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
7870: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20  file exists, we
7880: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72  should have ever
7890: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d  ything we need..
78a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
78b0: 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
78c0: 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 72 6f 70  Only [getInterop
78d0: 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e 61 6d 65  AssemblyFileName
78e0: 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20  sOnly] {..
78f0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
7900: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename
7910: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65  [file join $dire 7920: 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 ctory \.. 7930: 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75$architectu
7940: 72 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79  re $fileNameOnly 7950: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 ]].... if 7960: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
7970: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
7980: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  {..          ret
7990: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
79a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
79b0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
79c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
79d0: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f  le join $directo 79e0: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 79f0: 20 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c$platform $fil 7a00: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 eNameOnly]].... 7a10: 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 7a20: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d exists$fileNam
7a30: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
7a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
7a50: 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
7a60: 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65          set file
7a70: 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  Name [file nativ
7a80: 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
7a90: 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20   $directory \.. 7aa0: 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65$file
7ab0: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20  NameOnly]]....
7ac0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
7ad0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 7ae0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 7af0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 7b00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 7b10: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 7b20: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 . # NOTE: B 7b30: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q 7b40: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 ualified file na 7b50: 6d 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 me for the SQLit 7b60: 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 e core.. # 7b70: 20 20 20 20 20 20 6c 69 62 72 61 72 79 2e 20 20 library. 7b80: 49 66 20 74 68 69 73 20 66 69 6c 65 20 65 78 69 If this file exi 7b90: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 sts, we should h 7ba0: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 ave everything w 7bb0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 7bc0: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 7bd0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 . foreach f 7be0: 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 ileNameOnly [get 7bf0: 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c NativeLibraryFil 7c00: 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 eNamesOnly] {.. 7c10: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e set fileN 7c20: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 7c30: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 7c40: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
7c50: 20 20 20 20 20 20 20 20 20 20 24 61 72 63 68 69            $archi 7c60: 74 65 63 74 75 72 65 20 24 66 69 6c 65 4e 61 6d tecture$fileNam
7c70: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
7c80: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69     if {[file exi
7c90: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 7ca0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7cb0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 7cc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 7cd0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName 7ce0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 7cf0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 e [file join$di
7d00: 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20  rectory \..
7d10: 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d         $platform 7d20: 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d$fileNameOnly]]
7d30: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
7d40: 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69  [file exists $fi 7d50: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. 7d60: 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 . retur 7d70: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. 7d80: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.... set 7d90: 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 fileName [file 7da0: 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 7db0: 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 join$directory
7dc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
7dd0: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d  $fileNameOnly]]. 7de0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 7df0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
7e00: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
7e10: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
7e20: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d   true..        }
7e30: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
7e40: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
7e50: 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20  TE: One or more
7e60: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
7e70: 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 74  s needed by Syst
7e80: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
7e90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
7ea0: 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20  e missing...
7eb0: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
7ec0: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
7ed0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65  ...    proc isRe
7ee0: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b  leaseAvailable {
7ef0: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
7f00: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
7f10: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
7f20: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 7f30: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 7f40: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
7f50: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a  rName $varName.. 7f60: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 7f70: 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 return [isBuild 7f80: 41 76 61 69 6c 61 62 6c 65 20 22 22 20 66 61 6c Available "" fal 7f90: 73 65 20 24 64 69 72 65 63 74 6f 72 79 20 24 76 se$directory $v 7fa0: 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a arName].. }.. 7fb0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6a 6f 69 6e ... proc join 7fc0: 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b BuildDirectory { 7fd0: 20 6e 61 74 69 76 65 20 70 61 74 68 20 79 65 61 native path yea 7fe0: 72 20 70 6c 61 74 66 6f 72 6d 20 63 6f 6e 66 69 r platform confi 7ff0: 67 75 72 61 74 69 6f 6e 20 65 78 74 72 61 20 7d guration extra } 8000: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 8010: 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 # NOTE: Figur 8020: 65 20 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 72 e out and then r 8030: 65 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 20 eturn the fully 8040: 71 75 61 6c 69 66 69 65 64 20 70 61 74 68 20 74 qualified path t 8050: 6f 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 o the build.. 8060: 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 # direc 8070: 74 6f 72 79 20 62 61 73 65 64 20 6f 6e 20 61 6c tory based on al 8080: 6c 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 l the arguments 8090: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 provided by our 80a0: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 caller... # 80b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 .. if {$nat
80c0: 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ive} then {..
80d0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c       return [fil
80e0: 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e  e join $path bin 80f0: 20 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d$year $platform 8100: 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20$configuration
8110: 24 65 78 74 72 61 5d 0d 0a 20 20 20 20 20 20 7d  $extra].. } 8120: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 8130: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f return [file jo 8140: 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 79 65 in$path bin $ye 8150: 61 72 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f ar$configuratio
8160: 6e 20 62 69 6e 20 24 65 78 74 72 61 5d 0d 0a 20  n bin $extra].. 8170: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 8180: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 .. proc getBu 8190: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 20 6d ildDirectory { m 81a0: 61 6e 61 67 65 64 4f 6e 6c 79 20 7d 20 7b 0d 0a anagedOnly } {.. 81b0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 81c0: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 NOTE: See if th 81d0: 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 e "native" runti 81e0: 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 me option has be 81f0: 65 6e 20 73 65 74 2e 20 20 49 66 20 73 6f 2c 20 en set. If so, 8200: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 23 use the.. # 8210: 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 directory 8220: 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d for the mixed-m 8230: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 28 61 2e ode assembly (a. 8240: 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69 76 65 20 k.a. the native 8250: 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 23 interop.. # 8260: 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 29 assembly) 8270: 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 . To enable thi 8280: 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 68 65 s option via the 8290: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 command line, e 82a0: 6e 74 65 72 20 61 0d 0a 20 20 20 20 20 20 23 20 nter a.. # 82b0: 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 20 73 69 command si 82c0: 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 20 milar to one of 82d0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 the following (a 82e0: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a ll on one line): 82f0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8300: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 # EagleSh 8310: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c ell.exe -initial 8320: 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69 ize -runtimeOpti 8330: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 on native.. 8340: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 # -file 8350: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 .\path\to\all.e 8360: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 agle.. #.. 8370: 20 20 20 20 20 23 20 20 20 20 20 20 20 54 6f 20 # To 8380: 65 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 enable this opti 8390: 6f 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 on via the comma 83a0: 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72 20 74 6f nd line prior to 83b0: 20 74 68 65 20 22 62 65 74 61 20 31 36 22 0d 0a the "beta 16".. 83c0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 # re 83d0: 6c 65 61 73 65 20 6f 66 20 45 61 67 6c 65 2c 20 lease of Eagle, 83e0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 63 6f the following co 83f0: 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65 20 75 73 mmand must be us 8400: 65 64 20 69 6e 73 74 65 61 64 0d 0a 20 20 20 20 ed instead.. 8410: 20 20 23 20 20 20 20 20 20 20 28 61 6c 73 6f 20 # (also 8420: 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 all on one line) 8430: 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 :.. #.. 8440: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 # EagleS 8450: 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 hell.exe -initia 8460: 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74 69 61 lize -postInitia 8470: 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23 20 20 20 lize.. # 8480: 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e "object in 8490: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 voke Interpreter 84a0: 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75 .GetActive AddRu 84b0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 ntimeOption nati 84c0: 76 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ve".. # 84d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 -file .\pat 84e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a h\to\all.eagle.. 84f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 8500: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 8510: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 ::build_director 8520: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 8530: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 8540: 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 h$::build_direc
8550: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20  tory] > 0} then
8560: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
8570: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
8580: 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68  e location of th
8590: 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
85a0: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
85b0: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
85c0: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
85d0: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74  e, use it verbat
85e0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
85f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $8600: 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 ::build_director 8610: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 y.. } else 8620: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 8630: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 8640: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 8650: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 73 20 ntime option is 8660: 73 65 74 2c 20 74 68 65 20 6d 69 78 65 64 2d 6d set, the mixed-m 8670: 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 ode assembly.. 8680: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 # is 8690: 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e 20 20 being tested. 86a0: 49 6e 20 74 68 61 74 20 63 61 73 65 2c 20 74 68 In that case, th 86b0: 65 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 e path to the bu 86c0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 ild directory.. 86d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 86e0: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 ill contain the 86f0: 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 61 6e platform name an 8700: 64 20 61 6c 6c 20 74 68 65 20 62 69 6e 61 72 69 d all the binari 8710: 65 73 20 75 6e 64 65 72 20 74 65 73 74 0d 0a 20 es under test.. 8720: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 8730: 68 6f 75 6c 64 20 62 65 20 70 72 65 73 65 6e 74 hould be present 8740: 20 69 6e 20 74 68 61 74 20 64 69 72 65 63 74 6f in that directo 8750: 72 79 2e 20 20 49 66 20 74 68 65 20 22 6e 61 74 ry. If the "nat 8760: 69 76 65 22 20 72 75 6e 74 69 6d 65 0d 0a 20 20 ive" runtime.. 8770: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 70 # op 8780: 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73 65 74 2c tion is not set, 8790: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 87a0: 74 6f 72 79 20 77 69 6c 6c 20 62 65 20 63 6f 6e tory will be con 87b0: 73 69 64 65 72 65 64 20 74 6f 20 62 65 0d 0a 20 sidered to be.. 87c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 22 # " 87d0: 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74 72 61 6c platform-neutral 87e0: 22 2c 20 77 69 74 68 20 74 68 65 20 6e 6f 74 61 ", with the nota 87f0: 62 6c 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 ble exception of 8800: 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a 20 20 20 any native.. 8810: 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 8820: 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22 53 51 4c embly (e.g. "SQL 8830: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 ite.Interop.dll" 8840: 29 20 63 6f 70 69 65 64 20 74 68 65 72 65 20 64 ) copied there d 8850: 75 72 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 uring the.. 8860: 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 # build 8870: 20 70 72 6f 63 65 73 73 20 69 74 73 65 6c 66 2e process itself. 8880: 20 20 49 66 20 74 68 65 20 62 75 69 6c 64 20 70 If the build p 8890: 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f 77 20 64 rocess somehow d 88a0: 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 oes not.. 88b0: 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 74 68 # copy th 88c0: 65 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c e native assembl 88d0: 79 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 y for this platf 88e0: 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20 74 68 65 orm, most of the 88f0: 20 74 65 73 74 73 0d 0a 20 20 20 20 20 20 20 20 tests.. 8900: 23 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 73 # in the s 8910: 75 69 74 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 uite will simply 8920: 20 62 65 20 73 6b 69 70 70 65 64 2e 20 20 47 65 be skipped. Ge 8930: 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b 69 6e 67 nerally speaking 8940: 2c 20 74 68 65 72 65 0d 0a 20 20 20 20 20 20 20 , there.. 8950: 20 23 20 20 20 20 20 20 20 61 72 65 20 74 77 6f # are two 8960: 20 77 61 79 73 20 74 6f 20 62 75 69 6c 64 20 74 ways to build t 8970: 68 65 20 62 69 6e 61 72 69 65 73 20 77 68 65 6e he binaries when 8980: 20 70 72 65 70 61 72 69 6e 67 20 74 6f 20 72 75 preparing to ru 8990: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 n the.. # 89a0: 20 20 20 20 20 20 20 74 65 73 74 20 73 75 69 74 test suit 89b0: 65 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e:.. #.. 89c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 31 # 1 89d0: 2e 20 42 75 69 6c 64 20 74 68 65 20 73 65 70 61 . Build the sepa 89e0: 72 61 74 65 20 6d 61 6e 61 67 65 64 20 61 6e 64 rate managed and 89f0: 20 6e 61 74 69 76 65 20 61 73 73 65 6d 62 6c 69 native assembli 8a00: 65 73 20 75 73 69 6e 67 20 73 6f 6d 65 0d 0a 20 es using some.. 8a10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 8a20: 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69 6d 69 6c commands simil 8a30: 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 ar to:.. 8a40: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 #.. # 8a50: 20 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 build.bat 8a60: 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d${Configuration}
8a70: 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 7b 50 6c  ManagedOnly ${Pl 8a80: 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 atform}.. 8a90: 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69 6c # buil 8aa0: 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 d.bat${Configur
8ab0: 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f 6e 6c 79  ation}NativeOnly
8ac0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20   ${Platform}.. 8ad0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8ae0: 20 23 20 20 20 20 20 20 20 20 20 20 57 68 65 72 # Wher 8af0: 65 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f e${Configuratio
8b00: 6e 7d 20 69 73 20 65 69 74 68 65 72 20 22 44 65  n} is either "De
8b10: 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61 73 65  bug" or "Release
8b20: 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23  " and..        #
8b30: 20 20 20 20 20 20 20 20 20 20 24 7b 50 6c 61 74            ${Plat 8b40: 66 6f 72 6d 7d 20 69 73 20 65 69 74 68 65 72 20 form} is either 8b50: 22 57 69 6e 33 32 22 20 6f 72 20 22 78 36 34 22 "Win32" or "x64" 8b60: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8b70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 32 2e # 2. 8b80: 20 42 75 69 6c 64 20 74 68 65 20 6d 69 78 65 64 Build the mixed 8b90: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 75 -mode assembly u 8ba0: 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e 64 20 73 sing a command s 8bb0: 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 imilar to:.. 8bc0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 8bd0: 20 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e build. 8be0: 62 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 bat${Configurat
8bf0: 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f 72 6d 7d  ion} ${Platform} 8c00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 8c10: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 # 8c20: 57 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 Where${Configur
8c30: 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72  ation} is either
8c40: 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c   "Debug" or "Rel
8c50: 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20  ease" and..
8c60: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b     #          ${ 8c70: 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 Platform} is eit 8c80: 68 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 her "Win32" or " 8c90: 78 36 34 22 2e 20 20 49 66 20 74 68 69 73 20 63 x64". If this c 8ca0: 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 ommand is.. 8cb0: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 75 73 # us 8cc0: 65 64 2c 20 76 61 72 69 6f 75 73 20 74 65 73 74 ed, various test 8cd0: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 73 s that require s 8ce0: 75 70 70 6c 65 6d 65 6e 74 61 72 79 20 6d 61 6e upplementary man 8cf0: 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 aged.. # 8d00: 20 20 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c assembl 8d10: 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e 51 29 20 ies (e.g. LINQ) 8d20: 6d 61 79 20 62 65 20 73 6b 69 70 70 65 64 20 75 may be skipped u 8d30: 6e 6c 65 73 73 20 74 68 6f 73 65 20 62 69 6e 61 nless those bina 8d40: 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 ries.. # 8d50: 20 20 20 20 20 20 20 20 20 61 72 65 20 73 75 62 are sub 8d60: 73 65 71 75 65 6e 74 6c 79 20 63 6f 70 69 65 64 sequently copied 8d70: 20 69 6e 74 6f 20 74 68 65 20 63 6f 72 72 65 63 into the correc 8d80: 74 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e 65 t directory (i.e 8d90: 2e 20 62 79 0d 0a 20 20 20 20 20 20 20 20 23 20 . by.. # 8da0: 20 20 20 20 20 20 20 20 20 22 74 65 73 74 5f 61 "test_a 8db0: 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20 20 20 20 ll.bat")... 8dc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8dd0: 20 20 20 20 20 20 4e 6f 74 65 20 74 68 61 74 20 Note that 8de0: 61 6c 6c 20 6f 66 20 74 68 65 20 62 75 69 6c 64 all of the build 8df0: 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 commands above 8e00: 77 69 6c 6c 20 64 65 66 61 75 6c 74 20 74 6f 20 will default to 8e10: 75 73 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 23 using.. # 8e20: 20 20 20 20 20 20 20 74 68 65 20 6c 61 74 65 73 the lates 8e30: 74 20 76 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 t version of MSB 8e40: 75 69 6c 64 20 61 76 61 69 6c 61 62 6c 65 20 61 uild available a 8e50: 6e 64 20 74 68 65 20 22 74 65 73 74 5f 79 65 61 nd the "test_yea 8e60: 72 22 20 6d 61 79 0d 0a 20 20 20 20 20 20 20 20 r" may.. 8e70: 23 20 20 20 20 20 20 20 6e 65 65 64 20 74 6f 20 # need to 8e80: 62 65 20 61 64 6a 75 73 74 65 64 20 61 63 63 6f be adjusted acco 8e90: 72 64 69 6e 67 6c 79 20 74 6f 20 61 63 74 75 61 rdingly to actua 8ea0: 6c 6c 79 20 72 75 6e 20 74 68 65 20 74 65 73 74 lly run the test 8eb0: 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 suite... 8ec0: 20 23 20 20 20 20 20 20 20 52 65 66 65 72 20 74 # Refer t 8ed0: 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74 73 20 69 o the comments i 8ee0: 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d n [getBuildYear] 8ef0: 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d for more inform 8f00: 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20 20 20 20 ation on.. 8f10: 20 20 23 20 20 20 20 20 20 20 68 6f 77 20 74 6f # how to 8f20: 20 73 65 74 20 74 68 69 73 20 76 61 72 69 61 62 set this variab 8f30: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a le... #.. 8f40: 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 set nati 8f50: 76 65 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 ve [expr {.. 8f60: 20 20 20 20 20 20 21 24 6d 61 6e 61 67 65 64 4f !$managedO
8f70: 6e 6c 79 20 26 26 20 28 5b 67 65 74 42 75 69 6c  nly && ([getBuil
8f80: 64 4e 61 74 69 76 65 5d 20 7c 7c 20 5b 68 61 73  dNative] || [has
8f90: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61  RuntimeOption na
8fa0: 74 69 76 65 5d 29 0d 0a 20 20 20 20 20 20 20 20  tive])..
8fb0: 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  }]....        re
8fc0: 74 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44  turn [joinBuildD
8fd0: 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 65  irectory $native 8fe0: 20 5b 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 [getBuildBaseDi 8ff0: 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 rectory] \.. 9000: 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
9010: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 3f 20 5b 67  managedOnly ? [g
9020: 65 74 42 75 69 6c 64 59 65 61 72 5d 20 3a 20 5b  etBuildYear] : [
9030: 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 59 65  getBuildNativeYe
9040: 61 72 5d 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20  ar]}] \..
9050: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 50 6c       [getBuildPl
9060: 61 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20  atform $native] 9070: 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74 [appendArgs [get 9080: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 BuildConfigurati 9090: 6f 6e 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 on] \.. 90a0: 20 20 20 5b 65 78 70 72 20 7b 24 6d 61 6e 61 67 [expr {$manag
90b0: 65 64 4f 6e 6c 79 20 3f 20 5b 67 65 74 42 75 69  edOnly ? [getBui
90c0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53  ldConfigurationS
90d0: 75 66 66 69 78 5d 20 3a 20 5c 0d 0a 20 20 20 20  uffix] : \..
90e0: 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
90f0: 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 75 72 61  dNativeConfigura
9100: 74 69 6f 6e 53 75 66 66 69 78 5d 7d 5d 5d 20 5b  tionSuffix]}]] [
9110: 65 78 70 72 20 7b 24 6d 61 6e 61 67 65 64 4f 6e  expr {$managedOn 9120: 6c 79 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ly ? \.. 9130: 20 20 20 20 5b 67 65 74 42 75 69 6c 64 45 78 74 [getBuildExt 9140: 72 61 5d 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 ra] : ""}]].. 9150: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 9160: 20 20 20 20 70 72 6f 63 20 67 65 74 52 65 6c 65 proc getRele 9170: 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d aseVersion {} {. 9180: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 9190: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o 91a0: 75 74 20 74 68 65 20 72 65 6c 65 61 73 65 20 76 ut the release v 91b0: 65 72 73 69 6f 6e 20 66 6f 72 20 75 73 65 20 77 ersion for use w 91c0: 69 74 68 20 74 68 65 20 62 75 69 6c 64 20 64 69 ith the build di 91d0: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 rectory.. # 91e0: 20 20 20 20 20 20 20 77 68 65 6e 20 63 68 65 63 when chec 91f0: 6b 69 6e 67 20 66 6f 72 20 61 76 61 69 6c 61 62 king for availab 9200: 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a 20 20 le releases... 9210: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 9220: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 9230: 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d release_version] 9240: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 9250: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 [string length 9260: 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69$::release_versi
9270: 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  on] > 0} then {.
9280: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
9290: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
92a0: 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20  release version
92b0: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
92c0: 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  den; therefore,
92d0: 75 73 65 20 69 74 0d 0a 20 20 20 20 20 20 20 20  use it..
92e0: 23 20 20 20 20 20 20 20 76 65 72 62 61 74 69 6d  #       verbatim
92f0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
9300: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 9310: 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 0d release_version. 9320: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 9330: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 9340: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 # NOTE: No r 9350: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 69 elease version i 9360: 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 s available, ret 9370: 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 urn an empty str 9380: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 ing... # 9390: 20 20 20 20 20 20 49 74 20 69 73 20 69 6d 70 6f It is impo 93a0: 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 6e 20 rtant to return 93b0: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 an empty string 93c0: 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68 65 here because the 93d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 93e0: 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 69 73 result of this 93f0: 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 20 62 procedure may b 9400: 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 69 6c e used with [fil 9410: 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 20 20 e join]... 9420: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 9430: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d urn "".. }. 9440: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 9450: 72 6f 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 roc getBuildFile 9460: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 Name { fileName 9470: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 managedOnly {pla 9480: 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 tform ""} } {.. 9490: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 94a0: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 NOTE: Returns th 94b0: 65 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 e specified file 94c0: 20 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 name as if it w 94d0: 65 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 ere located in t 94e0: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 94f0: 20 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 build director 9500: 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e y, discarding an 9510: 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f y directory info 9520: 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d rmation present. 9530: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i 9540: 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 n the file name 9550: 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f as provided by o 9560: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 ur caller... 9570: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 #.. set r 9580: 65 73 75 6c 74 20 5b 66 69 6c 65 20 6e 61 74 69 esult [file nati 9590: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 vename \.. 95a0: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b [file join [ 95b0: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 95c0: 79 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 5d 20 y$managedOnly]
95d0: 24 70 6c 61 74 66 6f 72 6d 20 5c 0d 0a 20 20 20  $platform \.. 95e0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 95f0: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a l$fileName]]]..
9600: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
9610: 20 23 20 48 41 43 4b 3a 20 57 68 65 6e 20 72 75   # HACK: When ru
9620: 6e 6e 69 6e 67 20 6f 6e 20 57 6f 57 36 34 2c 20  nning on WoW64,
9630: 61 73 73 75 6d 65 20 74 68 65 20 74 65 73 74 20  assume the test
9640: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 20  executables are
9650: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23  present..      #
9660: 20 20 20 20 20 20 20 77 69 74 68 20 74 68 65 20         with the
9670: 22 33 32 22 20 73 75 66 66 69 78 20 6f 6e 20 74  "32" suffix on t
9680: 68 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  hem...      #..
9690: 20 20 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e       if {[isRunn
96a0: 69 6e 67 57 6f 57 36 34 5d 20 26 26 20 5b 66 69  ingWoW64] && [fi
96b0: 6c 65 20 65 78 74 65 6e 73 69 6f 6e 20 24 72 65  le extension $re 96c0: 73 75 6c 74 5d 20 65 71 20 22 2e 65 78 65 22 7d sult] eq ".exe"} 96d0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 96e0: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 61 70 70 set result [app 96f0: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72 6f endArgs [file ro 9700: 6f 74 6e 61 6d 65 20 24 72 65 73 75 6c 74 5d 20 otname$result]
9710: 33 32 2e 65 78 65 5d 0d 0a 20 20 20 20 20 20 7d  32.exe]..      }
9720: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
9730: 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d   $result.. }. 9740: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 9750: 45 78 74 65 72 6e 61 6c 44 69 72 65 63 74 6f 72 ExternalDirector 9760: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 9770: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 9780: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 9790: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 97a0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 65 78 ory where the ex 97b0: 74 65 72 6e 61 6c 20 62 69 6e 61 72 79 0d 0a 20 ternal binary.. 97c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c # fil 97d0: 65 73 20 61 72 65 20 6c 6f 63 61 74 65 64 2e 0d es are located.. 97e0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 97f0: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 return [file nat 9800: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ivename \.. 9810: 20 20 20 20 20 5b 66 69 6c 65 20 64 69 72 6e 61 [file dirna 9820: 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 me [file dirname 9830: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b [file dirname [ 9840: 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d 5d info binary]]]]] 9850: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9860: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69 proc getBinaryDi 9870: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 rectory {} {.. 9880: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 9890: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 OTE: This proced 98a0: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 ure returns the 98b0: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 directory where 98c0: 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 61 the test applica 98d0: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 tion.. # 98e0: 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e itself (i.e. 98f0: 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c the Eagle shell 9900: 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54 ) is located. T 9910: 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64 his will be used 9920: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 as.. # 9930: 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 the destinati 9940: 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65 on for the copie 9950: 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 d System.Data.SQ 9960: 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d Lite native and. 9970: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d . # m 9980: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 anaged assemblie 9990: 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20 s (i.e. because 99a0: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74 this is one of t 99b0: 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20 he few places.. 99c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65 # whe 99d0: 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20 re the CLR will 99e0: 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e actually find an 99f0: 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70 d load them prop 9a00: 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d erly)... #. 9a10: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 9a20: 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79 exists ::binary 9a30: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 9a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 9a50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69 ing length$::bi
9a60: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20  nary_directory]
9a70: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
9a80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
9a90: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
9aa0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61  tion of the bina
9ab0: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
9ac0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
9ad0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
9ae0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
9af0: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a  e it verbatim...
9b00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
9b10: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e     return $::bin 9b20: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 ary_directory.. 9b30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 9b40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69 return [i 9b50: 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20 nfo binary].. 9b60: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 9b70: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65 proc getExte 9b80: 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66 rnalFileName { f 9b90: 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 ileName } {.. 9ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9bb0: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 TE: Returns the 9bc0: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e specified file n 9bd0: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72 ame as if it wer 9be0: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 e located in the 9bf0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 9c00: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 directory contai 9c10: 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61 ning the externa 9c20: 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 l binaries... 9c30: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 9c40: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e rn [file nativen 9c50: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b ame [file join [ 9c60: 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63 getExternalDirec 9c70: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d tory]$fileName]
9c80: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
9c90: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46   proc getBinaryF
9ca0: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61  ileName { fileNa
9cb0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
9cc0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
9cd0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
9ce0: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69  urns the specifi
9cf0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20  ed file name as
9d00: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74  if it were locat
9d10: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
9d20: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20   #       binary
9d30: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61  directory, disca
9d40: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74  rding any direct
9d50: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ory information
9d60: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23  present..      #
9d70: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69         in the fi
9d80: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69  le name as provi
9d90: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ded by our calle
9da0: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  r...      #..
9db0: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
9dc0: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20  nativename \..
9dd0: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f          [file jo
9de0: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  in [getBinaryDir
9df0: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72  ectory] $platfor 9e00: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 m [file tail$fi
9e10: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d  leName]]]..    }
9e20: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
9e30: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e  tCoreBinaryFileN
9e40: 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20  ame { {platform
9e50: 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 22 22  ""} {standard ""
9e60: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  } } {..      #..
9e70: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
9e80: 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c 20 70  turns the full p
9e90: 61 74 68 20 66 6f 72 20 74 68 65 20 66 69 6c 65  ath for the file
9ea0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
9eb0: 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20  SQLite core..
9ec0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 74 69 76     #       nativ
9ed0: 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65 20 66  e library code f
9ee0: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
9ef0: 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63 6b 20  .  First, check
9f00: 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20 20 20  and see if..
9f10: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 51    #       the SQ
9f20: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65  Lite core native
9f30: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72   library has alr
9f40: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64  eady been loaded
9f50: 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20 20 20  .  Next,..
9f60: 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61 63 6b  #       fallback
9f70: 20 74 6f 20 77 68 61 74 20 74 68 65 20 66 75 6c   to what the ful
9f80: 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20 62 65  l path should be
9f90: 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68  , based on wheth
9fa0: 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  er the..      #
9fb0: 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65        mixed-mode
9fc0: 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62 65 69   assembly is bei
9fd0: 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68 65 20  ng used and the
9fe0: 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72  name of the curr
9ff0: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ent..      #
a000: 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20     platform...
a010: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
a020: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
a030: 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
a040: 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
a050: 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
a060: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
a070: 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
a080: 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c 69 74 65  eMethods _SQLite
a090: 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 69 6c 65  NativeModuleFile
a0a0: 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 20 66 69  Name..      } fi
a0b0: 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 26 26 20  leName] == 0 &&
a0c0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $a0d0: 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t a0e0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # a0f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE a100: 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 : The SQLite cor a110: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library a120: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee a130: 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 n loaded via.. a140: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th a150: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library a160: 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 pre-loader. Re a170: 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e turn that file n a180: 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ame now... a190: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret a1a0: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 urn$fileName..
a1b0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
a1c0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
a1d0: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   If the "native"
a1e0: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
a1f0: 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 61 6c  has been set, al
a200: 77 61 79 73 20 72 65 74 75 72 6e 20 74 68 65 0d  ways return the.
a210: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
a220: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
a230: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
a240: 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  mbly...      #..
a250: 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
a260: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
a270: 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ve]} then {..
a280: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a290: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
a2a0: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73  he mixed-mode as
a2b0: 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65  sembly file name
a2c0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
a2d0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
a2e0: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d  le nativename \.
a2f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
a300: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61  le join [getBina
a310: 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c  ryDirectory] $pl a320: 61 74 66 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 atform System.Da a330: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d ta.SQLite.dll]]. a340: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... a350: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT a360: 45 3a 20 41 72 65 20 77 65 20 61 74 74 65 6d 70 E: Are we attemp a370: 74 69 6e 67 20 74 6f 20 61 75 74 6f 6d 61 74 69 ting to automati a380: 63 61 6c 6c 79 20 64 65 74 65 63 74 20 77 68 65 cally detect whe a390: 74 68 65 72 20 6f 72 20 6e 6f 74 20 74 68 65 0d ther or not the. a3a0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 . # i a3b0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly a3c0: 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 3f 0d should be used?. a3d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. a3e0: 73 65 74 20 61 75 74 6f 6d 61 74 69 63 20 5b 65 set automatic [e a3f0: 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e xpr {[string len a400: 67 74 68 20 24 73 74 61 6e 64 61 72 64 5d 20 3d gth$standard] =
a410: 3d 20 30 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23  = 0}]....      #
a420: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
a430: 46 69 72 73 74 2c 20 69 6e 20 65 69 74 68 65 72  First, in either
a440: 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72 20   "automatic" or
a450: 22 6e 6f 6e 2d 73 74 61 6e 64 61 72 64 22 20 6d  "non-standard" m
a460: 6f 64 65 73 2c 20 61 74 74 65 6d 70 74 0d 0a 20  odes, attempt..
a470: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
a480: 66 69 6e 64 20 74 68 65 20 6e 61 74 69 76 65 2d  find the native-
a490: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73  only interop ass
a4a0: 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 23 0d  embly...      #.
a4b0: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f  .      if {$auto a4c0: 6d 61 74 69 63 20 7c 7c 20 21 24 73 74 61 6e 64 matic || !$stand
a4d0: 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ard} then {..
a4e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
a4f0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
a500: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
a510: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74   native-only int
a520: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69  erop assembly fi
a530: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
a540: 20 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 69      name for thi
a550: 73 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74  s platform and t
a560: 68 65 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a  hen return it...
a570: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a580: 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
a590: 61 6d 65 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65  ameOnly [getInte
a5a0: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e  ropAssemblyFileN
a5b0: 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20  amesOnly] {..
a5c0: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
a5d0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
a5e0: 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  name \..
a5f0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
a600: 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63   [getBinaryDirec
a610: 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20  tory] $platform a620: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d$fileNameOnly]].
a630: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
a640: 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66  {[file exists $f a650: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { a660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re a670: 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a turn$fileName..
a680: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
a690: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
a6a0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
a6b0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 6e 2c 20    # NOTE: Then,
a6c0: 69 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d  in either "autom
a6d0: 61 74 69 63 22 20 6f 72 20 22 73 74 61 6e 64 61  atic" or "standa
a6e0: 72 64 22 20 6d 6f 64 65 73 2c 20 61 74 74 65 6d  rd" modes, attem
a6f0: 70 74 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  pt to..      #
a700: 20 20 20 20 20 66 69 6e 64 20 74 68 65 20 73 74       find the st
a710: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69  andard SQLite li
a720: 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d  brary...      #.
a730: 0a 20 20 20 20 20 20 69 66 20 7b 24 61 75 74 6f  .      if {$auto a740: 6d 61 74 69 63 20 7c 7c 20 24 73 74 61 6e 64 61 matic ||$standa
a750: 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  rd} then {..
a760: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
a770: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
a780: 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65 20  o determine the
a790: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e  native-only stan
a7a0: 64 61 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72  dard SQLite libr
a7b0: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ary..        #
a7c0: 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66       file name f
a7d0: 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f 72 6d  or this platform
a7e0: 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e   and then return
a7f0: 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d   it...        #.
a800: 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68  .        foreach
a810: 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67   fileNameOnly [g
a820: 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46  etNativeLibraryF
a830: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b 0d  ileNamesOnly] {.
a840: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 66  .          set f
a850: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61  ileName [file na
a860: 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20  tivename \..
a870: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
a880: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44  join [getBinaryD
a890: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66  irectory] $platf a8a0: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c orm$fileNameOnl
a8b0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  y]]....
a8c0: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
a8d0: 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  s $fileName]} th a8e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. a8f0: 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 return$fileNa
a900: 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  me..          }.
a910: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
a920: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
a930: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 61        # NOTE: Wa
a940: 73 20 74 68 65 20 6d 61 6e 61 67 65 64 20 61 73  s the managed as
a950: 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 64 20  sembly compiled
a960: 65 78 70 65 63 74 69 6e 67 20 74 6f 20 64 65 61  expecting to dea
a970: 6c 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  l with the..
a980: 20 20 23 20 20 20 20 20 20 20 73 74 61 6e 64 61    #       standa
a990: 72 64 20 63 6f 72 65 20 6c 69 62 72 61 72 79 3f  rd core library?
a9a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
a9b0: 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
a9c0: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 53  DefineConstant S
a9d0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 5d 7d  QLITE_STANDARD]}
a9e0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
a9f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
aa00: 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20  TE: Fallback to
aa10: 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 6e 61  returning the na
aa20: 74 69 76 65 2d 6f 6e 6c 79 20 73 74 61 6e 64 61  tive-only standa
aa30: 72 64 20 53 51 4c 69 74 65 20 6c 69 62 72 61 72  rd SQLite librar
aa40: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
aa50: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72     file name for
aa60: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a   the platform...
aa70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
aa80: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 73     set fileNames
aa90: 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c  Only [getNativeL
aaa0: 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f  ibraryFileNamesO
aab0: 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nly]....
aac0: 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69  if {[llength $fi aad0: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 leNamesOnly] == aae0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. aaf0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. ab00: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... ab10: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c return [fil ab20: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi ab30: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 le join \.. ab40: 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar ab50: 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 yDirectory]$pla
ab60: 74 66 6f 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66  tform [lindex $f ab70: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d ileNamesOnly 0]] ab80: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else ab90: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. aba0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 # NOTE: Fa abb0: 6c 6c 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e llback to return abc0: 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f ing the native-o abd0: 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73 65 nly interop asse abe0: 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 mbly file.. abf0: 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 # name ac00: 66 6f 72 20 74 68 65 20 70 6c 61 74 66 6f 72 6d for the platform ac10: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. ac20: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa ac30: 6d 65 73 4f 6e 6c 79 20 5b 67 65 74 49 6e 74 65 mesOnly [getInte ac40: 72 6f 70 41 73 73 65 6d 62 6c 79 46 69 6c 65 4e ropAssemblyFileN ac50: 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a 20 20 20 amesOnly].... ac60: 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt ac70: 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 h$fileNamesOnly
ac80: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
ac90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
aca0: 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a   ""..        }..
acb0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
acc0: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
acd0: 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
ace0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
acf0: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d  BinaryDirectory]
ad00: 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c 69 6e 64   $platform [lind ad10: 65 78 20 24 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c ex$fileNamesOnl
ad20: 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d  y 0]]]..      }.
ad30: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
ad40: 72 6f 63 20 67 65 74 43 6f 6d 6d 6f 6e 44 69 72  roc getCommonDir
ad50: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20  ectory {} {..
ad60: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
ad70: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
ad80: 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20 64  re returns the d
ad90: 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74  irectory where t
ada0: 68 65 20 74 65 73 74 20 73 63 72 69 70 74 73 0d  he test scripts.
adb0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
adc0: 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64  hould be located
add0: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
ade0: 68 69 73 20 6a 75 73 74 20 72 65 74 75 72 6e 73  his just returns
adf0: 20 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20   the Eagle..
ae00: 20 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79    #       binary
ae10: 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 20   directory...
ae20: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
ae30: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
ae40: 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d  ommon_directory]
ae50: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
ae60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
ae70: 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74  $::common_direct ae80: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ory] > 0} then { ae90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. aea0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 # NOTE: The aeb0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 location of the aec0: 20 63 6f 6d 6d 6f 6e 20 64 69 72 65 63 74 6f 72 common director aed0: 79 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d y has been set;. aee0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # aef0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use af00: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a it... #.. af10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
af20: 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f  ::common_directo
af30: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
af40: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
af50: 20 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74   ::vendor_direct
af60: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  ory] && \..
af70: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
af80: 67 74 68 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69  gth $::vendor_di af90: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th afa0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. afb0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: afc0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of afd0: 20 74 68 65 20 76 65 6e 64 6f 72 20 64 69 72 65 the vendor dire afe0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 73 ctory has been s aff0: 65 74 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 et;.. # b000: 20 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 therefore, b010: 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 use it... b020: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu b030: 72 6e 20 24 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 rn$::vendor_dir
b040: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
b050: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
b060: 69 73 74 73 20 3a 3a 74 63 6c 5f 6c 69 62 72 61  ists ::tcl_libra
b070: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  ry] && \..
b080: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
b090: 74 68 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72  th $::tcl_librar b0a0: 79 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 20 y] > 0 && \.. b0b0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 69 73 64 [file isd b0c0: 69 72 65 63 74 6f 72 79 20 24 3a 3a 74 63 6c 5f irectory$::tcl_
b0d0: 6c 69 62 72 61 72 79 5d 7d 20 74 68 65 6e 20 7b  library]} then {
b0e0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b0f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
b100: 20 76 61 72 69 61 62 6c 65 20 77 69 74 68 20 74   variable with t
b110: 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74  he location of t
b120: 68 65 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  he script librar
b130: 79 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  y is..        #
b140: 20 20 20 20 20 20 73 65 74 20 61 6e 64 20 61 70        set and ap
b150: 70 65 61 72 73 20 74 6f 20 62 65 20 61 20 72 65  pears to be a re
b160: 61 6c 20 64 69 72 65 63 74 6f 72 79 20 28 69 2e  al directory (i.
b170: 65 2e 20 6e 6f 74 20 65 6d 62 65 64 64 65 64 0d  e. not embedded.
b180: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
b190: 20 77 69 74 68 69 6e 20 61 20 66 69 6c 65 29 3b   within a file);
b1a0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
b1b0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
b1c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $b1d0: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 0d 0a 20 ::tcl_library.. b1e0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. b1f0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. b200: 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 # NOTE: Fallba b210: 63 6b 20 74 6f 20 74 68 65 20 64 69 72 65 63 74 ck to the direct b220: 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ory containing t b230: 68 65 20 65 78 65 63 75 74 61 62 6c 65 2e 0d 0a he executable... b240: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b250: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20 return [info b260: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d binary].. } b270: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... b280: 70 72 6f 63 20 67 65 74 44 61 74 61 62 61 73 65 proc getDatabase b290: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. b2a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # b2b0: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc b2c0: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th b2d0: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher b2e0: 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 e the test datab b2f0: 61 73 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 ases.. # b300: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo b310: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau b320: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us b330: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary b340: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # b350: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config b360: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy b370: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. b380: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info b390: 65 78 69 73 74 73 20 3a 3a 64 61 74 61 62 61 73 exists ::databas b3a0: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 e_directory] && b3b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 \.. [st b3c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 ring length$::d
b3d0: 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 6f 72  atabase_director
b3e0: 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  y] > 0} then {..
b3f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
b400: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c     # NOTE: The l
b410: 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 64  ocation of the d
b420: 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72  atabase director
b430: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
b440: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
b450: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
b460: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
b470: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
b480: 65 74 75 72 6e 20 24 3a 3a 64 61 74 61 62 61 73  eturn $::databas b490: 65 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 e_directory.. b4a0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in b4b0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 73 63 72 61 fo exists ::scra b4c0: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 tch_directory] & b4d0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ b4e0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
b4f0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f  :scratch_directo
b500: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
b510: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
b520: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
b530: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
b540: 73 63 72 61 74 63 68 20 64 69 72 65 63 74 6f 72  scratch director
b550: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  y has been overr
b560: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20  idden;..
b570: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72  #       therefor
b580: 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20  e, use it...
b590: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
b5a0: 65 74 75 72 6e 20 24 3a 3a 73 63 72 61 74 63 68  eturn $::scratch b5b0: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. b5c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. b5d0: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 54 return [getT b5e0: 65 6d 70 6f 72 61 72 79 50 61 74 68 5d 0d 0a 20 emporaryPath].. b5f0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... b600: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 .. proc getTe b610: 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 mporaryDirectory b620: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. b630: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 # NOTE: Th b640: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 is procedure ret b650: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f urns the directo b660: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 6d ry where the tem b670: 70 6f 72 61 72 79 20 66 69 6c 65 73 0d 0a 20 20 porary files.. b680: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou b690: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. b6a0: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this b6b0: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t b6c0: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. b6d0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director b6e0: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for b6f0: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... b700: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if b710: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : b720: 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 :temporary_direc b730: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tory] && \.. b740: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le b750: 6e 67 74 68 20 24 3a 3a 74 65 6d 70 6f 72 61 72 ngth$::temporar
b760: 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  y_directory] > 0
b770: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b780: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
b790: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
b7a0: 6e 20 6f 66 20 74 68 65 20 74 65 6d 70 6f 72 61  n of the tempora
b7b0: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  ry directory has
b7c0: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e   been overridden
b7d0: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ;..        #
b7e0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73     therefore, us
b7f0: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  e it...        #
b800: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
b810: 20 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69   $::temporary_di b820: 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d rectory.. } b830: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e b840: 78 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f xists ::scratch_ b850: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. b860: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri b870: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 ng length$::scr
b880: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20  atch_directory]
b890: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
b8a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b8b0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
b8c0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61  tion of the scra
b8d0: 74 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61  tch directory ha
b8e0: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
b8f0: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
b900: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
b910: 73 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  se it...
b920: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
b930: 6e 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72  n $::scratch_dir b940: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 ectory.. } b950: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. b960: 72 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f return [getTempo b970: 72 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 raryPath].. b980: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... b990: 20 20 70 72 6f 63 20 67 65 74 45 78 65 63 75 74 proc getExecut b9a0: 65 4f 6e 53 65 74 75 70 20 7b 7d 20 7b 0d 0a 20 eOnSetup {} {.. b9b0: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e b9c0: 78 69 73 74 73 20 3a 3a 65 78 65 63 75 74 65 5f xists ::execute_ b9d0: 6f 6e 5f 73 65 74 75 70 5d 20 26 26 20 5c 0d 0a on_setup] && \.. b9e0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e [strin b9f0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 78 65 63 g length$::exec
ba00: 75 74 65 5f 6f 6e 5f 73 65 74 75 70 5d 20 3e 20  ute_on_setup] >
ba10: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
ba20: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
ba30: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65  NOTE: Return the
ba40: 20 63 6f 6e 66 69 67 75 72 65 64 20 53 51 4c 20   configured SQL
ba50: 74 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e  to execute durin
ba60: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
ba70: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
ba80: 20 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72    setup procedur
ba90: 65 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72  e (i.e. for ever
baa0: 79 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20  y test database
bab0: 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20  connection)...
bac0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
bad0: 20 72 65 74 75 72 6e 20 24 3a 3a 65 78 65 63 75   return $::execu bae0: 74 65 5f 6f 6e 5f 73 65 74 75 70 0d 0a 20 20 20 te_on_setup.. baf0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. bb00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. bb10: 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 # NOTE: By defau bb20: 6c 74 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 20 lt, there is no bb30: 53 51 4c 20 74 6f 20 65 78 65 63 75 74 65 20 64 SQL to execute d bb40: 75 72 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 uring the connec bb50: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 tion.. # bb60: 20 20 20 20 20 20 73 65 74 75 70 20 70 72 6f 63 setup proc bb70: 65 64 75 72 65 20 28 69 2e 65 2e 20 66 6f 72 20 edure (i.e. for bb80: 65 76 65 72 79 20 74 65 73 74 20 64 61 74 61 62 every test datab bb90: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e ase connection). bba0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. bbb0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. bbc0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. bbd0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 ... proc getS bbe0: 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 6c 45 73 tringMapForTclEs bbf0: 63 61 70 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 cape {} {.. bc00: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 5c 5c return [list \\ bc10: 20 5c 5c 5c 5c 20 5c 5b 20 5c 5c 5c 5b 20 5c 5d \\\\ $\\\[$ bc20: 20 5c 5c 5c 5d 20 5c 24 20 5c 5c 5c 24 5d 0d 0a \\\] \$ \\\$].. bc30: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr bc40: 6f 63 20 67 65 74 54 65 73 74 4f 76 65 72 72 69 oc getTestOverri bc50: 64 65 73 50 72 65 61 6d 62 6c 65 20 7b 20 7b 65 desPreamble { {e bc60: 78 74 72 61 56 61 72 4e 61 6d 65 73 20 22 22 7d xtraVarNames ""} bc70: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set bc80: 76 61 72 4e 61 6d 65 73 20 5b 6c 69 73 74 5d 0d varNames [list]. bc90: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. bca0: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 # NOTE: If ava bcb0: 69 6c 61 62 6c 65 2c 20 73 74 61 72 74 20 77 69 ilable, start wi bcc0: 74 68 20 74 68 65 20 6d 61 73 74 65 72 20 6c 69 th the master li bcd0: 73 74 20 6f 66 20 74 65 73 74 20 6f 76 65 72 72 st of test overr bce0: 69 64 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ide.. # bcf0: 20 20 20 76 61 72 69 61 62 6c 65 73 2e 0d 0a 20 variables... bd00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if bd10: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : bd20: 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d :test_overrides] bd30: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. bd40: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 [llength$::tes
bd50: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 3e 20 30  t_overrides] > 0
bd60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
bd70: 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76    eval lappend v
bd80: 61 72 4e 61 6d 65 73 20 24 3a 3a 74 65 73 74 5f  arNames $::test_ bd90: 6f 76 65 72 72 69 64 65 73 0d 0a 20 20 20 20 20 overrides.. bda0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. bdb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 # NOTE: If bdc0: 72 65 71 75 65 73 74 65 64 20 62 79 20 6f 75 72 requested by our bdd0: 20 63 61 6c 6c 65 72 2c 20 61 64 64 20 61 6e 79 caller, add any bde0: 20 61 64 64 69 74 69 6f 6e 61 6c 20 76 61 72 69 additional vari bdf0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 able.. # be00: 20 20 20 20 6e 61 6d 65 73 20 74 6f 20 63 6f 70 names to cop be10: 79 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d y now... #. be20: 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e . if {[llen be30: 67 74 68 20 24 65 78 74 72 61 56 61 72 4e 61 6d gth$extraVarNam
be40: 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  es] > 0} then {.
be50: 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61  .        eval la
be60: 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20 24  ppend varNames $be70: 65 78 74 72 61 56 61 72 4e 61 6d 65 73 0d 0a 20 extraVarNames.. be80: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... be90: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: bea0: 20 42 75 69 6c 64 20 74 68 65 20 73 63 72 69 70 Build the scrip beb0: 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 62 65 t fragment to be bec0: 20 72 65 74 75 72 6e 65 64 20 62 79 20 70 72 6f returned by pro bed0: 63 65 73 73 69 6e 67 20 65 61 63 68 0d 0a 20 20 cessing each.. bee0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 # vari bef0: 61 62 6c 65 20 6e 61 6d 65 20 61 6e 64 20 61 64 able name and ad bf00: 64 69 6e 67 20 74 68 65 20 6e 65 63 65 63 65 73 ding the nececes bf10: 73 61 72 79 20 73 63 72 69 70 74 20 66 72 61 67 sary script frag bf20: 6d 65 6e 74 73 20 66 6f 72 0d 0a 20 20 20 20 20 ments for.. bf30: 20 23 20 20 20 20 20 20 20 65 61 63 68 20 6f 6e # each on bf40: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. bf50: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 22 22 set result "" bf60: 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 .... foreac bf70: 68 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 h varName$varNa
bf80: 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  mes {..        #
bf90: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
bfa0: 3a 20 42 75 69 6c 64 20 74 68 65 20 71 75 61 6c  : Build the qual
bfb0: 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 76 61 72  ified global var
bfc0: 69 61 62 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20  iable name...
bfd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
bfe0: 73 65 74 20 66 75 6c 6c 56 61 72 4e 61 6d 65 20  set fullVarName
bff0: 5b 61 70 70 65 6e 64 41 72 67 73 20 3a 3a 20 24  [appendArgs :: $c000: 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 varName].... c010: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # c020: 20 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 NOTE: Does the c030: 76 61 72 69 61 62 6c 65 20 65 78 69 73 74 20 69 variable exist i c040: 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 n this interpret c050: 65 72 20 63 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 er context?.. c060: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. c070: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists c080: 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20$fullVarName]}
c090: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c0a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
c0b0: 20 4e 4f 54 45 3a 20 41 70 70 65 6e 64 20 61 20   NOTE: Append a
c0c0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
c0d0: 74 6f 20 74 68 65 20 72 65 73 75 6c 74 20 74 68  to the result th
c0e0: 61 74 20 77 69 6c 6c 20 63 6f 72 72 65 63 74 6c  at will correctl
c0f0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #
c100: 20 20 20 20 20 63 6f 70 79 20 61 6e 79 20 63 6f       copy any co
c110: 6e 74 61 69 6e 65 64 20 76 61 6c 75 65 20 74 6f  ntained value to
c120: 20 61 6e 6f 74 68 65 72 20 69 6e 74 65 72 70 72   another interpr
c130: 65 74 65 72 20 63 6f 6e 74 65 78 74 2e 0d 0a 20  eter context...
c140: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
c150: 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73        append res
c160: 75 6c 74 20 5c 6e 20 22 73 65 74 20 22 20 24 66  ult \n "set " $f c170: 75 6c 6c 56 61 72 4e 61 6d 65 20 22 20 5c 7b 22 ullVarName " \{" c180: 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5c 0d 0a [string map \.. c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g c1a0: 65 74 53 74 72 69 6e 67 4d 61 70 46 6f 72 54 63 etStringMapForTc c1b0: 6c 45 73 63 61 70 65 5d 20 5b 73 65 74 20 24 66 lEscape] [set$f
c1c0: 75 6c 6c 56 61 72 4e 61 6d 65 5d 5d 20 5c 7d 0d  ullVarName]] \}.
c1d0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
c1e0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
c1f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
c200: 20 74 68 65 20 72 65 73 75 6c 74 20 63 6f 6e 74   the result cont
c210: 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d 6f 72 65  ains one or more
c220: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74   script fragment
c230: 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a 20 20 20  s, append a..
c240: 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 6c 69     #       newli
c250: 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ne...      #..
c260: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
c270: 6c 65 6e 67 74 68 20 24 72 65 73 75 6c 74 5d 20  length $result] c280: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. c290: 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 73 75 append resu c2a0: 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a lt \n.. }.. c2b0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
c2c0: 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c  result..    }...
c2d0: 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 53  ..    proc moveS
c2e0: 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44  ystemDataSQLiteD
c2f0: 6c 6c 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 74  llConfig { {rest
c300: 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 62  ore false} {verb
c310: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  ose true} } {..
c320: 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f       set directo
c330: 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72  ry [getBinaryDir
c340: 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20  ectory]....
c350: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
c360: 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20  gth $directory] c370: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. c380: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f if {$verbo
c390: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  se} then {..
c3a0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t c3b0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app c3c0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. c3d0: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s c3e0: 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 kipped moving \" c3f0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi c400: 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c te.dll.config\", c410: 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. c420: 20 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 "no binary d c430: 69 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 irectory\n"].. c440: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... c450: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. c460: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 }.... set c470: 66 69 6c 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c fileName(1) [fil c480: 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 e normalize \.. c490: 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a [file j c4a0: 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 53 oin$directory S
c4b0: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
c4c0: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a  e.dll.config]]..
c4d0: 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65  ..      set file
c4e0: 4e 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 41  Name(2) [appendA
c4f0: 72 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29  rgs $fileName(1) c500: 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20 20 .moved].... c510: 20 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d 20 if {$restore}
c520: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
c530: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
c540: 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d 20   $fileName(2)]} c550: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c560: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 file rename$f
c570: 69 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c 65  ileName(2) $file c580: 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20 20 Name(1).... c590: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
c5a0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
c5b0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: c5c0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap c5d0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. c5e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- c5f0: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c - moved \""$fil
c600: 65 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f 20  eName(2) "\" to
c610: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
c620: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName c630: 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 (1) \"\n].. c640: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. c650: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c660: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
c670: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
c680: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t c690: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app c6a0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. c6b0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- c6c0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving c6d0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 \""$fileName(2)
c6e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c6f0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
c700: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
c710: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
c720: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20       }..      }
c730: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
c740: 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73  if {[file exists
c750: 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d 20   $fileName(1)]} c760: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. c770: 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24 66 file rename$f
c780: 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c 65  ileName(1) $file c790: 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20 20 Name(2).... c7a0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
c7b0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
c7c0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: c7d0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap c7e0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. c7f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- c800: 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69 6c - moved \""$fil
c810: 65 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f 20  eName(1) "\" to
c820: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
c830: 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65         $fileName c840: 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 (2) \"\n].. c850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. c860: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. c870: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
c880: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
c890: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t c8a0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app c8b0: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. c8c0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- c8d0: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 skipped moving c8e0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 \""$fileName(1)
c8f0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
c900: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
c910: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
c920: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
c930: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
c940: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
c950: 72 6f 63 20 77 72 69 74 65 53 79 73 74 65 6d 44  roc writeSystemD
c960: 61 74 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66  ataSQLiteDllConf
c970: 69 67 20 7b 20 64 61 74 61 20 7b 76 65 72 62 6f  ig { data {verbo
c980: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  se true} } {..
c990: 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72      set director
c9a0: 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  y [getBinaryDire
c9b0: 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20  ctory]....
c9c0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
c9d0: 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d 20 3d  th $directory] = c9e0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. c9f0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
ca00: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
ca10: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te ca20: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe ca30: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. ca40: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk ca50: 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c 22 53 ipped moving \"S ca60: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit ca70: 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 2c 20 e.dll.config\", ca80: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. ca90: 20 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 "no binary di caa0: 72 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 rectory\n"].. cab0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... cac0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. cad0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 }.... set f cae0: 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f ileName [file no caf0: 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 rmalize \.. cb00: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 [file join cb10: 24 64 69 72 65 63 74 6f 72 79 20 53 79 73 74 65$directory Syste
cb20: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
cb30: 6c 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20  l.config]]....
cb40: 20 20 20 20 77 72 69 74 65 46 69 6c 65 20 24 66      writeFile $f cb50: 69 6c 65 4e 61 6d 65 20 24 64 61 74 61 0d 0a 0d ileName$data...
cb60: 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62  .      if {$verb cb70: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. cb80: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
cb90: 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  st_channel \..
cba0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
cbb0: 77 72 6f 74 65 20 5c 22 53 79 73 74 65 6d 2e 44  wrote \"System.D
cbc0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63  ata.SQLite.dll.c
cbd0: 6f 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 20 20  onfig\"\n"..
cbe0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
cbf0: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  urn $fileName.. cc00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro cc10: 63 20 6d 6f 76 65 45 61 67 6c 65 53 68 65 6c 6c c moveEagleShell cc20: 4d 64 61 43 6f 6e 66 69 67 20 7b 20 7b 72 65 73 MdaConfig { {res cc30: 74 6f 72 65 20 66 61 6c 73 65 7d 20 7b 76 65 72 tore false} {ver cc40: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. cc50: 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 74 set direct cc60: 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 69 ory [getBinaryDi cc70: 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 rectory].... cc80: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le cc90: 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 5d ngth$directory]
cca0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
ccb0: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62         if {$verb ccc0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ose} then {.. ccd0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
cce0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
ccf0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
cd00: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
cd10: 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20 5c  skipped moving \
cd20: 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e  "EagleShell.exe.
cd30: 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 22 20  mda.config\", "
cd40: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
cd50: 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72 65   "no binary dire
cd60: 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20 20  ctory\n"]..
cd70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
cd80: 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d  return..      }.
cd90: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c  ...      set fil
cda0: 65 4e 61 6d 65 28 31 29 20 5b 66 69 6c 65 20 6e  eName(1) [file n
cdb0: 6f 72 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20  ormalize \..
cdc0: 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e        [file join
cdd0: 20 24 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c   $directory Eagl cde0: 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 eShell.exe.mda.c cdf0: 6f 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 onfig]].... ce00: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 set fileName(2) ce10: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 [appendArgs$fi
ce20: 6c 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64  leName(1) .moved
ce30: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  ]....      if {$ce40: 72 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d restore} then {. ce50: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi ce60: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
ce70: 61 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d  ame(2)]} then {.
ce80: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
ce90: 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  rename $fileName cea0: 28 32 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 (2)$fileName(1)
ceb0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
cec0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then ced0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. cee0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
cef0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
cf00: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
cf10: 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64       "---- moved
cf20: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32   \"" $fileName(2 cf30: 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a ) "\" to \"" \.. cf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 cf50: 24 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c$fileName(1) \"\
cf60: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
cf70: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
cf80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
cf90: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then cfa0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t cfb0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
cfc0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
cfd0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
cfe0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
cff0: 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69  d moving \"" $fi d000: 6c 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 leName(2) \.. d010: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" d020: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex d030: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. d040: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. d050: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. d060: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 . if {[fi d070: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
d080: 61 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d  ame(1)]} then {.
d090: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
d0a0: 72 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  rename $fileName d0b0: 28 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 (1)$fileName(2)
d0c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
d0d0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then d0e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. d0f0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
d100: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
d110: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
d120: 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64       "---- moved
d130: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31   \"" $fileName(1 d140: 29 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a ) "\" to \"" \.. d150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 d160: 24 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c$fileName(2) \"\
d170: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
d180: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
d190: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
d1a0: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20  {$verbose} then d1b0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t d1c0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
d1d0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
d1e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d1f0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
d200: 64 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69  d moving \"" $fi d210: 6c 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 leName(1) \.. d220: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" d230: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex d240: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 ist\n"].. d250: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. d260: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. d270: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 77 72 69 .... proc wri d280: 74 65 45 61 67 6c 65 53 68 65 6c 6c 4d 64 61 43 teEagleShellMdaC d290: 6f 6e 66 69 67 20 7b 20 64 61 74 61 20 7b 76 65 onfig { data {ve d2a0: 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d rbose true} } {. d2b0: 0a 20 20 20 20 20 20 73 65 74 20 64 69 72 65 63 . set direc d2c0: 74 6f 72 79 20 5b 67 65 74 42 69 6e 61 72 79 44 tory [getBinaryD d2d0: 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 irectory].... d2e0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l d2f0: 65 6e 67 74 68 20 24 64 69 72 65 63 74 6f 72 79 ength$directory
d300: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
d310: 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72          if {$ver d320: 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 bose} then {.. d330: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
d340: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
d350: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
d360: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
d370: 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67 20   skipped moving
d380: 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65  \"EagleShell.exe
d390: 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 2c 20 22  .mda.config\", "
d3a0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d3b0: 20 20 22 6e 6f 20 62 69 6e 61 72 79 20 64 69 72    "no binary dir
d3c0: 65 63 74 6f 72 79 5c 6e 22 5d 0d 0a 20 20 20 20  ectory\n"]..
d3d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
d3e0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
d3f0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69  ....      set fi
d400: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72  leName [file nor
d410: 6d 61 6c 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20  malize \..
d420: 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24      [file join $d430: 64 69 72 65 63 74 6f 72 79 20 45 61 67 6c 65 53 directory EagleS d440: 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e hell.exe.mda.con d450: 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 fig]].... w d460: 72 69 74 65 46 69 6c 65 20 24 66 69 6c 65 4e 61 riteFile$fileNa
d470: 6d 65 20 24 64 61 74 61 0d 0a 0d 0a 20 20 20 20  me $data.... d480: 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 if {$verbose}
d490: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d4a0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch d4b0: 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. d4c0: 20 20 20 20 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 "---- wrote d4d0: 20 5c 22 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 \"EagleShell.ex d4e0: 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5c 22 5c 6e e.mda.config\"\n d4f0: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ".. }.... d500: 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 return$file
d510: 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  Name..    }.....
d520: 20 20 20 20 70 72 6f 63 20 67 65 74 41 70 70 44      proc getAppD
d530: 6f 6d 61 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20  omainPreamble {
d540: 7b 70 72 65 66 69 78 20 22 22 7d 20 7b 73 75 66  {prefix ""} {suf
d550: 66 69 78 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  fix ""} } {..
d560: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
d570: 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75  TE: This procedu
d580: 72 65 20 72 65 74 75 72 6e 73 20 61 20 74 65 73  re returns a tes
d590: 74 20 73 65 74 75 70 20 73 63 72 69 70 74 20 66  t setup script f
d5a0: 72 61 67 6d 65 6e 74 20 73 75 69 74 61 62 6c 65  ragment suitable
d5b0: 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 20   for..      #
d5c0: 20 20 20 20 65 76 61 6c 75 61 74 69 6f 6e 20 62      evaluation b
d5d0: 79 20 61 6e 20 69 6e 74 65 72 70 72 65 74 65 72  y an interpreter
d5e0: 20 63 72 65 61 74 65 64 20 69 6e 20 61 6e 20 69   created in an i
d5f0: 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74  solated applicat
d600: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
d610: 20 20 20 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20     domain.  The
d620: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
d630: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77  being returned w
d640: 69 6c 6c 20 62 65 20 73 75 72 72 6f 75 6e 64 65  ill be surrounde
d650: 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20  d by..      #
d660: 20 20 20 20 74 68 65 20 70 72 65 66 69 78 20 61      the prefix a
d670: 6e 64 20 73 75 66 66 69 78 20 22 73 63 72 69 70  nd suffix "scrip
d680: 74 20 66 72 61 67 6d 65 6e 74 73 22 20 73 70 65  t fragments" spe
d690: 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 61  cified by our ca
d6a0: 6c 6c 65 72 2c 0d 0a 20 20 20 20 20 20 23 20 20  ller,..      #
d6b0: 20 20 20 20 20 69 66 20 61 6e 79 2e 20 20 54 68       if any.  Th
d6c0: 65 20 65 6e 74 69 72 65 20 73 63 72 69 70 74 20  e entire script
d6d0: 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 77  being returned w
d6e0: 69 6c 6c 20 62 65 20 73 75 62 73 74 69 74 75 74  ill be substitut
d6f0: 65 64 20 76 69 61 0d 0a 20 20 20 20 20 20 23 20  ed via..      #
d700: 20 20 20 20 20 20 5b 73 75 62 73 74 5d 2c 20 69        [subst], i
d710: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66  n the context of
d720: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 62 65 66   our caller, bef
d730: 6f 72 65 20 62 65 69 6e 67 20 72 65 74 75 72 6e  ore being return
d740: 65 64 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ed...      #
d750: 20 20 20 54 68 69 73 20 73 74 65 70 20 69 73 20     This step is
d760: 6e 65 63 65 73 73 61 72 79 20 73 6f 20 74 68 61  necessary so tha
d770: 74 20 73 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63  t some limited c
d780: 6f 6e 74 65 78 74 20 69 6e 66 6f 72 6d 61 74 69  ontext informati
d790: 6f 6e 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20  on,..      #
d7a0: 20 20 20 70 72 69 6d 61 72 69 6c 79 20 72 65 6c     primarily rel
d7b0: 61 74 65 64 20 74 6f 20 74 68 65 20 74 65 73 74  ated to the test
d7c0: 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73 2c  ing directories,
d7d0: 20 63 61 6e 20 62 65 20 74 72 61 6e 73 66 65 72   can be transfer
d7e0: 72 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  red..      #
d7f0: 20 20 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70     to the interp
d800: 72 65 74 65 72 20 69 6e 20 74 68 65 20 69 73 6f  reter in the iso
d810: 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f  lated applicatio
d820: 6e 20 64 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67  n domain, making
d830: 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20   it..      #
d840: 20 20 20 61 62 6c 65 20 74 6f 20 73 75 63 63 65     able to succe
d850: 73 73 66 75 6c 6c 79 20 72 75 6e 20 74 65 73 74  ssfully run test
d860: 73 20 74 68 61 74 20 72 65 71 75 69 72 65 20 6f  s that require o
d870: 6e 65 20 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68  ne or more of th
d880: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
d890: 20 66 69 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66   files in one of
d8a0: 20 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72   the testing dir
d8b0: 65 63 74 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65  ectories.  Calle
d8c0: 72 73 20 73 68 6f 75 6c 64 20 6b 65 65 70 20 69  rs should keep i
d8d0: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
d8e0: 20 6d 69 6e 64 20 74 68 61 74 20 74 68 65 20 74   mind that the t
d8f0: 65 73 74 20 73 63 72 69 70 74 20 66 72 61 67 6d  est script fragm
d900: 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72 6e  ent being return
d910: 65 64 20 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f  ed cannot rely o
d920: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
d930: 20 61 6e 79 20 73 63 72 69 70 74 20 6c 69 62 72   any script libr
d940: 61 72 79 20 70 72 6f 63 65 64 75 72 65 73 20 74  ary procedures t
d950: 68 61 74 20 61 72 65 20 6e 6f 74 20 70 72 6f 76  hat are not prov
d960: 69 64 65 64 20 62 79 20 74 68 65 20 45 61 67 6c  ided by the Eagl
d970: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
d980: 20 6c 69 62 72 61 72 79 20 70 61 63 6b 61 67 65   library package
d990: 20 28 69 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67   (i.e. "init.eag
d9a0: 6c 65 22 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20  le"), including
d9b0: 74 68 6f 73 65 20 70 72 6f 76 69 64 65 64 20 62  those provided b
d9c0: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
d9d0: 20 74 68 65 20 45 61 67 6c 65 20 74 65 73 74 20   the Eagle test
d9e0: 70 61 63 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20  package, unless
d9f0: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
da00: 69 6e 67 20 74 68 65 6d 20 69 73 20 6c 6f 61 64  ing them is load
da10: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
da20: 20 20 6d 61 6e 75 61 6c 6c 79 20 76 69 61 20 73    manually via s
da30: 6f 6d 65 20 6f 74 68 65 72 20 6d 65 63 68 61 6e  ome other mechan
da40: 69 73 6d 20 28 65 2e 67 2e 20 62 79 20 69 6e 63  ism (e.g. by inc
da50: 6c 75 64 69 6e 67 20 61 70 70 72 6f 70 72 69 61  luding appropria
da60: 74 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  te..      #
da70: 20 20 5b 70 61 63 6b 61 67 65 20 72 65 71 75 69    [package requi
da80: 72 65 5d 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20  re] or [source]
da90: 63 6f 6d 6d 61 6e 64 73 20 69 6e 20 74 68 65 20  commands in the
daa0: 70 72 65 66 69 78 20 6f 72 20 73 75 66 66 69 78  prefix or suffix
dab0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
dac0: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73  script fragments
dad0: 29 2e 20 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61  ).  Also, all va
dae0: 72 69 61 62 6c 65 20 72 65 66 65 72 65 6e 63 65  riable reference
daf0: 73 20 61 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64  s and all nested
db00: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
db10: 63 6f 6d 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74  commands (i.e. t
db20: 68 6f 73 65 20 69 6e 20 73 71 75 61 72 65 20 62  hose in square b
db30: 72 61 63 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e  rackets) contain
db40: 65 64 20 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d  ed in the final.
db50: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
db60: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 77  cript fragment w
db70: 69 6c 6c 20 65 6e 64 20 75 70 20 62 65 69 6e 67  ill end up being
db80: 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20 74 68   evaluated in th
db90: 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 74 68 65  e context of the
dba0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
dbb0: 63 61 6c 6c 69 6e 67 20 69 6e 74 65 72 70 72 65  calling interpre
dbc0: 74 65 72 20 61 6e 64 20 6e 6f 74 20 74 68 65 20  ter and not the
dbd0: 74 61 72 67 65 74 20 69 6e 74 65 72 70 72 65 74  target interpret
dbe0: 65 72 20 63 72 65 61 74 65 64 20 69 6e 20 74 68  er created in th
dbf0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
dc00: 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69 63   isolated applic
dc10: 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c  ation domain unl
dc20: 65 73 73 20 74 68 65 20 64 6f 6c 6c 61 72 20 73  ess the dollar s
dc30: 69 67 6e 73 20 61 6e 64 2f 6f 72 20 73 71 75 61  igns and/or squa
dc40: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  re..      #
dc50: 20 20 62 72 61 63 6b 65 74 73 20 61 72 65 20 73    brackets are s
dc60: 70 65 63 69 61 6c 6c 79 20 71 75 6f 74 65 64 20  pecially quoted
dc70: 77 69 74 68 20 62 61 63 6b 73 6c 61 73 68 65 73  with backslashes
dc80: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
dc90: 20 20 72 65 74 75 72 6e 20 5b 75 70 6c 65 76 65    return [upleve
dca0: 6c 20 31 20 5b 6c 69 73 74 20 73 75 62 73 74 20  l 1 [list subst
dcb0: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70 72 65  [appendArgs $pre dcc0: 66 69 78 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 fix {.. # dcd0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE dce0: 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d : The $object$ dcf0: 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20 command may be dd00: 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d 65 20 missing in some dd10: 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20 20 20 Eagle core.. dd20: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72 # libr dd30: 61 72 79 20 63 6f 6e 66 69 67 75 72 61 74 69 6f ary configuratio dd40: 6e 73 2e 20 20 43 6c 6f 6e 69 6e 67 20 61 6e 64 ns. Cloning and dd50: 20 75 73 69 6e 67 20 74 68 65 20 70 72 6f 63 65 using the proce dd60: 64 75 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 dure.. # dd70: 20 20 20 20 20 20 5c 5b 63 68 61 6e 67 65 4e 61 $changeNa dd80: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio dd90: 6e 5c 5d 20 6d 61 79 20 68 65 6c 70 20 74 6f 20 n$ may help to dda0: 6d 69 74 69 67 61 74 65 20 74 68 69 73 2e 0d 0a mitigate this... ddb0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ddc0: 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 proc changeNa ddd0: 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f tiveRuntimeOptio dde0: 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. ddf0: 20 7b 5b 69 6e 66 6f 20 61 72 67 73 20 63 68 61 {[info args cha de00: 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 ngeNativeRuntime de10: 4f 70 74 69 6f 6e 5d 7d 20 5c 0d 0a 20 20 20 20 Option]} \.. de20: 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 62 {[info b de30: 6f 64 79 20 63 68 61 6e 67 65 4e 61 74 69 76 65 ody changeNative de40: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d 0d RuntimeOption]}. de50: 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 ... catch de60: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 68 {.. ch de70: 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d angeNativeRuntim de80: 65 4f 70 74 69 6f 6e 20 5b 68 61 73 52 75 6e 74 eOption [hasRunt de90: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native dea0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. deb0: 20 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 } [getTestOv dec0: 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 erridesPreamble ded0: 5b 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f [list path test_ dee0: 63 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 channel]]$suffi
def0: 78 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  x]]]..    }.....
df00: 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79      proc tryCopy
df10: 45 78 74 65 72 6e 61 6c 46 69 6c 65 20 7b 0d 0a  ExternalFile {..
df20: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
df30: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
df40: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
df50: 22 22 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75  ""} {verbose tru
df60: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
df70: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65  t sourceFileName
df80: 20 5b 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c   [getExternalFil
df90: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName] dfa0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ dfb0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 file exists$sou
dfc0: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  rceFileName]} th
dfd0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
dfe0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then dff0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp e000: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
e010: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e020: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
e030: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
e040: 6f 70 79 69 6e 67 20 65 78 74 65 72 6e 61 6c 20  opying external
e050: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65  file \"" $source e060: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 FileName \.. e070: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i e080: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist e090: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. e0a0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur e0b0: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... e0c0: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string e0d0: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e length$newFileN
e0e0: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ame] > 0} then {
e0f0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61  ..        set ta
e100: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65  rgetFileName [ge
e110: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
e120: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c  $newFileName$pl
e130: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
e140: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
e150: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e   set targetFileN
e160: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
e170: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName e180: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20$platform]..
e190: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65     }....      se
e1a0: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72  t targetDirector
e1b0: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  y [file dirname
e1c0: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d  $targetFileName] e1d0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 .... if {[c e1e0: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. e1f0: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 if {![file exist e200: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f s$targetDirecto
e210: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ry]} then {..
e220: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69         file mkdi
e230: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  r $targetDirecto e240: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d ry.. }... e250: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f . file co e260: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 py -force$sourc
e270: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65  eFileName $targe e280: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 tFileName.. e290: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { e2a0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs e2b0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
e2c0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
e2d0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
e2e0: 20 63 6f 70 69 65 64 20 65 78 74 65 72 6e 61 6c   copied external
e2f0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $e300: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 sourceFileName " e310: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 \" to \"" \.. e320: 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74$target
e330: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
e340: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
e350: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: e360: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a e370: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. e380: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f e390: 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 65 78 ailed to copy ex e3a0: 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d ternal file from e3b0: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
e3c0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
e3d0: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24      "\" to \"" $e3e0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ e3f0: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. e400: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro e410: 63 20 74 72 79 43 6f 70 79 42 69 6e 61 72 79 46 c tryCopyBinaryF e420: 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ile {.. e430: 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 fileName mana e440: 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 gedOnly {platfor e450: 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 m ""} {newFileNa e460: 6d 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 me ""}.. e470: 20 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 {verbose tru e480: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se e490: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 t sourceFileName e4a0: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN e4b0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 ame$fileName $p e4c0: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 latform].... e4d0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi e4e0: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
e4f0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
e500: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo e510: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. e520: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
e530: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
e540: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e550: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
e560: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62  kipped copying b
e570: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $e580: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ e590: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. e5a0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not e5b0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. e5c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... e5d0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d return.. } e5e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s e5f0: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 65 tring length$ne
e600: 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20  wFileName] > 0}
e610: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
e620: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
e630: 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  me [getBuildFile
e640: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
e650: 20 20 20 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65      $newFileName e660: 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70$managedOnly $p e670: 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 latform].. e680: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. e690: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile e6a0: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 Name [getBuildFi e6b0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. e6c0: 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65 20$fileName
e6d0: 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c  $managedOnly$pl
e6e0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d  atform]..      }
e6f0: 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 74 61  ....      set ta
e700: 72 67 65 74 44 69 72 65 63 74 6f 72 79 20 5b 66  rgetDirectory [f
e710: 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 74 61 72  ile dirname $tar e720: 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a getFileName].... e730: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch e740: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { e750: 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 74 ![file exists$t
e760: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 5d 7d  argetDirectory]}
e770: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
e780: 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 20 24 74     file mkdir $t e790: 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 0d 0a argetDirectory.. e7a0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... e7b0: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d file copy - e7c0: 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c force$sourceFil
e7d0: 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c  eName $targetFil e7e0: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d 20 eName.. }] e7f0: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. e800: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
e810: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
e820: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e830: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70         "---- cop
e840: 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 20  ied binary file
e850: 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65  from \"" $source e860: 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 FileName "\" to e870: 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. e880: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61$targetFileNa
e890: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20  me \"\n]..
e8a0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
e8b0: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ e8c0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA e8d0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. e8e0: 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 "---- failed e8f0: 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20 66 to copy binary f e900: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
e910: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
e920: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
e930: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69  to \"" $targetFi e940: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. e950: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... e960: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop e970: 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 yBuildFile {.. e980: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 fileNa e990: 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b me managedOnly { e9a0: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 platform ""} {ne e9b0: 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a 20 wFileName ""}.. e9c0: 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 72 62 {verb e9d0: 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 ose true} } {.. e9e0: 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 set sourceF e9f0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil ea00: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
ea10: 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79  ame $managedOnly ea20: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
ea30: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
ea40: 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69  exists $sourceFi ea50: 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d leName]} then {. ea60: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
ea70: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
ea80: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $ea90: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ eaa0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. eab0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- eac0: 2d 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e - skipped copyin ead0: 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 g build file \"" eae0: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65$sourceFileName
eaf0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
eb00: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e    "\", it does n
eb10: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20  ot exist\n"]..
eb20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
eb30: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20     return..
eb40: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
eb50: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $eb60: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 newFileName] > 0 eb70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. eb80: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 set targetFile eb90: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 Name [getBinaryF eba0: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 ileName$newFile
ebb0: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d  Name $platform]. ebc0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. ebd0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 . set tar ebe0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 getFileName [get ebf0: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
ec00: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo ec10: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a rm].. }.... ec20: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 set target ec30: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 Directory [file ec40: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 dirname$targetF
ec50: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
ec60: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
ec70: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69          if {![fi
ec80: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65  le exists $targe ec90: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 tDirectory]} the eca0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 n {.. f ecb0: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 ile mkdir$targe
ecc0: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  tDirectory..
ecd0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
ece0: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63   file copy -forc
ecf0: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  e $sourceFileNam ed00: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d e$targetFileNam
ed10: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30  e..      }] == 0
ed20: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
ed30: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ ed40: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA ed50: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. ed60: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 "---- copied ed70: 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 build file from ed80: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
ed90: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c  ame "\" to \"" \
eda0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74  ..            $t edb0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 argetFileName \" edc0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 \n].. } els edd0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu ede0: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
edf0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
ee00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
ee10: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f  --- failed to co
ee20: 70 79 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72  py build file fr
ee30: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi ee40: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. ee50: 20 20 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 "\" to \"" ee60: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
ee70: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\n]..      }.
ee80: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
ee90: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 69 6e  roc tryDeleteBin
eea0: 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61  aryFile { fileNa
eeb0: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d  me {platform ""}
eec0: 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d 20   {verbose true}
eed0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
eee0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
eef0: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file ef00: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
ef10: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66  ...      if {![f
ef20: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65  ile exists $file ef30: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. ef40: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
ef50: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
ef60: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: ef70: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap ef80: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. ef90: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- efa0: 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 skipped deleting efb0: 20 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 binary file \"" efc0: 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
efd0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
efe0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
eff0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
f000: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
f010: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
f020: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
f030: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f f040: 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 ileName}] == 0} f050: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. f060: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
f070: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
f080: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
f090: 20 22 2d 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62   "---- deleted b
f0a0: 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24  inary file \"" $f0b0: 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a fileName \"\n].. f0c0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. f0d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
f0e0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
f0f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f100: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
f110: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20  ailed to delete
f120: 62 69 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20  binary file \""
f130: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  $fileName \"\n]. f140: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. f150: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 .... proc try f160: 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c 65 20 DeleteBuildFile f170: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 {.. f f180: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO f190: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" f1a0: 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d } {verbose true} f1b0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 } {.. set f1c0: 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 fileName [getBui f1d0: 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 ldFileName$file
f1e0: 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 4f 6e 6c  Name $managedOnl f1f0: 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a y$platform]....
f200: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
f210: 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d   exists $fileNam f220: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. f230: 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 if {$verbose
f240: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
f250: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes f260: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen f270: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. f280: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 "---- ski f290: 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 62 75 pped deleting bu f2a0: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ild file \""$fi
f2b0: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
f2c0: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20          "\", it
f2d0: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e  does not exist\n
f2e0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  "]..        }...
f2f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
f300: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
f310: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69    if {[catch {fi
f320: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e  le delete $fileN f330: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ame}] == 0} then f340: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput f350: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
f360: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
f370: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
f380: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64  -- deleted build
f390: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN f3a0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. f3b0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. f3c0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
f3d0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
f3e0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
f3f0: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
f400: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64   to delete build
f410: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e   file \"" $fileN f420: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. f430: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... f440: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73 proc tryCopyAs f450: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 sembly {.. f460: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 6d fileName m f470: 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 anagedOnly {plat f480: 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72 form ""} {pdb tr f490: 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 ue} {verbose tru f4a0: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 e} } {.. tr f4b0: 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 yCopyBuildFile$
f4c0: 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65  fileName $manage f4d0: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 20 dOnly$platform
f4e0: 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20  "" $verbose.... f4f0: 20 20 20 20 20 69 66 20 7b 24 70 64 62 7d 20 74 if {$pdb} t
f500: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
f510: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
f520: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
f530: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
f540: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN f550: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 6d 61 6e 61 ame] .pdb]$mana
f560: 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72  gedOnly $platfor f570: 6d 20 22 22 20 24 76 65 72 62 6f 73 65 0d 0a 20 m ""$verbose..
f580: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
f590: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65  ..    proc tryDe
f5a0: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 0d 0a  leteAssembly {..
f5b0: 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65              file
f5c0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
f5d0: 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76  "} {pdb true} {v
f5e0: 65 72 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b  erbose true} } {
f5f0: 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65 74  ..      tryDelet
f600: 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c  eBinaryFile $fil f610: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 20 eName$platform
f620: 24 76 65 72 62 6f 73 65 0d 0a 0d 0a 20 20 20 20  $verbose.... f630: 20 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e if {$pdb} then
f640: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 44   {..        tryD
f650: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile
f660: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
f670: 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
f680: 20 72 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e   rootname $fileN f690: 61 6d 65 5d 20 2e 70 64 62 5d 20 24 70 6c 61 74 ame] .pdb]$plat
f6a0: 66 6f 72 6d 20 24 76 65 72 62 6f 73 65 0d 0a 20  form $verbose.. f6b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... f6c0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c 6f .. proc tryLo f6d0: 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c adAssembly { fil f6e0: 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 eName {platform f6f0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ""} } {.. s f700: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74 et fileName [get f710: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
f720: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo f730: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 rm].... if f740: 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. f750: 20 20 20 73 65 74 20 61 73 73 65 6d 62 6c 79 20 set assembly f760: 5b 6f 62 6a 65 63 74 20 6c 6f 61 64 20 2d 6c 6f [object load -lo f770: 61 64 74 79 70 65 20 46 69 6c 65 20 2d 61 6c 69 adtype File -ali f780: 61 73 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 as$fileName]..
f790: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68       }] == 0} th
f7a0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
f7b0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
f7c0: 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65   Now, add the ne
f7d0: 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e  cessary test con
f7e0: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20  straint...
f7f0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64    #..        add
f800: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65  Constraint [file
f810: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20   rootname [file
f820: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]] f830: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. f840: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47 # NOTE: G f850: 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75 rab the image ru f860: 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72 ntime version fr f870: 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 om the assembly f880: 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20 because.. f890: 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c # several f8a0: 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69 tests rely on i f8b0: 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61 t having a certa f8c0: 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 in value... f8d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 #.. ad f8e0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 dConstraint [app f8f0: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61 endArgs [file ta f900: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 il$fileName] _
f910: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
f920: 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52  $assembly ImageR f930: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d untimeVersion]]. f940: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. f950: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re f960: 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 turn the full pa f970: 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 th of the loaded f980: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... f990: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur f9a0: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 n$fileName..
f9b0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
f9c0: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a  turn ""..    }..
f9d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51  ...    proc isSQ
f9e0: 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a  LiteReady {} {..
f9f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
fa00: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63   NOTE: This proc
fa10: 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72  edure must retur
fa20: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20  n non-zero only
fa30: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61  if the SQLite na
fa40: 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20  tive..      #
fa50: 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20      library and
fa60: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
fa70: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61  SQLite managed a
fa80: 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64  ssembly are load
fa90: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ed..      #
faa0: 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20    and ready for
fab0: 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20  use by the test
fac0: 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c  suite.  Currentl
fad0: 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72  y, this procedur
fae0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
faf0: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65   should be calle
fb00: 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65  d only after the
fb10: 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c   [tryLoadAssembl
fb20: 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73  y] procedure has
fb30: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
fb40: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70  been called to p
fb50: 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73  robe for the Sys
fb60: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
fb70: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
fb80: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
fb90: 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f  and the [checkFo
fba0: 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75  rSQLite] procedu
fbb0: 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c  re has been call
fbc0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d  ed to probe for.
fbd0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
fbe0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65  he SQLite native
fbf0: 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77   library; otherw
fc00: 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64  ise, this proced
fc10: 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d  ure will simply.
fc20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
fc30: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72  lways return zer
fc40: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  o...      #..
fc50: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20     return [expr
fc60: 7b 0d 0a 20 20 20 20 20 20 20 20 5b 68 61 76 65  {..        [have
fc70: 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65  Constraint Syste
fc80: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5d 20 26  m.Data.SQLite] &
fc90: 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  & [haveConstrain
fca0: 74 20 53 51 4c 69 74 65 5d 0d 0a 20 20 20 20 20  t SQLite]..
fcb0: 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20   }]..    }.....
fcc0: 20 20 20 70 72 6f 63 20 6d 61 74 63 68 50 6c 61     proc matchPla
fcd0: 74 66 6f 72 6d 20 7b 20 70 6c 61 74 66 6f 72 6d  tform { platform
fce0: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
fcf0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6e 20       # NOTE: An
fd00: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 66 6f 72  empty string for
fd10: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6d 65   the platform me
fd20: 61 6e 73 20 74 68 61 74 20 74 68 65 20 62 75 69  ans that the bui
fd30: 6c 64 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 20  ld is not..
fd40: 20 23 20 20 20 20 20 20 20 5b 70 72 69 6d 61 72   #       [primar
fd50: 69 6c 79 5d 20 61 20 6e 61 74 69 76 65 20 62 75  ily] a native bu
fd60: 69 6c 64 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ild; therefore,
fd70: 69 74 20 61 6c 77 61 79 73 20 6d 61 74 63 68 65  it always matche
fd80: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
fd90: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
fda0: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d  ength $platform] fdb0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. fdc0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr fdd0: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... fde0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # fdf0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6d 61 63 NOTE: If the mac fe00: 68 69 6e 65 20 6e 61 6d 65 20 69 73 20 75 6e 61 hine name is una fe10: 76 61 69 6c 61 62 6c 65 2c 20 74 68 65 72 65 20 vailable, there fe20: 69 73 20 6e 6f 74 68 69 6e 67 20 65 6c 73 65 20 is nothing else fe30: 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 we.. # fe40: 20 20 63 61 6e 20 64 6f 2e 0d 0a 20 20 20 20 20 can do... fe50: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b #.. if {![ fe60: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 info exists ::tc fe70: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 l_platform(machi fe80: 6e 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ne)]} then {.. fe90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal fea0: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 se.. }.... feb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # fec0: 4e 4f 54 45 3a 20 44 6f 65 73 20 74 68 65 20 73 NOTE: Does the s fed0: 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 pecified platfor fee0: 6d 20 6d 61 74 63 68 20 75 70 20 74 6f 20 74 68 m match up to th fef0: 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 e current proces ff00: 73 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s?.. #.. ff10: 20 20 20 69 66 20 7b 24 70 6c 61 74 66 6f 72 6d if {$platform
ff20: 20 65 71 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c   eq [machineToPl
ff30: 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c  atform $::tcl_pl ff40: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d atform(machine)] ff50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. ff60: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. ff70: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ff80: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: ff90: 20 54 68 65 20 73 70 65 63 69 66 69 65 64 20 70 The specified p ffa0: 6c 61 74 66 6f 72 6d 20 64 6f 65 73 20 6e 6f 74 latform does not ffb0: 20 6d 61 74 63 68 20 75 70 20 77 69 74 68 20 74 match up with t ffc0: 68 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 he platform.. ffd0: 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 # for t ffe0: 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 he current proce fff0: 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ss... #.. 10000 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 return false 10010 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 10020 70 72 6f 63 20 68 61 76 65 53 51 4c 69 74 65 4f proc haveSQLiteO 10030 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 7d 20 bjectCommand {} 10040 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 10050 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 # NOTE: Is the 10060 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e [object] comman 10070 64 20 63 75 72 72 65 6e 74 6c 79 20 61 76 61 69 d currently avai 10080 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 23 0d lable?.. #. 10090 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 . return [e 100a0 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 xpr {[llength [i 100b0 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a nfo commands obj 100c0 65 63 74 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 ect]] > 0}].. 100d0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 100e0 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62 checkForSQLiteOb 100f0 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 7b 20 63 68 jectCommand { ch 10100 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 annel } {.. 10110 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
10120 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
10130 6f 72 20 5c 22 6f 62 6a 65 63 74 5c 22 20 63 6f  or \"object\" co
10140 6d 6d 61 6e 64 20 75 73 61 67 65 2e 2e 2e 20 22  mmand usage... "
10150 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b  ....      if {![
10160 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
10170 28 73 71 6c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  (sqliteObjectCom
10180 6d 61 6e 64 29 5d 20 26 26 20 5c 0d 0a 20 20 20  mand)] && \..
10190 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69         [haveSQLi
101a0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
101b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
101c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 101d0 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 yes\n.. } 101e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 101f0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10200 45 3a 20 55 6e 6c 65 73 73 20 77 65 20 61 72 65 E: Unless we are 10210 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 20 forbidden from 10220 64 6f 69 6e 67 20 73 6f 2c 20 61 64 64 20 73 6f doing so, add so 10230 6d 65 20 63 6f 6e 73 74 72 61 69 6e 74 73 0d 0a me constraints.. 10240 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 10250 74 68 61 74 20 77 69 6c 6c 20 61 6c 6c 6f 77 20 that will allow 10260 6d 6f 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 most of the test 10270 20 73 75 69 74 65 20 74 6f 20 72 75 6e 20 28 69 suite to run (i 10280 2e 65 2e 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 .e. those.. 10290 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests 102a0 20 74 68 61 74 20 64 6f 20 6e 6f 74 20 64 69 72 that do not dir 102b0 65 63 74 6c 79 20 72 65 6c 79 20 75 70 6f 6e 20 ectly rely upon 102c0 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d the [object] com 102d0 6d 61 6e 64 29 2e 0d 0a 20 20 20 20 20 20 20 20 mand)... 102e0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 #.. if {! 102f0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 10300 6f 28 73 68 69 6d 53 51 4c 69 74 65 41 73 73 65 o(shimSQLiteAsse 10310 6d 62 6c 79 43 6f 6e 73 74 72 61 69 6e 74 73 29 mblyConstraints) 10320 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 10330 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 10340 6e 74 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 nt SQLite.. 10350 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 10360 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 nt SQLiteInterop 10370 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43 .. addC 10380 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d onstraint System 10390 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 20 .Data.SQLite.. 103a0 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 103b0 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat 103c0 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 a.SQLite.Encrypt 103d0 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 61 ion.. a 103e0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 73 ddConstraint Sys 103f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 10400 4c 69 6e 71 0d 0a 0d 0a 20 20 20 20 20 20 20 20 Linq.... 10410 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint 10420 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 10430 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 10440 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 10450 64 6c 6c 5f 76 20 5b 67 65 74 42 75 69 6c 64 43 dll_v [getBuildC 10460 6c 72 56 65 72 73 69 6f 6e 5d 5d 0d 0a 20 20 20 lrVersion]].. 10470 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 10480 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 10490 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c sts ::no(shimSQL 104a0 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e iteDefineConstan 104b0 74 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 tConstraints)]} 104c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 104d0 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 foreach define 104e0 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c Constant [list \ 104f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10500 49 4e 54 45 52 4f 50 5f 45 58 54 45 4e 53 49 4f INTEROP_EXTENSIO 10510 4e 5f 46 55 4e 43 54 49 4f 4e 53 20 49 4e 54 45 N_FUNCTIONS INTE 10520 52 4f 50 5f 46 54 53 35 5f 45 58 54 45 4e 53 49 ROP_FTS5_EXTENSI 10530 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ON \.. 10540 20 20 20 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e INTEROP_JSON 10550 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 1_EXTENSION INTE 10560 52 4f 50 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 ROP_PERCENTILE_E 10570 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 XTENSION \.. 10580 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f INTERO 10590 50 5f 52 45 47 45 58 50 5f 45 58 54 45 4e 53 49 P_REGEXP_EXTENSI 105a0 4f 4e 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f ON INTEROP_TEST_ 105b0 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 EXTENSION \.. 105c0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 INTER 105d0 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e OP_SESSION_EXTEN 105e0 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 53 48 41 SION INTEROP_SHA 105f0 31 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 1_EXTENSION \.. 10600 20 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 INT 10610 45 52 4f 50 5f 54 4f 54 59 50 45 5f 45 58 54 45 EROP_TOTYPE_EXTE 10620 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 56 49 NSION INTEROP_VI 10630 52 54 55 41 4c 5f 54 41 42 4c 45 20 5c 0d 0a 20 RTUAL_TABLE \.. 10640 20 20 20 20 20 20 20 20 20 20 20 20 20 55 53 45 USE 10650 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 5d 20 7b 0d _INTEROP_DLL] {. 10660 0a 20 20 20 20 20 20 20 20 20 20 20 20 61 64 64 . add 10670 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 10680 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 10690 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 [getSQ 106a0 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta 106b0 6e 74 50 72 65 66 69 78 5d 20 24 64 65 66 69 6e ntPrefix]$defin
106c0 65 43 6f 6e 73 74 61 6e 74 5d 0d 0a 20 20 20 20  eConstant]..
106d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
106e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
106f0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
10700 3a 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 56  ::no(shimSQLiteV
10710 69 73 75 61 6c 53 74 75 64 69 6f 43 6f 6e 73 74  isualStudioConst
10720 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b  raints)]} then {
10730 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 43  ..          addC
10740 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
10750 64 41 72 67 73 20 76 69 73 75 61 6c 53 74 75 64  dArgs visualStud
10760 69 6f 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72  io [getBuildYear
10770 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ]]..        }...
10780 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $10790 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. 107a0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 107b0 0a 20 20 20 20 70 72 6f 63 20 63 68 61 6e 67 65 . proc change 107c0 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f 70 74 NativeRuntimeOpt 107d0 69 6f 6e 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b ion { native } { 107e0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 .. if {[lle 107f0 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 ngth [info comma 10800 6e 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 20 nds debug]] > 0 10810 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 10820 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 73 [llength [info s 10830 75 62 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67 ubcommands debug 10840 20 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 5d 5d runtimeoption]] 10850 20 3e 20 30 20 26 26 20 5b 63 61 74 63 68 20 7b > 0 && [catch { 10860 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 20 .. debug 10870 72 75 6e 74 69 6d 65 6f 70 74 69 6f 6e 20 5b 65 runtimeoption [e 10880 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 xpr {$native ? "
10890 61 64 64 22 20 3a 20 22 72 65 6d 6f 76 65 22 7d  add" : "remove"}
108a0 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20  ] native..
108b0 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
108c0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
108d0 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  true..      }...
108e0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
108f0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
10900 61 6e 64 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  and] && [catch {
10910 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
10920 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
10930 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 5b 65  ter.GetActive [e
10940 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 5c  xpr {$native ? \ 10950 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 41 .. "A 10960 64 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 ddRuntimeOption" 10970 20 3a 20 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d : "RemoveRuntim 10980 65 4f 70 74 69 6f 6e 22 7d 5d 20 6e 61 74 69 76 eOption"}] nativ 10990 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 e.. }] == 0 109a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 109b0 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 109c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 109d0 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 109e0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 109f0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 checkForSQLiteB 10a00 75 69 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 uilds { channel 10a10 7b 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d {select false} } 10a20 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 10a30 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 10a40 20 66 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 for every possi 10a50 62 6c 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e ble valid combin 10a60 61 74 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 ation of values 10a70 75 73 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 used when.. 10a80 20 23 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e # locatin 10a90 67 20 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 g out the build 10aa0 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 output directory 10ab0 2c 20 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 , showing each a 10ac0 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 vailable.. 10ad0 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 # build va 10ae0 72 69 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 riation along th 10af0 65 20 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d e way... #. 10b00 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e . foreach n 10b10 61 74 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 ative [list fals 10b20 65 20 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 e true] {.. 10b30 20 20 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 foreach year 10b40 5b 67 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 [getBuildYears] 10b50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 {.. for 10b60 65 61 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 each configurati 10b70 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 on [getBuildConf 10b80 69 67 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 igurations] {.. 10b90 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 10ba0 63 68 20 73 75 66 66 69 78 20 5b 67 65 74 42 75 ch suffix [getBu 10bb0 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e ildConfiguration 10bc0 53 75 66 66 69 78 65 73 5d 20 7b 0d 0a 20 20 20 Suffixes] {.. 10bd0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 10be0 63 68 20 65 78 74 72 61 20 5b 67 65 74 42 75 69 ch extra [getBui 10bf0 6c 64 45 78 74 72 61 73 5d 20 7b 0d 0a 20 20 20 ldExtras] {.. 10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 10c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10c20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f # NOTE: Figure o 10c30 75 74 20 74 68 65 20 65 66 66 65 63 74 69 76 65 ut the effective 10c40 20 62 75 69 6c 64 20 70 6c 61 74 66 6f 72 6d 2e build platform. 10c50 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 This is.. 10c60 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 10c70 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 based on whet 10c80 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70 72 her or not a [pr 10c90 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65 20 imarily] native 10ca0 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 build.. 10cb0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 # i 10cc0 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46 s being used. F 10cd0 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e or [primarily] n 10ce0 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73 on-native builds 10cf0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ,.. 10d00 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 # this 10d10 77 69 6c 6c 20 62 65 20 61 6e 20 65 6d 70 74 79 will be an empty 10d20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 10d30 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 10d40 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 10d50 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 platform [getBu 10d60 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74 ildPlatform$nat
10d70 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ive]....
10d80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10d90 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
10da0 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
10db0 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 72  ly qualified dir
10dc0 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
10dd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
10de0 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 73    #       necess
10df0 61 72 79 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66  ary components f
10e00 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
10e10 51 4c 69 74 65 20 73 68 6f 75 6c 64 0d 0a 20 20  QLite should..
10e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
10e30 20 20 20 20 20 20 62 65 20 66 6f 75 6e 64 2e 0d        be found..
10e40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
10e50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
10e60 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72      set director
10e70 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65  y [joinBuildDire
10e80 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5c 0d  ctory $native \. 10e90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10ea0 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61 [getBuildBa 10eb0 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65 seDirectory]$ye
10ec0 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 5b 61 70  ar $platform [ap 10ed0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 10ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10ef0 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24$configuration $10f00 73 75 66 66 69 78 5d 20 24 65 78 74 72 61 5d 0d suffix]$extra].
10f10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
10f20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 10f30 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 10f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 10f50 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 10f60 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 10f70 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 10f80 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 \"" [expr \.. 10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 10fa0 20 20 7b 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 {$native ? "na
10fb0 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65  tive/" : ""}] [e
10fc0 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  xpr {[string len
10fd0 67 74 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  gth \..
10fe0 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74             $plat 10ff0 66 6f 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 form] > 0 ? [app 11000 65 6e 64 41 72 67 73 20 24 70 6c 61 74 66 6f 72 endArgs$platfor
11010 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20  m /] : ""}] \..
11020 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11030 20 20 20 24 79 65 61 72 20 2f 20 5b 61 70 70 65     $year / [appe 11040 6e 64 41 72 67 73 20 24 63 6f 6e 66 69 67 75 72 ndArgs$configur
11050 61 74 69 6f 6e 20 24 73 75 66 66 69 78 5d 20 22  ation $suffix] " 11060 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 \"... "].... 11070 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 11090 20 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 NOTE: Do the ne 110a0 63 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 cessary files ex 110b0 69 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c ist? Currently, 110c0 20 6e 6f 20 6f 74 68 65 72 0d 0a 20 20 20 20 20 no other.. 110d0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 110e0 20 20 20 73 74 65 70 73 20 61 72 65 20 74 61 6b steps are tak 110f0 65 6e 20 74 6f 20 76 65 72 69 66 79 20 74 68 69 en to verify thi 11100 73 20 62 75 69 6c 64 20 69 73 20 61 63 74 75 61 s build is actua 11110 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lly.. 11120 20 20 20 20 20 23 20 20 20 20 20 20 20 76 69 61 # via 11130 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ble... 11140 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11150 20 20 20 20 20 20 20 20 20 73 65 74 20 73 6b 69 set ski 11160 70 4e 61 74 69 76 65 20 5b 65 78 70 72 20 7b 5b pNative [expr {[ 11170 69 73 44 6f 74 4e 65 74 43 6f 72 65 5d 20 26 26 isDotNetCore] && 11180 20 5b 69 73 57 69 6e 64 6f 77 73 5d 7d 5d 0d 0a [isWindows]}].. 11190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 111a0 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 if {[isBuildAv 111b0 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 ailable$native
111c0 24 73 6b 69 70 4e 61 74 69 76 65 20 24 64 69 72  $skipNative$dir
111d0 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
111e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
111f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
11200 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
11210 57 68 65 6e 20 69 6e 20 22 73 65 6c 65 63 74 22  When in "select"
11220 20 6d 6f 64 65 2c 20 61 75 74 6f 6d 61 74 69 63   mode, automatic
11230 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65 0d  ally select the.
11240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
11250 20 20 20 23 20 20 20 20 20 20 20 66 69 72 73 74     #       first
11260 20 61 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64   available build
11270 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e   of System.Data.
11280 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20 20  SQLite and..
11290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
112a0 20 20 20 20 20 20 74 68 65 6e 20 72 65 74 75 72        then retur
112b0 6e 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e 0d 0a  n immediately...
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
112d0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
112e0 20 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65         if {$sele 112f0 63 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 ct && [matchPlat 11300 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d form$platform]}
11310 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11340 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e 75      # NOTE: Manu
11350 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 6c  ally override al
11360 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65  l the build dire
11370 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 20  ctory..
11380 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
11390 20 20 20 73 65 6c 65 63 74 69 6f 6e 20 72 65 6c     selection rel
113a0 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e  ated test settin
113b0 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 0d 0a  gs in order to..
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
113d0 20 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 63      #       forc
113e0 65 20 74 68 69 73 20 62 75 69 6c 64 20 6f 66 20  e this build of
113f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
11400 74 65 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20  te to be..
11410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
11420 20 20 20 20 20 20 75 73 65 64 2e 0d 0a 20 20 20        used...
11430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11440 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
11450 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 63 68          if {![ch
11460 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d  angeNativeRuntim
11470 65 4f 70 74 69 6f 6e 20 24 6e 61 74 69 76 65 5d  eOption $native] 11480 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 114a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
114b0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
114d0 20 20 20 20 20 20 20 20 22 6e 6f 2c 20 66 61 69          "no, fai
114e0 6c 65 64 20 74 6f 20 22 20 5b 65 78 70 72 20 7b  led to " [expr {
114f0 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 20  $native ? "add" 11500 3a 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 : \.. 11510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 11520 72 65 6d 6f 76 65 22 7d 5d 20 22 20 74 68 65 20 remove"}] " the 11530 5c 22 6e 61 74 69 76 65 5c 22 20 72 75 6e 74 69 \"native\" runti 11540 6d 65 20 6f 70 74 69 6f 6e 5c 6e 22 5d 0d 0a 0d me option\n"]... 11550 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11560 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa 11570 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 lse.. 11580 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 11590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 115a0 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 6e 61 74 set ::test_nat 115b0 69 76 65 20 24 73 6b 69 70 4e 61 74 69 76 65 0d ive$skipNative.
115c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
115d0 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f       set ::test_
115e0 79 65 61 72 20 24 79 65 61 72 0d 0a 0d 0a 20 20  year $year.... 115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11600 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 6e 61 74 set ::test_nat 11610 69 76 65 5f 79 65 61 72 20 5c 0d 0a 20 20 20 20 ive_year \.. 11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11630 20 20 20 20 5b 67 65 74 42 75 69 6c 64 4e 61 74 [getBuildNat 11640 69 76 65 59 65 61 72 46 6f 72 44 6f 74 4e 65 74 iveYearForDotNet 11650 43 6f 72 65 20 24 79 65 61 72 5d 0d 0a 0d 0a 20 Core$year]....
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11670 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 70 6c     set ::test_pl
11680 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d  atform $platform 11690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 116a0 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 116b0 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 _configuration$
116c0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20  configuration..
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
116e0 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 6f     set ::test_co
116f0 6e 66 69 67 75 72 61 74 69 6f 6e 5f 73 75 66 66  nfiguration_suff
11700 69 78 20 24 73 75 66 66 69 78 0d 0a 0d 0a 20 20  ix $suffix.... 11710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11720 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 6e 61 74 set ::test_nat 11730 69 76 65 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f ive_configuratio 11740 6e 5f 73 75 66 66 69 78 20 5c 0d 0a 20 20 20 20 n_suffix \.. 11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11760 20 20 20 20 5b 67 65 74 42 75 69 6c 64 4e 61 74 [getBuildNat 11770 69 76 65 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e iveConfiguration 11780 53 75 66 66 69 78 46 6f 72 44 6f 74 4e 65 74 43 SuffixForDotNetC 11790 6f 72 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ore \.. 117a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
117b0 73 75 66 66 69 78 5d 0d 0a 0d 0a 20 20 20 20 20  suffix]....
117c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
117d0 65 74 20 3a 3a 74 65 73 74 5f 65 78 74 72 61 20  et ::test_extra
117e0 24 65 78 74 72 61 0d 0a 0d 0a 20 20 20 20 20 20  $extra.... 117f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 11800 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
11810 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
11820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11830 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65 63 74      "yes, select
11840 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24 6e 61  ed (" [expr {$na 11850 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 tive ? "native/" 11860 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 : ""}] \.. 11870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11880 20 20 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e [expr {[strin 11890 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f g length$platfo
118a0 72 6d 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e  rm] > 0 ? [appen
118b0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
118c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
118d0 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20   $platform /] : 118e0 22 22 7d 5d 20 24 79 65 61 72 20 2f 20 5b 61 70 ""}]$year / [ap
118f0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11910 20 20 20 20 24 63 6f 6e 66 69 67 75 72 61 74 69      $configurati 11920 6f 6e 20 24 73 75 66 66 69 78 5d 20 5b 65 78 70 on$suffix] [exp
11930 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  r {[string lengt
11940 68 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h \..
11950 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 78               $ex 11960 74 72 61 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 tra] > 0 ? [appe 11970 6e 64 41 72 67 73 20 2f 20 24 65 78 74 72 61 5d ndArgs /$extra]
11980 20 3a 20 22 22 7d 5d 20 22 29 5c 6e 22 5d 0d 0a   : ""}] ")\n"]..
11990 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
119a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75        return tru
119b0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
119c0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
119d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
119e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 119f0 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 l yes\n.. 11a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 11a10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 } 11a20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 11a30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 11a40 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20$channel no\n..
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
11a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
11a70 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
11a80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
11a90 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11aa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
11ab0 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
11ac0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
11ad0 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 61 73  kForSQLiteReleas
11ae0 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65  es { channel {se
11af0 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d  lect false} } {.
11b00 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
11b10 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f  # NOTE: Check fo
11b20 72 20 70 61 73 74 20 72 65 6c 65 61 73 65 73 20  r past releases
11b30 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  of System.Data.S
11b40 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64 69 72  QLite in the dir
11b50 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 23 20  ectory..      #
11b60 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 64 20        contained
11b70 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d 2e 44  in the "System.D
11b80 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e 76 69  ata.SQLite" envi
11b90 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65  ronment variable
11ba0 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20  , if..      #
11bb0 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20      present...
11bc0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
11bd0 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
11be0 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e  env(System.Data.
11bf0 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20  SQLite)] && \..
11c00 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
11c10 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53   length $::env(S 11c20 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 11c30 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d e)] > 0} then {. 11c40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11c50 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil 11c60 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c d the fully qual 11c70 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 ified directory 11c80 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 where the necess 11c90 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ary.. # 11ca0 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 components 11cb0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 11cc0 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20 62 65 SQLite should be 11cd0 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 found... 11ce0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 #.. set 11cf0 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 directory [file 11d00 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 nativename [file 11d10 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 join \.. 11d20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79 73 74$::env(Syst
11d30 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 20  em.Data.SQLite)
11d40 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69  [getReleaseVersi
11d50 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  on]]]....
11d60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 11d70 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 11d80 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 11d90 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 checking for Sy 11da0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 11db0 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a release \"" \.. 11dc0 20 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72$dir
11dd0 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d  ectory "\"... "]
11de0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
11df0 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61  [isReleaseAvaila
11e00 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79 20 70  ble $directory p 11e10 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { 11e20 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 11e30 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
11e40 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20  platform] == 0}
11e50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11e60 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d      set platform
11e70 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20   unknown..
11e80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
11e90 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26     if {$select & 11ea0 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d & [matchPlatform 11eb0 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65$platform]} the
11ec0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
11ed0 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72   set ::build_dir
11ee0 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72  ectory $director 11ef0 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 y.... 11f00 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11f10 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
11f20 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70  , selected (" $p 11f30 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a latform ")\n"].. 11f40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 11f50 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 11f60 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 11f70 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 11f80 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
11f90 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 70  dArgs "yes (" $p 11fa0 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a latform ")\n"].. 11fb0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 11fc0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 11fd0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
11fe0 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a  channel no\n....
11ff0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
12000 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69 72  file exists $dir 12010 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 20 ectory] || \.. 12020 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 66 69 ![fi 12030 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 le isdirectory$
12040 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
12050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
12060 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 12070 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 12080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 12090 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 --- environment 120a0 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65 variable \"Syste 120b0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 m.Data.SQLite\" 120c0 69 73 20 61 6e 20 22 20 5c 0d 0a 20 20 20 20 20 is an " \.. 120d0 20 20 20 20 20 20 20 20 20 20 20 22 69 6e 76 61 "inva 120e0 6c 69 64 20 64 69 72 65 63 74 6f 72 79 2c 20 73 lid directory, s 120f0 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f kipping check fo 12100 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 r releases...\n" 12110 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ].... 12120 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 return false.. 12130 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 12140 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 12150 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 path [lsort -dec 12160 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 reasing [file li 12170 73 74 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d st$directory *]
12180 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..
12190 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74   if {[file exist
121a0 73 20 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c  s $path] && [fil 121b0 65 20 69 73 64 69 72 65 63 74 6f 72 79 20 24 70 e isdirectory$p
121c0 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ath]} then {..
121d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
121e0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 121f0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 12200 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 12210 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 12220 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12230 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d e release \"" \. 12240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 12250 20 20 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20$path "\"...
12260 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
12270 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61      if {[isRelea
12280 73 65 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74  seAvailable $pat 12290 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 h platform]} the 122a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 122b0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 122c0 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 length$platfor
122d0 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  m] == 0} then {.
122e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
122f0 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
12300 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20  unknown..
12310 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
12320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
12330 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61   {$select && [ma 12340 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 tchPlatform$pla
12350 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  tform]} then {..
12360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
12370 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69    set ::build_di
12380 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d  rectory $path... 12390 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 123a0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
123b0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
123c0 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20  es, selected ("
123d0 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d  $platform ")\n"] 123e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 123f0 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 12400 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 12410 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 12430 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
12440 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
12450 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e  " $platform ")\n 12460 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "].. 12470 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 12480 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 124a0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
124b0 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  \n..
124c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
124d0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
124e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
124f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
12500 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 12510 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 12520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 12530 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 --- environment 12540 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 74 65 variable \"Syste 12550 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 m.Data.SQLite\" 12560 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 is not " \.. 12570 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 73 6b "set, sk 12580 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 ipping check for 12590 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d releases...\n"] 125a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 125b0 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 125c0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 125d0 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 roc checkForSQLi 125e0 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 61 6e teLibrary { chan 125f0 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 nel } {.. t 12600 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d puts$channel "-
12610 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  --- checking for
12620 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
12630 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  rary... "....
12640 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
12650 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
12660 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
12670 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
12680 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
12690 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
126a0 65 33 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e  e3 SQLiteVersion
126b0 0d 0a 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f  ..      } versio
126c0 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  n] == 0} then {.
126d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
126e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
126f0 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  k if the returne
12700 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75  d version was nu
12710 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65  ll.  If so, make
12720 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20   it easy..
12730 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f    #       to spo
12740 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
12750 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
12760 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69  ng length $versi 12770 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b on] == 0} then { 12780 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 12790 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 version null.. 127a0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 127b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 127c0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 127d0 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 query the Fossi 127e0 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 l source identif 127f0 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69 ier for the SQLi 12800 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 te.. # 12810 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 core library 12820 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 12830 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 12840 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 12850 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 12860 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 12870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 12880 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 12890 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74 65 e.SQLite3 SQLite 128a0 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 SourceId.. 128b0 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 } sourceId]} t 128c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 128d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 128e0 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 NOTE: We failed 128f0 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos 12900 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident 12910 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 ifier... 12920 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 12930 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e et sourceId unkn 12940 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a own.. }.. 12950 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12960 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 12970 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return 12980 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 ed Fossil source 12990 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 identifier was 129a0 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 null. If.. 129b0 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d # so, m 129c0 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 ake it easy to s 129d0 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d pot... #. 129e0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 129f0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 ring length$sou
12a00 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65  rceId] == 0} the
12a10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
12a20 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
12a30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
12a40 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12a50 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74    # NOTE: Yes, t
12a60 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
12a70 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74  ibrary appears t
12a80 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d  o be available..
12a90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
12aa0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
12ab0 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20  t SQLite....
12ac0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
12ad0 20 4e 4f 54 45 3a 20 52 65 63 6f 72 64 20 76 65   NOTE: Record ve
12ae0 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c  rsion of the SQL
12af0 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
12b00 20 66 6f 72 20 6c 61 74 65 72 20 75 73 65 0d 0a   for later use..
12b10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
12b20 62 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  by test constrai
12b30 6e 74 20 65 78 70 72 65 73 73 69 6f 6e 73 2c 20  nt expressions,
12b40 65 74 63 2e 20 20 49 66 20 74 68 69 73 20 76 61  etc.  If this va
12b50 6c 75 65 20 68 61 73 0d 0a 20 20 20 20 20 20 20  lue has..
12b60 20 23 20 20 20 20 20 20 20 61 6c 72 65 61 64 79   #       already
12b70 20 62 65 65 6e 20 73 65 74 20 28 6f 72 20 6f 76   been set (or ov
12b80 65 72 72 69 64 64 65 6e 29 2c 20 73 6b 69 70 20  erridden), skip
12b90 73 65 74 74 69 6e 67 20 69 74 2e 0d 0a 20 20 20  setting it...
12ba0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
12bb0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
12bc0 73 20 3a 3a 63 6f 72 65 5f 6c 69 62 72 61 72 79  s ::core_library
12bd0 5f 76 65 72 73 69 6f 6e 5d 7d 20 74 68 65 6e 20  _version]} then
12be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
12bf0 20 3a 3a 63 6f 72 65 5f 6c 69 62 72 61 72 79 5f   ::core_library_
12c00 76 65 72 73 69 6f 6e 20 24 76 65 72 73 69 6f 6e  version $version 12c10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 12c20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
12c30 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
12c40 73 20 22 79 65 73 20 28 22 20 24 76 65 72 73 69  s "yes (" $versi 12c50 6f 6e 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 on " "$sourceId
12c60 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d   ")\n"]..      }
12c70 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
12c80 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 12c90 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 no\n.. }.. 12ca0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 12cb0 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 c checkForSQLite 12cc0 49 6e 74 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 Interop { channe 12cd0 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 l } {.. tpu 12ce0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d ts$channel "---
12cf0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53  - checking for S
12d00 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73  QLite interop as
12d10 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  sembly... "....
12d20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
12d30 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
12d40 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
12d50 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
12d60 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
12d70 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
12d80 69 74 65 33 20 49 6e 74 65 72 6f 70 56 65 72 73  ite3 InteropVers
12d90 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 76 65 72  ion..      } ver
12da0 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sion] == 0} then
12db0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
12dc0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
12dd0 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75  heck if the retu
12de0 72 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73  rned version was
12df0 20 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d   null.  If so, m
12e00 61 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20  ake it easy..
12e10 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
12e20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  spot...        #
12e30 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73  ..        if {[s
12e40 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65  tring length $ve 12e50 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 rsion] == 0} the 12e60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 12e70 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d et version null. 12e80 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 12e90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12ea0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 12eb0 20 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f to query the Fo 12ec0 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e ssil source iden 12ed0 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 tifier for the S 12ee0 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 QLite.. # 12ef0 20 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 core libr 12f00 61 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ary... #. 12f10 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 12f20 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 12f30 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 12f40 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 12f50 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12f60 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 12f70 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74 Lite.SQLite3 Int 12f80 65 72 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 eropSourceId.. 12f90 20 20 20 20 20 20 7d 20 73 6f 75 72 63 65 49 64 } sourceId 12fa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 12fb0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 12fc0 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 66 61 69 # NOTE: We fai 12fd0 6c 65 64 20 74 6f 20 71 75 65 72 79 20 74 68 65 led to query the 12fe0 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 Fossil source i 12ff0 64 65 6e 74 69 66 69 65 72 2e 0d 0a 20 20 20 20 dentifier... 13000 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13010 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 set sourceId 13020 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 unknown.. 13030 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 13040 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 13050 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 72 65 Check if the re 13060 74 75 72 6e 65 64 20 46 6f 73 73 69 6c 20 73 6f turned Fossil so 13070 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 urce identifier 13080 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 was null. If.. 13090 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 130a0 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79 20 o, make it easy 130b0 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20 20 20 to spot... 130c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 130d0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 130e0 24 73 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d$sourceId] == 0}
130f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
13100 20 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20     set sourceId
13110 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d  null..        }.
13120 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
13130 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 65        # NOTE: Be
13140 66 6f 72 65 20 61 63 74 75 61 6c 6c 79 20 61 64  fore actually ad
13150 64 69 6e 67 20 74 68 65 20 74 65 73 74 20 63 6f  ding the test co
13160 6e 73 74 72 61 69 6e 74 2c 20 6d 61 6b 65 20 73  nstraint, make s
13170 75 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ure the..
13180 20 23 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e   #       version
13190 20 69 73 20 76 61 6c 69 64 20 28 69 2e 65 2e 20   is valid (i.e.
131a0 6e 6f 74 20 6a 75 73 74 20 74 68 61 74 20 77 65  not just that we
131b0 20 63 6f 75 6c 64 20 71 75 65 72 79 20 69 74 29   could query it)
131c0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
131d0 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 73 69        if {$versi 131e0 6f 6e 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 on ne "null"} th 131f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 13200 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 13210 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20 53 51 OTE: Yes, the SQ 13220 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 Lite interop ass 13230 65 6d 62 6c 79 20 61 70 70 65 61 72 73 20 74 6f embly appears to 13240 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a be available... 13250 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 13260 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 13270 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 aint SQLiteInter 13280 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 op.... 13290 73 65 74 20 61 6e 73 77 65 72 20 79 65 73 0d 0a set answer yes.. 132a0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 132b0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 132c0 61 6e 73 77 65 72 20 6e 6f 0d 0a 20 20 20 20 20 answer no.. 132d0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 132e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
132f0 61 70 70 65 6e 64 41 72 67 73 20 24 61 6e 73 77  appendArgs $answ 13300 65 72 20 22 20 28 22 20 24 76 65 72 73 69 6f 6e er " ("$version
13310 20 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22   " " $sourceId " 13320 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 )\n"].. } e 13330 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 13340 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
13350 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
13360 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
13370 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 65  checkForSQLiteDe
13380 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 63  fineConstant { c
13390 68 61 6e 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d  hannel name } {.
133a0 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch 133b0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 133c0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 s \.. " 133d0 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo 133e0 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ 133f0 4c 69 74 65 20 64 65 66 69 6e 65 20 63 6f 6e 73 Lite define cons 13400 74 61 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 5c tant \""$name \
13410 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e  ..          "\".
13420 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  .. "]....      i
13430 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
13440 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
13450 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
13460 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
13470 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
13480 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 44  SQLite.SQLite3 D
13490 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
134a0 20 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f        } defineCo
134b0 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74  nstants] == 0} t
134c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
134d0 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61  f {[lsearch -exa
134e0 63 74 20 2d 6e 6f 63 61 73 65 20 24 64 65 66 69  ct -nocase $defi 134f0 6e 65 43 6f 6e 73 74 61 6e 74 73 20 24 6e 61 6d neConstants$nam
13500 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b  e] != -1} then {
13510 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
13520 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
13530 20 59 65 73 2c 20 74 68 69 73 20 64 65 66 69 6e   Yes, this defin
13540 65 20 63 6f 6e 73 74 61 6e 74 20 77 61 73 20 65  e constant was e
13550 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65 20  nabled when the
13560 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  managed..
13570 20 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d     #       assem
13580 62 6c 79 20 77 61 73 20 63 6f 6d 70 69 6c 65 64  bly was compiled
13590 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
135a0 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
135b0 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
135c0 72 67 73 20 5b 67 65 74 53 51 4c 69 74 65 44 65  rgs [getSQLiteDe
135d0 66 69 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66  fineConstantPref
135e0 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20  ix] $name].... 135f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
13600 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20  hannel yes\n..
13610 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
13620 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
13630 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20  $channel no\n.. 13640 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 13650 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 13660 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
13670 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20 20 20 20   error\n..
13680 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
13690 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51   proc checkForSQ
136a0 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  LiteCompileOptio
136b0 6e 20 7b 20 63 68 61 6e 6e 65 6c 20 6e 61 6d 65  n { channel name
136c0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
136d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 136e0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 136f0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 13700 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e ng for SQLite in 13710 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 63 terop assembly c 13720 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 5c 22 ompile option \" 13730 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 " \..$
13740 6e 61 6d 65 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a  name "\"... "]..
13750 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
13760 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62  ch {..        ob
13770 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
13780 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
13790 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
137a0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
137b0 53 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 43  SQLite3 InteropC
137c0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20  ompileOptions..
137d0 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70       } compileOp
137e0 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tions] == 0} the
137f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
13800 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74  {[lsearch -exact
13810 20 2d 6e 6f 63 61 73 65 20 24 63 6f 6d 70 69 6c   -nocase $compil 13820 65 4f 70 74 69 6f 6e 73 20 24 6e 61 6d 65 5d 20 eOptions$name]
13830 21 3d 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20  != -1} then {..
13840 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
13850 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65        # NOTE: Ye
13860 73 2c 20 74 68 69 73 20 63 6f 6d 70 69 6c 65 20  s, this compile
13870 6f 70 74 69 6f 6e 20 77 61 73 20 65 6e 61 62 6c  option was enabl
13880 65 64 20 77 68 65 6e 20 74 68 65 20 69 6e 74 65  ed when the inte
13890 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 20 20 23  rop..          #
138a0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20         assembly
138b0 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20  was compiled...
138c0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
138d0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
138e0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
138f0 5b 67 65 74 53 51 4c 69 74 65 43 6f 6d 70 69 6c  [getSQLiteCompil
13900 65 4f 70 74 69 6f 6e 50 72 65 66 69 78 5d 20 24  eOptionPrefix] $13910 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 name].... 13920 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
13930 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20  l yes\n..
13940 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
13950 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 13960 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. 13970 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 13980 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 13990 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f ts$channel erro
139a0 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  r\n..      }....
139b0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 139c0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 139d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d \.. "- 139e0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 139f0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 SQLite core lib 13a00 72 61 72 79 20 63 6f 6d 70 69 6c 65 20 6f 70 74 rary compile opt 13a10 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ion \"" \.. 13a20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22 2e 2e$name "\"..
13a30 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  . "]....      if
13a40 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
13a50 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
13a60 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
13a70 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
13a80 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
13a90 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 53 51  QLite.SQLite3 SQ
13aa0 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  LiteCompileOptio
13ab0 6e 73 0d 0a 20 20 20 20 20 20 7d 20 63 6f 6d 70  ns..      } comp
13ac0 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d 3d 20 30  ileOptions] == 0
13ad0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13ae0 20 20 69 66 20 7b 5b 6c 73 65 61 72 63 68 20 2d    if {[lsearch -
13af0 65 78 61 63 74 20 2d 6e 6f 63 61 73 65 20 24 63  exact -nocase $c 13b00 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 20 24 6e ompileOptions$n
13b10 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74 68 65 6e  ame] != -1} then
13b20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
13b30 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
13b40 45 3a 20 59 65 73 2c 20 74 68 69 73 20 63 6f 6d  E: Yes, this com
13b50 70 69 6c 65 20 6f 70 74 69 6f 6e 20 77 61 73 20  pile option was
13b60 65 6e 61 62 6c 65 64 20 77 68 65 6e 20 74 68 65  enabled when the
13b70 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20   SQLite..
13b80 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 20     #       core
13b90 6c 69 62 72 61 72 79 20 77 61 73 20 63 6f 6d 70  library was comp
13ba0 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  iled...
13bb0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64   #..          ad
13bc0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
13bd0 65 6e 64 41 72 67 73 20 5b 67 65 74 53 51 4c 69  endArgs [getSQLi
13be0 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 50  teCompileOptionP
13bf0 72 65 66 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d  refix] $name]... 13c00 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 13c10 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d$channel yes\n.
13c20 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
13c30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
13c40 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 13c50 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 13c60 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 13c70 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
13c80 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20  nel error\n..
13c90 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
13ca0 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 65      proc getDate
13cb0 54 69 6d 65 46 6f 72 6d 61 74 20 7b 20 7b 74 69  TimeFormat { {ti
13cc0 6d 65 5a 6f 6e 65 20 74 72 75 65 7d 20 7d 20 7b  meZone true} } {
13cd0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
13ce0 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
13cf0 6f 63 65 64 75 72 65 20 73 69 6d 70 6c 79 20 72  ocedure simply r
13d00 65 74 75 72 6e 73 20 74 68 65 20 22 64 65 66 61  eturns the "defa
13d10 75 6c 74 22 20 44 61 74 65 54 69 6d 65 20 66 6f  ult" DateTime fo
13d20 72 6d 61 74 20 75 73 65 64 0d 0a 20 20 20 20 20  rmat used..
13d30 20 23 20 20 20 20 20 20 20 62 79 20 74 68 65 20   #       by the
13d40 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
13d50 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
13d60 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64  [info exists ::d
13d70 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 5d 20  atetime_format]
13d80 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
13d90 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $13da0 3a 3a 64 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 ::datetime_forma 13db0 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. 13dc0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13dd0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur 13de0 6e 20 74 68 65 20 6d 61 6e 75 61 6c 6c 79 20 6f n the manually o 13df0 76 65 72 72 69 64 64 65 6e 20 76 61 6c 75 65 20 verridden value 13e00 66 6f 72 20 74 68 65 20 44 61 74 65 54 69 6d 65 for the DateTime 13e10 20 66 6f 72 6d 61 74 2e 0d 0a 20 20 20 20 20 20 format... 13e20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 13e30 75 72 6e 20 24 3a 3a 64 61 74 65 74 69 6d 65 5f urn$::datetime_
13e40 66 6f 72 6d 61 74 0d 0a 20 20 20 20 20 20 7d 20  format..      }
13e50 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
13e60 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
13e70 45 3a 20 52 65 74 75 72 6e 20 61 6e 20 49 53 4f  E: Return an ISO
13e80 38 36 30 31 20 44 61 74 65 54 69 6d 65 20 66 6f  8601 DateTime fo
13e90 72 6d 61 74 20 63 6f 6d 70 61 74 69 62 6c 65 20  rmat compatible
13ea0 77 69 74 68 20 53 51 4c 69 74 65 2c 0d 0a 20 20  with SQLite,..
13eb0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79        #       Sy
13ec0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
13ed0 2c 20 61 6e 64 20 73 75 69 74 61 62 6c 65 20 66  , and suitable f
13ee0 6f 72 20 72 6f 75 6e 64 2d 74 72 69 70 70 69 6e  or round-trippin
13ef0 67 20 77 69 74 68 20 74 68 65 0d 0a 20 20 20 20  g with the..
13f00 20 20 20 20 23 20 20 20 20 20 20 20 44 61 74 65      #       Date
13f10 54 69 6d 65 20 63 6c 61 73 73 20 6f 66 20 74 68  Time class of th
13f20 65 20 66 72 61 6d 65 77 6f 72 6b 2e 20 20 49 66  e framework.  If
13f30 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 63   this value is c
13f40 68 61 6e 67 65 64 2c 0d 0a 20 20 20 20 20 20 20  hanged,..
13f50 20 23 20 20 20 20 20 20 20 76 61 72 69 6f 75 73   #       various
13f60 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c 2e   tests may fail.
13f70 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
13f80 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70       return [app
13f90 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
13fa0 20 20 20 20 20 20 20 22 79 79 79 79 2d 4d 4d 2d         "yyyy-MM-
13fb0 64 64 20 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46  dd HH:mm:ss.FFFF
13fc0 46 46 46 22 20 5b 65 78 70 72 20 7b 24 74 69 6d  FFF" [expr {$tim 13fd0 65 5a 6f 6e 65 20 3f 20 22 4b 22 20 3a 20 22 22 eZone ? "K" : "" 13fe0 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }]].. }.. 13ff0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 14000 20 67 65 74 44 61 74 65 54 69 6d 65 54 69 63 6b getDateTimeTick 14010 73 20 7b 20 76 61 6c 75 65 20 7b 6c 6f 63 61 6c s { value {local 14020 20 22 22 7d 20 7b 64 65 66 61 75 6c 74 20 22 22 ""} {default "" 14030 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 14040 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 14050 24 76 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68$value] == 0} th
14060 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
14070 74 75 72 6e 20 24 64 65 66 61 75 6c 74 0d 0a 20  turn $default.. 14080 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14090 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 140a0 20 20 20 20 20 20 73 65 74 20 64 61 74 65 54 69 set dateTi 140b0 6d 65 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b me [object invok 140c0 65 20 2d 63 72 65 61 74 65 20 5c 0d 0a 20 20 20 e -create \.. 140d0 20 20 20 20 20 20 20 20 20 2d 70 61 72 61 6d 65 -parame 140e0 74 65 72 74 79 70 65 73 20 5b 6c 69 73 74 20 53 tertypes [list S 140f0 74 72 69 6e 67 20 53 74 72 69 6e 67 20 49 46 6f tring String IFo 14100 72 6d 61 74 50 72 6f 76 69 64 65 72 20 5c 0d 0a rmatProvider \.. 14110 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 14120 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e em.Globalization 14130 2e 44 61 74 65 54 69 6d 65 53 74 79 6c 65 73 5d .DateTimeStyles] 14140 20 44 61 74 65 54 69 6d 65 20 50 61 72 73 65 45 DateTime ParseE 14150 78 61 63 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 xact \.. 14160 20 20 20 20 24 76 61 6c 75 65 20 5b 67 65 74 44$value [getD
14170 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 6e  ateTimeFormat] n
14180 75 6c 6c 20 41 64 6a 75 73 74 54 6f 55 6e 69 76  ull AdjustToUniv
14190 65 72 73 61 6c 5d 0d 0a 20 20 20 20 20 20 7d 5d  ersal]..      }]
141a0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
141b0 20 20 72 65 74 75 72 6e 20 24 64 65 66 61 75 6c    return $defaul 141c0 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 t.. }.... 141d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 141e0 69 73 20 62 6f 6f 6c 65 61 6e 20 2d 73 74 72 69 is boolean -stri 141f0 63 74 20 24 6c 6f 63 61 6c 5d 7d 20 74 68 65 6e ct$local]} then
14200 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
14210 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 63 74  dateTime [object
14220 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 65 20   invoke -create
14230 44 61 74 65 54 69 6d 65 20 53 70 65 63 69 66 79  DateTime Specify
14240 4b 69 6e 64 20 5c 0d 0a 20 20 20 20 20 20 20 20  Kind \..
14250 20 20 20 20 24 64 61 74 65 54 69 6d 65 20 55 74      $dateTime Ut 14260 63 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 c].. } else 14270 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 14280 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b rn [object invok 14290 65 20 24 64 61 74 65 54 69 6d 65 20 54 69 63 6b e$dateTime Tick
142a0 73 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  s]..      }....
142b0 20 20 20 20 20 69 66 20 7b 24 6c 6f 63 61 6c 7d       if {$local} 142c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 142d0 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 63 74 20 return [object 142e0 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 69 6d 65 invoke$dateTime
142f0 20 54 6f 4c 6f 63 61 6c 54 69 6d 65 2e 54 69 63   ToLocalTime.Tic
14300 6b 73 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ks]..      } els
14310 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  e {..        ret
14320 75 72 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  urn [object invo
14330 6b 65 20 24 64 61 74 65 54 69 6d 65 20 54 6f 55  ke $dateTime ToU 14340 6e 69 76 65 72 73 61 6c 54 69 6d 65 2e 54 69 63 niversalTime.Tic 14350 6b 73 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 ks].. }.. 14360 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 14370 20 67 65 74 50 72 6f 70 65 72 74 69 65 73 20 7b getProperties { 14380 20 6f 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 object varName 14390 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 143a0 20 31 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 1$varName prop
143b0 65 72 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20  erties....
143c0 73 65 74 20 63 6f 75 6e 74 20 30 0d 0a 20 20 20  set count 0..
143d0 20 20 20 73 65 74 20 6e 61 6d 65 73 20 5b 6c 69     set names [li
143e0 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  st]....      if
143f0 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65  {[isObjectHandle
14400 20 24 6f 62 6a 65 63 74 5d 20 26 26 20 24 6f 62   $object] &&$ob
14410 6a 65 63 74 20 6e 65 20 22 6e 75 6c 6c 22 7d 20  ject ne "null"}
14420 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
14430 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d  eval lappend nam
14440 65 73 20 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65  es [object membe
14450 72 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  rs \..
14460 20 20 2d 6d 65 6d 62 65 72 74 79 70 65 73 20 50    -membertypes P
14470 72 6f 70 65 72 74 79 20 2d 6e 61 6d 65 6f 6e 6c  roperty -nameonl
14480 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 0d 0a 20 20  y $object].... 14490 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 eval lappe 144a0 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65 63 74 nd names [object 144b0 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20 20 20 members \.. 144c0 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65 72 74 -membert 144d0 79 70 65 73 20 46 69 65 6c 64 20 2d 6e 61 6d 65 ypes Field -name 144e0 6f 6e 6c 79 20 24 6f 62 6a 65 63 74 5d 0d 0a 20 only$object]..
144f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
14500 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61  foreach name $na 14510 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 mes {.. i 14520 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 14530 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 14540 76 6f 6b 65 20 2d 6f 62 6a 65 63 74 66 6c 61 67 voke -objectflag 14550 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 24 6f 62 s +NoDispose$ob
14560 6a 65 63 74 20 24 6e 61 6d 65 0d 0a 20 20 20 20  ject $name.. 14570 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 } value] == 14580 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 14590 20 20 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65 if {[isObje 145a0 63 74 48 61 6e 64 6c 65 20 24 76 61 6c 75 65 5d ctHandle$value]
145b0 20 26 26 20 24 76 61 6c 75 65 20 6e 65 20 22 6e   && $value ne "n 145c0 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. 145d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 65 72 set er 145e0 72 6f 72 20 6e 75 6c 6c 3b 20 6f 62 6a 65 63 74 ror null; object 145f0 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b invoke -flags + 14600 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 NonPublic \.. 14610 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6d 61 -ma 14620 72 73 68 61 6c 66 6c 61 67 73 20 2b 4e 6f 48 61 rshalflags +NoHa 14630 6e 64 6c 65 20 49 6e 74 65 72 70 72 65 74 65 72 ndle Interpreter 14640 2e 47 65 74 41 63 74 69 76 65 20 5c 0d 0a 20 20 .GetActive \.. 14650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 41 64 Ad 14660 64 4f 62 6a 65 63 74 52 65 66 65 72 65 6e 63 65 dObjectReference 14670 20 4f 6b 20 24 76 61 6c 75 65 20 65 72 72 6f 72 Ok$value error
14680 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
14690 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69  lappend properti
146a0 65 73 28 6f 62 6a 65 63 74 73 29 20 5b 6c 69 73  es(objects) [lis
146b0 74 20 24 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d  t $name$value].
146c0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
146d0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
146e0 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74   lappend propert
146f0 69 65 73 28 76 61 6c 75 65 73 29 20 5b 6c 69 73  ies(values) [lis
14700 74 20 24 6e 61 6d 65 20 24 76 61 6c 75 65 5d 0d  t $name$value].
14710 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
14720 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 63            incr c
14730 6f 75 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 20  ount..        }
14740 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
14750 20 20 6c 61 70 70 65 6e 64 20 70 72 6f 70 65 72    lappend proper
14760 74 69 65 73 28 65 72 72 6f 72 73 29 20 5b 6c 69  ties(errors) [li
14770 73 74 20 24 6e 61 6d 65 20 24 3a 3a 65 72 72 6f  st $name$::erro
14780 72 43 6f 64 65 5d 0d 0a 20 20 20 20 20 20 20 20  rCode]..
14790 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
147a0 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 75 6e      return $coun 147b0 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... 147c0 20 70 72 6f 63 20 67 65 74 41 6c 6c 50 72 6f 70 proc getAllProp 147d0 65 72 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 erties { object 147e0 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 varName } {.. 147f0 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
14800 61 6d 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a  ame properties..
14810 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 20        set value
14820 24 6f 62 6a 65 63 74 0d 0a 0d 0a 20 20 20 20 20  $object.... 14830 20 77 68 69 6c 65 20 7b 74 72 75 65 7d 20 7b 0d while {true} {. 14840 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i 14850 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65 nfo exists prope 14860 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 rties(seenObject 14870 73 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 s)] || \.. 14880 20 20 20 20 20 20 24 76 61 6c 75 65 20 6e 69 20$value ni
14890 24 70 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e  $properties(seen 148a0 4f 62 6a 65 63 74 73 29 7d 20 74 68 65 6e 20 7b Objects)} then { 148b0 0d 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 50 .. getP 148c0 72 6f 70 65 72 74 69 65 73 20 24 76 61 6c 75 65 roperties$value
148d0 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20   properties..
148e0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 70         lappend p
148f0 72 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62  roperties(seenOb
14900 6a 65 63 74 73 29 20 24 76 61 6c 75 65 0d 0a 20  jects) $value.. 14910 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 14920 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 14930 78 69 73 74 73 20 70 72 6f 70 65 72 74 69 65 73 xists properties 14940 28 6f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65 6e (objects)]} then 14950 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 {.. br 14960 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a eak.. }.. 14970 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c .. if {[l 14980 6c 65 6e 67 74 68 20 24 70 72 6f 70 65 72 74 69 length$properti
14990 65 73 28 6f 62 6a 65 63 74 73 29 5d 20 3d 3d 20  es(objects)] ==
149a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
149b0 20 20 20 20 20 75 6e 73 65 74 20 70 72 6f 70 65       unset prope
149c0 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29 3b 20  rties(objects);
149d0 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 7d  break..        }
149e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
149f0 76 61 6c 75 65 20 5b 6c 69 6e 64 65 78 20 5b 6c  value [lindex [l
14a00 69 6e 64 65 78 20 24 70 72 6f 70 65 72 74 69 65  index $propertie 14a10 73 28 6f 62 6a 65 63 74 73 29 20 30 5d 20 65 6e s(objects) 0] en 14a20 64 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 d].. set 14a30 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 properties(objec 14a40 74 73 29 20 5b 6c 72 61 6e 67 65 20 24 70 72 6f ts) [lrange$pro
14a50 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 29  perties(objects)
14a60 20 31 20 65 6e 64 5d 0d 0a 20 20 20 20 20 20 7d   1 end]..      }
14a70 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69  ....      if {[i
14a80 6e 66 6f 20 65 78 69 73 74 73 20 70 72 6f 70 65  nfo exists prope
14a90 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74  rties(seenObject
14aa0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
14ab0 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 6c       foreach val
14ac0 75 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 73  ue $properties(s 14ad0 65 65 6e 4f 62 6a 65 63 74 73 29 20 7b 0d 0a 20 eenObjects) {.. 14ae0 20 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 61 if {$va
14af0 6c 75 65 20 65 71 20 24 6f 62 6a 65 63 74 7d 20  lue eq $object} 14b00 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 continue.. 14b10 20 20 20 20 63 61 74 63 68 20 7b 6f 62 6a 65 63 catch {objec 14b20 74 20 64 69 73 70 6f 73 65 20 24 76 61 6c 75 65 t dispose$value
14b30 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
14b40 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 70 72          unset pr
14b50 6f 70 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a  operties(seenObj
14b60 65 63 74 73 29 0d 0a 20 20 20 20 20 20 7d 0d 0a  ects)..      }..
14b70 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
14b80 6f 63 20 67 65 74 56 61 72 69 61 62 6c 65 73 20  oc getVariables
14b90 7b 20 76 61 72 4e 61 6d 65 73 20 7b 6f 62 6a 65  { varNames {obje
14ba0 63 74 73 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  cts false} } {..
14bb0 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
14bc0 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
14bd0 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d 65   foreach varName
14be0 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20   $varNames {.. 14bf0 20 20 20 20 20 20 69 66 20 7b 5b 75 70 6c 65 76 if {[uplev 14c00 65 6c 20 31 20 5b 6c 69 73 74 20 61 72 72 61 79 el 1 [list array 14c10 20 65 78 69 73 74 73 20 24 76 61 72 4e 61 6d 65 exists$varName
14c20 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ]]} then {..
14c30 20 20 20 20 20 20 73 65 74 20 61 72 72 61 79 4e        set arrayN
14c40 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 0d 0a  ame $varName.... 14c50 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 14c60 68 20 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 5b 75 h elementName [u 14c70 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 61 plevel 1 [list a 14c80 72 72 61 79 20 6e 61 6d 65 73 20 24 61 72 72 61 rray names$arra
14c90 79 4e 61 6d 65 5d 5d 20 7b 0d 0a 20 20 20 20 20  yName]] {..
14ca0 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 20         set name
14cb0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 61 72 72  [appendArgs $arr 14cc0 61 79 4e 61 6d 65 20 28 20 24 65 6c 65 6d 65 6e ayName ($elemen
14cd0 74 4e 61 6d 65 20 29 5d 0d 0a 20 20 20 20 20 20  tName )]..
14ce0 20 20 20 20 20 20 73 65 74 20 76 61 72 56 61 6c        set varVal
14cf0 75 65 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c  ue [uplevel 1 [l
14d00 69 73 74 20 73 65 74 20 24 6e 61 6d 65 5d 5d 0d  ist set $name]]. 14d10 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 14d20 66 20 7b 24 6f 62 6a 65 63 74 73 20 26 26 20 5b f {$objects && [
14d30 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24  isObjectHandle $14d40 76 61 72 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 varValue]} then 14d50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 14d60 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 unset -nocompla 14d70 69 6e 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 20 in properties.. 14d80 20 20 20 20 20 20 20 20 20 20 20 20 20 67 65 74 get 14d90 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 24 76 AllProperties$v
14da0 61 72 56 61 6c 75 65 20 70 72 6f 70 65 72 74 69  arValue properti
14db0 65 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  es....
14dc0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75      lappend resu
14dd0 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 5b  lt [list $name [ 14de0 61 72 72 61 79 20 67 65 74 20 70 72 6f 70 65 72 array get proper 14df0 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20 20 20 20 ties]].. 14e00 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 14e10 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp 14e20 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 end result [list 14e30 20 24 6e 61 6d 65 20 24 76 61 72 56 61 6c 75 65$name $varValue 14e40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 14e50 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 14e60 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 14e70 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 76 . set v 14e80 61 72 56 61 6c 75 65 20 5b 75 70 6c 65 76 65 6c arValue [uplevel 14e90 20 31 20 5b 6c 69 73 74 20 73 65 74 20 24 76 61 1 [list set$va
14ea0 72 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  rName]]....
14eb0 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 63 74       if {$object 14ec0 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74 48 61 s && [isObjectHa 14ed0 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65 5d 7d ndle$varValue]}
14ee0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
14ef0 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f       unset -noco
14f00 6d 70 6c 61 69 6e 20 70 72 6f 70 65 72 74 69 65  mplain propertie
14f10 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 67  s..            g
14f20 65 74 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20  etAllProperties
14f30 24 76 61 72 56 61 6c 75 65 20 70 72 6f 70 65 72  $varValue proper 14f40 74 69 65 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ties.... 14f50 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu 14f60 6c 74 20 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d lt [list$varNam
14f70 65 20 5b 61 72 72 61 79 20 67 65 74 20 70 72 6f  e [array get pro
14f80 70 65 72 74 69 65 73 5d 5d 0d 0a 20 20 20 20 20  perties]]..
14f90 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
14fa0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
14fb0 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 20  nd result [list
14fc0 24 76 61 72 4e 61 6d 65 20 24 76 61 72 56 61 6c  $varName$varVal
14fd0 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  ue]..          }
14fe0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
14ff0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65     }....      re
15000 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 15010 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 15020 20 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 enumerableToLis 15030 74 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d t { enumerable } 15040 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 {.. set re 15050 73 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 sult [list].... 15060 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 15070 20 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 length$enumera
15080 62 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e  ble] == 0 || $en 15090 75 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c umerable eq "nul 150a0 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 l"} then {.. 150b0 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
150c0 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  lt..      }....
150d0 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
150e0 61 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20  ach -alias item
150f0 24 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20  $enumerable {.. 15100 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 15110 6e 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d ng length$item]
15120 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
15130 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
15140 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f  result [$item To 15150 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 String].. 15160 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.. }.... 15170 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
15180 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
15190 20 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64     proc catchAnd
151a0 52 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20  Return { script
151b0 7b 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73  {stackTrace fals
151c0 65 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d  e} {strict true}
151d0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
151e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61       # NOTE: Eva
151f0 6c 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74  luate the script
15200 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72   provided by our
15210 20 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72   caller in their
15220 20 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20   context,..
15230 20 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69   #       capturi
15240 6e 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75  ng both the resu
15250 6c 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72  lt and the retur
15260 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23  n code...      #
15270 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65  ..      set code
15280 20 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c   [catch {uplevel
15290 20 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75   1 $script} resu 152a0 6c 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a lt].... #.. 152b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 # NOTE: Di 152c0 64 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f d the script pro 152d0 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c vided by our cal 152e0 6c 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e ler NOT raise an 152f0 20 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 error?.. # 15300 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 .. if {$str
15310 69 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20  ict && $code == 15320 30 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 0 || !$strict &&
15330 20 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65   $code != 1} the 15340 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 15350 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 15360 53 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e Success. Return 15370 20 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 a list with the 15380 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 return code and 15390 20 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 the result... 153a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 153b0 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 return [list$c
153c0 6f 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20  ode $result].. 153d0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 } elseif {$s
153e0 74 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20  tackTrace} then
153f0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
15400 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
15410 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c  ilure.  Our call
15420 65 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20  er wants a full
15430 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20  stack trace (if
15440 61 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20  applicable),..
15450 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
15460 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
15470 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
15480 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20   and the result
15490 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20  verbatim...
154a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
154b0 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code 154c0 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20$result]..
154d0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
154e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
154f0 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20  NOTE: Failure.
15500 4f 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20  Our caller does
15510 6e 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20  not want a full
15520 73 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d  stack trace (if.
15530 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15540 20 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65   applicable), re
15550 74 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68  turn a list with
15560 20 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65   the return code
15570 2c 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20  , the error..
15580 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64       #       cod
15590 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70  e for the interp
155a0 72 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65  reter, and the e
155b0 72 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20  rror message up
155c0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
155d0 23 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68  #       point wh
155e0 65 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72  ere the stack tr
155f0 61 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74  ace should start
15600 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15610 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
15620 73 74 20 24 63 6f 64 65 20 24 3a 3a 65 72 72 6f  st $code$::erro
15630 72 43 6f 64 65 20 5c 0d 0a 20 20 20 20 20 20 20  rCode \..
15640 20 20 20 20 20 5b 65 78 74 72 61 63 74 53 79 73       [extractSys
15650 74 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63  temDataSQLiteExc
15660 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 24 72  eptionMessage $r 15670 65 73 75 6c 74 5d 5d 0d 0a 20 20 20 20 20 20 7d esult]].. } 15680 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 15690 70 72 6f 63 20 72 65 73 65 74 45 78 63 65 70 74 proc resetExcept 156a0 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 ion {} {.. 156b0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 156c0 20 52 65 73 65 74 20 65 78 63 65 70 74 69 6f 6e Reset exception 156d0 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 associated with 156e0 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 this interprete 156f0 72 20 28 74 6f 20 6e 75 6c 6c 29 2e 0d 0a 20 20 r (to null)... 15700 20 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73 # This 15710 20 28 70 72 69 76 61 74 65 29 20 70 72 6f 70 65 (private) prope 15720 72 74 79 20 69 73 20 6d 61 69 6e 74 61 69 6e 65 rty is maintaine 15730 64 20 6f 6e 20 61 20 70 65 72 2d 74 68 72 65 61 d on a per-threa 15740 64 20 62 61 73 69 73 2e 0d 0a 20 20 20 20 20 20 d basis... 15750 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 #.. object 15760 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 15770 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 onPublic Interpr 15780 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 45 eter.GetActive E 15790 78 63 65 70 74 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 xception null.. 157a0 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 157b0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 157c0 6f 63 20 63 61 74 63 68 41 6e 64 53 65 74 45 78 oc catchAndSetEx 157d0 63 65 70 74 69 6f 6e 20 7b 20 73 63 72 69 70 74 ception { script 157e0 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 {varName ""} } 157f0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 15800 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61 # NOTE: Evalua 15810 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70 72 te the script pr 15820 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 ovided by our ca 15830 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63 6f ller in their co 15840 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 23 0d ntext... #. 15850 0a 20 20 20 20 20 20 63 61 74 63 68 20 7b 75 70 . catch {up 15860 6c 65 76 65 6c 20 31 20 24 73 63 72 69 70 74 7d level 1$script}
15870 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
15880 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20     # NOTE: Grab
15890 74 68 65 20 28 70 72 69 76 61 74 65 29 20 65 78  the (private) ex
158a0 63 65 70 74 69 6f 6e 20 70 72 6f 70 65 72 74 79  ception property
158b0 20 66 72 6f 6d 20 74 68 69 73 20 69 6e 74 65 72   from this inter
158c0 70 72 65 74 65 72 2c 0d 0a 20 20 20 20 20 20 23  preter,..      #
158d0 20 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20         for this
158e0 74 68 72 65 61 64 2c 20 61 6e 64 20 61 64 64 20  thread, and add
158f0 61 73 20 61 6e 20 6f 70 61 71 75 65 20 6f 62 6a  as an opaque obj
15900 65 63 74 20 68 61 6e 64 6c 65 20 69 6e 20 74 68  ect handle in th
15910 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
15920 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20   context of our
15930 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23  caller...      #
15940 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
15950 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 15960 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { 15970 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 20 .. upvar 15980 31 20 24 76 61 72 4e 61 6d 65 20 65 78 63 65 70 1$varName excep
15990 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  tion..      }...
159a0 0a 20 20 20 20 20 20 73 65 74 20 65 78 63 65 70  .      set excep
159b0 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76  tion [object inv
159c0 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oke \..
159d0 20 2d 61 6c 69 61 73 20 2d 66 6c 61 67 73 20 2b   -alias -flags +
159e0 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70  NonPublic Interp
159f0 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65 20  reter.GetActive
15a00 45 78 63 65 70 74 69 6f 6e 5d 0d 0a 0d 0a 20 20  Exception]....
15a10 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
15a20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
15a30 63 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57  c compileCSharpW
15a40 69 74 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ith {..
15a50 20 20 20 74 65 78 74 20 6d 65 6d 6f 72 79 20 73     text memory s
15a60 79 6d 62 6f 6c 73 20 73 74 72 69 63 74 20 72 65  ymbols strict re
15a70 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 65 72 72  sultsVarName err
15a80 6f 72 73 56 61 72 4e 61 6d 65 20 66 69 6c 65 4e  orsVarName fileN
15a90 61 6d 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ames..
15aa0 20 20 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20    args } {..
15ab0 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20    try {..
15ac0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
15ad0 54 45 3a 20 53 69 6e 63 65 20 77 65 20 61 72 65  TE: Since we are
15ae0 20 67 6f 69 6e 67 20 74 6f 20 75 73 65 20 74 68   going to use th
15af0 69 73 20 6d 65 74 68 6f 64 20 6e 61 6d 65 20 61  is method name a
15b00 20 6c 6f 74 2c 20 61 73 73 69 67 6e 0d 0a 20 20   lot, assign..
15b10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74        #       it
15b20 20 74 6f 20 61 20 76 61 72 69 61 62 6c 65 20 66   to a variable f
15b30 69 72 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  irst...        #
15b40 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 64  ..        set ad
15b50 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65  d ReferencedAsse
15b60 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20  mblies.Add....
15b70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15b80 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20   # NOTE: Create
15b90 74 68 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64  the base command
15ba0 20 74 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64   to evaluate and
15bb0 20 61 64 64 20 74 68 65 20 70 72 6f 70 65 72 74   add the propert
15bc0 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
15bd0 20 20 20 73 65 74 74 69 6e 67 73 20 74 68 61 74     settings that
15be0 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61   are almost alwa
15bf0 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72  ys needed by our
15c00 20 75 6e 69 74 20 74 65 73 74 73 0d 0a 20 20 20   unit tests..
15c10 20 20 20 20 20 23 20 20 20 20 20 20 20 28 69 2e       #       (i.
15c20 65 2e 20 74 68 65 20 53 79 73 74 65 6d 20 61 6e  e. the System an
15c30 64 20 53 79 73 74 65 6d 2e 44 61 74 61 20 61 73  d System.Data as
15c40 73 65 6d 62 6c 79 20 72 65 66 65 72 65 6e 63 65  sembly reference
15c50 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  s)...        #..
15c60 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6d 6d          set comm
15c70 61 6e 64 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  and [list \..
15c80 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 6c 65           compile
15c90 43 53 68 61 72 70 20 24 74 65 78 74 20 24 6d 65  CSharp $text$me
15ca0 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 24 73  mory $symbols$s
15cb0 74 72 69 63 74 20 72 65 73 75 6c 74 73 20 5c 0d  trict results \.
15cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72  .            err
15cd0 6f 72 73 20 24 61 64 64 20 53 79 73 74 65 6d 2e  ors $add System. 15ce0 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e dll$add System.
15cf0 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 5c 0d  Data.dll $add \. 15d00 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 . Sys 15d10 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 tem.Transactions 15d20 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d .dll$add System
15d30 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .Xml.dll]....
15d40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15d50 23 20 4e 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20  # NOTE: Add all
15d60 74 68 65 20 70 72 6f 76 69 64 65 64 20 66 69 6c  the provided fil
15d70 65 20 6e 61 6d 65 73 20 61 73 20 61 73 73 65 6d  e names as assem
15d80 62 6c 79 20 72 65 66 65 72 65 6e 63 65 73 2e 0d  bly references..
15d90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
15da0 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
15db0 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 73 20  Name $fileNames 15dc0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 61 70 {.. lap 15dd0 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 64 pend command$ad
15de0 64 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  d [getBinaryFile
15df0 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d  Name $fileName]. 15e00 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 15e10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15e20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 78 74 # NOTE: Add ext 15e30 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20 69 66 ra arguments, if 15e40 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63 6f 6d any, to the com 15e50 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65 mand to evaluate 15e60 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 15e70 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 eval lappe 15e80 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 nd command$args
15e90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
15ea0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
15eb0 6c 69 61 73 20 74 68 65 20 63 6f 6d 70 69 6c 65  lias the compile
15ec0 72 20 6c 6f 63 61 6c 20 72 65 73 75 6c 74 73 20  r local results
15ed0 61 6e 64 20 65 72 72 6f 72 73 20 76 61 72 69 61  and errors varia
15ee0 62 6c 65 73 20 74 6f 0d 0a 20 20 20 20 20 20 20  bles to..
15ef0 20 23 20 20 20 20 20 20 20 74 68 65 20 76 61 72   #       the var
15f00 69 61 62 6c 65 20 6e 61 6d 65 73 20 70 72 6f 76  iable names prov
15f10 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c  ided by our call
15f20 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  er...        #..
15f30 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
15f40 69 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75  ing length $resu 15f50 6c 74 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d ltsVarName] > 0} 15f60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15f70 20 20 20 75 70 76 61 72 20 31 20 24 72 65 73 75 upvar 1$resu
15f80 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 75 6c  ltsVarName resul
15f90 74 73 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ts..        }...
15fa0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
15fb0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72  ring length $err 15fc0 6f 72 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d orsVarName] > 0} 15fd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15fe0 20 20 20 75 70 76 61 72 20 31 20 24 65 72 72 6f upvar 1$erro
15ff0 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73  rsVarName errors
16000 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
16010 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16020 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75 61    # NOTE: Evalua
16030 74 65 20 74 68 65 20 63 6f 6e 73 74 72 75 63 74  te the construct
16040 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68 61 72  ed [compileCShar
16050 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 0d 0a  p] command and..
16060 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
16070 72 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c  return the resul
16080 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
16090 20 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d         eval $com 160a0 6d 61 6e 64 0d 0a 20 20 20 20 20 20 7d 20 66 69 mand.. } fi 160b0 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 nally {.. 160c0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 160d0 54 45 3a 20 49 66 20 74 68 65 20 43 23 20 63 6f TE: If the C# co 160e0 6d 70 69 6c 65 72 20 77 61 73 20 69 6e 76 6f 6b mpiler was invok 160f0 65 64 20 75 73 69 6e 67 20 5b 65 78 65 63 5d 2c ed using [exec], 16100 20 72 65 73 65 74 20 74 68 65 0d 0a 20 20 20 20 reset the.. 16110 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76 # prev 16120 69 6f 75 73 20 70 72 6f 63 65 73 73 20 69 64 65 ious process ide 16130 6e 74 69 66 69 65 72 20 6e 6f 77 20 28 69 2e 65 ntifier now (i.e 16140 2e 20 74 68 61 74 20 77 61 79 2c 20 69 74 20 64 . that way, it d 16150 6f 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 oes.. # 16160 20 20 20 20 20 6e 6f 74 20 73 68 6f 77 20 75 70 not show up 16170 20 61 73 20 62 65 69 6e 67 20 22 6c 65 61 6b 65 as being "leake 16180 64 22 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d d")... #. 16190 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 . if {[is 161a0 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65 DotNetCore]} the 161b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 161c0 61 74 63 68 20 7b 69 6e 66 6f 20 70 72 65 76 69 atch {info previ 161d0 6f 75 73 70 69 64 20 74 72 75 65 7d 0d 0a 20 20 ouspid true}.. 161e0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 161f0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 16200 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62 20 proc isMemoryDb 16210 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a { fileName } {.. 16220 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 16230 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73 70 NOTE: Is the sp 16240 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 ecified database 16250 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c file name reall 16260 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 y an in-memory d 16270 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20 20 atabase?.. 16280 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 #.. return 16290 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65 [expr {$fileName
162a0 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c   eq ":memory:" |
162b0 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  | \..          [
162c0 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66 69  string range $fi 162d0 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71 20 leName 0 12] eq 162e0 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d "file::memory:"} 162f0 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 16300 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 6e 44 proc isTableInD 16310 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d b { name {varNam 16320 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e db} } {.. 16330 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 16340 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 : Refer to the s 16350 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c pecified variabl 16360 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e e (e.g. "db") in 16370 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 the context of 16380 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 our.. # 16390 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 caller. It c 163a0 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61 ontains the data 163b0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 base connection 163c0 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c handle that will 163d0 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 be.. # 163e0 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75 used to execu 163f0 74 65 20 74 68 65 20 71 75 65 72 79 20 75 73 65 te the query use 16400 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 d to determine i 16410 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c f the named tabl 16420 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 e is.. # 16430 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 present in t 16440 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 hat database... 16450 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 #.. up 16460 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 var 1$varName d
16470 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  b....      #..
16480 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
16490 74 68 65 20 73 71 6c 69 74 65 5f 6d 61 73 74 65  the sqlite_maste
164a0 72 20 74 61 62 6c 65 20 74 6f 20 64 65 74 65 72  r table to deter
164b0 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65  mine if the name
164c0 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20  d table is..
164d0 20 20 23 20 20 20 20 20 20 20 70 72 65 73 65 6e    #       presen
164e0 74 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  t in the databas
164f0 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
16500 20 20 20 73 65 74 20 73 71 6c 20 7b 0d 0a 20 20     set sql {..
16510 20 20 20 20 20 20 53 45 4c 45 43 54 20 43 4f 55        SELECT COU
16520 4e 54 28 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74  NT(*) FROM sqlit
16530 65 5f 6d 61 73 74 65 72 20 57 48 45 52 45 20 74  e_master WHERE t
16540 79 70 65 20 3d 20 27 74 61 62 6c 65 27 20 41 4e  ype = 'table' AN
16550 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d 0a 20 20 20  D name = ?;..
16560 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
16570 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
16580 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69  eturn non-zero i
16590 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
165a0 65 20 69 73 20 70 72 65 73 65 6e 74 2e 0d 0a 20  e is present...
165b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
165c0 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20  turn [expr {..
165d0 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75        [sql execu
165e0 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c  te -execute scal
165f0 61 72 20 24 64 62 20 24 73 71 6c 20 5b 6c 69 73  ar $db$sql [lis
16600 74 20 70 61 72 61 6d 31 20 53 74 72 69 6e 67 20  t param1 String
16610 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d 0a 20 20 20  $name]] > 0.. 16620 20 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }].. }.... 16630 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44 . proc getDbD 16640 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 20 7b efaultPageSize { 16650 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b } {.. if {[ 16660 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 catch {executeSq 16670 6c 20 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 l "PRAGMA page_s 16680 69 7a 65 3b 22 20 73 63 61 6c 61 72 7d 20 72 65 ize;" scalar} re 16690 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sult] == 0} then 166a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 166b0 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
166c0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
166d0 20 20 20 20 72 65 74 75 72 6e 20 30 0d 0a 20 20      return 0..
166e0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
166f0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 44  .    proc getDbD
16700 65 66 61 75 6c 74 43 61 63 68 65 53 69 7a 65 20  efaultCacheSize
16710 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b  {} {..      if {
16720 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53  [catch {executeS
16730 71 6c 20 22 50 52 41 47 4d 41 20 63 61 63 68 65  ql "PRAGMA cache
16740 5f 73 69 7a 65 3b 22 20 73 63 61 6c 61 72 7d 20  _size;" scalar}
16750 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
16760 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
16770 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result.. 16780 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 16790 20 20 20 20 20 20 72 65 74 75 72 6e 20 30 0d 0a return 0.. 167a0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 167b0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 75 73 65 4c ... proc useL 167c0 65 67 61 63 79 44 62 50 61 67 65 41 6e 64 43 61 egacyDbPageAndCa 167d0 63 68 65 53 69 7a 65 73 20 7b 20 76 61 72 4e 61 cheSizes { varNa 167e0 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d me } {.. #. 167f0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R 16800 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec 16810 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( 16820 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 e.g. "db") in th 16830 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 e context of our 16840 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 16850 63 61 6c 6c 65 72 2e 20 20 49 74 20 63 6f 6e 74 caller. It cont 16860 61 69 6e 73 20 74 68 65 20 64 61 74 61 62 61 73 ains the databas 16870 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e e connection han 16880 64 6c 65 20 74 68 61 74 20 77 69 6c 6c 20 62 65 dle that will be 16890 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 168a0 75 73 65 64 20 74 6f 20 65 78 65 63 75 74 65 20 used to execute 168b0 71 75 65 72 69 65 73 20 75 73 65 64 20 74 6f 20 queries used to 168c0 73 65 74 20 74 68 65 20 70 61 67 65 20 61 6e 64 set the page and 168d0 20 63 61 63 68 65 20 73 69 7a 65 73 2e 0d 0a 20 cache sizes... 168e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 #.. up 168f0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 var 1$varName d
16900 62 0d 0a 0d 0a 20 20 20 20 20 20 73 71 6c 20 65  b....      sql e
16910 78 65 63 75 74 65 20 24 64 62 20 7b 0d 0a 20 20  xecute $db {.. 16920 20 20 20 20 20 20 50 52 41 47 4d 41 20 70 61 67 PRAGMA pag 16930 65 5f 73 69 7a 65 20 3d 20 31 30 32 34 3b 0d 0a e_size = 1024;.. 16940 20 20 20 20 20 20 20 20 50 52 41 47 4d 41 20 63 PRAGMA c 16950 61 63 68 65 5f 73 69 7a 65 20 3d 20 32 30 30 30 ache_size = 2000 16960 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ;.. }.... 16970 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 return [list 16980 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 16990 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 ql execute -exec 169a0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 22 ute scalar$db "
169b0 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65  PRAGMA page_size
169c0 3b 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ;"] \..
169d0 20 5b 73 71 6c 20 65 78 65 63 75 74 65 20 2d 65   [sql execute -e
169e0 78 65 63 75 74 65 20 73 63 61 6c 61 72 20 24 64  xecute scalar $d 169f0 62 20 22 50 52 41 47 4d 41 20 63 61 63 68 65 5f b "PRAGMA cache_ 16a00 73 69 7a 65 3b 22 5d 5d 0d 0a 20 20 20 20 7d 0d size;"]].. }. 16a10 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6e 6f 72 .... proc nor 16a20 6d 61 6c 69 7a 65 45 78 63 65 70 74 69 6f 6e 4d malizeExceptionM 16a30 65 73 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d essage { value } 16a40 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 {.. if {[s 16a50 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 tring length$va
16a60 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  lue] == 0} then
16a70 7b 72 65 74 75 72 6e 20 24 76 61 6c 75 65 7d 0d  {return $value}. 16a80 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73 . return [s 16a90 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 tring map [list 16aa0 5c 72 5c 6e 20 22 20 3d 3d 3e 20 22 20 5c 6e 20 \r\n " ==> " \n 16ab0 22 20 3d 3d 3e 20 22 5d 20 24 76 61 6c 75 65 5d " ==> "]$value]
16ac0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
16ad0 70 72 6f 63 20 65 78 74 72 61 63 74 53 79 73 74  proc extractSyst
16ae0 65 6d 44 61 74 61 53 51 4c 69 74 65 45 78 63 65  emDataSQLiteExce
16af0 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 7b 20 76  ptionMessage { v
16b00 61 6c 75 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20  alue } {..
16b10 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
16b20 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 63   If the string c
16b30 6f 6e 66 6f 72 6d 73 20 74 6f 20 66 6f 72 6d 61  onforms to forma
16b40 74 20 6f 66 20 74 68 65 20 6e 6f 72 6d 61 6c 20  t of the normal
16b50 65 78 63 65 70 74 69 6f 6e 0d 0a 20 20 20 20 20  exception..
16b60 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 73   #       error s
16b70 74 72 69 6e 67 73 2c 20 65 78 74 72 61 63 74 20  trings, extract
16b80 61 6e 64 20 72 65 74 75 72 6e 20 6f 6e 6c 79 20  and return only
16b90 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
16ba0 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
16bb0 20 70 6f 72 74 69 6f 6e 20 69 74 73 65 6c 66 2e   portion itself.
16bc0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16bd0 20 73 65 74 20 70 61 74 74 65 72 6e 73 20 5b 6c   set patterns [l
16be0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 7b 53 79  ist \..      {Sy
16bf0 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51 4c 69  stem\.Data\.SQLi
16c00 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65 70 74  te\.SQLiteExcept
16c10 69 6f 6e 20 5c 28 30 78 28 3f 3a 30 7c 38 29 5b  ion $$0x(?:0|8)[ 16c20 30 2d 39 41 2d 46 61 2d 66 5d 7b 37 7d 5c 29 3a 0-9A-Fa-f]{7}$$:
16c30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 28 2e 2b  \..          (.+
16c40 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20 5c 0d  ?)  (?: )?at} \.
16c50 0a 20 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e  .      {System\.
16c60 44 61 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51  Data\.SQLite\.SQ
16c70 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 3a 20 28  LiteException: (
16c80 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 20  .+?)  (?: )?at}
16c90 5c 0d 0a 20 20 20 20 20 20 7b 45 61 67 6c 65 5c  \..      {Eagle\
16ca0 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 5c 2e 50 75  ._Components\.Pu
16cb0 62 6c 69 63 5c 2e 53 63 72 69 70 74 45 78 63 65  blic\.ScriptExce
16cc0 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f  ption: (.+?)  (?
16cd0 3a 20 29 3f 61 74 7d 5d 0d 0a 0d 0a 20 20 20 20  : )?at}]....
16ce0 20 20 66 6f 72 65 61 63 68 20 70 61 74 74 65 72    foreach patter
16cf0 6e 20 24 70 61 74 74 65 72 6e 73 20 7b 0d 0a 20  n $patterns {.. 16d00 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 65 if {[rege 16d10 78 70 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 xp --$pattern $16d20 76 61 6c 75 65 20 64 75 6d 6d 79 20 6d 65 73 73 value dummy mess 16d30 61 67 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 age]} then {.. 16d40 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 73 73 set mess 16d50 61 67 65 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 age [string map 16d60 5b 6c 69 73 74 20 5c 72 5c 6e 20 5c 6e 5d 20 5b [list \r\n \n] [ 16d70 73 74 72 69 6e 67 20 74 72 69 6d 20 24 6d 65 73 string trim$mes
16d80 73 61 67 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20  sage]]..
16d90 20 20 73 65 74 20 6c 69 6e 65 73 20 5b 73 70 6c    set lines [spl
16da0 69 74 20 24 6d 65 73 73 61 67 65 20 5c 6e 5d 0d  it $message \n]. 16db0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 16dc0 7b 5b 6c 6c 65 6e 67 74 68 20 24 6c 69 6e 65 73 {[llength$lines
16dd0 5d 20 3d 3d 20 32 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 2} then {..
16de0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
16df0 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30  [lindex $lines 0 16e00 5d 20 65 71 20 5b 6c 69 6e 64 65 78 20 24 6c 69 ] eq [lindex$li
16e10 6e 65 73 20 31 5d 7d 20 74 68 65 6e 20 7b 0d 0a  nes 1]} then {..
16e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
16e30 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 24 6c 69  turn [lindex $li 16e40 6e 65 73 20 30 5d 0d 0a 20 20 20 20 20 20 20 20 nes 0].. 16e50 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 16e60 20 20 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 return [app 16e70 65 6e 64 41 72 67 73 20 5b 6c 69 6e 64 65 78 20 endArgs [lindex 16e80 24 6c 69 6e 65 73 20 30 5d 20 22 20 2d 2d 20 22$lines 0] " -- "
16e90 20 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20   [lindex $lines 16ea0 31 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 1]].. } 16eb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 .... re 16ec0 74 75 72 6e 20 24 6d 65 73 73 61 67 65 0d 0a 20 turn$message..
16ed0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
16ee0 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
16ef0 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 7d 0d  n $value.. }. 16f00 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 69 .... proc tri 16f10 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a mSql { sql } {.. 16f20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 65 return [re 16f30 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 gsub -all -- {\s 16f40 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 +} [string trim 16f50 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20$sql] " "]..
16f60 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65  }.....    proc e
16f70 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c 20  xecuteSql { sql
16f80 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b  {execute none} {
16f90 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 69  format none} {fi
16fa0 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a  leName ""} } {..
16fb0 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
16fc0 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61  g length $fileNa 16fd0 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b me] == 0} then { 16fe0 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d 65 set fileName :me 16ff0 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73 65 mory:}.. se 17000 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65 20 tupDb$fileName
17010 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 66  "" "" "" "" "" f
17020 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65  alse false false
17030 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d 0a   false db true..
17040 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20  ..      try {..
17050 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75         return [u
17060 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 5c  plevel 1 [list \
17070 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ..            sq
17080 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 75  l execute -execu
17090 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f 72  te $execute -for 170a0 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62 20 mat$format $db 170b0 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20$sql]]..      }
170c0 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20  finally {..
170d0 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f     set connectio
170e0 6e 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69  n [getDbConnecti
170f0 6f 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  on]....        t
17100 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ry {..
17110 63 6c 65 61 6e 75 70 44 62 20 24 66 69 6c 65 4e  cleanupDb $fileN 17120 61 6d 65 20 64 62 20 66 61 6c 73 65 20 66 61 6c ame db false fal 17130 73 65 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 se false.. 17140 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 } finally {.. 17150 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 17160 66 6c 61 67 73 20 24 63 6f 6e 6e 65 63 74 69 6f flags$connectio
17170 6e 20 2d 4e 6f 44 69 73 70 6f 73 65 3b 20 66 72  n -NoDispose; fr
17180 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  eeDbConnection..
17190 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
171a0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
171b0 20 20 70 72 6f 63 20 68 61 73 4e 6f 46 6c 61 67    proc hasNoFlag
171c0 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e 6f 6e 65  s { varName none
171d0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61   } {..      upva
171e0 72 20 31 20 24 76 61 72 4e 61 6d 65 20 66 6c 61  r 1 $varName fla 171f0 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b gs.... if { 17200 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 66 6c ![info exists fl 17210 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ags]} then {.. 17220 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 17230 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 e.. }.... 17240 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 17250 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3d length$flags] =
17260 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
17270 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
17280 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
17290 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20 26 26 20     if {$none && 172a0 24 66 6c 61 67 73 20 65 71 20 22 4e 6f 6e 65 22$flags eq "None"
172b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
172c0 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
172d0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
172e0 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20  return false..
172f0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
17300 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c   getConnectionFl
17310 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d 65 20 66  ags { fileName f
17320 6c 61 67 73 20 7b 71 75 69 65 74 20 66 61 6c 73  lags {quiet fals
17330 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  e} } {..      #.
17340 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
17350 69 67 75 72 65 20 6f 75 74 20 77 68 69 63 68 20  igure out which
17360 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
17370 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e  me or connection
17380 20 73 74 72 69 6e 67 20 74 68 65 73 65 0d 0a 20   string these..
17390 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e       #       con
173a0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69  nection flags wi
173b0 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61 70 70 6c  ll actually appl
173c0 79 20 74 6f 2e 20 20 54 68 69 73 20 69 73 20 6e  y to.  This is n
173d0 6f 74 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20  ot necessary..
173e0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 71      #       in q
173f0 75 69 65 74 20 6d 6f 64 65 20 62 65 63 61 75 73  uiet mode becaus
17400 65 20 74 68 69 73 20 69 6e 66 6f 72 6d 61 74 69  e this informati
17410 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  on is only used
17420 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a 20 20 20  for logging..
17430 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72     #       and r
17440 65 70 6f 72 74 69 6e 67 20 70 75 72 70 6f 73 65  eporting purpose
17450 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
17460 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 17470 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17480 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 17490 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 th$fileName] >
174a0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
174b0 20 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73       set databas
174c0 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 66  e [appendArgs "f
174d0 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20 24 66 69  ile name \"" $fi 174e0 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20 20 20 20 leName \"].. 174f0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 17500 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 64 61 74 nfo exists ::dat 17510 61 53 6f 75 72 63 65 5d 20 26 26 20 5c 0d 0a 20 aSource] && \.. 17520 20 20 20 20 20 20 20 20 20 20 20 21 5b 61 72 72 ![arr 17530 61 79 20 65 78 69 73 74 73 20 3a 3a 64 61 74 61 ay exists ::data 17540 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e 20 7b 0d Source]} then {. 17550 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 . set d 17560 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e 64 41 atabase [appendA 17570 72 67 73 20 22 64 61 74 61 20 73 6f 75 72 63 65 rgs "data source 17580 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 6f 75 72 \""$::dataSour
17590 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20 20 20 20  ce \"]..
175a0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
175b0 20 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65      set database
175c0 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20 20 20 20   <unknown>..
175d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
175e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
175f0 20 23 20 4e 4f 54 45 3a 20 45 76 65 6e 20 74 68   # NOTE: Even th
17600 6f 75 67 68 20 74 68 65 72 65 20 69 73 20 6f 6e  ough there is on
17610 6c 79 20 6f 6e 65 20 73 6f 75 72 63 65 20 6f 66  ly one source of
17620 20 66 6c 61 67 73 20 73 6f 20 66 61 72 2c 20 74   flags so far, t
17630 68 65 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  hey..      #
17640 20 20 20 6d 75 73 74 20 62 65 20 63 6f 6d 62 69     must be combi
17650 6e 65 64 20 75 73 69 6e 67 20 74 68 65 20 63 6f  ned using the co
17660 72 72 65 63 74 20 73 79 6e 74 61 78 20 66 6f 72  rrect syntax for
17670 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20   enumerated..
17680 20 20 20 23 20 20 20 20 20 20 20 66 6c 61 67 20     #       flag
17690 76 61 6c 75 65 73 20 66 6f 72 20 74 68 65 20 2e  values for the .
176a0 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a  NET Framework...
176b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73        #..      s
176c0 65 74 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e  et flags [combin
176d0 65 46 6c 61 67 73 20 24 66 6c 61 67 73 20 22 22  eFlags $flags "" 176e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 176f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 17700 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c (and log) the l 17710 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ocal connection 17720 66 6c 61 67 73 20 61 6e 64 20 74 68 65 20 61 73 flags and the as 17730 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20 sociated.. 17740 23 20 20 20 20 20 20 20 64 61 74 61 20 73 6f 75 # data sou 17750 72 63 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65 rce or file name 17760 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 17770 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
17780 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
17790 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
177a0 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46   ::no(emitLocalF
177b0 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  lags)] && \..
177c0 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f           (![info
177d0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69   exists ::no(emi
177e0 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e  tLocalFlagsIfNon
177f0 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  e)] || \..
17800 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c         ![hasNoFl
17810 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d  ags flags false]
17820 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  )} then {..
17830 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 17840 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 17850 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 17860 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f "---- lo 17870 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 cal connection f 17880 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 lags for "$data
17890 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  base \..
178a0 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b        " are: " [
178b0 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61  expr {![hasNoFla
178c0 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20  gs flags false]
178d0 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..
178e0 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c     [appendArgs \
178f0 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22  " $flags \"] : " 17900 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 <none>"}] \n].. 17910 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 17920 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 17930 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 17940 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73 (and log) the s 17950 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e hared connection 17960 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23 flags... # 17970 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 .. if {!$qu
17980 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
17990 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
179a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
179b0 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65  ect invoke Syste
179c0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
179d0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53  LiteConnection S
179e0 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20  haredFlags..
179f0 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67      } sharedFlag
17a00 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  s] == 0} then {.
17a10 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
17a20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
17a30 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67  o(emitSharedFlag
17a40 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
17a50 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20          (![info
17a60 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74  exists ::no(emit
17a70 53 68 61 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e  SharedFlagsIfNon
17a80 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20  e)] || \..
17a90 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f           ![hasNo
17aa0 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67  Flags sharedFlag
17ab0 73 20 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b  s true])} then {
17ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
17ad0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 17ae0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 17af0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17b00 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20 "---- shared 17b10 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 17b20 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65 for "$database
17b30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17b40 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78      " are: " [ex
17b50 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73  pr {![hasNoFlags
17b60 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 75   sharedFlags tru
17b70 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20  e] ? \..
17b80 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41          [appendA
17b90 72 67 73 20 5c 22 20 24 73 68 61 72 65 64 46 6c  rgs \" $sharedFl 17ba0 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 ags \"] : "<none 17bb0 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 >"}] \n].. 17bc0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 17bd0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 17be0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 17bf0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68 ists ::no(emitSh 17c00 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c aredFlags)] && \ 17c10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17c20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 17c30 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 no(emitSharedFla 17c40 67 73 49 66 55 6e 61 76 61 69 6c 61 62 6c 65 29 gsIfUnavailable) 17c50 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 17c60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
17c70 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
17c80 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
17c90 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
17ca0 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74  - shared connect
17cb0 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20  ion flags for "
17cc0 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20  $database \.. 17cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 " a 17ce0 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65 re: <unavailable 17cf0 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 >\n"].. 17d00 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. }.. 17d10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 17d20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 17d30 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 Show (and log) 17d40 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c 6f the detected glo 17d50 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 bal connection f 17d60 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 lags, if any... 17d70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 17d80 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
17d90 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  {..        if {!
17da0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
17db0 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67  o(emitGlobalFlag
17dc0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  s)] && \..
17dd0 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78        (![info ex
17de0 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c  ists ::no(emitGl
17df0 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29  obalFlagsIfNone)
17e00 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
17e10 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67       ![hasNoFlag
17e20 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66  s ::connection_f
17e30 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68  lags false])} th
17e40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
17e50 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 17e60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 17e70 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 17e80 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20 "---- global 17e90 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 connection flags 17ea0 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 are: " \.. 17eb0 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b [expr { 17ec0 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 ![hasNoFlags ::c 17ed0 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 onnection_flags 17ee0 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 false] ? \.. 17ef0 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e [appen 17f00 64 41 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e dArgs \"$::conn
17f10 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d  ection_flags \"]
17f20 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e   : "<none>"}] \n
17f30 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
17f40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
17f50 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
17f60 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79  If there are any
17f70 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73   global (per tes
17f80 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f  t run) connectio
17f90 6e 20 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c  n flags currentl
17fa0 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
17fb0 20 73 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e   set, use them n
17fc0 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62  ow (i.e. by comb
17fd0 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20  ining them with
17fe0 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69  the ones for thi
17ff0 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
18000 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20   connection)...
18010 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
18020 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
18030 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67  :connection_flag
18040 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  s]} then {..
18050 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18060 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61   NOTE: Combine a
18070 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68  nd/or replace th
18080 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  e connection fla
18090 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77  gs and then show
180a0 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
180b0 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e        new value.
180c0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
180d0 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b       set flags [
180e0 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c  combineFlags $fl 180f0 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f ags$::connectio
18100 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20  n_flags]....
18110 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
18120 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64   NOTE: Show (and
18130 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66   log) the new ef
18140 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69  fective connecti
18150 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20  on flags...
18160 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
18170 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 18180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 18190 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 181a0 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64 :no(emitCombined 181b0 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 Flags)] && \.. 181c0 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69 (![i 181d0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 181e0 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67 emitCombinedFlag 181f0 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a sIfNone)] || \.. 18200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! 18210 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 [hasNoFlags flag 18220 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20 s false])} then 18230 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 18240 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
18250 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
18260 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
18270 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e      "---- combin
18280 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  ed connection fl
18290 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62  ags for " $datab 182a0 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ase \.. 182b0 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 " are: " 182c0 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c [expr {![hasNoFl 182d0 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d ags flags false] 182e0 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ? \.. 182f0 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 18300 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 s \"$flags \"]
18310 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d  : "<none>"}] \n]
18320 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
18330 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
18340 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
18350 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d  n $flags.. }. 18360 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 18370 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20 FlagsProperty { 18380 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65 {flags ""} {quie 18390 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. 183a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 183b0 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77 OTE: Determine w 183c0 68 61 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 hat the combined 183d0 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63 (global and loc 183e0 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a al) connection.. 183f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c # fl 18400 61 67 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70 ags should be, p 18410 6f 73 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e ossibly quietly. 18420 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 18430 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43 set flags [getC 18440 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22 onnectionFlags " 18450 22 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d "$flags $quiet] 18460 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 18470 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f # NOTE: If no 18480 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c global or local 18490 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 184a0 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 s were specified 184b0 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 , the.. # 184c0 20 20 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e default con 184d0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68 nection flags sh 184e0 6f 75 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68 ould be used; th 184f0 65 72 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d erefore, return. 18500 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 18510 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 n empty string i 18520 6e 20 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20 n that case... 18530 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 18540 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 18550 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68$flags] == 0} th
18560 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  en {..        re
18570 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
18580 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
18590 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72     # NOTE: In or
185a0 64 65 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20  der to check if
185b0 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e  the default conn
185c0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65  ection flags are
185d0 20 62 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20   being used..
185e0 20 20 20 23 20 20 20 20 20 20 20 69 74 20 69 73     #       it is
185f0 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 74   necessary to at
18600 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69  tempt a conversi
18610 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c  on to the actual
18620 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20   enumerated..
18630 20 20 20 23 20 20 20 20 20 20 20 74 79 70 65 2e     #       type.
18640 20 20 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20    Failing that,
18650 74 68 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73  the check agains
18660 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61  t the default va
18670 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  lue will be..
18680 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70     #       skipp
18690 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ed...      #..
186a0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
186b0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72  ..        set er
186c0 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f  ror null; # IGNO
186d0 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f  RED....        o
186e0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69  bject invoke Uti
186f0 6c 69 74 79 20 54 72 79 50 61 72 73 65 46 6c 61  lity TryParseFla
18700 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20  gsEnum "" \..
18710 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
18720 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
18730 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
18740 73 20 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c  s "" $flags null 18750 20 74 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20 true \.. 18760 20 20 20 20 20 74 72 75 65 20 74 72 75 65 20 65 true true e 18770 72 72 6f 72 0d 0a 20 20 20 20 20 20 7d 20 76 61 rror.. } va 18780 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lue]} then {.. 18790 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 187a0 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 187b0 69 6e 67 20 74 6f 20 70 61 72 73 65 20 74 68 65 ing to parse the 187c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 connection flag 187d0 73 20 63 61 75 73 65 64 20 61 20 73 63 72 69 70 s caused a scrip 187e0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 187f0 20 20 20 65 72 72 6f 72 2e 20 20 45 6d 69 74 20 error. Emit 18800 61 20 77 61 72 6e 69 6e 67 20 74 6f 20 74 68 65 a warning to the 18810 20 74 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 61 test log file a 18820 6e 64 20 63 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 nd continue.. 18830 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 69 # usi 18840 6e 67 20 61 6e 20 65 6d 74 70 79 20 73 74 72 69 ng an emtpy stri 18850 6e 67 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 ng instead... 18860 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 18870 74 6c 6f 67 20 5b 61 70 70 65 6e 64 41 72 67 73 tlog [appendArgs 18880 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 18890 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 188a0 61 69 6c 65 64 20 74 6f 20 70 61 72 73 65 20 63 ailed to parse c 188b0 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c onnection flags, 188c0 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 error: " \.. 188d0 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 76 \n\t$v
188e0 61 6c 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  alue \n]....
188f0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 22 22      set value ""
18900 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
18910 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
18920 54 45 3a 20 49 66 20 74 68 65 20 63 6f 6d 62 69  TE: If the combi
18930 6e 65 64 20 66 6c 61 67 73 20 73 74 72 69 6e 67  ned flags string
18940 20 63 6f 75 6c 64 20 6e 6f 74 20 61 63 74 75 61   could not actua
18950 6c 6c 79 20 62 65 20 63 6f 6e 76 65 72 74 65 64  lly be converted
18960 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
18970 74 6f 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65  to the enumerate
18980 64 20 74 79 70 65 20 69 74 20 69 73 20 74 68 65  d type it is the
18990 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2c 20   default value,
189a0 74 68 65 6e 20 6a 75 73 74 20 75 73 65 0d 0a 20  then just use..
189b0 20 20 20 20 20 23 20 20 20 20 20 20 20 69 74 20       #       it
189c0 76 65 72 62 61 74 69 6d 3b 20 6f 74 68 65 72 77  verbatim; otherw
189d0 69 73 65 2c 20 6a 75 73 74 20 72 65 74 75 72 6e  ise, just return
189e0 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
189f0 2e 20 20 49 6e 20 74 68 61 74 0d 0a 20 20 20 20  .  In that..
18a00 20 20 23 20 20 20 20 20 20 20 63 61 73 65 2c 20    #       case,
18a10 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e  the default conn
18a20 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77 69 6c  ection flags wil
18a30 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  l be used...
18a40 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18a50 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 18a60 61 6c 75 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 76 alue] == 0 ||$v
18a70 61 6c 75 65 20 6e 65 20 22 44 65 66 61 75 6c 74  alue ne "Default
18a80 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  "} then {..
18a90 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
18aa0 57 41 52 4e 49 4e 47 3a 20 54 68 69 73 20 72 65  WARNING: This re
18ab0 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e 67  turns the string
18ac0 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63 6f   value of the co
18ad0 6d 62 69 6e 65 64 20 66 6c 61 67 73 2c 20 6e 6f  mbined flags, no
18ae0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
18af0 20 20 20 20 20 20 74 68 65 20 65 6e 75 6d 65 72        the enumer
18b00 61 74 65 64 20 76 61 6c 75 65 2e 20 20 54 68 69  ated value.  Thi
18b10 73 20 69 73 20 62 79 20 64 65 73 69 67 6e 20 61  s is by design a
18b20 6e 64 20 73 68 6f 75 6c 64 20 6e 6f 74 0d 0a 20  nd should not..
18b30 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
18b40 20 20 62 65 20 63 68 61 6e 67 65 64 20 77 69 74    be changed wit
18b50 68 6f 75 74 20 63 61 72 65 66 75 6c 20 63 6f 6e  hout careful con
18b60 73 69 64 65 72 61 74 69 6f 6e 20 28 65 2e 67 2e  sideration (e.g.
18b70 20 69 74 20 77 6f 75 6c 64 0d 0a 20 20 20 20 20   it would..
18b80 20 20 20 23 20 20 20 20 20 20 20 20 20 20 70 72     #          pr
18b90 65 76 65 6e 74 20 74 68 65 20 53 51 4c 69 74 65  event the SQLite
18ba0 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6c 61 73 73  Connection class
18bb0 20 66 72 6f 6d 20 61 6c 6c 6f 77 69 6e 67 20 69   from allowing i
18bc0 6e 76 61 6c 69 64 0d 0a 20 20 20 20 20 20 20 20  nvalid..
18bd0 23 20 20 20 20 20 20 20 20 20 20 5b 22 6d 61 67  #          ["mag
18be0 69 63 61 6c 22 5d 20 6d 65 74 61 2d 66 6c 61 67  ical"] meta-flag
18bf0 73 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  s)...        #..
18c00 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b          return [
18c10 61 70 70 65 6e 64 41 72 67 73 20 22 46 6c 61 67  appendArgs "Flag
18c20 73 3d 22 20 24 66 6c 61 67 73 20 5c 3b 5d 0d 0a  s=" $flags \;].. 18c30 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 18c40 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 18c50 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 18c60 65 74 54 65 73 74 50 72 6f 70 65 72 74 69 65 73 etTestProperties 18c70 20 7b 20 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 { {flags ""} {q 18c80 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d uiet false} } {. 18c90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 18ca0 23 20 4e 4f 54 45 3a 20 53 74 61 72 74 20 77 69 # NOTE: Start wi 18cb0 74 68 20 22 46 6c 61 67 73 22 20 70 72 6f 70 65 th "Flags" prope 18cc0 72 74 79 20 66 6f 72 20 74 68 65 20 6e 65 77 20 rty for the new 18cd0 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 69 66 20 61 connection, if a 18ce0 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ny... #.. 18cf0 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b set result [ 18d00 67 65 74 46 6c 61 67 73 50 72 6f 70 65 72 74 79 getFlagsProperty 18d10 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d$flags $quiet]. 18d20 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 18d30 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 # NOTE: Add th 18d40 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75 e name of the cu 18d50 72 72 65 6e 74 20 74 65 73 74 20 66 69 6c 65 2c rrent test file, 18d60 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 if available. 18d70 54 68 69 73 20 69 73 0d 0a 20 20 20 20 20 20 23 This is.. # 18d80 20 20 20 20 20 20 20 6f 6e 6c 79 20 75 73 65 64 only used 18d90 20 66 6f 72 20 64 65 62 75 67 67 69 6e 67 2e 0d for debugging.. 18da0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 18db0 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 18dc0 20 3a 3a 74 65 73 74 5f 66 69 6c 65 5d 7d 20 74 ::test_file]} t 18dd0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 18de0 70 70 65 6e 64 20 72 65 73 75 6c 74 20 54 65 73 ppend result Tes 18df0 74 46 69 6c 65 3d 20 24 3a 3a 74 65 73 74 5f 66 tFile=$::test_f
18e00 69 6c 65 20 5c 3b 0d 0a 20 20 20 20 20 20 7d 0d  ile \;..      }.
18e10 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
18e20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68    # NOTE: Add th
18e30 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75  e name of the cu
18e40 72 72 65 6e 74 20 74 65 73 74 2c 20 69 66 20 61  rrent test, if a
18e50 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 20  vailable.  This
18e60 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 23  is only..      #
18e70 20 20 20 20 20 20 20 75 73 65 64 20 66 6f 72 20         used for
18e80 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20  debugging...
18e90 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
18ea0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 61  info exists ::ea
18eb0 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e  gle_tests(Curren
18ec0 74 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  tName)]} then {.
18ed0 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20  .        append
18ee0 72 65 73 75 6c 74 20 54 65 73 74 4e 61 6d 65 3d  result TestName=
18ef0 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28   $::eagle_tests( 18f00 43 75 72 72 65 6e 74 4e 61 6d 65 29 20 5c 3b 0d CurrentName) \;. 18f10 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 18f20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
18f30 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
18f40 70 72 6f 63 20 65 6e 61 62 6c 65 53 68 61 72 65  proc enableShare
18f50 64 43 61 63 68 65 20 7b 20 63 68 61 6e 6e 65 6c  dCache { channel
18f60 20 65 6e 61 62 6c 65 20 7b 71 75 69 65 74 20 66   enable {quiet f
18f70 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
18f80 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
18f90 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
18fa0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
18fb0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
18fc0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
18fd0 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e  a.SQLite.UnsafeN
18fe0 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a  ativeMethods \..
18ff0 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
19000 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65  te3_enable_share
19010 64 5f 63 61 63 68 65 20 5b 65 78 70 72 20 69 6e  d_cache [expr in
19020 74 28 24 65 6e 61 62 6c 65 29 5d 0d 0a 20 20 20  t($enable)].. 19030 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 } result] == 19040 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 19050 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
19060 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
19070 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 19080 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 19090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 190a0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 190b0 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 _enable_shared_c 190c0 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c ache("$enable \
190d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
190e0 22 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73  ")... ok: " $res 190f0 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 19100 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 }.. } else 19110 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 19120 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
19130 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
19140 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 19150 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 19160 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 19170 6c 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 l sqlite3_enable 19180 5f 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 _shared_cache(" 19190 24 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20$enable \..
191a0 20 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 65           ")... e
191b0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65  rror: " \n\t $re 191c0 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 191d0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 191e0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 191f0 20 73 65 74 75 70 44 62 20 7b 0d 0a 20 20 20 20 setupDb {.. 19200 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 fileName 19210 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 61 74 65 {mode ""} {date 19220 54 69 6d 65 46 6f 72 6d 61 74 20 22 22 7d 20 7b TimeFormat ""} { 19230 64 61 74 65 54 69 6d 65 4b 69 6e 64 20 22 22 7d dateTimeKind ""} 19240 20 7b 66 6c 61 67 73 20 22 22 7d 0d 0a 20 20 20 {flags ""}.. 19250 20 20 20 20 20 20 20 20 20 7b 65 78 74 72 61 20 {extra 19260 22 22 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 ""} {qualify tru 19270 65 7d 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d e} {delete true} 19280 20 7b 75 72 69 20 66 61 6c 73 65 7d 0d 0a 20 20 {uri false}.. 19290 20 20 20 20 20 20 20 20 20 20 7b 74 65 6d 70 6f {tempo 192a0 72 61 72 79 20 74 72 75 65 7d 20 7b 76 61 72 4e rary true} {varN 192b0 61 6d 65 20 64 62 7d 20 7b 71 75 69 65 74 20 66 ame db} {quiet f 192c0 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 192d0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 192e0 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 : First, see if 192f0 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 our caller has r 19300 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d equested an in-m 19310 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d emory database.. 19320 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 19330 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 set isMemory [is 19340 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 MemoryDb$fileNa
19350 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  me]....      #..
19360 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
19370 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 20  r now, all test
19380 64 61 74 61 62 61 73 65 73 20 75 73 65 64 20 62  databases used b
19390 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65  y the test suite
193a0 20 61 72 65 20 70 6c 61 63 65 64 0d 0a 20 20 20   are placed..
193b0 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20     #       into
193c0 74 68 65 20 64 61 74 61 62 61 73 65 20 64 69 72  the database dir
193d0 65 63 74 6f 72 79 2e 20 20 45 61 63 68 20 64 61  ectory.  Each da
193e0 74 61 62 61 73 65 20 61 6e 64 20 72 65 6c 61 74  tabase and relat
193f0 65 64 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20  ed files..
19400 23 20 20 20 20 20 20 20 75 73 65 64 20 62 79 20  #       used by
19410 61 20 74 65 73 74 20 73 68 6f 75 6c 64 20 62 65  a test should be
19420 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79 20 74   cleaned up by t
19430 68 61 74 20 74 65 73 74 20 75 73 69 6e 67 20 74  hat test using t
19440 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
19450 20 20 22 63 6c 65 61 6e 75 70 44 62 22 20 70 72    "cleanupDb" pr
19460 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f 77 2e 0d  ocedure, below..
19470 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19480 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26  if {!$isMemory & 19490 26 20 24 71 75 61 6c 69 66 79 7d 20 74 68 65 6e &$qualify} then
194a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
194b0 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a  fileName [file j
194c0 6f 69 6e 20 5b 67 65 74 44 61 74 61 62 61 73 65  oin [getDatabase
194d0 44 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65  Directory] [file
194e0 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d   tail $fileName] 194f0 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 ].. }.... 19500 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 19510 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c OTE: By default, 19520 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d delete any pre- 19530 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 existing databas 19540 65 20 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 e with the same 19550 66 69 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 file.. # 19560 20 20 20 20 6e 61 6d 65 20 69 66 20 69 74 20 63 name if it c 19570 75 72 72 65 6e 74 6c 79 20 65 78 69 73 74 73 2e urrently exists. 19580 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 19590 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79 20 if {!$isMemory
195a0 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b 66  && $delete && [f 195b0 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
195c0 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
195d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
195e0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
195f0 74 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20  t to delete any
19600 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74  pre-existing dat
19610 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 73  abase with the s
19620 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 20  ame file..
19630 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 0d    #       name..
19640 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
19650 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
19660 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c  file delete $fil 19670 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 eName} error]} t 19680 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 19690 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 196a0 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 NOTE: We somehow 196b0 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 196c0 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f e the file, repo 196d0 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 196e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 196f0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
19700 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19710 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 19720 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 19730 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 19740 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 19750 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 ING: failed to d 19760 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20 66 elete database f 19770 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
19780 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
19790 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20       "\" during
197a0 73 65 74 75 70 2c 20 65 72 72 6f 72 3a 20 22 20  setup, error: "
197b0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 197c0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 197d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 197e0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 197f0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 19800 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 19810 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 19820 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 19830 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 19840 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 19850 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 er. The handle 19860 74 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61 to the opened da 19870 74 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73 tabase will be s 19880 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 tored there... 19890 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv 198a0 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 ar 1$varName db
198b0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
198c0 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 61 72 74     # NOTE: Start
198d0 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 63 6f   building the co
198e0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e  nnection string.
198f0 20 20 54 68 65 20 6f 6e 6c 79 20 72 65 71 75 69    The only requi
19900 72 65 64 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20  red portion..
19910 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68     #       of th
19920 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
19930 69 6e 67 20 69 73 20 74 68 65 20 64 61 74 61 20  ing is the data
19940 73 6f 75 72 63 65 2c 20 77 68 69 63 68 20 63 6f  source, which co
19950 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20  ntains the..
19960 20 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61    #       databa
19970 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 69 74 73  se file name its
19980 65 6c 66 2e 20 20 49 66 20 6f 75 72 20 63 61 6c  elf.  If our cal
19990 6c 65 72 20 77 61 6e 74 73 20 74 6f 20 75 73 65  ler wants to use
199a0 20 61 20 55 52 49 20 61 73 0d 0a 20 20 20 20 20   a URI as..
199b0 20 23 20 20 20 20 20 20 20 74 68 65 20 64 61 74   #       the dat
199c0 61 20 73 6f 75 72 63 65 2c 20 75 73 65 20 74 68  a source, use th
199d0 65 20 46 75 6c 6c 55 72 69 20 63 6f 6e 6e 65 63  e FullUri connec
199e0 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70  tion string prop
199f0 65 72 74 79 20 74 6f 0d 0a 20 20 20 20 20 20 23  erty to..      #
19a00 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74         prevent t
19a10 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 73  he data source s
19a20 74 72 69 6e 67 20 66 72 6f 6d 20 62 65 69 6e 67  tring from being
19a30 20 6d 61 6e 67 6c 65 64 2e 0d 0a 20 20 20 20 20   mangled...
19a40 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 75   #..      if {$u 19a50 72 69 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 ri} then {.. 19a60 20 20 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 set connecti 19a70 6f 6e 20 7b 46 75 6c 6c 55 72 69 3d 24 7b 66 69 on {FullUri=${fi
19a80 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 20 20  leName}}..
19a90 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
19aa0 20 20 73 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e    set connection
19ab0 20 7b 44 61 74 61 20 53 6f 75 72 63 65 3d 24 7b   {Data Source=${ 19ac0 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 20 20 20 fileName}}.. 19ad0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 19ae0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 # NOTE: Si 19af0 6e 63 65 20 74 68 69 73 20 70 72 6f 63 65 64 75 nce this procedu 19b00 72 65 20 68 61 73 20 6e 6f 20 73 70 65 63 69 61 re has no specia 19b10 6c 20 6b 6e 6f 77 6c 65 64 67 65 20 6f 66 20 77 l knowledge of w 19b20 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74 0d hat the default. 19b30 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 . # s 19b40 65 74 74 69 6e 67 20 69 73 20 66 6f 72 20 74 68 etting is for th 19b50 65 20 54 6f 46 75 6c 6c 50 61 74 68 20 63 6f 6e e ToFullPath con 19b60 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 nection string p 19b70 72 6f 70 65 72 79 2c 20 61 6c 77 61 79 73 0d 0a ropery, always.. 19b80 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 64 # ad 19b90 64 20 74 68 65 20 76 61 6c 75 65 20 77 65 20 6b d the value we k 19ba0 6e 6f 77 20 61 62 6f 75 74 20 74 6f 20 74 68 65 now about to the 19bb0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 connection stri 19bc0 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ng... #.. 19bd0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 19be0 63 74 69 6f 6e 20 7b 3b 54 6f 46 75 6c 6c 50 61 ction {;ToFullPa 19bf0 74 68 3d 24 7b 71 75 61 6c 69 66 79 7d 7d 0d 0a th=${qualify}}..
19c00 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
19c10 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
19c20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
19c30 20 61 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c   a journal mode,
19c40 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61   add the necessa
19c50 72 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20  ry portion..
19c60 20 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65    #       of the
19c70 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
19c80 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23  ng now...      #
19c90 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
19ca0 69 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65  ing length $mode 19cb0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 19cc0 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 19cd0 6e 6e 65 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e nnection {;Journ 19ce0 61 6c 20 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d al Mode=${mode}}
19cf0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
19d00 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
19d10 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65  TE: If our calle
19d20 72 20 73 70 65 63 69 66 69 65 64 20 61 20 44 61  r specified a Da
19d30 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2c 20 61  teTime format, a
19d40 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  dd the necessary
19d50 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
19d60 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63  portion of the c
19d70 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
19d80 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
19d90 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
19da0 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54 69  g length $dateTi 19db0 6d 65 46 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74 meFormat] > 0} t 19dc0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 19dd0 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection 19de0 20 7b 3b 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 {;DateTimeForma 19df0 74 3d 24 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d t=${dateTimeForm
19e00 61 74 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  at}}..      }...
19e10 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19e20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63  # NOTE: If our c
19e30 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 20  aller specified
19e40 61 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2c 20  a DateTimeKind,
19e50 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 61 72  add the necessar
19e60 79 20 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 20  y portion..
19e70 20 23 20 20 20 20 20 20 20 6f 66 20 74 68 65 20   #       of the
19e80 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
19e90 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d  g now...      #.
19ea0 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
19eb0 6e 67 20 6c 65 6e 67 74 68 20 24 64 61 74 65 54  ng length $dateT 19ec0 69 6d 65 4b 69 6e 64 5d 20 3e 20 30 7d 20 74 68 imeKind] > 0} th 19ed0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 en {.. ap 19ee0 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 pend connection 19ef0 7b 3b 44 61 74 65 54 69 6d 65 4b 69 6e 64 3d 24 {;DateTimeKind=$
19f00 7b 64 61 74 65 54 69 6d 65 4b 69 6e 64 7d 7d 0d  {dateTimeKind}}.
19f10 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
19f20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
19f30 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68  E: Figure out wh
19f40 61 74 20 74 68 65 20 66 69 6e 61 6c 20 66 6c 61  at the final fla
19f50 67 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e  gs for this conn
19f60 65 63 74 69 6f 6e 20 6e 65 65 64 20 74 6f 20 62  ection need to b
19f70 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
19f80 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65     set flags [ge
19f90 74 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  tConnectionFlags
19fa0 20 24 66 69 6c 65 4e 61 6d 65 20 24 66 6c 61 67   $fileName$flag
19fb0 73 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20  s $quiet].... 19fc0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 19fd0 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 TE: If our calle 19fe0 72 20 73 70 65 63 69 66 69 65 64 20 73 6f 6d 65 r specified some 19ff0 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f SQLiteConnectio 1a000 6e 46 6c 61 67 73 2c 20 61 64 64 20 74 68 65 0d nFlags, add the. 1a010 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e . # n 1a020 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e ecessary portion 1a030 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 of the connecti 1a040 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a on string now... 1a050 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1a060 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 1a070 68 20 24 66 6c 61 67 73 5d 20 3e 20 30 7d 20 74 h$flags] > 0} t
1a080 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
1a090 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
1a0a0 20 7b 3b 46 6c 61 67 73 3d 24 7b 66 6c 61 67 73   {;Flags=${flags 1a0b0 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 1a0c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1a0d0 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 63 61 6c NOTE: If our cal 1a0e0 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 6e ler specified an 1a0f0 20 65 78 74 72 61 20 70 61 79 6c 6f 61 64 20 74 extra payload t 1a100 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e o the connection 1a110 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1a120 73 74 72 69 6e 67 2c 20 61 70 70 65 6e 64 20 69 string, append i 1a130 74 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d t now... #. 1a140 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 1a150 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 72 61 ng length$extra
1a160 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1a170 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f         append co
1a180 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24 65 78 74  nnection \; $ext 1a190 72 61 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ra.. }.... 1a1a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1a1b0 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 6e 61 NOTE: Add the na 1a1c0 6d 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e me of the curren 1a1d0 74 20 74 65 73 74 20 66 69 6c 65 2c 20 69 66 20 t test file, if 1a1e0 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73 available. This 1a1f0 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 is.. # 1a200 20 20 20 6f 6e 6c 79 20 75 73 65 64 20 66 6f 72 only used for 1a210 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20 debugging... 1a220 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1a230 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 1a240 65 73 74 5f 66 69 6c 65 5d 7d 20 74 68 65 6e 20 est_file]} then 1a250 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e {.. appen 1a260 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 d connection {;T 1a270 65 73 74 46 69 6c 65 3d 24 7b 3a 3a 74 65 73 74 estFile=${::test
1a280 5f 66 69 6c 65 7d 7d 0d 0a 20 20 20 20 20 20 7d  _file}}..      }
1a290 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
1a2a0 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74     # NOTE: Add t
1a2b0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63  he name of the c
1a2c0 75 72 72 65 6e 74 20 74 65 73 74 2c 20 69 66 20  urrent test, if
1a2d0 61 76 61 69 6c 61 62 6c 65 2e 20 20 54 68 69 73  available.  This
1a2e0 20 69 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20   is only..
1a2f0 23 20 20 20 20 20 20 20 75 73 65 64 20 66 6f 72  #       used for
1a300 20 64 65 62 75 67 67 69 6e 67 2e 0d 0a 20 20 20   debugging...
1a310 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
1a320 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65  [info exists ::e
1a330 61 67 6c 65 5f 74 65 73 74 73 28 43 75 72 72 65  agle_tests(Curre
1a340 6e 74 4e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b  ntName)]} then {
1a350 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e 64  ..        append
1a360 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 65   connection {;Te
1a370 73 74 4e 61 6d 65 3d 24 7b 3a 3a 65 61 67 6c 65  stName=${::eagle 1a380 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e 61 _tests(CurrentNa 1a390 6d 65 29 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a me)}}.. }.. 1a3a0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1a3b0 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 63 6c 61 # NOTE: For cla 1a3c0 72 69 74 79 2c 20 61 70 70 65 6e 64 20 61 20 66 rity, append a f 1a3d0 69 6e 61 6c 20 73 65 6d 69 63 6f 6c 6f 6e 20 74 inal semicolon t 1a3e0 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e o the connection 1a3f0 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 1a400 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 #.. append 1a410 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 0d 0a 0d connection \;... 1a420 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1a430 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65 # NOTE: Open the 1a440 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec 1a450 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e tion now, placin 1a460 67 20 74 68 65 20 6f 70 61 71 75 65 20 68 61 6e g the opaque han 1a470 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 dle value.. 1a480 20 23 20 20 20 20 20 20 20 69 6e 74 6f 20 74 68 # into th 1a490 65 20 76 61 72 69 61 62 6c 65 20 73 70 65 63 69 e variable speci 1a4a0 66 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c fied by our call 1a4b0 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. 1a4c0 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20 set db [sql 1a4d0 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74 open -type SQLit 1a4e0 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63 e [subst$connec
1a4f0 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  tion]]....
1a500 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
1a510 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 74   Configure the t
1a520 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
1a530 72 79 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79  ry for the newly
1a540 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65   opened database
1a550 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1a560 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 20 75  connection now u
1a570 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c 6c 65 72  nless our caller
1a580 20 66 6f 72 62 69 64 73 20 69 74 2e 0d 0a 20 20   forbids it...
1a590 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1a5a0 7b 24 74 65 6d 70 6f 72 61 72 79 20 26 26 20 21  {$temporary && ! 1a5b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1a5c0 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 79 44 69 o(setTemporaryDi 1a5d0 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20 rectory)]} then 1a5e0 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 6c 20 65 {.. sql e 1a5f0 78 65 63 75 74 65 20 24 64 62 20 5b 61 70 70 65 xecute$db [appe
1a600 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
1a610 20 20 20 20 20 20 22 50 52 41 47 4d 41 20 74 65        "PRAGMA te
1a620 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
1a630 72 79 20 3d 20 5c 22 22 20 5b 67 65 74 54 65 6d  ry = \"" [getTem
1a640 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 5d  poraryDirectory]
1a650 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d   \"\;]..      }.
1a660 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1a670 20 20 23 20 4e 4f 54 45 3a 20 50 65 72 66 6f 72    # NOTE: Perfor
1a680 6d 20 61 6e 79 20 65 78 74 72 61 20 70 65 72 2d  m any extra per-
1a690 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65 74 75 70  connection setup
1a6a0 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 6f   for the newly o
1a6b0 70 65 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20  pened..      #
1a6c0 20 20 20 20 20 64 61 74 61 62 61 73 65 20 6e 6f       database no
1a6d0 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c  w unless our cal
1a6e0 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d  ler forbids it..
1a6f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1a700 73 65 74 20 65 78 65 63 75 74 65 4f 6e 53 65 74  set executeOnSet
1a710 75 70 20 5b 67 65 74 45 78 65 63 75 74 65 4f 6e  up [getExecuteOn
1a720 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20 20 20 20  Setup]....
1a730 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
1a740 74 68 20 24 65 78 65 63 75 74 65 4f 6e 53 65 74  th $executeOnSet 1a750 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 up] > 0 && \.. 1a760 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 ![info e 1a770 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 75 xists ::no(execu 1a780 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 74 68 65 teOnSetup)]} the 1a790 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 1a7a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1a7b0 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 This command may 1a7c0 20 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3b raise an error; 1a7d0 20 69 66 20 73 6f 2c 20 74 68 61 74 20 69 73 20 if so, that is 1a7e0 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 20 20 20 fine, as.. 1a7f0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 65 6e # the en 1a800 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 77 69 6c closing test wil 1a810 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 20 54 68 l then fail. Th 1a820 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d 6d 61 6e e [subst] comman 1a830 64 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 d is.. # 1a840 20 20 20 20 20 20 75 73 65 64 20 6f 6e 20 74 68 used on th 1a850 65 20 53 51 4c 20 69 6e 20 63 61 73 65 20 69 74 e SQL in case it 1a860 20 6e 65 65 64 73 20 74 6f 20 72 65 66 65 72 20 needs to refer 1a870 74 6f 20 73 74 61 74 65 20 69 6e 20 6f 75 72 0d to state in our. 1a880 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1a890 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20 context... 1a8a0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 71 #.. sq 1a8b0 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 73 l execute$db [s
1a8c0 75 62 73 74 20 24 65 78 65 63 75 74 65 4f 6e 53  ubst $executeOnS 1a8d0 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a etup].. }.. 1a8e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1a8f0 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 79 73 20 # NOTE: Always 1a900 72 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 6e 65 return the conne 1a910 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 75 70 6f ction handle upo 1a920 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 20 20 20 n success... 1a930 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 #.. retur 1a940 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d 0a 0c 0d n$db..    }....
1a950 0a 20 20 20 20 70 72 6f 63 20 67 65 74 44 62 43  .    proc getDbC
1a960 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72  onnection { {var
1a970 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20  Name db} } {..
1a980 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1a990 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
1a9a0 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
1a9b0 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29  able (e.g. "db")
1a9c0 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20   in the context
1a9d0 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20  of our..      #
1a9e0 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54        caller.  T
1a9f0 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65  he handle to the
1aa00 20 64 61 74 61 62 61 73 65 20 70 72 65 76 69 6f   database previo
1aa10 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 61 20  usly opened via
1aa20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  the..      #
1aa30 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 72 6f     [setupDb] pro
1aa40 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 62 65  cedure should be
1aa50 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a   stored there...
1aa60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75        #..      u
1aa70 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 1aa80 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 db.... #.. 1aa90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 1aaa0 73 20 72 65 74 75 72 6e 73 20 74 68 65 20 41 44 s returns the AD 1aab0 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e 65 63 74 O.NET IDbConnect 1aac0 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 ion object insta 1aad0 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 nce for the.. 1aae0 20 20 20 23 20 20 20 20 20 20 20 73 70 65 63 69 # speci 1aaf0 66 69 65 64 20 64 61 74 61 62 73 65 20 68 61 6e fied databse han 1ab00 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 65 74 74 dle. Since gett 1ab10 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 63 74 20 ing this object 1ab20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a 20 20 20 relies upon.. 1ab30 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 # Eagle 1ab40 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 72 65 61 internals, grea 1ab50 74 20 63 61 72 65 20 73 68 6f 75 6c 64 20 62 65 t care should be 1ab60 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f 69 64 20 taken to avoid 1ab70 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d 0a 20 20 disposing of.. 1ab80 20 20 20 20 23 20 20 20 20 20 20 20 74 68 69 73 # this 1ab90 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 68 65 72 object or other 1aba0 77 69 73 65 20 70 75 74 74 69 6e 67 20 69 74 20 wise putting it 1abb0 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c 69 64 20 into an invalid 1abc0 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d state... #. 1abd0 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 1abe0 20 65 78 69 73 74 73 20 64 62 5d 7d 20 74 68 65 exists db]} the 1abf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 1ac00 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1ac10 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 1ac20 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 1ac30 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61 67 blic -objectflag 1ac40 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 2d 61 6c s +NoDispose -al 1ac50 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ias \.. 1ac60 20 20 20 20 20 49 6e 74 65 72 70 72 65 74 65 72 Interpreter 1ac70 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e 65 .GetActive.conne 1ac80 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 64 62 0d ctions Item$db.
1ac90 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c  .        } resul
1aca0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
1acb0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1acc0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1acd0 53 75 63 63 65 73 73 2c 20 72 65 74 75 72 6e 20  Success, return
1ace0 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63  the opaque objec
1acf0 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20  t handle...
1ad00 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1ad10 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 1ad20 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 1ad30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 1ad40 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1ad50 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65 70 6f E: Failure, repo 1ad60 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 rt why... 1ad70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1ad80 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1ad90 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1ada0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1adb0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
1adc0 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74 20  : failed to get
1add0 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c  connection handl
1ade0 65 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 5c  e for database \
1adf0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
1ae00 20 20 20 20 24 64 62 20 22 5c 22 2c 20 65 72 72      $db "\", err 1ae10 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 or: " \n\t$resu
1ae20 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
1ae30 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
1ae40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
1ae50 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 65  OTE: Failure, re
1ae60 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f 75 73 6c  turn an obviousl
1ae70 79 20 69 6e 76 61 6c 69 64 20 6f 70 61 71 75 65  y invalid opaque
1ae80 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d   object handle..
1ae90 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
1aea0 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d  return ""..    }
1aeb0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 66 72  .....    proc fr
1aec0 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b  eeDbConnection {
1aed0 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63   {varName connec
1aee0 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  tion} } {..
1aef0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1af00 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
1af10 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
1af20 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74  e (e.g. "connect
1af30 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d 0a 20 20  ion") in the..
1af40 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74      #       cont
1af50 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65  ext of our calle
1af60 72 2e 20 20 54 68 65 20 6f 70 61 71 75 65 20 6f  r.  The opaque o
1af70 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 6f 72  bject handle for
1af80 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20   an ADO.NET..
1af90 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65     #       conne
1afa0 63 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79  ction previously
1afb0 20 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65   returned by [ge
1afc0 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73  tDbConnection] s
1afd0 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20 20 20 20  hould be..
1afe0 23 20 20 20 20 20 20 20 73 74 6f 72 65 64 20 74  #       stored t
1aff0 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  here...      #..
1b000 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76        upvar 1 $v 1b010 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f arName connectio 1b020 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 n.... #.. 1b030 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 1b040 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 mpt to remove th 1b050 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 e opaque object 1b060 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 handle from the 1b070 69 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 interpreter.. 1b080 20 20 20 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 # now. 1b090 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 This [object di 1b0a0 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c spose] call will 1b0b0 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 64 69 not actually di 1b0c0 73 70 6f 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 spose of the.. 1b0d0 20 20 20 20 23 20 20 20 20 20 20 20 75 6e 64 65 # unde 1b0e0 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 rlying object be 1b0f0 63 61 75 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 cause the +NoDis 1b100 70 6f 73 65 20 66 6c 61 67 20 77 61 73 20 73 65 pose flag was se 1b110 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 t on it.. # 1b120 20 20 20 20 20 20 20 64 75 72 69 6e 67 20 63 72 during cr 1b130 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 eation of the op 1b140 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 aque object hand 1b150 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 le... #.. 1b160 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 1b170 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d ists connection] 1b180 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1b190 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 [catch {object 1b1a0 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 dispose$connect
1b1b0 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  ion} error]} the
1b1c0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
1b1d0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1b1e0 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
1b1f0 64 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20  d to remove the
1b200 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72 74 20 77  handle, report w
1b210 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  hy...        #..
1b220 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1b230 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1b240 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1b250 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 "==== W 1b260 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 ARNING: failed t 1b270 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 o remove connect 1b280 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 ion handle \""$
1b290 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20  connection \..
1b2a0 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 65            "\", e
1b2b0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1b2c0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d ror \n].. } 1b2d0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1b2e0 70 72 6f 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 proc addDbConnec 1b2f0 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f tion { connectio 1b300 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d n {varName db} } 1b310 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1b320 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 # NOTE: Refer 1b330 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 to the specifie 1b340 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e d variable (e.g. 1b350 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f "db") in the co 1b360 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 ntext of our.. 1b370 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c # call 1b380 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 er... #.. 1b390 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
1b3a0 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20  Name db....
1b3b0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1b3c0 3a 20 43 72 65 61 74 65 20 61 20 63 6f 72 72 65  : Create a corre
1b3d0 63 74 6c 79 20 66 6f 72 6d 61 74 74 65 64 20 6e  ctly formatted n
1b3e0 61 6d 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ame for the data
1b3f0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection
1b400 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  to..      #
1b410 20 20 62 65 20 61 64 64 65 64 20 74 6f 20 74 68    be added to th
1b420 65 20 6c 69 73 74 20 6d 61 6e 61 67 65 64 20 62  e list managed b
1b430 79 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65  y the Eagle inte
1b440 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20  rpreter...
1b450 23 0d 0a 20 20 20 20 20 20 73 65 74 20 64 62 20  #..      set db
1b460 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d  [object invoke -
1b470 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
1b480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 45 61   \..          Ea
1b490 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e  gle._Components.
1b4a0 50 72 69 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70  Private.FormatOp
1b4b0 73 20 44 61 74 61 62 61 73 65 4f 62 6a 65 63 74  s DatabaseObject
1b4c0 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  Name $connection 1b4d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51 \.. SQ 1b4e0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b LiteConnection [ 1b4f0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e object invoke In 1b500 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 1b510 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a ive NextId]].... 1b520 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1b530 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 64 NOTE: Add the d 1b540 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 atabase connecti 1b550 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f on provided by o 1b560 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 ur caller to the 1b570 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 23 20 20 list.. # 1b580 20 20 20 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e of those kn 1b590 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 6c 65 own to the Eagle 1b5a0 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 1b5b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 #.. ob 1b5c0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 1b5d0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e gs +NonPublic In 1b5e0 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 1b5f0 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 ive.connections 1b600 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 Add \.. 1b610 20 24 64 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e$db $connection 1b620 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 1b630 70 72 6f 63 20 72 65 6d 6f 76 65 44 62 54 72 61 proc removeDbTra 1b640 6e 73 61 63 74 69 6f 6e 20 7b 20 74 72 61 6e 73 nsaction { trans 1b650 61 63 74 69 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 action } {.. 1b660 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b670 45 3a 20 52 65 6d 6f 76 65 20 74 68 65 20 64 61 E: Remove the da 1b680 74 61 62 61 73 65 20 74 72 61 6e 73 61 63 74 69 tabase transacti 1b690 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f on provided by o 1b6a0 75 72 20 63 61 6c 6c 65 72 20 66 72 6f 6d 20 74 ur caller from t 1b6b0 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 he.. # 1b6c0 20 20 6c 69 73 74 20 6f 66 20 74 68 6f 73 65 20 list of those 1b6d0 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 67 known to the Eag 1b6e0 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d le interpreter.. 1b6f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1b700 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 1b710 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 1b720 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 Interpreter.GetA 1b730 63 74 69 76 65 2e 74 72 61 6e 73 61 63 74 69 6f ctive.transactio 1b740 6e 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ns \.. 1b750 52 65 6d 6f 76 65 20 24 74 72 61 6e 73 61 63 74 Remove$transact
1b760 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ion..    }.....
1b770 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46     proc getRowsF
1b780 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64  romDataTable { d
1b790 61 74 61 54 61 62 6c 65 20 7b 76 61 6c 75 65 43  ataTable {valueC
1b7a0 61 6c 6c 62 61 63 6b 20 22 22 7d 20 7d 20 7b 0d  allback ""} } {.
1b7b0 0a 20 20 20 20 20 20 73 65 74 20 72 6f 77 73 20  .      set rows
1b7c0 5b 6c 69 73 74 5d 0d 0a 20 20 20 20 20 20 73 65  [list]..      se
1b7d0 74 20 63 6f 75 6e 74 20 5b 24 64 61 74 61 54 61  t count [$dataTa 1b7e0 62 6c 65 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e ble Columns.Coun 1b7f0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 t].... for 1b800 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 {set index 0} {$
1b810 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20  index < $count} 1b820 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a {incr index} {.. 1b830 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 set data 1b840 43 6f 6c 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 Column [$dataTab
1b850 6c 65 20 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e  le -alias Column
1b860 73 2e 67 65 74 5f 49 74 65 6d 20 24 69 6e 64 65  s.get_Item $inde 1b870 78 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 x].. set 1b880 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20 5b 24 names($index) [$1b890 64 61 74 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d dataColumn Colum 1b8a0 6e 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d nName].. }. 1b8b0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1b8c0 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70 20 # NOTE: Setup 1b8d0 73 6f 6d 65 20 54 63 6c 20 72 65 74 75 72 6e 20 some Tcl return 1b8e0 63 6f 64 65 20 63 6f 6e 73 74 61 6e 74 73 2e 0d code constants.. 1b8f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1b900 73 65 74 20 4f 6b 20 30 3b 20 73 65 74 20 45 72 set Ok 0; set Er 1b910 72 6f 72 20 31 3b 20 73 65 74 20 52 65 74 75 72 ror 1; set Retur 1b920 6e 20 32 3b 20 73 65 74 20 42 72 65 61 6b 20 33 n 2; set Break 3 1b930 3b 20 73 65 74 20 43 6f 6e 74 69 6e 75 65 20 34 ; set Continue 4 1b940 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 .... object 1b950 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 foreach -alias 1b960 64 61 74 61 52 6f 77 20 5b 73 65 74 20 64 61 74 dataRow [set dat 1b970 61 52 6f 77 73 20 5b 24 64 61 74 61 54 61 62 6c aRows [$dataTabl
1b980 65 20 52 6f 77 73 5d 5d 20 7b 0d 0a 20 20 20 20  e Rows]] {..
1b990 20 20 20 20 73 65 74 20 72 6f 77 20 5b 6c 69 73      set row [lis
1b9a0 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f  t]....        fo
1b9b0 72 20 7b 73 65 74 20 69 6e 64 65 78 20 30 7d 20  r {set index 0}
1b9c0 7b 24 69 6e 64 65 78 20 3c 20 24 63 6f 75 6e 74  {$index <$count
1b9d0 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b  } {incr index} {
1b9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1b9f0 76 61 6c 75 65 20 5b 24 64 61 74 61 52 6f 77 20  value [$dataRow 1ba00 2d 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 67 -create -alias g 1ba10 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d et_Item$index].
1ba20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
1ba30 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
1ba40 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 5d 20  $valueCallback] 1ba50 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 1ba60 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 set cod 1ba70 65 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 e [catch {.. 1ba80 20 20 20 20 20 20 20 20 20 20 24 76 61 6c 75 65$value
1ba90 43 61 6c 6c 62 61 63 6b 20 24 64 61 74 61 54 61  Callback $dataTa 1baa0 62 6c 65 20 24 64 61 74 61 52 6f 77 20 24 69 6e ble$dataRow $in 1bab0 64 65 78 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 dex$value..
1bac0 20 20 20 20 20 20 20 20 7d 20 6e 65 77 56 61 6c          } newVal
1bad0 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue]....
1bae0 20 20 20 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20     if {$code == 1baf0 24 4f 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20$Ok} then {..
1bb00 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1bb10 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1bb20 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
1bb30 69 66 69 65 64 20 28 6e 65 77 3f 29 20 72 6f 77  ified (new?) row
1bb40 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20   value...
1bb50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1bb60 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
1bb70 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73  row [list $names 1bb80 28 24 69 6e 64 65 78 29 20 24 6e 65 77 56 61 6c ($index) $newVal 1bb90 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ue].. 1bba0 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 } elseif {$code
1bbb0 20 3d 3d 20 24 45 72 72 6f 72 7d 20 74 68 65 6e   == $Error} then 1bbc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1bbd0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1bbe0 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 # NOTE: Use t 1bbf0 68 65 20 28 6e 65 77 3f 29 20 4e 55 4c 4c 20 72 he (new?) NULL r 1bc00 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 ow value... 1bc10 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1bc20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 1bc30 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d d row [list$nam
1bc40 65 73 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20  es($index)].. 1bc50 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei 1bc60 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 52 65 74 f {$code == $Ret 1bc70 75 72 6e 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 urn} then {.. 1bc80 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1bc90 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1bca0 54 45 3a 20 53 6b 69 70 20 72 65 6d 61 69 6e 69 TE: Skip remaini 1bcb0 6e 67 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68 ng values for th 1bcc0 69 73 20 72 6f 77 2e 0d 0a 20 20 20 20 20 20 20 is row... 1bcd0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1bce0 20 20 20 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 break.. 1bcf0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1bd00 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 42 eif {$code == $B 1bd10 72 65 61 6b 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 reak} then {.. 1bd20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1bd30 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 1bd40 4f 54 45 3a 20 53 6b 69 70 20 70 72 6f 63 65 73 OTE: Skip proces 1bd50 73 69 6e 67 20 74 68 69 73 20 72 6f 77 20 76 61 sing this row va 1bd60 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 lue... 1bd70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1bd80 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f } elseif {$co
1bd90 64 65 20 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d  de == $Continue} 1bda0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1bdb0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1bdc0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1bdd0 55 73 65 20 64 65 66 61 75 6c 74 20 72 6f 77 20 Use default row 1bde0 76 61 6c 75 65 20 68 61 6e 64 6c 69 6e 67 2e 0d value handling.. 1bdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1be00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1be10 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 1be20 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1be30 20 73 65 74 20 63 6f 64 65 20 24 43 6f 6e 74 69 set code$Conti
1be40 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  nue..          }
1be50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
1be60 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 6f 6e 74   {$code ==$Cont
1be70 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  inue} then {..
1be80 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
1be90 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61  tring length $va 1bea0 6c 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 lue] > 0 && \.. 1beb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! 1bec0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 [object invoke C 1bed0 6f 6e 76 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 onvert IsDBNull 1bee0 24 76 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d$value]} then {.
1bef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c  .              l
1bf00 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74  append row [list
1bf10 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 20   $names($index)
1bf20 5b 24 76 61 6c 75 65 20 54 6f 53 74 72 69 6e 67  [$value ToString 1bf30 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ]].. 1bf40 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 1bf50 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 lappend 1bf60 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 row [list$names
1bf70 28 24 69 6e 64 65 78 29 5d 0d 0a 20 20 20 20 20  ($index)].. 1bf80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1bf90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1bfa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 .... lapp 1bfb0 65 6e 64 20 72 6f 77 73 20 24 72 6f 77 0d 0a 20 end rows$row..
1bfc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1bfd0 72 65 74 75 72 6e 20 24 72 6f 77 73 0d 0a 20 20  return $rows.. 1bfe0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1bff0 20 64 75 6d 70 52 6f 77 73 46 72 6f 6d 44 61 74 dumpRowsFromDat 1c000 61 54 61 62 6c 65 20 7b 20 63 68 61 6e 6e 65 6c aTable { channel 1c010 20 72 6f 77 73 20 7d 20 7b 0d 0a 20 20 20 20 20 rows } {.. 1c020 20 73 65 74 20 73 65 71 75 65 6e 63 65 20 31 0d set sequence 1. 1c030 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 ... foreach 1c040 20 72 6f 77 20 24 72 6f 77 73 20 7b 0d 0a 20 20 row$rows {..
1c050 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1c060 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 1c070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c080 5b 65 78 70 72 20 7b 24 73 65 71 75 65 6e 63 65 [expr {$sequence
1c090 20 3e 20 31 20 3f 20 22 5c 6e 22 20 3a 20 22 22   > 1 ? "\n" : ""
1c0a0 7d 5d 20 22 2d 2d 2d 2d 20 52 4f 57 20 23 22 20  }] "---- ROW #"
1c0b0 24 73 65 71 75 65 6e 63 65 20 3a 5c 6e 5d 0d 0a  $sequence :\n].. 1c0c0 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 .. foreac 1c0d0 68 20 70 61 69 72 20 24 72 6f 77 20 7b 0d 0a 20 h pair$row {..
1c0e0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c           if {[ll
1c0f0 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3e 3d 20  ength $pair] >= 1c100 32 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 2} then {.. 1c110 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
1c120 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1c130 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  s \t \..
1c140 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b 6c          [list [l
1c150 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d 20  index $pair 0]] 1c160 22 3a 20 22 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 ": " [list [lind 1c170 65 78 20 24 70 61 69 72 20 31 5d 5d 20 5c 6e 5d ex$pair 1]] \n]
1c180 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
1c190 73 65 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24  seif {[llength $1c1a0 70 61 69 72 5d 20 3d 3d 20 31 7d 20 74 68 65 6e pair] == 1} then 1c1b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c1c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
1c1d0 61 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d  appendArgs \t \.
1c1e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c1f0 20 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24   [list [lindex $1c200 70 61 69 72 20 30 5d 5d 20 22 3a 20 3c 6e 75 6c pair 0]] ": <nul 1c210 6c 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 l>\n"].. 1c220 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1c230 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1c240 68 61 6e 6e 65 6c 20 5c 74 3c 65 6d 70 74 79 3e  hannel \t<empty>
1c250 5c 6e 3b 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 64  \n; # NOTE: No d
1c260 61 74 61 3f 0d 0a 20 20 20 20 20 20 20 20 20 20  ata?..
1c270 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
1c280 20 20 20 20 20 20 20 20 69 6e 63 72 20 73 65 71          incr seq
1c290 75 65 6e 63 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  uence..      }..
1c2a0 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1c2b0 6f 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66  oc cleanupDb { f
1c2c0 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65  ileName {varName
1c2d0 20 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72   db} {collect tr
1c2e0 75 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75  ue} {qualify tru
1c2f0 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e}..
1c300 20 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65           {delete
1c310 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
1c320 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1c330 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
1c340 72 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20  rce all pending
1c350 22 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74  "garbage" object
1c360 73 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65  s to be collecte
1c370 64 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  d,..      #
1c380 20 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69    including SQLi
1c390 74 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e  te statements an
1c3a0 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73  d backup objects
1c3b0 3b 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c  ; this should al
1c3c0 6c 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20  low..      #
1c3d0 20 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e     the underlyin
1c3e0 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  g database file
1c3f0 74 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a  to be deleted...
1c400 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
1c410 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65  f {$collect} the 1c420 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c n {.. col 1c430 6c 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 lectGarbage$::t
1c440 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20  est_channel..
1c450 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
1c460 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52  .      # NOTE: R
1c470 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63  efer to the spec
1c480 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28  ified variable (
1c490 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68  e.g. "db") in th
1c4a0 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72  e context of our
1c4b0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1c4c0 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e  caller.  The han
1c4d0 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62  dle to the datab
1c4e0 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f  ase previously o
1c4f0 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20  pened via the..
1c500 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65       #       [se
1c510 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65  tupDb] procedure
1c520 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65   should be store
1c530 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  d there...
1c540 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
1c550 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a   $varName db.... 1c560 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1c570 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 NOTE: Close the 1c580 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 connection to t 1c590 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e he database now. 1c5a0 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c This should al 1c5b0 6c 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 low us.. # 1c5c0 20 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 to delete 1c5d0 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 the underlying d 1c5e0 61 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 atabase file... 1c5f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1c600 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 {[info exists d 1c610 62 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 b] && [catch {sq 1c620 6c 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 l close$db} err
1c630 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
1c640 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1c650 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
1c660 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f  ow failed to clo
1c670 73 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c  se the database,
1c680 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20   report why...
1c690 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1c6a0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1c6b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1c6c0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1c6d0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1c6e0 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 failed to close 1c6f0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 database \""$d
1c700 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20  b "\", error: "
1c710 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c  \..            \
1c720 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 1c730 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1c740 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1c750 3a 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 : First, see if 1c760 6f 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 our caller has r 1c770 65 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d equested an in-m 1c780 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d emory database.. 1c790 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1c7a0 73 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 set isMemory [is 1c7b0 4d 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 MemoryDb$fileNa
1c7c0 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  me]....      #..
1c7d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
1c7e0 69 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74  ild the full pat
1c7f0 68 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  h to the databas
1c800 65 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f  e file name.  Fo
1c810 72 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d  r now, all test.
1c820 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
1c830 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72  atabase files ar
1c840 65 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20  e stored in the
1c850 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
1c860 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ory...      #..
1c870 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem 1c880 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d ory &&$qualify}
1c890 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c8a0 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
1c8b0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
1c8c0 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory]
1c8d0 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65  [file tail $file 1c8e0 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d Name]].. }. 1c8f0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1c900 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1c910 69 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c if the file stil 1c920 6c 20 65 78 69 73 74 73 3b 20 69 6e 69 74 69 61 l exists; initia 1c930 6c 6c 79 2c 20 61 73 73 75 6d 65 20 61 6c 6c 20 lly, assume all 1c940 66 69 6c 65 73 20 77 69 6c 6c 0d 0a 20 20 20 20 files will.. 1c950 20 20 23 20 20 20 20 20 20 20 62 65 20 64 65 6c # be del 1c960 65 74 65 64 20 73 75 63 63 65 73 73 66 75 6c 6c eted successfull 1c970 79 2c 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e y, if necessary. 1c980 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1c990 20 73 65 74 20 73 75 63 63 65 73 73 20 74 72 75 set success tru 1c9a0 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 e.... if {! 1c9b0 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65$isMemory && $de 1c9c0 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 lete && [file ex 1c9d0 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d ists$fileName]}
1c9e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1c9f0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1ca00 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e  TE: Skip deletin
1ca10 67 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  g database files
1ca20 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74   if somebody set
1ca30 73 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20  s the global..
1ca40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61        #       va
1ca50 72 69 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e  riable to preven
1ca60 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23  t it...        #
1ca70 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
1ca80 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1ca90 28 63 6c 65 61 6e 75 70 44 62 46 69 6c 65 73 29  (cleanupDbFiles)
1caa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1cab0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1cac0 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70    # NOTE: Attemp
1cad0 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  t to delete the
1cae0 74 65 73 74 20 57 41 4c 20 66 69 6c 65 2c 20 69  test WAL file, i
1caf0 66 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20 20 20  f any, now...
1cb00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1cb10 20 20 20 20 73 65 74 20 77 61 6c 46 69 6c 65 4e      set walFileN
1cb20 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20  ame [appendArgs
1cb30 24 66 69 6c 65 4e 61 6d 65 20 2d 77 61 6c 5d 0d  $fileName -wal]. 1cb40 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1cb50 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 77 {[file exists$w
1cb60 61 6c 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  alFileName]} the
1cb70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1cb80 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1cb90 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65  # NOTE: If there
1cba0 20 69 73 20 61 20 57 41 4c 20 66 69 6c 65 2c 20   is a WAL file,
1cbb0 69 74 20 73 68 6f 75 6c 64 20 62 65 20 7a 65 72  it should be zer
1cbc0 6f 20 62 79 74 65 73 20 61 74 20 74 68 69 73 0d  o bytes at this.
1cbd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20  .            #
1cbe0 20 20 20 20 20 70 6f 69 6e 74 2e 0d 0a 20 20 20       point...
1cbf0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1cc00 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74          if {[set
1cc10 20 73 69 7a 65 20 5b 66 69 6c 65 20 73 69 7a 65   size [file size
1cc20 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 5d 5d 20   $walFileName]] 1cc30 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 1cc40 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1cc50 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 1cc60 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 OTE: We somehow 1cc70 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 failed to delete 1cc80 20 74 68 65 20 57 41 4c 20 66 69 6c 65 2c 20 72 the WAL file, r 1cc90 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 1cca0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1ccb0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 1ccc0 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 catch {file dele 1ccd0 74 65 20 24 77 61 6c 46 69 6c 65 4e 61 6d 65 7d te$walFileName}
1cce0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
1ccf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1cd00 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1cd10 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1cd20 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1cd30 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1cd40 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1cd50 74 6f 20 64 65 6c 65 74 65 20 57 41 4c 20 66 69 to delete WAL fi 1cd60 6c 65 20 5c 22 22 20 24 77 61 6c 46 69 6c 65 4e le \""$walFileN
1cd70 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
1cd80 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
1cd90 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65  uring cleanup, e
1cda0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1cdb0 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 ror \n].... 1cdc0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 set s 1cdd0 75 63 63 65 73 73 20 66 61 6c 73 65 0d 0a 20 20 uccess false.. 1cde0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1cdf0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1ce00 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 1ce10 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1ce20 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1ce30 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1ce40 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1ce50 57 41 52 4e 49 4e 47 3a 20 57 41 4c 20 66 69 6c  WARNING: WAL fil
1ce60 65 20 5c 22 22 20 24 77 61 6c 46 69 6c 65 4e 61  e \"" $walFileNa 1ce70 6d 65 20 22 5c 22 20 69 73 20 22 20 24 73 69 7a me "\" is "$siz
1ce80 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1ce90 20 20 20 20 20 20 20 22 20 62 79 74 65 73 20 69         " bytes i
1cea0 6e 20 73 69 7a 65 2c 20 73 6b 69 70 70 69 6e 67  n size, skipping
1ceb0 20 61 6c 6c 20 66 69 6c 65 20 64 65 6c 65 74 69   all file deleti
1cec0 6f 6e 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20  ons...\n"]....
1ced0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1cee0 72 6e 20 31 3b 20 23 20 65 72 72 6f 72 0d 0a 20  rn 1; # error..
1cef0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1cf00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1cf10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1cf20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
1cf30 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 20 74 68  mpt to delete th
1cf40 65 20 74 65 73 74 20 53 48 4d 20 66 69 6c 65 2c  e test SHM file,
1cf50 20 69 66 20 61 6e 79 2c 20 6e 6f 77 2e 0d 0a 20   if any, now...
1cf60 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1cf70 20 20 20 20 20 20 73 65 74 20 73 68 6d 46 69 6c        set shmFil
1cf80 65 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67  eName [appendArg
1cf90 73 20 24 66 69 6c 65 4e 61 6d 65 20 2d 73 68 6d  s $fileName -shm 1cfa0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 ].... i 1cfb0 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 1cfc0 24 73 68 6d 46 69 6c 65 4e 61 6d 65 5d 20 26 26$shmFileName] &&
1cfd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1cfe0 20 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64    [catch {file d
1cff0 65 6c 65 74 65 20 24 73 68 6d 46 69 6c 65 4e 61  elete $shmFileNa 1d000 6d 65 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e me} error]} then 1d010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d020 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 #.. # 1d030 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f NOTE: We someho 1d040 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 w failed to dele 1d050 74 65 20 74 68 65 20 53 48 4d 20 66 69 6c 65 2c te the SHM file, 1d060 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 1d070 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1d080 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1d090 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1d0a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
1d0b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
1d0c0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
1d0d0 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 53 48  led to delete SH
1d0e0 4d 20 66 69 6c 65 20 5c 22 22 20 24 73 68 6d 46  M file \"" $shmF 1d0f0 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 ileName \.. 1d100 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d 1d110 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 uring cleanup, e 1d120 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
1d130 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ror \n]....
1d140 20 20 20 20 20 20 20 73 65 74 20 73 75 63 63 65         set succe
1d150 73 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  ss false..
1d160 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
1d170 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1d180 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
1d190 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65  to delete the te
1d1a0 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  st database file
1d1b0 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20   now...
1d1c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
1d1d0 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64   {[catch {file d
1d1e0 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} 1d1f0 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d error]} then {. 1d200 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. 1d210 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f # NO 1d220 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 TE: We somehow f 1d230 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete 1d240 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 the file, report 1d250 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 why... 1d260 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1d270 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1d280 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1d290 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1d2a0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
1d2b0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
1d2c0 64 65 6c 65 74 65 20 64 61 74 61 62 61 73 65 20  delete database
1d2d0 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61  file \"" $fileNa 1d2e0 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 me \.. 1d2f0 20 20 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 "\" during 1d300 20 63 6c 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a cleanup, error: 1d310 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
1d320 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  n]....
1d330 20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 61    set success fa
1d340 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  lse..          }
1d350 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
1d360 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1d370 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1d380 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 65 20  E: Show that we
1d390 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67  skipped deleting
1d3a0 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 20 20   the file...
1d3b0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d3c0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1d3d0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1d3e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1d3f0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1d400 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c ING: skipped del 1d410 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 66 eting database f 1d420 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d ile \""$fileNam
1d430 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
1d440 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
1d450 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20  eanup\n"]..
1d460 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
1d470 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
1d480 78 70 72 20 7b 24 73 75 63 63 65 73 73 20 3f 20  xpr {$success ? 1d490 30 20 3a 20 31 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0 : 1}].. }.. 1d4a0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 ... proc save 1d4b0 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 EnvironmentVaria 1d4c0 62 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 bles { names {va 1d4d0 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 rName ""} } {.. 1d4e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1d4f0 4e 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e NOTE: For each n 1d500 61 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 6c 69 ame, does the li 1d510 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 ve environment v 1d520 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20 20 ariable exist? 1d530 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 If.. # 1d540 20 20 73 6f 2c 20 73 61 76 65 20 74 68 65 20 76 so, save the v 1d550 61 6c 75 65 20 66 6f 72 20 6c 61 74 65 72 3b 20 alue for later; 1d560 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20 otherwise, make 1d570 73 75 72 65 20 74 68 65 20 73 61 76 65 64 0d 0a sure the saved.. 1d580 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 # va 1d590 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 lue does not exi 1d5a0 73 74 20 65 69 74 68 65 72 2e 20 20 54 68 65 20 st either. The 1d5b0 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 live environment 1d5c0 20 76 61 72 69 61 62 6c 65 73 0d 0a 20 20 20 20 variables.. 1d5d0 20 20 23 20 20 20 20 20 20 20 41 52 45 20 4e 4f # ARE NO 1d5e0 54 20 63 68 61 6e 67 65 64 20 62 79 20 74 68 69 T changed by thi 1d5f0 73 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 s procedure... 1d600 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 1d610 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 1d620 24 76 61 72 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20$varName] == 0}
1d630 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1d640 73 65 74 20 76 61 72 4e 61 6d 65 20 73 61 76 65  set varName save
1d650 64 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  dEnv..      }...
1d660 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $1d670 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76 varName savedEnv 1d680 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 .... foreac 1d690 68 20 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d h name$names {.
1d6a0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  .        if {[in
1d6b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28  fo exists ::env(
1d6c0 24 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  $name)]} then {. 1d6d0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s 1d6e0 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 20 24 avedEnv($name) $1d6f0 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 ::env($name)..
1d700 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
1d710 20 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20            unset
1d720 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65  -nocomplain save
1d730 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20  dEnv($name).. 1d740 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 1d750 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1d760 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 69 # NOTE: This i 1d770 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67 2e s self-cleaning. 1d780 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65 6e If no saved en 1d790 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 vironment variab 1d7a0 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20 23 les now.. # 1d7b0 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 72 65 exist, re 1d7c0 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e 0d move the array.. 1d7d0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 1d7e0 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65 20 if {[array size 1d7f0 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d 20 savedEnv] == 0} 1d800 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d810 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 1d820 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 n savedEnv.. 1d830 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 1d840 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 45 proc restoreE 1d850 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 nvironmentVariab 1d860 6c 65 73 20 7b 20 6e 61 6d 65 73 20 7b 76 61 72 les { names {var 1d870 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 Name ""} } {.. 1d880 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 1d890 4f 54 45 3a 20 46 6f 72 20 65 61 63 68 20 6e 61 OTE: For each na 1d8a0 6d 65 2c 20 64 6f 65 73 20 74 68 65 20 73 61 76 me, does the sav 1d8b0 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 ed environment v 1d8c0 61 72 69 61 62 6c 65 20 65 78 69 73 74 3f 20 20 ariable exist? 1d8d0 49 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 If.. # 1d8e0 20 20 73 6f 2c 20 72 65 73 74 6f 72 65 20 74 68 so, restore th 1d8f0 65 20 73 61 76 65 64 20 76 61 6c 75 65 20 61 6e e saved value an 1d900 64 20 75 6e 73 65 74 20 69 74 3b 20 6f 74 68 65 d unset it; othe 1d910 72 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 rwise, make sure 1d920 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1d930 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 6f 6e the live environ 1d940 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 64 6f ment variable do 1d950 65 73 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74 es not exist eit 1d960 68 65 72 20 28 69 2e 65 2e 20 69 74 0d 0a 20 20 her (i.e. it.. 1d970 20 20 20 20 23 20 20 20 20 20 20 20 77 61 73 20 # was 1d980 6e 6f 74 20 73 65 74 20 74 6f 20 62 65 67 69 6e not set to begin 1d990 20 77 69 74 68 29 2e 20 20 42 6f 74 68 20 73 61 with). Both sa 1d9a0 76 65 64 20 61 6e 64 20 6c 69 76 65 20 65 6e 76 ved and live env 1d9b0 69 72 6f 6e 6d 65 6e 74 0d 0a 20 20 20 20 20 20 ironment.. 1d9c0 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 1d9d0 73 20 41 52 45 20 63 68 61 6e 67 65 64 20 62 79 s ARE changed by 1d9e0 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 2e this procedure. 1d9f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1da00 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 1da10 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3d 3d gth$varName] ==
1da20 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
1da30 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 20      set varName
1da40 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 20 20  savedEnv..
1da50 7d 0d 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 72  }....      upvar
1da60 20 31 20 24 76 61 72 4e 61 6d 65 20 73 61 76 65   1 $varName save 1da70 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 66 6f dEnv.... fo 1da80 72 65 61 63 68 20 6e 61 6d 65 20 24 6e 61 6d 65 reach name$name
1da90 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  s {..        if
1daa0 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61  {[info exists sa
1dab0 76 65 64 45 6e 76 28 24 6e 61 6d 65 29 5d 7d 20  vedEnv($name)]} 1dac0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1dad0 20 20 73 65 74 20 3a 3a 65 6e 76 28 24 6e 61 6d set ::env($nam
1dae0 65 29 20 24 73 61 76 65 64 45 6e 76 28 24 6e 61  e) $savedEnv($na
1daf0 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 20 20 75  me)..          u
1db00 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
1db10 20 73 61 76 65 64 45 6e 76 28 24 6e 61 6d 65 29   savedEnv($name) 1db20 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 1db30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e {.. un 1db40 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 set -nocomplain 1db50 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 ::env($name)..
1db60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
1db70 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
1db80 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
1db90 69 73 20 73 65 6c 66 2d 63 6c 65 61 6e 69 6e 67  is self-cleaning
1dba0 2e 20 20 49 66 20 6e 6f 20 73 61 76 65 64 20 65  .  If no saved e
1dbb0 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61  nvironment varia
1dbc0 62 6c 65 73 20 6e 6f 77 0d 0a 20 20 20 20 20 20  bles now..
1dbd0 23 20 20 20 20 20 20 20 65 78 69 73 74 2c 20 72  #       exist, r
1dbe0 65 6d 6f 76 65 20 74 68 65 20 61 72 72 61 79 2e  emove the array.
1dbf0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1dc00 20 69 66 20 7b 5b 61 72 72 61 79 20 73 69 7a 65   if {[array size
1dc10 20 73 61 76 65 64 45 6e 76 5d 20 3d 3d 20 30 7d   savedEnv] == 0}
1dc20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1dc30 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1dc40 69 6e 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  in savedEnv..
1dc50 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
1dc60 20 20 20 20 70 72 6f 63 20 73 61 76 65 45 61 67      proc saveEag
1dc70 6c 65 53 68 65 6c 6c 45 6e 76 69 72 6f 6e 6d 65  leShellEnvironme
1dc80 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75  nt {} {..      u
1dc90 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20  pvar 1 savedEnv
1dca0 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
1dcb0 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e    saveEnvironmen
1dcc0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1dcd0 20 4e 6f 4d 75 74 65 78 65 73 5d 20 73 61 76 65   NoMutexes] save
1dce0 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  dEnv..    }.....
1dcf0 20 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65      proc restore
1dd00 45 61 67 6c 65 53 68 65 6c 6c 45 6e 76 69 72 6f  EagleShellEnviro
1dd10 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20  nment {} {..
1dd20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45    upvar 1 savedE
1dd30 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  nv savedEnv....
1dd40 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69       restoreEnvi
1dd50 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73  ronmentVariables
1dd60 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 65 78 65 73   [list NoMutexes
1dd70 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20  ] savedEnv..
1dd80 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
1dd90 61 76 65 4d 64 61 43 6f 6e 66 69 67 45 6e 76 69  aveMdaConfigEnvi
1dda0 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
1ddb0 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
1ddc0 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
1ddd0 0a 20 20 20 20 20 20 73 61 76 65 45 6e 76 69 72  .      saveEnvir
1dde0 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1ddf0 5b 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44  [list COMPLUS_MD
1de00 41 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20  A] savedEnv..
1de10 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1de20 72 65 73 74 6f 72 65 4d 64 61 43 6f 6e 66 69 67  restoreMdaConfig
1de30 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b  Environment {} {
1de40 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
1de50 73 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e  savedEnv savedEn
1de60 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73 74 6f  v....      resto
1de70 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  reEnvironmentVar
1de80 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43 4f 4d  iables [list COM
1de90 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65 64 45  PLUS_MDA] savedE
1dea0 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  nv..    }.....
1deb0 20 20 70 72 6f 63 20 73 61 76 65 47 65 74 53 65    proc saveGetSe
1dec0 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69 72 6f  ttingValueEnviro
1ded0 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20  nment {} {..
1dee0 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 45    upvar 1 savedE
1def0 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20  nv savedEnv....
1df00 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e       saveEnviron
1df10 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c  mentVariables [l
1df20 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
1df30 20 4e 6f 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51   No_Expand No_SQ
1df40 4c 69 74 65 47 65 74 53 65 74 74 69 6e 67 56 61  LiteGetSettingVa
1df50 6c 75 65 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c  lue No_SQLiteXml
1df60 43 6f 6e 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20  ConfigFile] \..
1df70 20 20 20 20 20 20 20 20 20 73 61 76 65 64 45 6e           savedEn
1df80 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  v..    }.....
1df90 20 70 72 6f 63 20 72 65 73 74 6f 72 65 47 65 74   proc restoreGet
1dfa0 53 65 74 74 69 6e 67 56 61 6c 75 65 45 6e 76 69  SettingValueEnvi
1dfb0 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
1dfc0 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
1dfd0 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
1dfe0 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e  .      restoreEn
1dff0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
1e000 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
1e010 20 20 20 20 20 20 4e 6f 5f 45 78 70 61 6e 64 20        No_Expand
1e020 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53 65 74 74  No_SQLiteGetSett
1e030 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53 51 4c 69  ingValue No_SQLi
1e040 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69 6c 65 5d  teXmlConfigFile]
1e050 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61   \..          sa
1e060 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c  vedEnv..    }...
1e070 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53  ..    proc saveS
1e080 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
1e090 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d  nvironment {} {.
1e0a0 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73  .      upvar 1 s
1e0b0 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76  avedEnv savedEnv
1e0c0 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e  ....      saveEn
1e0d0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
1e0e0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
1e0f0 20 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61        DefaultFla
1e100 67 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  gs_SQLiteConnect
1e110 69 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e  ion No_SQLiteCon
1e120 6e 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72  nectionNewParser
1e130 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] \..          s
1e140 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20  avedEnv....
1e150 20 75 70 76 61 72 20 31 20 73 61 76 65 64 43 6f   upvar 1 savedCo
1e160 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 73 61  nnectionFlags sa
1e170 76 65 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  vedConnectionFla
1e180 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  gs....      if {
1e190 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 63  [info exists ::c
1e1a0 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
1e1b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1e1c0 20 20 73 65 74 20 73 61 76 65 64 43 6f 6e 6e 65    set savedConne
1e1d0 63 74 69 6f 6e 46 6c 61 67 73 20 24 3a 3a 63 6f  ctionFlags $::co 1e1e0 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 0d 0a nnection_flags.. 1e1f0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1e200 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 1e210 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 43 ocomplain savedC 1e220 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 0d 0a onnectionFlags.. 1e230 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 1e240 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 74 ... proc rest 1e250 6f 72 65 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 oreSQLiteConnect 1e260 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b ionEnvironment { 1e270 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 1e280 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 1 savedEnv save 1e290 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 dEnv.... re 1e2a0 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 storeEnvironment 1e2b0 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 Variables [list 1e2c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65 66 \.. Def 1e2d0 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 aultFlags_SQLite 1e2e0 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53 51 Connection No_SQ 1e2f0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 LiteConnectionNe 1e300 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20 20 wParser] \.. 1e310 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a savedEnv.. 1e320 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 .. upvar 1 1e330 73 61 76 65 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 savedConnectionF 1e340 6c 61 67 73 20 73 61 76 65 64 43 6f 6e 6e 65 63 lags savedConnec 1e350 74 69 6f 6e 46 6c 61 67 73 0d 0a 0d 0a 20 20 20 tionFlags.... 1e360 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi 1e370 73 74 73 20 73 61 76 65 64 43 6f 6e 6e 65 63 74 sts savedConnect 1e380 69 6f 6e 46 6c 61 67 73 5d 7d 20 74 68 65 6e 20 ionFlags]} then 1e390 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a {.. set : 1e3a0 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag 1e3b0 73 20 24 73 61 76 65 64 43 6f 6e 6e 65 63 74 69 s$savedConnecti
1e3c0 6f 6e 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 20  onFlags..
1e3d0 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1e3e0 69 6e 20 73 61 76 65 64 43 6f 6e 6e 65 63 74 69  in savedConnecti
1e3f0 6f 6e 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 7d  onFlags..      }
1e400 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1e410 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61   unset -nocompla
1e420 69 6e 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f  in ::connection_
1e430 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 7d 0d 0a  flags..      }..
1e440 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1e450 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e  oc saveSQLiteCon
1e460 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  vertEnvironment
1e470 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
1e480 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
1e490 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73  edEnv....      s
1e4a0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  aveEnvironmentVa
1e4b0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d  riables [list \.
1e4c0 0a 20 20 20 20 20 20 20 20 20 20 55 73 65 5f 53  .          Use_S
1e4d0 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66  QLiteConvert_Def
1e4e0 61 75 6c 74 44 62 54 79 70 65 20 55 73 65 5f 53  aultDbType Use_S
1e4f0 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f 44 65 66  QLiteConvert_Def
1e500 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d 20 5c 0d  aultTypeName] \.
1e510 0a 20 20 20 20 20 20 20 20 20 20 73 61 76 65 64  .          saved
1e520 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  Env..    }.....
1e530 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 53     proc restoreS
1e540 51 4c 69 74 65 43 6f 6e 76 65 72 74 45 6e 76 69  QLiteConvertEnvi
1e550 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20  ronment {} {..
1e560 20 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65      upvar 1 save
1e570 64 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d  dEnv savedEnv...
1e580 0a 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e  .      restoreEn
1e590 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
1e5a0 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20  es [list \..
1e5b0 20 20 20 20 20 20 55 73 65 5f 53 51 4c 69 74 65        Use_SQLite
1e5c0 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 44  Convert_DefaultD
1e5d0 62 54 79 70 65 20 55 73 65 5f 53 51 4c 69 74 65  bType Use_SQLite
1e5e0 43 6f 6e 76 65 72 74 5f 44 65 66 61 75 6c 74 54  Convert_DefaultT
1e5f0 79 70 65 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20  ypeName] \..
1e600 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a        savedEnv..
1e610 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1e620 6f 63 20 73 65 74 75 70 44 62 49 6e 74 65 72 72  oc setupDbInterr
1e630 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b 20 63 68  uptCallback { ch
1e640 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20  annel log } {..
1e650 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 1e660 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e nel "---- settin 1e670 67 20 75 70 20 64 65 62 75 67 67 65 72 20 69 6e g up debugger in 1e680 74 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b terrupt callback 1e690 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 ... ".... i 1e6a0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 1e6b0 20 20 20 20 20 73 61 76 65 45 6e 76 69 72 6f 6e saveEnviron 1e6c0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b 6c mentVariables [l 1e6d0 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ist \.. 1e6e0 20 20 20 71 75 69 65 74 46 69 6e 64 49 6e 74 65 quietFindInte 1e6f0 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68 20 rpreterTestPath 1e700 71 75 69 65 74 53 65 74 75 70 49 6e 74 65 72 70 quietSetupInterp 1e710 72 65 74 65 72 54 65 73 74 50 61 74 68 5d 0d 0a reterTestPath].. 1e720 0d 0a 20 20 20 20 20 20 20 20 74 72 79 20 7b 0d .. try {. 1e730 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1e740 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1e750 50 72 65 76 65 6e 74 20 74 68 65 20 76 65 6e 64 Prevent the vend 1e760 6f 72 20 73 63 72 69 70 74 20 66 72 6f 6d 20 62 or script from b 1e770 65 69 6e 67 20 6e 6f 69 73 79 20 77 68 65 6e 20 eing noisy when 1e780 63 72 65 61 74 69 6e 67 0d 0a 20 20 20 20 20 20 creating.. 1e790 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 1e7a0 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 isolated interpr 1e7b0 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 eter... 1e7c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 #.. se 1e7d0 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 46 69 6e t ::env(quietFin 1e7e0 64 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 dInterpreterTest 1e7f0 50 61 74 68 29 20 31 0d 0a 20 20 20 20 20 20 20 Path) 1.. 1e800 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 set ::env(qui 1e810 65 74 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 etSetupInterpret 1e820 65 72 54 65 73 74 50 61 74 68 29 20 31 0d 0a 0d erTestPath) 1... 1e830 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1e840 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1e850 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 73 63 Make sure the sc 1e860 72 69 70 74 20 64 65 62 75 67 67 65 72 20 61 6e ript debugger an 1e870 64 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 d the isolated i 1e880 6e 74 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 nterpreter.. 1e890 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72 # ar 1e8a0 65 20 73 65 74 75 70 20 61 6e 64 20 72 65 61 64 e setup and read 1e8b0 79 20 66 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 y for use... 1e8c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1e8d0 20 20 20 64 65 62 75 67 20 73 65 74 75 70 20 74 debug setup t 1e8e0 72 75 65 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 rue true.... 1e8f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1e900 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 1e910 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70 61 the necessary pa 1e920 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65 20 ckages into the 1e930 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 isolated interpr 1e940 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 eter... 1e950 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 #.. de 1e960 62 75 67 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 bug eval {.. 1e970 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 package 1e980 72 65 71 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 require Eagle.. 1e990 20 20 20 20 20 20 20 20 20 20 20 70 61 63 6b 61 packa 1e9a0 67 65 20 72 65 71 75 69 72 65 20 45 61 67 6c 65 ge require Eagle 1e9b0 2e 4c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 .Library.. 1e9c0 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 package re 1e9d0 71 75 69 72 65 20 45 61 67 6c 65 2e 54 65 73 74 quire Eagle.Test 1e9e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 1e9f0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1ea00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1ea10 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73 61 Copy the necessa 1ea20 72 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e 74 ry variables int 1ea30 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 69 o the isolated i 1ea40 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 nterpreter... 1ea50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1ea60 20 20 20 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 debug invoke 1ea70 20 30 20 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 0 set ::test_ch 1ea80 61 6e 6e 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 annel$channel;
1ea90 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75  # NOTE: For [tpu
1eaa0 74 73 5d 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ts]...
1eab0 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 73  debug invoke 0 s
1eac0 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c  et ::test_log $l 1ead0 6f 67 3b 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 og; # NOTE: For 1eae0 5b 74 6c 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 [tlog]..... 1eaf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1eb00 20 20 23 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c # NOTE: Instal 1eb10 6c 20 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 l the callback s 1eb20 63 72 69 70 74 20 74 6f 20 62 65 20 65 76 61 6c cript to be eval 1eb30 75 61 74 65 64 20 69 6e 20 74 68 65 20 69 73 6f uated in the iso 1eb40 6c 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 20 lated.. 1eb50 20 23 20 20 20 20 20 20 20 69 6e 74 65 72 70 72 # interpr 1eb60 65 74 65 72 20 77 68 65 6e 20 74 68 69 73 20 69 eter when this i 1eb70 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 69 6e nterpreter is in 1eb80 74 65 72 72 75 70 74 65 64 20 62 79 20 73 63 72 terrupted by scr 1eb90 69 70 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ipt.. # 1eba0 20 20 20 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 cancellat 1ebb0 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 ion, etc... 1ebc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ebd0 20 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b debug callback 1ebe0 20 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 apply {{sender 1ebf0 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 e} {.. 1ec00 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1ec10 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 1ec20 66 20 74 68 69 73 20 64 65 62 75 67 67 65 72 20 f this debugger 1ec30 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e 65 20 callback is one 1ec40 74 68 61 74 20 77 65 20 63 61 72 65 20 61 62 6f that we care abo 1ec50 75 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ut... 1ec60 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1ec70 73 65 74 20 69 6e 74 65 72 72 75 70 74 54 79 70 set interruptTyp 1ec80 65 73 20 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e es [split [$e In
1ec90 74 65 72 72 75 70 74 54 79 70 65 5d 20 22 2c 20  terruptType] ",
1eca0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
1ecb0 20 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 64 22    if {"Canceled"
1ecc0 20 69 6e 20 24 69 6e 74 65 72 72 75 70 74 54 79   in $interruptTy 1ecd0 70 65 73 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 pes || \.. 1ece0 20 20 20 20 20 20 20 20 20 20 22 55 6e 77 6f 75 "Unwou 1ecf0 6e 64 22 20 69 6e 20 24 69 6e 74 65 72 72 75 70 nd" in$interrup
1ed00 74 54 79 70 65 73 7d 20 74 68 65 6e 20 7b 0d 0a  tTypes} then {..
1ed10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1ed20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
1ed30 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65   NOTE: Make sure
1ed40 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f   the [object] co
1ed50 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62  mmand is availab
1ed60 6c 65 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20  le.  Since..
1ed70 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
1ed80 20 20 74 68 69 73 20 69 73 20 61 6e 20 69 73 6f    this is an iso
1ed90 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65  lated interprete
1eda0 72 2c 20 63 68 65 63 6b 20 66 6f 72 20 69 74 20  r, check for it
1edb0 74 68 65 20 68 61 72 64 0d 0a 20 20 20 20 20 20  the hard..
1edc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1edd0 77 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  way...
1ede0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1edf0 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74       if {[llengt
1ee00 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73  h [info commands
1ee10 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74   object]] > 0} t
1ee20 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1ee30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1ee40 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
1ee50 3a 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 67  : Iterate throug
1ee60 68 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63  h all database c
1ee70 6f 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e  onnections known
1ee80 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20   to the..
1ee90 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1eea0 20 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65   parent interpre
1eeb0 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ter...
1eec0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1eed0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
1eee0 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70  foreach -alias p
1eef0 61 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f  air [object invo
1ef00 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
1ef10 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
1ef20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 20 49              $e I 1ef30 6e 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 nterpreter.conne 1ef40 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 ctions] {.. 1ef50 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 1ef60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ef70 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 1ef80 74 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 t to cancel any 1ef90 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 SQL queries in p 1efa0 72 6f 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 rogress on.. 1efb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 1efc0 20 20 20 20 20 20 74 68 69 73 20 64 61 74 61 62 this datab 1efd0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d ase connection.. 1efe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1eff0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1f000 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 1f010 63 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e ch {$pair Value.
1f020 43 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20  Cancel} error]}
1f030 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1f040 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1f050 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1f060 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e l [appendArgs \n 1f070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f080 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 1f090 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 1f0a0 64 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 d to cancel quer 1f0b0 79 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 y for " \.. 1f0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f0d0 20 20 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c "connection \ 1f0e0 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 "" [$pair Key] "
1f0f0 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
1f100 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1f110 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72               $er 1f120 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1f130 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1f140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 1f150 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d . } 1f160 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 1f170 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
1f180 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1f190 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d  appendArgs \n \.
1f1a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f1b0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
1f1c0 4e 47 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65  NG: cannot cance
1f1d0 6c 20 61 6e 79 20 71 75 65 72 69 65 73 3a 20 22  l any queries: "
1f1e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f1f0 20 20 20 20 20 20 20 20 22 74 68 65 20 5c 22 6f          "the \"o
1f200 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20  bject\" command
1f210 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65  is not available
1f220 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
1f230 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1f240 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1f250 7d 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69  }}..        } fi
1f260 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20  nally {..
1f270 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f     restoreEnviro
1f280 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b  nmentVariables [
1f290 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
1f2a0 20 20 20 20 20 20 71 75 69 65 74 46 69 6e 64 49        quietFindI
1f2b0 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61  nterpreterTestPa
1f2c0 74 68 20 71 75 69 65 74 53 65 74 75 70 49 6e 74  th quietSetupInt
1f2d0 65 72 70 72 65 74 65 72 54 65 73 74 50 61 74 68  erpreterTestPath
1f2e0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
1f2f0 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20      } error] ==
1f300 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
1f310 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
1f320 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61   interruptCallba
1f330 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20  ck.sqlite3....
1f340 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 1f350 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 nnel yes\n.. 1f360 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1f370 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
1f380 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
1f390 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  no, error: " \n\
1f3a0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. 1f3b0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 1f3c0 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 . proc cleanu 1f3d0 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 pFile { fileName 1f3e0 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} 1f3f0 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 {force false} } 1f400 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 1f410 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp 1f420 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 t to force all p 1f430 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 ending "garbage" 1f440 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 objects to be c 1f450 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 ollected,.. 1f460 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 # includi 1f470 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d ng SQLite statem 1f480 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 ents and backup 1f490 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 objects; this sh 1f4a0 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 ould allow.. 1f4b0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e # the un 1f4c0 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 derlying databas 1f4d0 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c e file to be del 1f4e0 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eted... #.. 1f4f0 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 if {$colle
1f500 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ct} then {..
1f510 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61      collectGarba
1f520 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ge $::test_chann 1f530 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... 1f540 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 1f550 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 1f560 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 he file still ex 1f570 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ists... #.. 1f580 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 1f590 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
1f5a0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1f5b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
1f5c0 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74  NOTE: Skip delet
1f5d0 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69  ing test files i
1f5e0 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20  f somebody sets
1f5f0 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
1f600 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ble..        #
1f610 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20       to prevent
1f620 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
1f630 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72          if {$for 1f640 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 ce || ![info exi 1f650 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 sts ::no(cleanup 1f660 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a File)]} then {.. 1f670 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1f680 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 1f690 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 ttempt to delete 1f6a0 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e the test file n 1f6b0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ow... # 1f6c0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 1f6d0 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 [set code [catch 1f6e0 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
1f6f0 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d  ileName} error]]
1f700 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1f710 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1f720 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
1f730 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74  somehow failed t
1f740 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c  o delete the fil
1f750 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
1f760 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1f770 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
1f780 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1f790 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1f7a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f7b0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 1f7c0 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete 1f7d0 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 test file \""$f
1f7e0 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
1f7f0 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
1f800 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65  uring cleanup, e
1f810 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 1f820 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 1f830 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 1f840 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1f850 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1f860 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 NOTE: Show that 1f870 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 we skipped dele 1f880 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a ting the file... 1f890 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1f8a0 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 set code 1f8b0 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 0.... t 1f8c0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
1f8d0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1f8e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1f8f0 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1f900 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
1f910 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20  g test file \""
1f920 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. 1f930 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d 1f940 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 uring cleanup\n" 1f950 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 1f960 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 1f970 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1f980 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c # NOTE: The fil 1f990 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 e does not exist 1f9a0 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 , success!.. 1f9b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s 1f9c0 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 et code 0.. 1f9d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 1f9e0 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d rn$code..    }.
1f9f0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65  ....    proc cle
1fa00 61 6e 75 70 4d 65 6d 6f 72 79 20 7b 20 76 61 72  anupMemory { var
1fa10 4e 61 6d 65 20 7b 71 75 69 65 74 20 66 61 6c 73  Name {quiet fals
1fa20 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  e} } {..      if
1fa30 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
1fa40 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c  ectCommand] && \
1fa50 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
1fa60 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 4e  ing length $varN 1fa70 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { 1fa80 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1fa90 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 # NOTE: Ref 1faa0 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 er to the specif 1fab0 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e ied variable (e. 1fac0 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 g. "connection") 1fad0 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 in the.. 1fae0 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 # context 1faf0 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 of our caller. 1fb00 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 The opaque obje 1fb10 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e ct handle for an 1fb20 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1fb30 20 20 41 44 4f 2e 4e 45 54 20 63 6f 6e 6e 65 63 ADO.NET connec 1fb40 74 69 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 tion previously 1fb50 72 65 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 returned by [get 1fb60 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 20 DbConnection].. 1fb70 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 # s 1fb80 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20 hould be stored 1fb90 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 there... 1fba0 23 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 72 #.. upvar 1fbb0 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 1$varName conn
1fbc0 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20  ection....
1fbd0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
1fbe0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1fbf0 20 69 6e 76 6f 6b 65 20 24 63 6f 6e 6e 65 63 74   invoke $connect 1fc00 69 6f 6e 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 ion ReleaseMemor 1fc10 79 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 y.. } res 1fc20 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ult]} then {.. 1fc30 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
1fc40 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
1fc50 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1fc60 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1fc70 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1fc80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1fc90 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 1fca0 6c 65 64 20 74 6f 20 72 65 6c 65 61 73 65 20 64 led to release d 1fcb0 61 74 61 62 61 73 65 20 6d 65 6d 6f 72 79 2c 20 atabase memory, 1fcc0 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 error: " \.. 1fcd0 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 1fce0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
1fcf0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1fd00 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
1fd10 0a 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e  .      if {[llen
1fd20 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e  gth [info comman
1fd30 64 73 20 64 65 62 75 67 5d 5d 20 3e 20 30 7d 20  ds debug]] > 0}
1fd40 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1fd50 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1fd60 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
1fd70 31 20 5b 6c 69 73 74 20 64 65 62 75 67 20 70 75  1 [list debug pu
1fd80 72 67 65 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20  rge]..        }
1fd90 72 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d  result]} then {.
1fda0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
1fdb0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 1fdc0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1fdd0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1fde0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1fdf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1fe00 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
1fe10 66 61 69 6c 65 64 20 74 6f 20 70 75 72 67 65 20  failed to purge
1fe20 63 61 6c 6c 20 66 72 61 6d 65 2c 20 65 72 72 6f  call frame, erro
1fe30 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
1fe40 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 1fe50 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 1fe60 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 1fe70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 1fe80 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 1fe90 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c uplevel 1 [l 1fea0 69 73 74 20 64 65 62 75 67 20 63 6c 65 61 6e 75 ist debug cleanu 1feb0 70 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 p].. } re 1fec0 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 sult]} then {.. 1fed0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
1fee0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
1fef0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1ff00 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1ff10 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1ff30 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 1ff40 69 6c 65 64 20 74 6f 20 63 6c 65 61 6e 75 70 20 iled to cleanup 1ff50 69 6e 74 65 72 70 72 65 74 65 72 2c 20 65 72 72 interpreter, err 1ff60 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 1ff70 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
1ff80 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
1ff90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1ffa0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
1ffb0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
1ffc0 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b       uplevel 1 [
1ffd0 6c 69 73 74 20 64 65 62 75 67 20 63 6f 6c 6c 65  list debug colle
1ffe0 63 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 72  ct]..        } r
1fff0 65 73 75 6c 74 5d 7d 20 74 68 65 6e 20 7b 0d 0a  esult]} then {..
20000 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$20010 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 20020 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20030 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
20040 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
20050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20060 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66  "==== WARNING: f
20070 61 69 6c 65 64 20 74 6f 20 63 6f 6c 6c 65 63 74  ailed to collect
20080 20 67 61 72 62 61 67 65 2c 20 65 72 72 6f 72 3a   garbage, error:
20090 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
200a0 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75        \n\t $resu 200b0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 200c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 200d0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 200e0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 ... proc setu 200f0 70 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 73 20 pMemoryCounters 20100 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 { varName } {.. 20110 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 20120 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 20130 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. 20140 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
20150 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d 0a  Name counter....
20160 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e          set coun
20170 74 65 72 28 31 29 20 5b 6f 62 6a 65 63 74 20 63  ter(1) [object c
20180 72 65 61 74 65 20 2d 61 6c 69 61 73 20 5c 0d 0a  reate -alias \..
20190 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
201a0 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 50  em.Diagnostics.P
201b0 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 6e 74 65  erformanceCounte
201c0 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a 20 20 20  r Process \..
201d0 20 20 20 20 20 20 20 20 20 22 57 6f 72 6b 69 6e           "Workin
201e0 67 20 53 65 74 22 20 5b 66 69 6c 65 20 72 6f 6f  g Set" [file roo
201f0 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c  tname [file tail
20200 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d   $::bin_file]]]. 20210 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 ... set c 20220 6f 75 6e 74 65 72 28 32 29 20 5b 6f 62 6a 65 63 ounter(2) [objec 20230 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20 t create -alias 20240 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 \.. S 20250 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63 ystem.Diagnostic 20260 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75 s.PerformanceCou 20270 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a nter Process \.. 20280 20 20 20 20 20 20 20 20 20 20 20 20 22 57 6f 72 "Wor 20290 6b 69 6e 67 20 53 65 74 20 50 65 61 6b 22 20 5b king Set Peak" [ 202a0 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 file rootname [f 202b0 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f ile tail$::bin_
202c0 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20  file]]]....
202d0 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 33     set counter(3
202e0 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65  ) [object create
202f0 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..
20300 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69         System.Di
20310 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72  agnostics.Perfor
20320 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f  manceCounter Pro
20330 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  cess \..
20340 20 20 20 20 22 50 72 69 76 61 74 65 20 42 79 74      "Private Byt
20350 65 73 22 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  es" [file rootna
20360 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 3a  me [file tail $: 20370 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d 0a 20 20 :bin_file]]].. 20380 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 20390 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d eturn "".. }. 203a0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 70 .... proc rep 203b0 6f 72 74 4d 65 6d 6f 72 79 43 6f 75 6e 74 65 72 ortMemoryCounter 203c0 73 20 7b 20 63 68 61 6e 6e 65 6c 20 76 61 72 4e s { channel varN 203d0 61 6d 65 20 70 72 65 66 69 78 20 7d 20 7b 0d 0a ame prefix } {.. 203e0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 if {[haveS 203f0 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 QLiteObjectComma 20400 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 nd]} then {.. 20410 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
20420 72 4e 61 6d 65 20 63 6f 75 6e 74 65 72 0d 0a 0d  rName counter...
20430 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $20440 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20450 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20460 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 66 "---- "$pref
20470 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22 22  ix " counter \""
20480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20490 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24  [object invoke $204a0 63 6f 75 6e 74 65 72 28 31 29 20 43 6f 75 6e 74 counter(1) Count 204b0 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c 75 erName] "\" valu 204c0 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 e is " \.. 204d0 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e [object in 204e0 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 31 29 voke$counter(1)
204f0 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a   RawValue] \n]..
20500 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
20510 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 20520 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 20530 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 65 "---- "$pre
20540 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c 22  fix " counter \"
20550 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
20560 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
20570 24 63 6f 75 6e 74 65 72 28 32 29 20 43 6f 75 6e  $counter(2) Coun 20580 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 6c terName] "\" val 20590 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 20 ue is " \.. 205a0 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 [object i 205b0 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 32 nvoke$counter(2
205c0 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d 0d  ) RawValue] \n].
205d0 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  ...        tputs
205e0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 205f0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 20600 20 20 20 20 20 22 2d 2d 2d 2d 20 22 20 24 70 72 "---- "$pr
20610 65 66 69 78 20 22 20 63 6f 75 6e 74 65 72 20 5c  efix " counter \
20620 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
20630 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65    [object invoke
20640 20 24 63 6f 75 6e 74 65 72 28 33 29 20 43 6f 75   $counter(3) Cou 20650 6e 74 65 72 4e 61 6d 65 5d 20 22 5c 22 20 76 61 nterName] "\" va 20660 6c 75 65 20 69 73 20 22 20 5c 0d 0a 20 20 20 20 lue is " \.. 20670 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 [object 20680 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28 invoke$counter(
20690 33 29 20 52 61 77 56 61 6c 75 65 5d 20 5c 6e 5d  3) RawValue] \n]
206a0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
206b0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f  .....    proc co
206c0 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63  llectGarbage { c
206d0 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63  hannel {millisec
206e0 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65  onds 1000} {quie
206f0 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  t true} } {..
20700 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
20710 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
20720 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
20730 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
20740 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
20750 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
20760 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d  talMemory false.
20770 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c  .        } resul
20780 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
20790 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
207a0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 207b0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 207c0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
207d0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
207e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
207f0 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
20800 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72 65 20   the CLR before
20810 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20  collection... "
20820 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
20830 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74     $result " byt 20840 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 20850 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 20860 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 20870 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
20880 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
20890 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 208a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 208b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 208c0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 208d0 61 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 ailed to get CLR 208e0 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 memory usage, e 208f0 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. 20900 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 \n\t 20910 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
20920 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
20930 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
20940 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23        ##########
20950 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20960 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20970 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20980 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
20990 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
209a0 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 74    # NOTE: Repeat
209b0 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20  edly attempt to
209c0 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 20  collect garbage
209d0 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74  until the allott
209e0 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20  ed number..
209f0 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c   #       of mill
20a00 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 6c 61  iseconds has ela
20a10 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 61 74  psed.  Always at
20a20 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74  tempt to collect
20a30 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 20 20   garbage..
20a40 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 73 74  #       at least
20a50 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d   once...      #.
20a60 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
20a70 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d  SQLiteObjectComm
20a80 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  and]} then {..
20a90 20 20 20 20 20 20 73 65 74 20 73 74 61 72 74 20        set start
20aa0 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d  [clock seconds].
20ab0 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 6f  .        set sto
20ac0 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 20  p [expr {$start 20ad0 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 + ($milliseconds
20ae0 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20   / 1000)}]....
20af0 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20        do {..
20b00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
20b10 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
20b20 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 75  pt to force a fu
20b30 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65  ll garbage colle
20b40 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f  ction now.  Repo
20b50 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20  rt any..
20b60 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20    #       error
20b70 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65  that is encounte
20b80 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d  red if we fail..
20b90 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
20ba0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
20bb0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
20bc0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
20bd0 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
20be0 79 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  y true..
20bf0 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
20c00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
20c10 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 20c20 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 20c30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
20c40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
20c50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
20c60 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
20c70 3a 20 66 61 69 6c 65 64 20 66 75 6c 6c 20 67 61  : failed full ga
20c80 72 62 61 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e  rbage collection
20c90 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  , error: " \..
20ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
20cb0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 20cc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 20cd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 20ce0 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 77 set now 20cf0 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d [clock seconds] 20d00 0d 0a 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c .. } whil 20d10 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 6e 6f e {$start <= $no 20d20 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 74 6f w &&$now < $sto 20d30 70 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 p}.. }.... 20d40 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23 ########### 20d50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20d60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20d70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20d80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 20d90 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 .. if {[hav 20da0 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 20db0 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 20dc0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 20dd0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 20de0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 bject invoke GC 20df0 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 GetTotalMemory f 20e00 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 20e10 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 20e20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 20e30 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
20e40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
20e50 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 20e60 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 20e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 20e80 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 ---- memory in u 20e90 73 65 20 62 79 20 74 68 65 20 43 4c 52 20 61 66 se by the CLR af 20ea0 74 65 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e ter collection.. 20eb0 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 . " \.. 20ec0 20 20 20 20 20 20 20 24 72 65 73 75 6c 74 20 22$result "
20ed0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20   bytes\n"]..
20ee0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
20ef0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
20f00 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 20f10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 20f20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
20f30 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
20f40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
20f50 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
20f60 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 74  G: failed to get
20f70 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 67   CLR memory usag
20f80 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20  e, error: " \..
20f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c                 \
20fa0 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 20fb0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 20fc0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 20fd0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 20fe0 70 72 6f 63 20 67 65 74 53 51 4c 69 74 65 48 61 proc getSQLiteHa 20ff0 6e 64 6c 65 43 6f 75 6e 74 73 20 7b 20 63 68 61 ndleCounts { cha 21000 6e 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 nnel {quiet fals 21010 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se 21020 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d t result [list]. 21030 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 ... if {[ha 21040 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f veSQLiteObjectCo 21050 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 mmand] && \.. 21060 20 20 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 [haveSQLi 21070 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 teDefineConstant 21080 20 43 4f 55 4e 54 5f 48 41 4e 44 4c 45 5d 7d 20 COUNT_HANDLE]} 21090 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 210a0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 210b0 45 3a 20 41 64 64 20 65 61 63 68 20 63 72 69 74 E: Add each crit 210c0 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e ical handle coun 210d0 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c 74 69 t to the resulti 210e0 6e 67 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 ng list... 210f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 #.. for 21100 65 61 63 68 20 6e 61 6d 65 20 5b 6c 69 73 74 20 each name [list 21110 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 \.. c 21120 6f 6e 6e 65 63 74 69 6f 6e 43 6f 75 6e 74 20 73 onnectionCount s 21130 74 61 74 65 6d 65 6e 74 43 6f 75 6e 74 20 62 61 tatementCount ba 21140 63 6b 75 70 43 6f 75 6e 74 20 62 6c 6f 62 43 6f ckupCount blobCo 21150 75 6e 74 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 unt] {.. 21160 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 21170 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 21180 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 21190 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 211a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 211b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 211c0 65 2e 44 65 62 75 67 44 61 74 61 20 24 6e 61 6d e.DebugData$nam
211d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 76  e..          } v
211e0 61 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  alue] == 0} then
211f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21200 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 21210 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21220 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
21230 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
21240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21250 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61     "---- critica
21260 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c  l handle count \
21270 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20  "" $name "\" is 21280 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20 "$value \n]..
21290 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
212a0 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65             lappe
212b0 6e 64 20 72 65 73 75 6c 74 20 24 76 61 6c 75 65  nd result $value 212c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 212d0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 212e0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
212f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
21300 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 21310 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 21320 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21330 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 21340 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 21350 74 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c t critical handl 21360 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 e count \"" \.. 21370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21380 20 24 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f$name "\", erro
21390 72 3a 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65  r: " \n\t $value 213a0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 213b0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 213c0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 213d0 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 } elseif {!$q
213e0 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
213f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
21400 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74   # NOTE: The act
21410 75 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74  ual handle count
21420 73 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61  s are not availa
21430 62 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ble; therefore,
21440 6a 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  just..        #
21450 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20        return an
21460 65 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20  empty list...
21470 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
21480 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22  tputs $channel " 21490 2d 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 ---- critical ha 214a0 6e 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 ndle counts unav 214b0 61 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 ailable\n".. 214c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 214d0 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
214e0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
214f0 73 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b  shutdownSQLite {
21500 20 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20   channel {force
21510 66 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61  false} {quiet fa
21520 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  lse} } {..
21530 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
21540 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20   Make sure that
21550 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
21560 61 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c  ary is completel
21570 79 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69  y shutdown.  Thi
21580 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
21590 20 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74   is used by test
215a0 73 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f  s that change co
215b0 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
215c0 6f 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65  ons and/or those
215d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
215e0 74 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b  that need to mak
215f0 65 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69  e sure logging i
21600 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69  s initialized (i
21610 2e 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65  .e. just in case
21620 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
21630 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
21640 6c 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74  library was init
21650 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70  ialized in the p
21660 72 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d  rocess prior to.
21670 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
21680 68 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61  he SQLiteLog cla
21690 73 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f  ss being able to
216a0 20 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69   setup its loggi
216b0 6e 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20  ng callback)...
216c0 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72       #       Nor
216d0 6d 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75  mally, this shou
216e0 6c 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f  ld only be perfo
216f0 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  rmed if SQLite i
21700 73 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20  s loaded and..
21710 20 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64      #       read
21720 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  y for use by the
21730 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20   test suite...
21740 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
21750 7b 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51  {$force || [isSQ 21760 4c 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e LiteReady]} then 21770 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 21780 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a # BUGFIX: 21790 20 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 Make sure that 217a0 61 6e 79 20 22 6c 65 61 6b 65 64 22 20 74 72 61 any "leaked" tra 217b0 6e 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 nsactions and/or 217c0 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 connections.. 217d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 217e0 61 72 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 are cleaned up b 217f0 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 efore calling th 21800 65 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 e native shutdow 21810 6e 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 n function... 21820 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 21830 66 6f 72 65 61 63 68 20 74 72 61 6e 73 61 63 74 foreach transact 21840 69 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 ion [info transa 21850 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 ctions] {.. 21860 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 21870 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 match \.. 21880 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 System#D 21890 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 ata#SQLite#SQLit 218a0 65 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 eTransaction#*$
218b0 74 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68  transaction]} th
218c0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
218d0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
218e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
218f0 6c 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f  l transaction ro
21900 6c 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74  llback $transact 21910 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ion.. 21920 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 } error] == 0} 21930 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21940 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
21950 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
21960 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
21970 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 21980 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 21990 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 219a0 2d 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c -- rolled back l 219b0 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f eaked transactio 219c0 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 n \"" \.. 219d0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72$tr
219e0 61 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d  ansaction \"\n].
219f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
21a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
21a10 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
21a20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 21a30 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 21a40 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 21a50 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
21a60 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
21a70 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
21a80 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
21a90 65 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c  ed to rollback l
21aa0 65 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f  eaked transactio
21ab0 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  n \"" \..
21ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72               $tr 21ad0 61 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 ansaction "\", e 21ae0 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 rror: " \n\t$er
21af0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ror \n]..
21b00 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
21b10 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
21b20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
21b30 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  ...        forea
21b40 63 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e  ch db [info conn
21b50 65 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20  ections] {..
21b60 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
21b70 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20  g match \..
21b80 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23           System#
21b90 44 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69  Data#SQLite#SQLi
21ba0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24  teConnection#* $21bb0 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 db]} then {.. 21bc0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 21bd0 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 tch {sql close$
21be0 64 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d  db} error] == 0}
21bf0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
21c00 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 21c10 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 21c20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 21c30 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
21c40 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
21c60 2d 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65  --- closed leake
21c70 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24  d database \"" $21c80 64 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 db \"\n].. 21c90 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21ca0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 21cb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 21cc0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
21cd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
21ce0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 21cf0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 21d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21d10 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 21d20 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 ING: failed to c 21d30 6c 6f 73 65 20 6c 65 61 6b 65 64 20 64 61 74 61 lose leaked data 21d40 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 base \"" \.. 21d50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21d60 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20$db "\", error:
21d70 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e  " \n\t $error \n 21d80 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 21d90 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 21da0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 21db0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 21dc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 21dd0 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 # BUGFIX: Before 21de0 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 calling the nat 21df0 69 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e ive shutdown fun 21e00 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 ction, make sure 21e10 20 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23 both.. # 21e20 20 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 of the 21e30 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 PRAGMA related d 21e40 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 irectory names a 21e50 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 re freed... 21e60 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 21e70 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 eckForSQLiteDire 21e80 63 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c ctories$channel
21e90 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
21ea0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
21eb0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
21ec0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
21ed0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
21ee0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
21ef0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
21f00 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
21f10 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77   sqlite3_shutdow
21f20 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  n..        } res
21f30 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
21f40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
21f50 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21f60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 21f70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
21f80 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
21f90 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
21fa0 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73  - call sqlite3_s
21fb0 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a  hutdown()... ok:
21fc0 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a   " $result \n].. 21fd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 21fe0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 21ff0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
22000 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
22010 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
22020 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 22030 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 22040 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 22050 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 ll sqlite3_shutd 22060 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 own()... error: 22070 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c " \n\t$result \
22080 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
22090 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
220a0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
220b0 20 20 20 70 72 6f 63 20 67 65 74 53 65 74 74 69     proc getSetti
220c0 6e 67 52 65 61 64 43 6f 75 6e 74 20 7b 20 6e 61  ngReadCount { na
220d0 6d 65 20 7b 76 69 61 46 69 6c 65 20 66 61 6c 73  me {viaFile fals
220e0 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  e} } {..      if
220f0 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e   {[haveConstrain
22100 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61  t buildConfigura
22110 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20 5b  tion.Debug] && [
22120 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
22130 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
22140 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
22150 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20   -alias \..
22160 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
22170 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44  ta.SQLite.DebugD
22180 61 74 61 20 47 65 74 53 65 74 74 69 6e 67 52 65  ata GetSettingRe
22190 61 64 43 6f 75 6e 74 73 20 24 76 69 61 46 69 6c  adCounts $viaFil 221a0 65 0d 0a 20 20 20 20 20 20 7d 20 73 65 74 74 69 e.. } setti 221b0 6e 67 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d ngReadCounts] == 221c0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 221d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 221e0 6c 65 6e 67 74 68 20 24 6e 61 6d 65 5d 20 3e 20 length$name] >
221f0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
22200 20 20 20 20 20 69 66 20 7b 5b 24 73 65 74 74 69       if {[$setti 22210 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 54 72 79 ngReadCounts Try 22220 47 65 74 56 61 6c 75 65 20 24 6e 61 6d 65 20 76 GetValue$name v
22230 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  alue]} then {..
22240 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
22250 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 22260 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 22270 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22280 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 "---- setting \" 22290 22 20 24 6e 61 6d 65 20 22 5c 22 20 77 61 73 20 "$name "\" was
222a0 72 65 61 64 20 22 20 24 76 61 6c 75 65 20 22 20  read " $value " 222b0 74 69 6d 65 73 22 20 5c 0d 0a 20 20 20 20 20 20 times" \.. 222c0 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 [expr 222d0 7b 24 76 69 61 46 69 6c 65 20 3f 20 22 20 66 72 {$viaFile ? " fr
222e0 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  om the configura
222f0 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d  tion file" : ""}
22300 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ] \n]....
22310 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c       return $val 22320 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d ue.. }. 22330 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 22340 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 22350 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 nameCount [$set
22360 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43  tingReadCounts C
22370 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20  ount]..
22380 20 73 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20   set valueCount
22390 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  0....          o
223a0 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61  bject foreach -a
223b0 6c 69 61 73 20 70 61 69 72 20 24 73 65 74 74 69  lias pair $setti 223c0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a ngReadCounts {.. 223d0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 incr 223e0 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 valueCount [$pa
223f0 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20  ir Value]....
22400 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $22410 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 22420 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 22430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 22440 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 --- setting \"" 22450 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 [$pair Key] "\"
22460 77 61 73 20 72 65 61 64 20 22 20 5b 24 70 61 69  was read " [$pai 22470 72 20 56 61 6c 75 65 5d 20 5c 0d 0a 20 20 20 20 r Value] \.. 22480 20 20 20 20 20 20 20 20 20 20 20 20 22 20 74 69 " ti 22490 6d 65 73 22 20 5b 65 78 70 72 20 7b 24 76 69 61 mes" [expr {$via
224a0 46 69 6c 65 20 3f 20 22 20 66 72 6f 6d 20 74 68  File ? " from th
224b0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration
224c0 66 69 6c 65 22 20 3a 20 5c 0d 0a 20 20 20 20 20  file" : \..
224d0 20 20 20 20 20 20 20 20 20 20 20 22 22 7d 5d 20             ""}]
224e0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
224f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ....          re
22500 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65  turn [list $name 22510 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e Count$valueCoun
22520 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  t]..        }..
22530 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
22540 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
22550 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74  th $name] > 0} t 22560 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 hen {.. t 22570 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
22580 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22590 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
225a0 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22  "---- setting \"
225b0 22 20 24 6e 61 6d 65 20 22 5c 22 20 77 61 73 20  " $name "\" was 225c0 6e 6f 74 20 72 65 61 64 22 20 5b 65 78 70 72 20 not read" [expr 225d0 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d 0a 20 {$viaFile ? \..
225e0 20 20 20 20 20 20 20 20 20 20 20 22 20 66 72 6f             " fro
225f0 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74  m the configurat
22600 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22 7d 5d  ion file" : ""}]
22610 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c   \n]..      } el
22620 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
22630 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 22640 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 22650 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 22660 2d 2d 2d 2d 20 6e 6f 20 73 65 74 74 69 6e 67 73 ---- no settings 22670 20 77 65 72 65 20 72 65 61 64 22 20 5b 65 78 70 were read" [exp 22680 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 5c 0d r {$viaFile ? \.
22690 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 20 66  .            " f
226a0 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72  rom the configur
226b0 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20 22 22  ation file" : ""
226c0 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  }] \n]..      }.
226d0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
226e0 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  -1..    }.....
226f0 20 20 70 72 6f 63 20 67 65 74 4f 74 68 65 72 43    proc getOtherC
22700 6f 75 6e 74 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d  ount { name } {.
22710 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65  .      if {[have
22720 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64  Constraint build
22730 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65  Configuration.De
22740 62 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b  bug] && [catch {
22750 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  ..        object
22760 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
22770 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73  NonPublic -alias
22780 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22790 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
227a0 74 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74  te.DebugData Get
227b0 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 20  OtherCounts..
227c0 20 20 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73     } otherCounts
227d0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
227e0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
227f0 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65  ing length $name 22800 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 22810 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 24 6f if {[$o
22820 74 68 65 72 43 6f 75 6e 74 73 20 54 72 79 47 65  therCounts TryGe
22830 74 56 61 6c 75 65 20 24 6e 61 6d 65 20 76 61 6c  tValue $name val 22840 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ue]} then {.. 22850 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
22860 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
22870 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
22880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
22890 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e 74 65  --- other counte
228a0 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c 22 20  r \"" $name "\" 228b0 68 61 73 20 76 61 6c 75 65 20 22 20 24 76 61 6c has value "$val
228c0 75 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  ue \n]....
228d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 76 61        return $va 228e0 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lue.. } 228f0 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 22900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 22910 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 6f 74 t nameCount [$ot
22920 68 65 72 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d  herCounts Count]
22930 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
22940 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a  valueCount 0....
22950 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
22960 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20   foreach -alias
22970 70 61 69 72 20 24 6f 74 68 65 72 43 6f 75 6e 74  pair $otherCount 22980 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 22990 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e 74 incr valueCount 229a0 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d 0a [$pair Value]..
229b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
229c0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 229d0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 229e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 229f0 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 "---- other c 22a00 6f 75 6e 74 65 72 20 5c 22 22 20 5b 24 70 61 69 ounter \"" [$pai
22a10 72 20 4b 65 79 5d 20 22 5c 22 20 68 61 73 20 76  r Key] "\" has v
22a20 61 6c 75 65 20 22 20 5c 0d 0a 20 20 20 20 20 20  alue " \..
22a30 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72            [$pair 22a40 20 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 Value] \n].. 22a50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 22a60 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 return [li 22a70 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 24 76 st$nameCount $v 22a80 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 alueCount].. 22a90 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 22aa0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 .. if {[str 22ab0 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65 ing length$name
22ac0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
22ad0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 22ae0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 22af0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 22b00 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 "---- ot 22b10 68 65 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 her counter \"" 22b20 24 6e 61 6d 65 20 22 5c 22 20 68 61 73 20 6e 6f$name "\" has no
22b30 20 76 61 6c 75 65 5c 6e 22 5d 0d 0a 20 20 20 20   value\n"]..
22b40 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
22b50 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 22b60 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 t_channel "---- 22b70 74 68 65 72 65 20 61 72 65 20 6e 6f 20 6f 74 68 there are no oth 22b80 65 72 20 63 6f 75 6e 74 65 72 73 5c 6e 22 0d 0a er counters\n".. 22b90 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 22ba0 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 20 20 return -1.. 22bb0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 }..... proc r 22bc0 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 22bd0 72 63 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 rces {.. 22be0 20 20 20 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 channel {qui 22bf0 65 74 20 66 61 6c 73 65 7d 20 7b 72 65 73 65 74 et false} {reset 22c00 20 74 72 75 65 7d 20 7b 63 6f 6c 6c 65 63 74 20 true} {collect 22c10 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 true} } {.. 22c20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 22c30 3a 20 49 66 20 70 6f 73 73 69 62 6c 65 2c 20 61 : If possible, a 22c40 6c 77 61 79 73 20 72 65 73 65 74 20 74 68 65 20 lways reset the 22c50 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 20 cached assembly 22c60 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 22c70 20 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 # and the 22c80 20 63 61 63 68 65 64 20 58 4d 4c 20 63 6f 6e 66 cached XML conf 22c90 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 20 6e iguration file n 22ca0 61 6d 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ame... #.. 22cb0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 if {[haveSQ 22cc0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e LiteObjectComman 22cd0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 d]} then {.. 22ce0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 22cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 22d00 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 22d10 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 22d20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 22d30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 22d40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 UnsafeNativeMeth 22d50 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ods \.. 22d60 20 20 20 20 20 52 65 73 65 74 43 61 63 68 65 64 ResetCached 22d70 41 73 73 65 6d 62 6c 79 44 69 72 65 63 74 6f 72 AssemblyDirector 22d80 79 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 y.. } err 22d90 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b or] == 0} then { 22da0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 22db0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
22dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
22dd0 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 22de0 2d 20 72 65 73 65 74 20 63 61 63 68 65 64 20 61 - reset cached a 22df0 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 ssembly director 22e00 79 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 y\n".. 22e10 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 22e20 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 e {.. i 22e30 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
22e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
22e50 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 22e60 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 22e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 22e80 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 22e90 6c 65 64 20 74 6f 20 72 65 73 65 74 20 63 61 63 led to reset cac 22ea0 68 65 64 20 61 73 73 65 6d 62 6c 79 20 64 69 72 hed assembly dir 22eb0 65 63 74 6f 72 79 2c 20 22 20 5c 0d 0a 20 20 20 ectory, " \.. 22ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 65 72 "er 22ed0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
22ee0 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
22ef0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
22f00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
22f10 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
22f20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
22f30 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
22f40 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  c \..
22f50 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
22f60 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69  QLite.UnsafeNati
22f70 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20  veMethods \..
22f80 20 20 20 20 20 20 20 20 20 20 20 52 65 73 65 74             Reset
22f90 43 61 63 68 65 64 58 6d 6c 43 6f 6e 66 69 67 46  CachedXmlConfigF
22fa0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20  ileName..
22fb0 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20   } error] == 0}
22fc0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
22fd0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 22fe0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 22ff0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
23000 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 63 61  l "---- reset ca
23010 63 68 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75  ched XML configu
23020 72 61 74 69 6f 6e 20 66 69 6c 65 20 6e 61 6d 65  ration file name
23030 5c 6e 22 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n"..          }
23040 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65  ..        } else
23050 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
23060 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 23070 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 23080 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
23090 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
230a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
230b0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c  == WARNING: fail
230c0 65 64 20 74 6f 20 72 65 73 65 74 20 63 61 63 68  ed to reset cach
230d0 65 64 20 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61  ed XML configura
230e0 74 69 6f 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20  tion " \..
230f0 20 20 20 20 20 20 20 20 20 20 22 66 69 6c 65 20            "file
23100 6e 61 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c  name, error: " \
23110 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a  n\t $error \n].. 23120 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 23130 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 23140 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 23150 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61 # NOTE: If ava 23160 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f ilable, report o 23170 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20 n (and possibly 23180 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74 69 reset) the runti 23190 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 me.. # 231a0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 configuration 231b0 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20 statistics... 231c0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 231d0 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 [haveSQLiteObjec 231e0 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a tCommand] && \.. 231f0 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43 [haveC 23200 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 onstraint buildC 23210 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62 onfiguration.Deb 23220 75 67 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ug]} then {.. 23230 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 23240 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 23250 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 23260 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c s +NonPublic -al 23270 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ias \.. 23280 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 23290 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 .SQLite.DebugDat 232a0 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 61 64 a GetSettingRead 232b0 43 6f 75 6e 74 73 20 66 61 6c 73 65 0d 0a 20 20 Counts false.. 232c0 20 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 52 } settingR 232d0 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d eadCounts] == 0} 232e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 232f0 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 set nameCount 23300 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f [$settingReadCo
23310 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20  unts Count]..
23320 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65         set value
23330 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20  Count 0....
23340 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65       object fore
23350 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20  ach -alias pair
23360 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e  $settingReadCoun 23370 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ts {.. 23380 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 6e incr valueCoun 23390 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 0d t [$pair Value].
233a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
233b0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 233c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 233d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
233e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
233f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23400 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20    "---- setting
23410 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20  \"" [$pair Key] 23420 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 5c "\" was read " \ 23430 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23440 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
23450 5d 20 22 20 74 69 6d 65 73 5c 6e 22 5d 0d 0a 20  ] " times\n"]..
23460 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
23470 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
23480 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese 23490 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 234a0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 234b0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 234c0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 234d0 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 234e0 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 ic -alias \.. 234f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 23500 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 23510 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 61 e.DebugData Clea 23520 72 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e rSettingReadCoun 23530 74 73 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 ts false.. 23540 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d } error] = 23550 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 23560 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 23570 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
23580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23590 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 235a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 235b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 235c0 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 "---- reset se 235d0 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 tting statistics 235e0 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 for the previou 235f0 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 s " \.. 23600 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65$name
23610 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e  Count " names an
23620 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20  d " $valueCount 23630 22 20 76 61 6c 75 65 73 20 72 65 61 64 5c 6e 22 " values read\n" 23640 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ].. 23650 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 23660 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 23670 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
23680 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
23690 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
236a0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 236b0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 236c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 236d0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa 236e0 69 6c 65 64 20 74 6f 20 72 65 73 65 74 20 73 65 iled to reset se 236f0 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 tting statistics 23700 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 for " \.. 23710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 "t 23720 68 65 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e he previous "$n
23730 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73  ameCount " names
23740 20 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75   and " $valueCou 23750 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 nt \.. 23760 20 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 " valu 23770 65 73 20 72 65 61 64 2c 20 65 72 72 6f 72 3a 20 es read, error: 23780 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e " \n\t$error \n
23790 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ]..
237a0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
237b0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
237c0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
237d0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
237e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  {..          obj
237f0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
23800 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c  s +NonPublic -al
23810 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ias \..
23820 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
23830 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74  .SQLite.DebugDat
23840 61 20 47 65 74 53 65 74 74 69 6e 67 52 65 61 64  a GetSettingRead
23850 43 6f 75 6e 74 73 20 74 72 75 65 0d 0a 20 20 20  Counts true..
23860 20 20 20 20 20 7d 20 73 65 74 74 69 6e 67 46 69       } settingFi
23870 6c 65 52 65 61 64 43 6f 75 6e 74 73 5d 20 3d 3d  leReadCounts] ==
23880 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
23890 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f        set nameCo
238a0 75 6e 74 20 5b 24 73 65 74 74 69 6e 67 46 69 6c  unt [$settingFil 238b0 65 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e eReadCounts Coun 238c0 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 t].. se 238d0 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a t valueCount 0.. 238e0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 238f0 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 ct foreach -alia 23900 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67 46 s pair$settingF
23910 69 6c 65 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d  ileReadCounts {.
23920 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 63  .            inc
23930 72 20 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70  r valueCount [$p 23940 61 69 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 air Value].... 23950 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
23960 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
23970 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
23980 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 23990 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 239a0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 239b0 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b -- setting \"" [ 239c0 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77$pair Key] "\" w
239d0 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20  as read " \..
239e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b                 [
239f0 24 70 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74  $pair Value] " t 23a00 69 6d 65 73 20 66 72 6f 6d 20 74 68 65 20 63 6f imes from the co 23a10 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 nfiguration file 23a20 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 23a30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 23a40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 23a50 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b {$reset} then {
23a60 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
23a70 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
23a80 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
23a90 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
23aa0 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73  NonPublic -alias
23ab0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23ac0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
23ad0 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61  a.SQLite.DebugDa
23ae0 74 61 20 43 6c 65 61 72 53 65 74 74 69 6e 67 52  ta ClearSettingR
23af0 65 61 64 43 6f 75 6e 74 73 20 74 72 75 65 0d 0a  eadCounts true..
23b00 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72              } er
23b10 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ror] == 0} then
23b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
23b30 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 23b40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 23b50 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
23b60 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
23b70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
23b80 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65          "---- re
23b90 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 61 74  set setting stat
23ba0 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 20 70  istics for the p
23bb0 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 20 20  revious " \..
23bc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23bd0 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e 61   $nameCount " na 23be0 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 65 mes and "$value
23bf0 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 20 72  Count " values r
23c00 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  ead " \..
23c10 20 20 20 20 20 20 20 20 20 20 20 20 20 22 66 72               "fr
23c20 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61  om the configura
23c30 74 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20  tion file\n"]..
23c40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
23c50 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
23c60 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
23c70 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 23c80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 23c90 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
23ca0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
23cb0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
23cc0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
23cd0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
23ce0 20 74 6f 20 72 65 73 65 74 20 73 65 74 74 69 6e   to reset settin
23cf0 67 20 73 74 61 74 69 73 74 69 63 73 20 66 6f 72  g statistics for
23d00 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
23d10 20 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70            "the p
23d20 72 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43  revious " $nameC 23d30 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 ount " names and 23d40 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c "$valueCount \
23d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23d60 20 20 20 20 20 20 22 20 76 61 6c 75 65 73 20 72        " values r
23d70 65 61 64 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e  ead from the con
23d80 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 2c  figuration file,
23d90 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 5c   error: " \n\t \
23da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
23db0 20 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d        $error \n] 23dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23dd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 23de0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 23df0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23e00 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 23e10 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 .. obje 23e20 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 23e30 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 +NonPublic -ali 23e40 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 as \.. 23e50 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 23e60 53 51 4c 69 74 65 2e 44 65 62 75 67 44 61 74 61 SQLite.DebugData 23e70 20 47 65 74 4f 74 68 65 72 43 6f 75 6e 74 73 0d GetOtherCounts. 23e80 0a 20 20 20 20 20 20 20 20 7d 20 6f 74 68 65 72 . } other 23e90 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 Counts] == 0} th 23ea0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 23eb0 73 65 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 set nameCount [$
23ec0 6f 74 68 65 72 43 6f 75 6e 74 73 20 43 6f 75 6e  otherCounts Coun
23ed0 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  t]..          se
23ee0 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a  t valueCount 0..
23ef0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
23f00 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61  ct foreach -alia
23f10 73 20 70 61 69 72 20 24 6f 74 68 65 72 43 6f 75  s pair $otherCou 23f20 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 nts {.. 23f30 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75 incr valueCou 23f40 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d nt [$pair Value]
23f50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
23f60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 23f70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 23f80 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
23f90 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
23fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23fb0 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63     "---- other c
23fc0 6f 75 6e 74 65 72 20 5c 22 22 20 5b 24 70 61 69  ounter \"" [$pai 23fd0 72 20 4b 65 79 5d 20 22 5c 22 20 68 61 73 20 76 r Key] "\" has v 23fe0 61 6c 75 65 20 22 20 5c 0d 0a 20 20 20 20 20 20 alue " \.. 23ff0 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 [$pa
24000 69 72 20 56 61 6c 75 65 5d 20 5c 6e 5d 0d 0a 20  ir Value] \n]..
24010 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
24020 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
24030 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65         if {$rese 24040 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 24050 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 24060 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 24070 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 24080 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 24090 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 ic -alias \.. 240a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 240b0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 240c0 65 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 61 e.DebugData Clea 240d0 72 4f 74 68 65 72 43 6f 75 6e 74 73 0d 0a 20 20 rOtherCounts.. 240e0 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f } erro 240f0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d r] == 0} then {. 24100 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 24110 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
24120 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
24130 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 24140 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 24150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 24160 20 20 20 20 20 20 22 2d 2d 2d 2d 20 72 65 73 65 "---- rese 24170 74 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 73 t other counters 24180 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 for the previou 24190 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 s " \.. 241a0 20 20 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65$name
241b0 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e  Count " names an
241c0 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20  d " $valueCount 241d0 22 20 76 61 6c 75 65 73 5c 6e 22 5d 0d 0a 20 20 " values\n"].. 241e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 241f0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 24200 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 24210 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
24220 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
24230 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 24240 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 24250 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 24260 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 24270 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 24280 74 6f 20 72 65 73 65 74 20 6f 74 68 65 72 20 63 to reset other c 24290 6f 75 6e 74 65 72 73 20 66 6f 72 20 22 20 5c 0d ounters for " \. 242a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 242b0 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 6f "the previo 242c0 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 us "$nameCount
242d0 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76  " names and " $v 242e0 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 alueCount \.. 242f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24300 20 22 20 76 61 6c 75 65 73 2c 20 65 72 72 6f 72 " values, error 24310 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
24320 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
24330 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
24340 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
24350 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
24360 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
24370 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a   {[haveSQLiteObj
24380 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c  ectCommand] && \
24390 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61 76  ..          [hav
243a0 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  eSQLiteDefineCon
243b0 73 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 56 49  stant INTEROP_VI
243c0 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 20  RTUAL_TABLE] &&
243d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 61  \..          [ha
243e0 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
243f0 6e 73 74 61 6e 74 20 54 52 41 43 4b 5f 4d 45 4d  nstant TRACK_MEM
24400 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e  ORY_BYTES]} then
24410 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
24420 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 24430 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 24440 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
24450 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69  current memory i
24460 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d  n use by SQLiteM
24470 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20  emory... "..
24480 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24490 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
244a0 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object
244b0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
244c0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
244d0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
244e0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c  .Data.SQLite.SQL
244f0 69 74 65 4d 65 6d 6f 72 79 20 62 79 74 65 73 41  iteMemory bytesA
24500 6c 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20  llocated..
24510 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30    } memory] == 0
24520 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
24530 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 24540 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24550 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
24560 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
24570 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c  $memory " bytes\ 24580 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d n"].. } 24590 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 .. } else 245a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 245b0 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e t memory unknown 245c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 245d0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
245e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
245f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 24600 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
24610 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
24620 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   }..        }...
24630 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71  .        if {!$q 24640 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 24650 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
24660 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78  hannel "---- max
24670 69 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75  imum memory in u
24680 73 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f  se by SQLiteMemo
24690 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20  ry... "..
246a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
246b0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
246c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
246d0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
246e0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
246f0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
24700 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65  ta.SQLite.SQLite
24710 4d 65 6d 6f 72 79 20 6d 61 78 69 6d 75 6d 42 79  Memory maximumBy
24720 74 65 73 41 6c 6c 6f 63 61 74 65 64 0d 0a 20 20  tesAllocated..
24730 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20        } memory]
24740 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
24750 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 24760 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 24770 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
24780 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
24790 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79  rgs $memory " by 247a0 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 tes\n"].. 247b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } 247c0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 247d0 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b set memory unk 247e0 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 nown.... 247f0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
24800 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
24810 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 24820 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
24830 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20  emory \n]..
24840 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
24850 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
24860 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 24870 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24880 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
24890 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65  "---- current me
248a0 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
248b0 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20  QLite... "..
248c0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
248d0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
248e0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
248f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
24900 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
24910 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
24920 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
24930 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
24940 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
24950 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
24960 74 69 76 65 4d 65 74 68 6f 64 73 20 73 71 6c 69  tiveMethods sqli
24970 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 73 65 64 0d  te3_memory_used.
24980 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72  .        } memor
24990 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  y] == 0} then {.
249a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
249b0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 249c0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 249d0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
249e0 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22  ndArgs $memory " 249f0 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 bytes\n"].. 24a00 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 24a10 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 24a20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 24a30 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 # NOTE: Maybe 24a40 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 the SQLite core 24a50 6c 69 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 library is unava 24a60 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 ilable?.. 24a70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 24a80 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f set memory unkno 24a90 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 wn.... 24aa0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
24ab0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
24ac0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 24ad0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
24ae0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
24af0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
24b00 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
24b10 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d  .        set mem
24b20 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d  ory unavailable.
24b30 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21  ...        if {!
24b40 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 24b50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 24b60 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
24b70 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d  Args $memory \n] 24b80 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 24b90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se 24ba0 74 20 72 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 t result$memory
24bb0 3b 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e  ; # NOTE: Return
24bc0 20 6d 65 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74   memory in-use t
24bd0 6f 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d  o our caller....
24be0 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69  .      if {!$qui 24bf0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 24c00 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
24c10 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d  el "---- maximum
24c20 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62   memory in use b
24c30 79 20 53 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20  y SQLite... "..
24c40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
24c50 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f  if {[haveSQLiteO
24c60 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74  bjectCommand]} t
24c70 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
24c80 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  f {[catch {..
24c90 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
24ca0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
24cb0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
24cc0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
24cd0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66  ata.SQLite.Unsaf
24ce0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c  eNativeMethods \
24cf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24d00 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68  sqlite3_memory_h
24d10 69 67 68 77 61 74 65 72 20 30 0d 0a 20 20 20 20  ighwater 0..
24d20 20 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d      } memory] ==
24d30 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
24d40 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 24d50 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 24d60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
24d70 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
24d80 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65  s $memory " byte 24d90 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 s\n"].. 24da0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 24db0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 24dc0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 24dd0 4f 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 OTE: Maybe the S 24de0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 QLite core libra 24df0 72 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c ry is unavailabl 24e00 65 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d e?.. #. 24e10 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d . set m 24e20 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d emory unknown... 24e30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 24e40 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
24e50 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
24e60 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 24e70 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c ndArgs$memory \
24e80 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  n]..          }.
24e90 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
24ea0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
24eb0 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75      set memory u
24ec0 6e 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20  navailable....
24ed0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 24ee0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 24ef0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
24f00 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
24f10 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20  $memory \n].. 24f20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 24f30 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f ... if {$co
24f40 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  llect} then {..
24f50 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61         collectGa
24f60 72 62 61 67 65 20 24 63 68 61 6e 6e 65 6c 0d 0a  rbage $channel.. 24f70 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 24f80 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
24f90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
24fa0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 24fb0 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 -- current memor 24fc0 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 y in use by the 24fd0 43 4c 52 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 CLR... ".. 24fe0 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 24ff0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 haveSQLiteObject 25000 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b Command]} then { 25010 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 .. if {[c 25020 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 25030 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 25040 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 GC GetTotalMemor 25050 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 y false.. 25060 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d } memory] == 0} 25070 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 25080 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 69 if {[string i 25090 73 20 69 6e 74 65 67 65 72 20 2d 73 74 72 69 63 s integer -stric 250a0 74 20 24 6d 65 6d 6f 72 79 5d 7d 20 74 68 65 6e t$memory]} then
250b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
250c0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 250d0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 250e0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
250f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d  l [appendArgs $m 25100 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 emory " bytes\n" 25110 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 25120 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 25130 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 25140 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 69 6e 76 set memory inv 25150 61 6c 69 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 alid.... 25160 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
25170 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
25180 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 25190 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 251a0 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
251b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
251c0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
251d0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
251e0 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72         set memor
251f0 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20  y unknown....
25200 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 25210 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 25220 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
25230 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
25240 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a  gs $memory \n].. 25250 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 25260 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 }.. } 25270 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 25280 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 set memory unava 25290 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 ilable.... 252a0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
252b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
252c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 252d0 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
252e0 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ory \n]..
252f0 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
25300 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 25310 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ult.. }..... 25320 20 20 20 70 72 6f 63 20 72 65 73 65 74 53 51 4c proc resetSQL 25330 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 7b iteDirectories { 25340 20 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 20 channel native 25350 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 25360 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 # NOTE: Atte 25370 6d 70 74 20 74 6f 20 75 73 65 20 74 68 65 20 6e mpt to use the n 25380 61 74 69 76 65 20 41 50 49 20 28 76 69 61 20 74 ative API (via t 25390 68 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d he managed assem 253a0 62 6c 79 29 3f 0d 0a 20 20 20 20 20 20 23 0d 0a bly)?.. #.. 253b0 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76 if {$nativ
253c0 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
253d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
253e0 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65 20 73  NOTE: Now make s
253f0 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
25400 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64   and temporary d
25410 69 72 65 63 74 6f 72 69 65 73 20 61 72 65 0d 0a  irectories are..
25420 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
25430 72 65 73 65 74 20 74 68 65 69 72 20 64 65 66 61  reset their defa
25440 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63  ult values, whic
25450 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c  h should be null
25460 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20   for both...
25470 20 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63      #       Sinc
25480 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69  e the sqlite3_wi
25490 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
254a0 79 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76  y function is av
254b0 61 69 6c 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20  ailable,..
254c0 20 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74    #       use it
254d0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
254e0 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
254f0 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 65 78 20  ndex 1} {$index 25500 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e 64 65 78 < 3} {incr index 25510 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 } {.. i 25520 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 25530 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 25540 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 25550 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 25560 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 25570 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 25580 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 25590 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. 255a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 sqlite3_wi 255b0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 255c0 79 20 24 69 6e 64 65 78 20 6e 75 6c 6c 0d 0a 20 y$index null..
255d0 20 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c           } resul
255e0 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  t] == 0} then {.
255f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
25600 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 25610 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 25620 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 25630 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 call sqlite3_wi 25640 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 n32_set_director 25650 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 y("$index \..
25660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c                ",
25670 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20   null)... ok: "
25680 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20  $result \n].. 25690 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 256a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 256b0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
256c0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
256d0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
256e0 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69   call sqlite3_wi
256f0 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
25700 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20  y(" $index \.. 25710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c ", 25720 20 6e 75 6c 6c 29 2e 2e 2e 20 65 72 72 6f 72 3a null)... error: 25730 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 " \n\t$result
25740 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
25750 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
25760 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
25770 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25780 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65  # NOTE: Now make
25790 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
257a0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
257b0 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65   directories are
257c0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
257d0 20 20 72 65 73 65 74 20 74 68 65 69 72 20 64 65    reset their de
257e0 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20 77 68  fault values, wh
257f0 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20 6e 75  ich should be nu
25800 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20  ll for both...
25810 20 20 20 20 20 20 23 20 20 20 20 20 20 20 53 69        #       Si
25820 6e 63 65 20 74 68 65 20 73 71 6c 69 74 65 33 5f  nce the sqlite3_
25830 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
25840 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65  ory function doe
25850 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23  s not..        #
25860 20 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f         appear to
25870 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75   be available, u
25880 73 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65  se the associate
25890 64 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  d PRAGMA command
258a0 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
258b0 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20     instead...
258c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
258d0 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f 72  foreach director
258e0 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74 6f  y [list data_sto
258f0 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65 6d  re_directory tem
25900 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
25910 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  y] {..
25920 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41  set sql [appendA
25930 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64  rgs "PRAGMA " $d 25940 69 72 65 63 74 6f 72 79 20 22 20 3d 20 5c 22 5c irectory " = \"\ 25950 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ";"].... 25960 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 if {[catch {ex 25970 65 63 75 74 65 53 71 6c 20 24 73 71 6c 7d 20 72 ecuteSql$sql} r
25980 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65  esult] == 0} the
25990 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
259a0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 259b0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 259c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 259d0 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 ---- execute PRA 259e0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 GMA "$directory
259f0 20 22 2e 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d   "... ok: \"" \.
25a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
25a10 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a   $result \"\n].. 25a20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 25a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25a40 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
25a50 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
25a60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
25a70 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41 47  --- execute PRAG
25a80 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20  MA " $directory 25a90 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d "... error: " \. 25aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 25ab0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
25ac0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
25ad0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
25ae0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
25af0 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53    proc checkForS
25b00 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73  QLiteDirectories
25b10 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 73 65   { channel {rese
25b20 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
25b30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
25b40 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68  OTE: Check if th
25b50 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f  e sqlite3_win32_
25b60 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75  set_directory fu
25b70 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c 61  nction is availa
25b80 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ble...      #..
25b90 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 25ba0 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 25bb0 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 25bc0 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73 71 6c for function sql 25bd0 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 ite3_win32_set_d 25be0 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d 0a 0d irectory... "... 25bf0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 25c00 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 61 6c # NOTE: This cal 25c10 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74 65 33 l to the sqlite3 25c20 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 _win32_set_direc 25c30 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 75 73 tory function us 25c40 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 es the.. # 25c50 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20 76 61 invalid va 25c60 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20 66 69 lue 0 for the fi 25c70 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 rst argument. T 25c80 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73 69 his code is desi 25c90 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 gned.. # 25ca0 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69 66 20 to check if 25cb0 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75 6e 63 calling the func 25cc0 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73 65 20 tion will raise 25cd0 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28 69 2e an exception (i. 25ce0 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 e... # 25cf0 20 20 74 68 65 20 61 63 74 75 61 6c 20 72 65 73 the actual res 25d00 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e 63 74 ult of the funct 25d10 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 ion does not mat 25d20 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73 20 6e ter as long as n 25d30 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 o.. # 25d40 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 directory is ch 25d50 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20 20 23 anged)... # 25d60 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 57 .. if {[isW 25d70 69 6e 64 6f 77 73 5d 20 26 26 20 5b 63 61 74 63 indows] && [catc 25d80 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a h {.. obj 25d90 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 25da0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 25db0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 25dc0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 em.Data.SQLite.U 25dd0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f nsafeNativeMetho 25de0 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ds \.. 25df0 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f sqlite3_win32_ 25e00 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 30 20 set_directory 0 25e10 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 7d 5d 20 3d null.. }] = 25e20 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 25e30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 25e40 23 20 4e 4f 54 45 3a 20 43 61 6c 6c 69 6e 67 20 # NOTE: Calling 25e50 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 25e60 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 25e70 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f function does no 25e80 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 t.. # 25e90 20 20 20 63 61 75 73 65 20 61 6e 20 65 78 63 65 cause an exce 25ea0 70 74 69 6f 6e 3b 20 74 68 65 72 65 66 6f 72 65 ption; therefore 25eb0 2c 20 69 74 20 6d 75 73 74 20 62 65 20 61 76 61 , it must be ava 25ec0 69 6c 61 62 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 ilable (i.e... 25ed0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 76 # ev 25ee0 65 6e 20 74 68 6f 75 67 68 20 69 74 20 73 68 6f en though it sho 25ef0 75 6c 64 20 72 65 74 75 72 6e 20 61 20 66 61 69 uld return a fai 25f00 6c 75 72 65 20 72 65 74 75 72 6e 20 63 6f 64 65 lure return code 25f10 20 69 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 in this.. 25f20 20 20 23 20 20 20 20 20 20 20 63 61 73 65 29 2e # case). 25f30 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 25f40 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 25f50 6e 74 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 nt sqlite3_win32 25f60 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 0d 0a _set_directory.. 25f70 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 25f80 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a$channel yes\n..
25f90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
25fa0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65       # NOTE: Doe
25fb0 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e  s our caller wan
25fc0 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64  t to reset the d
25fd0 69 72 65 63 74 6f 72 69 65 73 3f 0d 0a 20 20 20  irectories?..
25fe0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
25ff0 69 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e  if {$reset} then 26000 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 {.. re 26010 73 65 74 53 51 4c 69 74 65 44 69 72 65 63 74 6f setSQLiteDirecto 26020 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 74 72 ries$channel tr
26030 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  ue..        }..
26040 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
26050 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 26060 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 annel no\n.... 26070 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 26080 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75 # NOTE: Does ou 26090 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f r caller want to 260a0 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63 reset the direc 260b0 74 6f 72 69 65 73 3f 20 20 54 68 69 73 20 63 61 tories? This ca 260c0 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20 n only.. 260d0 23 20 20 20 20 20 20 20 62 65 20 70 65 72 66 6f # be perfo 260e0 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 rmed if SQLite i 260f0 73 20 6c 6f 61 64 65 64 20 61 6e 64 20 72 65 61 s loaded and rea 26100 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 dy for use by th 26110 65 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 e test.. 26120 23 20 20 20 20 20 20 20 73 75 69 74 65 2e 0d 0a # suite... 26130 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 26140 20 20 20 69 66 20 7b 24 72 65 73 65 74 20 26 26 if {$reset &&
26150 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d   [isSQLiteReady]
26160 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
26170 20 20 20 20 72 65 73 65 74 53 51 4c 69 74 65 44      resetSQLiteD
26180 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e  irectories $chan 26190 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 nel false.. 261a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 261b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 261c0 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c 79 2c # NOTE: Finally, 261d0 20 73 68 6f 77 20 74 68 65 20 63 75 72 72 65 6e show the curren 261e0 74 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 t value of the d 261f0 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70 atabase and temp 26200 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 orary.. # 26210 20 20 20 20 20 64 69 72 65 63 74 6f 72 69 65 73 directories 26220 2e 20 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 . This can only 26230 20 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 be performed if 26240 20 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 SQLite is loade 26250 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # 26260 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 26270 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 se by the test s 26280 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a uite... #.. 26290 20 20 20 20 20 20 69 66 20 7b 5b 69 73 53 51 4c if {[isSQL 262a0 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 iteReady]} then 262b0 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 {.. forea 262c0 63 68 20 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 ch directory [li 262d0 73 74 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 st data_store_di 262e0 72 65 63 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f rectory temp_sto 262f0 72 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d re_directory] {. 26300 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 26310 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
26320 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 68 65 63  dArgs "---- chec
26330 6b 69 6e 67 20 22 20 24 64 69 72 65 63 74 6f 72  king " $director 26340 79 20 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 y "... "].... 26350 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b set sql [ 26360 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 appendArgs "PRAG 26370 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 MA "$directory
26380 5c 3b 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  \;]....
26390 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 78 65   if {[catch {exe
263a0 63 75 74 65 53 71 6c 20 24 73 71 6c 20 73 63 61  cuteSql $sql sca 263b0 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 lar} result] == 263c0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 263d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
263e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
263f0 73 20 22 6f 6b 3a 20 5c 22 22 20 24 72 65 73 75  s "ok: \"" $resu 26400 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 lt \"\n].. 26410 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 26420 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 26430 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
26440 41 72 67 73 20 22 65 72 72 6f 72 3a 20 22 20 5c  Args "error: " \
26450 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  n\t $result \n]. 26460 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 26470 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 26480 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 26490 70 72 6f 63 20 6c 6f 61 64 53 51 4c 69 74 65 54 proc loadSQLiteT 264a0 65 73 74 53 65 74 74 69 6e 67 73 20 7b 20 63 68 estSettings { ch 264b0 61 6e 6e 65 6c 20 7b 73 75 66 66 69 78 20 22 22 annel {suffix "" 264c0 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 } {quiet false} 264d0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 264e0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 264f0 20 6c 6f 61 64 69 6e 67 20 74 68 65 20 73 65 74 loading the set 26500 74 69 6e 67 73 20 69 66 20 74 68 65 69 72 20 75 tings if their u 26510 73 61 67 65 20 68 61 73 20 62 65 65 6e 20 64 69 sage has been di 26520 73 61 62 6c 65 64 2e 0d 0a 20 20 20 20 20 20 23 sabled... # 26530 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e .. if {![in 26540 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 fo exists ::no(s 26550 71 6c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 qliteTestSetting 26560 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 26570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 26580 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 63 75 73 # NOTE: Load cus 26590 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61 6e 64 tom per-user and 265a0 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20 74 65 73 /or per-host tes 265b0 74 20 73 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d t settings now.. 265c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 265d0 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 265e0 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 ists ::tcl_platf 265f0 6f 72 6d 28 75 73 65 72 29 5d 7d 20 74 68 65 6e orm(user)]} then 26600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 26610 74 20 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 t userSettingsFi 26620 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 leName [file joi 26630 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 n [getCommonDire 26640 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 ctory] \.. 26650 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA 26660 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 rgs settings$su
26670 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c  ffix . $::tcl_pl 26680 61 74 66 6f 72 6d 28 75 73 65 72 29 20 2e 65 61 atform(user) .ea 26690 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 gle]].... 266a0 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 266b0 73 74 73 20 24 75 73 65 72 53 65 74 74 69 6e 67 sts$userSetting
266c0 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  sFileName]} then
266d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
266e0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 266f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26700 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
26710 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
26720 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
26730 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67     "---- loading
26740 20 70 65 72 2d 75 73 65 72 20 74 65 73 74 20 73   per-user test s
26750 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22  ettings file \""
26760 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
26770 20 20 20 20 20 20 24 75 73 65 72 53 65 74 74 69        $userSetti 26780 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e ngsFileName \".. 26790 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 .\n].. 267a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 267b0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 267c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 . u 267d0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 plevel 1 [list s 267e0 6f 75 72 63 65 20 24 75 73 65 72 53 65 74 74 69 ource$userSetti
267f0 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20  ngsFileName]..
26800 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f            } erro
26810 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
26820 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$26830 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 26840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 26850 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
26860 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
26870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26880 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
26890 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70  failed to load p
268a0 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73  er-user settings
268b0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
268c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
268d0 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69   $userSettingsFi 268e0 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f leName "\", erro 268f0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
26900 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
26910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
26920 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
26930 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
26940 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 26950 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 26960 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
26970 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
26980 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
26990 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
269a0 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70  kipped loading p
269b0 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74  er-user test set
269c0 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c  tings file \"" \
269d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
269e0 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67      $userSetting 269f0 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 sFileName "\", i 26a00 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist 26a10 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 26a20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 26a30 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... 26a40 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 ######### 26a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26a70 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26a80 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a ##############.. 26a90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 .. if {[i 26aa0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c nfo exists ::tcl 26ab0 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d _platform(host)] 26ac0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 26ad0 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 74 set hostSett 26ae0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69 ingsFileName [fi 26af0 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d le join [getComm 26b00 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a onDirectory] \.. 26b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 [a 26b20 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e ppendArgs settin 26b30 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a gs$suffix . $:: 26b40 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 tcl_platform(hos 26b50 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 t) .eagle]].... 26b60 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 if {[fi 26b70 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 53 le exists$hostS
26b80 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d  ettingsFileName]
26b90 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
26ba0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 26bb0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 26bc0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
26bd0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
26be0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
26bf0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c           "---- l
26c00 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20  oading per-host
26c10 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  test settings fi
26c20 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
26c30 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73              $hos 26c40 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 26c50 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 e \"...\n].. 26c60 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 26c70 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 if {[ca 26c80 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 26c90 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 20 5b uplevel 1 [ 26ca0 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73 list source$hos
26cb0 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
26cc0 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e]..
26cd0 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b  } error]} then {
26ce0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26cf0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 26d00 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26d10 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
26d20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
26d30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
26d40 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
26d50 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
26d60 6c 6f 61 64 20 70 65 72 2d 68 6f 73 74 20 73 65  load per-host se
26d70 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
26d80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
26d90 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74         $hostSett 26da0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 ingsFileName "\" 26db0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 26dc0 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20$error \n]..
26dd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
26de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
26df0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
26e00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
26e10 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 26e20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 26e30 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
26e40 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
26e50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26e60 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c 6f 61  ---- skipped loa
26e70 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 74 65  ding per-host te
26e80 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  st settings file
26e90 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
26ea0 20 20 20 20 20 20 20 20 20 20 24 68 6f 73 74 53            $hostS 26eb0 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 ettingsFileName 26ec0 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 "\", it does not 26ed0 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 exist\n"].. 26ee0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 26ef0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 26f00 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. }.. 26f10 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 }..... proc c 26f20 6f 70 79 53 61 6d 70 6c 65 44 61 74 61 62 61 73 opySampleDatabas 26f30 65 46 69 6c 65 73 20 7b 7d 20 7b 0d 0a 20 20 20 eFiles {} {.. 26f40 20 20 20 75 70 6c 65 76 65 6c 20 31 20 7b 0d 0a uplevel 1 {.. 26f50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 26f60 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 # NOTE: Copy 26f70 28 6f 72 20 72 65 2d 63 6f 70 79 29 20 74 68 65 (or re-copy) the 26f80 20 72 65 66 65 72 65 6e 63 65 20 64 61 74 61 62 reference datab 26f90 61 73 65 20 66 69 6c 65 20 75 73 65 64 20 66 6f ase file used fo 26fa0 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 r this.. 26fb0 23 20 20 20 20 20 20 20 75 6e 69 74 20 74 65 73 # unit tes 26fc0 74 20 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 t to the build d 26fd0 69 72 65 63 74 6f 72 79 20 69 6e 20 63 61 73 65 irectory in case 26fe0 20 69 74 20 68 61 73 20 62 65 65 6e 20 63 68 61 it has been cha 26ff0 6e 67 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20 nged.. # 27000 20 20 20 20 20 20 62 79 20 61 20 70 72 65 76 69 by a previ 27010 6f 75 73 20 74 65 73 74 20 72 75 6e 2e 0d 0a 20 ous test run... 27020 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 27030 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 file copy -for 27040 63 65 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 ce$northwindEfD
27050 62 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20  bFile \..
27060 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
27070 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  etBuildDirectory
27080 20 74 72 75 65 5d 20 5b 66 69 6c 65 20 74 61 69   true] [file tai
27090 6c 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62  l $northwindEfDb 270a0 46 69 6c 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d File]].. }. 270b0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 270c0 72 6f 63 20 6d 6f 76 65 54 65 73 74 4c 6f 67 46 roc moveTestLogF 270d0 69 6c 65 20 7b 20 70 61 74 68 20 7d 20 7b 0d 0a ile { path } {.. 270e0 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 270f0 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6c 6f exists ::test_lo 27100 67 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 g] && [file exis 27110 74 73 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 5d 7d ts$::test_log]}
27120 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
27130 20 73 65 74 20 6f 6c 64 5f 74 65 73 74 5f 6c 6f   set old_test_lo
27140 67 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20  g $::test_log.. 27150 20 20 20 20 20 20 20 73 65 74 20 6e 65 77 5f 74 set new_t 27160 65 73 74 5f 6c 6f 67 20 5b 66 69 6c 65 20 6a 6f est_log [file jo 27170 69 6e 20 24 70 61 74 68 20 5b 66 69 6c 65 20 74 in$path [file t
27180 61 69 6c 20 24 6f 6c 64 5f 74 65 73 74 5f 6c 6f  ail $old_test_lo 27190 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 g]].... f 271a0 69 6c 65 20 63 6f 70 79 20 24 6f 6c 64 5f 74 65 ile copy$old_te
271b0 73 74 5f 6c 6f 67 20 24 6e 65 77 5f 74 65 73 74  st_log $new_test 271c0 5f 6c 6f 67 3b 20 66 69 6c 65 20 64 65 6c 65 74 _log; file delet 271d0 65 20 24 6f 6c 64 5f 74 65 73 74 5f 6c 6f 67 0d e$old_test_log.
271e0 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74  .        set ::t
271f0 65 73 74 5f 6c 6f 67 20 24 6e 65 77 5f 74 65 73  est_log $new_tes 27200 74 5f 6c 6f 67 0d 0a 0d 0a 20 20 20 20 20 20 20 t_log.... 27210 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 if {[info exist 27220 73 20 3a 3a 74 65 73 74 5f 6c 6f 67 5f 70 61 74 s ::test_log_pat 27230 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 h]} then {.. 27240 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 set ::test 27250 5f 6c 6f 67 5f 70 61 74 68 20 24 70 61 74 68 0d _log_path$path.
27260 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
27270 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 27280 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 27290 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 272a0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 "---- mov 272b0 65 64 20 74 65 73 74 20 6c 6f 67 20 66 72 6f 6d ed test log from 272c0 20 5c 22 22 20 24 6f 6c 64 5f 74 65 73 74 5f 6c \""$old_test_l
272d0 6f 67 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d  og "\" to \"" \.
272e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 65  .            $ne 272f0 77 5f 74 65 73 74 5f 6c 6f 67 20 5c 22 5c 6e 5d w_test_log \"\n] 27300 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d .. }.. } 27310 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 ..... proc sh 27320 6f 77 53 51 4c 69 74 65 42 75 69 6c 64 50 61 72 owSQLiteBuildPar 27330 61 6d 65 74 65 72 73 20 7b 20 63 68 61 6e 6e 65 ameters { channe 27340 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a l } {.. #.. 27350 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 27360 65 63 6b 20 69 66 20 74 68 65 20 6e 61 74 69 76 eck if the nativ 27370 65 20 62 75 69 6c 64 20 66 6c 61 67 20 68 61 73 e build flag has 27380 20 62 65 65 6e 20 66 6f 72 63 69 62 6c 79 20 73 been forcibly s 27390 65 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 et... #.. 273a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
273b0 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
273c0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
273d0 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
273e0 51 4c 69 74 65 20 62 75 69 6c 64 20 6e 61 74 69  QLite build nati
273f0 76 65 20 6f 76 65 72 72 69 64 65 2e 2e 2e 20 22  ve override... "
27400 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 61  ....      set na
27410 74 69 76 65 20 5b 67 65 74 42 75 69 6c 64 4e 61  tive [getBuildNa
27420 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  tive]....      i
27430 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
27440 68 20 24 6e 61 74 69 76 65 5d 20 3e 20 30 7d 20  h $native] > 0} 27450 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 27460 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 addConstraint [a 27470 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 4e ppendArgs buildN 27480 61 74 69 76 65 2e 20 24 6e 61 74 69 76 65 5d 0d ative.$native].
27490 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $274a0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 274b0 72 67 73 20 5c 22 20 24 6e 61 74 69 76 65 20 5c rgs \"$native \
274c0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  "\n]..      } el
274d0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64  se {..        ad
274e0 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c  dConstraint buil
274f0 64 4e 61 74 69 76 65 2e 6e 6f 6e 65 0d 0a 20 20  dNative.none..
27500 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 27510 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 nnel <none>\n.. 27520 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 27530 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 27540 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 Check the curre 27550 6e 74 20 62 75 69 6c 64 20 79 65 61 72 2e 20 20 nt build year. 27560 42 61 73 69 63 61 6c 6c 79 2c 20 74 68 69 73 20 Basically, this 27570 69 6e 64 69 63 61 74 65 73 0d 0a 20 20 20 20 20 indicates.. 27580 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 76 # which v 27590 65 72 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c ersion of MSBuil 275a0 64 20 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 d and/or Visual 275b0 53 74 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 Studio was used 275c0 74 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 to.. # 275d0 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 compile the as 275e0 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 sembly binaries 275f0 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 under test... 27600 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 #.. tput 27610 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 s$channel \..
27620 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
27630 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
27640 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
27650 69 6c 64 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d  ild year... "...
27660 0a 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20  .      set year
27670 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a  [getBuildYear]..
27680 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
27690 69 6e 67 20 6c 65 6e 67 74 68 20 24 79 65 61 72  ing length $year 276a0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 276b0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 276c0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 276d0 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 buildYear.$yea
276e0 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74  r]..        tput
276f0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 27700 6e 64 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 ndArgs \"$year
27710 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
27720 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  lse {..        a
27730 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69  ddConstraint bui
27740 6c 64 59 65 61 72 2e 6e 6f 6e 65 0d 0a 20 20 20  ldYear.none..
27750 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 27760 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 nel <none>\n.. 27770 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74 }.... t 27780 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d puts$channel \.
27790 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d  .          "----
277a0 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79   checking for Sy
277b0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
277c0 20 62 75 69 6c 64 20 6e 61 74 69 76 65 20 79 65   build native ye
277d0 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  ar... "....
277e0 20 73 65 74 20 79 65 61 72 20 5b 67 65 74 42 75   set year [getBu
277f0 69 6c 64 4e 61 74 69 76 65 59 65 61 72 5d 0d 0a  ildNativeYear]..
27800 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
27810 69 6e 67 20 6c 65 6e 67 74 68 20 24 79 65 61 72  ing length $year 27820 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 27830 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 27840 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 27850 20 62 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72 buildNativeYear 27860 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 20 20 .$year]..
27870 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 27880 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 [appendArgs \" 27890 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 20 20 20$year \"\n]..
278a0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
278b0 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
278c0 6e 74 20 62 75 69 6c 64 4e 61 74 69 76 65 59 65  nt buildNativeYe
278d0 61 72 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20  ar.none..
278e0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 278f0 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 <none>\n.. 27900 7d 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 }.... tputs 27910 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20$channel \..
27920 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
27930 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
27940 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69  .Data.SQLite bui
27950 6c 64 20 70 6c 61 74 66 6f 72 6d 2e 2e 2e 20 22  ld platform... "
27960 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 70 6c  ....      set pl
27970 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64  atform [getBuild
27980 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d 0d 0a  Platform true]..
27990 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
279a0 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74  ing length $plat 279b0 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 form] > 0} then 279c0 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f {.. addCo 279d0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 279e0 41 72 67 73 20 62 75 69 6c 64 50 6c 61 74 66 6f Args buildPlatfo 279f0 72 6d 2e 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a rm.$platform]..
27a00 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 27a10 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 27a20 67 73 20 5c 22 20 24 70 6c 61 74 66 6f 72 6d 20 gs \"$platform
27a30 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65  \"\n]..      } e
27a40 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  lse {..        a
27a50 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69  ddConstraint bui
27a60 6c 64 50 6c 61 74 66 6f 72 6d 2e 6e 6f 6e 65 0d  ldPlatform.none.
27a70 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $27a80 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e channel <none>\n 27a90 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 27aa0 20 20 20 73 65 74 20 61 72 63 68 69 74 65 63 74 set architect 27ab0 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 75 72 ure [architectur 27ac0 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 70 6c eForPlatform$pl
27ad0 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
27ae0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 27af0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d \.. "-- 27b00 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for 27b10 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 27b20 74 65 20 62 75 69 6c 64 20 61 72 63 68 69 74 65 te build archite 27b30 63 74 75 72 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 cture... ".... 27b40 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 27b50 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 length$architec
27b60 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ture] > 0} then
27b70 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  {..        addCo
27b80 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
27b90 41 72 67 73 20 62 75 69 6c 64 41 72 63 68 69 74  Args buildArchit
27ba0 65 63 74 75 72 65 2e 20 24 61 72 63 68 69 74 65  ecture. $archite 27bb0 63 74 75 72 65 5d 0d 0a 20 20 20 20 20 20 20 20 cture].. 27bc0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
27bd0 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 61  appendArgs \" $a 27be0 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 5c 6e rchitecture \"\n 27bf0 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 27c00 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f {.. addCo 27c10 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 41 72 nstraint buildAr 27c20 63 68 69 74 65 63 74 75 72 65 2e 6e 6f 6e 65 0d chitecture.none. 27c30 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
27c40 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e  channel <none>\n
27c50 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
27c60 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
27c70 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 63 75  TE: Check the cu
27c80 72 72 65 6e 74 20 62 75 69 6c 64 20 2e 4e 45 54  rrent build .NET
27c90 20 46 72 61 6d 65 77 6f 72 6b 2e 20 20 42 61 73   Framework.  Bas
27ca0 69 63 61 6c 6c 79 2c 20 74 68 69 73 0d 0a 20 20  ically, this..
27cb0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 64 69      #       indi
27cc0 63 61 74 65 73 20 77 68 69 63 68 20 76 65 72 73  cates which vers
27cd0 69 6f 6e 20 6f 66 20 74 68 65 20 2e 4e 45 54 20  ion of the .NET
27ce0 46 72 61 6d 65 77 6f 72 6b 20 69 73 20 62 65 69  Framework is bei
27cf0 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ng..      #
27d00 20 20 75 73 65 64 20 62 79 20 74 68 65 20 61 73    used by the as
27d10 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20  sembly binaries
27d20 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20  under test...
27d30 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74     #..      tput
27d40 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20  s $channel \.. 27d50 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 27d60 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 27d70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 27d80 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f ild .NET Framewo 27d90 72 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 rk... ".... 27da0 20 73 65 74 20 6e 65 74 46 78 20 5b 67 65 74 42 set netFx [getB 27db0 75 69 6c 64 4e 65 74 46 78 5d 0d 0a 0d 0a 20 20 uildNetFx].... 27dc0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 27dd0 6c 65 6e 67 74 68 20 24 6e 65 74 46 78 5d 20 3e length$netFx] >
27de0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
27df0 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
27e00 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
27e10 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e 20 24 6e  ildFramework. $n 27e20 65 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 etFx].. t 27e30 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
27e40 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 6e 65  ppendArgs \" $ne 27e50 74 46 78 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 tFx \"\n].. 27e60 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 27e70 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 27e80 20 62 75 69 6c 64 46 72 61 6d 65 77 6f 72 6b 2e buildFramework. 27e90 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 none.. tp 27ea0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f uts$channel <no
27eb0 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  ne>\n..      }..
27ec0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
27ed0 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
27ee0 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
27ef0 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20   configuration.
27f00 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72   This should nor
27f10 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  mally..      #
27f20 20 20 20 20 20 62 65 20 65 69 74 68 65 72 20 22       be either "
27f30 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 61  Debug" or "Relea
27f40 73 65 22 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  se"...      #..
27f50 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 27f60 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 nel \.. 27f70 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 "---- checking 27f80 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e for System.Data. 27f90 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e SQLite build con 27fa0 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d figuration... ". 27fb0 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 6e ... set con 27fc0 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 figuration [getB 27fd0 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 27fe0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b n].... if { 27ff0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
28000 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e  configuration] >
28010 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
28020 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
28030 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75  t [appendArgs bu
28040 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
28050 2e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  . $configuration 28060 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ].. tputs 28070 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
28080 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 67  dArgs \" $config 28090 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 20 uration \"\n].. 280a0 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 280b0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 280c0 61 69 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 aint buildConfig 280d0 75 72 61 74 69 6f 6e 2e 6e 6f 6e 65 0d 0a 20 20 uration.none.. 280e0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
280f0 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20  nnel <none>\n..
28100 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
28110 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
28120 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
28130 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  nt build configu
28140 72 61 74 69 6f 6e 20 73 75 66 66 69 78 2e 20 20  ration suffix.
28150 54 68 69 73 20 77 69 6c 6c 0d 0a 20 20 20 20 20  This will..
28160 20 23 20 20 20 20 20 20 20 6e 6f 72 6d 61 6c 6c   #       normall
28170 79 20 62 65 20 65 69 74 68 65 72 20 22 4e 65 74  y be either "Net
28180 53 74 61 6e 64 61 72 64 32 30 22 20 6f 72 20 22  Standard20" or "
28190 4e 65 74 53 74 61 6e 64 61 72 64 32 31 22 20 6f  NetStandard21" o
281a0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
281b0 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
281c0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
281d0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 281e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d \.. "- 281f0 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 --- checking for 28200 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 28210 69 74 65 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 ite build config 28220 75 72 61 74 69 6f 6e 20 73 75 66 66 69 78 2e 2e uration suffix.. 28230 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 . ".... set 28240 20 73 75 66 66 69 78 20 5b 67 65 74 42 75 69 6c suffix [getBuil 28250 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 dConfigurationSu 28260 66 66 69 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 ffix].... i 28270 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 28280 68 20 24 73 75 66 66 69 78 5d 20 3e 20 30 7d 20 h$suffix] > 0}
28290 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
282a0 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61  addConstraint [a
282b0 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43  ppendArgs buildC
282c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66  onfigurationSuff
282d0 69 78 2e 20 24 73 75 66 66 69 78 5d 0d 0a 20 20  ix. $suffix].. 282e0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
282f0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
28300 20 5c 22 20 24 73 75 66 66 69 78 20 5c 22 5c 6e   \" $suffix \"\n 28310 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 28320 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f {.. addCo 28330 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43 6f nstraint buildCo 28340 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 nfigurationSuffi 28350 78 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 x.none.. 28360 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c tputs$channel <
28370 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d  none>\n..      }
28380 0d 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20  ....      tputs
28390 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 283a0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 283b0 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 "---- checking 283c0 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 for System.Data 283d0 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 6e 61 .SQLite build na 283e0 74 69 76 65 20 63 6f 6e 66 69 67 75 72 61 74 69 tive configurati 283f0 6f 6e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 on " \.. 28400 20 20 22 73 75 66 66 69 78 2e 2e 2e 20 22 5d 0d "suffix... "]. 28410 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 73 75 66 ... set suf 28420 66 69 78 20 5b 67 65 74 42 75 69 6c 64 4e 61 74 fix [getBuildNat 28430 69 76 65 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e iveConfiguration 28440 53 75 66 66 69 78 5d 0d 0a 0d 0a 20 20 20 20 20 Suffix].... 28450 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 28460 67 74 68 20 24 73 75 66 66 69 78 5d 20 3e 20 30 gth$suffix] > 0
28470 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
28480 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
28490 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 6c  [appendArgs buil
284a0 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 75 72 61  dNativeConfigura
284b0 74 69 6f 6e 53 75 66 66 69 78 2e 20 24 73 75 66  tionSuffix. $suf 284c0 66 69 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 fix].. tp 284d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
284e0 70 65 6e 64 41 72 67 73 20 5c 22 20 24 73 75 66  pendArgs \" $suf 284f0 66 69 78 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 fix \"\n].. 28500 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 28510 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 28520 20 62 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66 buildNativeConf 28530 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78 2e igurationSuffix. 28540 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 none.. tp 28550 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f uts$channel <no
28560 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  ne>\n..      }..
28570 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
28580 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
28590 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
285a0 20 65 78 74 72 61 20 64 69 72 65 63 74 6f 72 79   extra directory
285b0 2e 20 20 54 68 69 73 20 77 69 6c 6c 20 6e 6f 72  .  This will nor
285c0 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 23 20 20  mally..      #
285d0 20 20 20 20 20 62 65 20 65 69 74 68 65 72 20 22       be either "
285e0 6e 65 74 73 74 61 6e 64 61 72 64 32 2e 30 22 20  netstandard2.0"
285f0 6f 72 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69  or an empty stri
28600 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
28610 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 28620 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 28630 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 28640 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S 28650 51 4c 69 74 65 20 62 75 69 6c 64 20 65 78 74 72 QLite build extr 28660 61 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 a... ".... 28670 73 65 74 20 65 78 74 72 61 20 5b 67 65 74 42 75 set extra [getBu 28680 69 6c 64 45 78 74 72 61 5d 0d 0a 0d 0a 20 20 20 ildExtra].... 28690 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l 286a0 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 ength$extra] >
286b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
286c0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
286d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69   [appendArgs bui
286e0 6c 64 45 78 74 72 61 2e 20 24 65 78 74 72 61 5d  ldExtra. $extra] 286f0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 28700 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
28710 41 72 67 73 20 5c 22 20 24 65 78 74 72 61 20 5c  Args \" $extra \ 28720 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c "\n].. } el 28730 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 se {.. ad 28740 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c dConstraint buil 28750 64 45 78 74 72 61 2e 6e 6f 6e 65 0d 0a 20 20 20 dExtra.none.. 28760 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
28770 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20  nel <none>\n..
28780 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
28790 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c  .    proc runSQL
287a0 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20  iteTestPrologue
287b0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20  {} {..      #..
287c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
287d0 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75  p running our cu
287e0 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66  stom prologue if
287f0 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61   the main one ha
28800 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20  s been..      #
28810 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a        skipped...
28820 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
28830 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
28840 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65   ::no(prologue.e
28850 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  agle)]} then {..
28860 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
28870 20 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20     # NOTE: Save
28880 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  the environment
28890 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 77  variables that w
288a0 65 20 69 6e 74 65 6e 64 20 74 6f 20 63 68 61 6e  e intend to chan
288b0 67 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20  ge for..
288c0 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74  #       the test
288d0 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20   suite...
288e0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 61 76 65   #..        save
288f0 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61  EnvironmentVaria
28900 62 6c 65 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  bles \..
28910 20 20 20 20 5b 6c 69 73 74 20 49 6e 69 74 69 61      [list Initia
28920 6c 69 7a 65 5f 53 51 4c 69 74 65 4c 6f 67 5d 20  lize_SQLiteLog]
28930 3a 3a 74 65 73 74 53 75 69 74 65 53 61 76 65 64  ::testSuiteSaved
28940 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  Env....        #
28950 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
28960 3a 20 46 6f 72 63 65 20 74 68 65 20 6d 61 6e 61  : Force the mana
28970 67 65 64 20 6c 6f 67 67 69 6e 67 20 73 75 62 73  ged logging subs
28980 79 73 74 65 6d 20 74 6f 20 61 74 74 65 6d 70 74  ystem to attempt
28990 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 0d 0a   to initialize..
289a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
289b0 69 74 73 65 6c 66 20 6d 6f 72 65 20 74 68 61 6e  itself more than
289c0 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 20 20   once...
289d0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 3a  #..        set :
289e0 3a 65 6e 76 28 49 6e 69 74 69 61 6c 69 7a 65 5f  :env(Initialize_
289f0 53 51 4c 69 74 65 4c 6f 67 29 20 31 0d 0a 0d 0a  SQLiteLog) 1....
28a00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
28a10 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20     # NOTE: Load
28a20 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73  the "before-cons
28a30 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20  traints" custom
28a40 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20  per-user and/or
28a50 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20  per-host..
28a60 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73    #       test s
28a70 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20  ettings now...
28a80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
28a90 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74   uplevel 1 [list
28aa0 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53   loadSQLiteTestS
28ab0 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f  ettings $::test_ 28ac0 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d channel .before] 28ad0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 28ae0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 28af0 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 how (and log) th 28b00 65 20 67 6c 6f 62 61 6c 20 70 61 72 61 6d 65 74 e global paramet 28b10 65 72 73 20 74 68 61 74 20 63 6f 6e 74 72 6f 6c ers that control 28b20 20 77 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20 where the.. 28b30 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 6c # buil 28b40 64 20 64 69 72 65 63 74 6f 72 79 20 73 68 6f 75 d directory shou 28b50 6c 64 20 62 65 2e 0d 0a 20 20 20 20 20 20 20 20 ld be... 28b60 23 0d 0a 20 20 20 20 20 20 20 20 73 68 6f 77 53 #.. showS 28b70 51 4c 69 74 65 42 75 69 6c 64 50 61 72 61 6d 65 QLiteBuildParame 28b80 74 65 72 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 ters$::test_cha
28b90 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
28ba0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
28bb0 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
28bc0 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64  [object] command
28bd0 20 69 73 20 61 76 61 69 6c 61 62 6c 65 3b 20 69   is available; i
28be0 66 20 6e 6f 74 2c 20 61 64 64 20 73 6f 6d 65 0d  f not, add some.
28bf0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
28c00 20 73 68 69 6d 73 20 74 6f 20 6d 61 6b 65 20 74   shims to make t
28c10 68 65 20 74 65 73 74 20 73 75 69 74 65 20 72 75  he test suite ru
28c20 6e 20 73 6d 6f 6f 74 68 65 72 2e 0d 0a 20 20 20  n smoother...
28c30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28c40 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4f 62  checkForSQLiteOb
28c50 6a 65 63 74 43 6f 6d 6d 61 6e 64 20 24 3a 3a 74  jectCommand $::t 28c60 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 28c70 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 28c80 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 6d # NOTE: Determ 28c90 69 6e 65 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 ine the names of 28ca0 20 74 68 65 20 6e 61 74 69 76 65 20 70 6c 61 74 the native plat 28cb0 66 6f 72 6d 20 61 6e 64 20 61 72 63 68 69 74 65 form and archite 28cc0 63 74 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 cture... 28cd0 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 70 #.. set p 28ce0 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42 75 69 6c latform [getBuil 28cf0 64 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d 0d dPlatform true]. 28d00 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 72 63 . set arc 28d10 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 68 69 hitecture [archi 28d20 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 66 6f tectureForPlatfo 28d30 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d rm$platform]...
28d40 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
28d50 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c      # NOTE: Buil
28d60 64 20 61 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66  d a list of conf
28d70 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65 73 20  iguration files
28d80 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d  that we handle..
28d90 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
28da0 20 20 20 20 73 65 74 20 63 6f 6e 66 69 67 46 69      set configFi
28db0 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d  leNames [list \.
28dc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73  .            Sys
28dd0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
28de0 64 6c 6c 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20  dll.config]....
28df0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
28e00 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
28e10 61 20 6c 69 73 74 20 6f 66 20 61 75 78 69 6c 69  a list of auxili
28e20 61 72 79 20 4d 61 6e 61 67 65 64 20 44 65 62 75  ary Managed Debu
28e30 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73  gging Assistants
28e40 20 28 4d 44 41 29 0d 0a 20 20 20 20 20 20 20 20   (MDA)..
28e50 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 75 72  #       configur
28e60 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61 74  ation files that
28e70 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20   we handle...
28e80 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28e90 73 65 74 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c  set mdaConfigFil
28ea0 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  eNames [list \..
28eb0 20 20 20 20 20 20 20 20 20 20 20 20 45 61 67 6c              Eagl
28ec0 65 53 68 65 6c 6c 33 32 2e 65 78 65 2e 6d 64 61  eShell32.exe.mda
28ed0 2e 63 6f 6e 66 69 67 20 49 6e 73 74 61 6c 6c 65  .config Installe
28ee0 72 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  r.exe.mda.config
28ef0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
28f00 74 65 73 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e  test.exe.mda.con
28f10 66 69 67 20 74 65 73 74 6c 69 6e 71 2e 65 78 65  fig testlinq.exe
28f20 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20  .mda.config \..
28f30 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 65             teste
28f40 66 36 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  f6.exe.mda.confi
28f50 67 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  g]....        #.
28f60 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28f70 20 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20   Build the list
28f80 6f 66 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65  of external file
28f90 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
28fa0 2e 20 20 53 6f 6d 65 20 6f 66 0d 0a 20 20 20 20  .  Some of..
28fb0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 73      #       thes
28fc0 65 20 66 69 6c 65 73 20 6d 61 79 20 62 65 20 6e  e files may be n
28fd0 61 74 69 76 65 20 61 6e 64 2f 6f 72 20 6d 61 6e  ative and/or man
28fe0 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20  aged assemblies
28ff0 74 68 61 74 20 61 72 65 0d 0a 20 20 20 20 20 20  that are..
29000 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72    #       requir
29010 65 64 20 74 6f 20 70 65 72 66 6f 72 6d 20 76 61  ed to perform va
29020 72 69 6f 75 73 20 74 65 73 74 73 2e 0d 0a 20 20  rious tests...
29030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
29040 20 73 65 74 20 65 78 74 65 72 6e 61 6c 46 69 6c   set externalFil
29050 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  eNames [list \..
29060 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
29070 65 20 6a 6f 69 6e 20 45 6e 74 69 74 79 46 72 61  e join EntityFra
29080 6d 65 77 6f 72 6b 20 6c 69 62 20 5b 73 74 72 69  mework lib [stri
29090 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 46 78 20  ng map [list Fx
290a0 22 22 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ""] \..
290b0 20 20 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b     [string map [
290c0 6c 69 73 74 20 6e 65 74 46 78 34 35 31 20 6e 65  list netFx451 ne
290d0 74 46 78 34 35 20 6e 65 74 46 78 34 35 32 20 6e  tFx45 netFx452 n
290e0 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 20 5c  etFx45 netFx46 \
290f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
29100 74 46 78 34 35 20 6e 65 74 46 78 34 36 31 20 6e  tFx45 netFx461 n
29110 65 74 46 78 34 35 20 6e 65 74 46 78 34 36 32 20  etFx45 netFx462
29120 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 37 20  netFx45 netFx47
29130 6e 65 74 46 78 34 35 20 5c 0d 0a 20 20 20 20 20  netFx45 \..
29140 20 20 20 20 20 20 20 6e 65 74 46 78 34 37 31 20         netFx471
29150 6e 65 74 46 78 34 35 20 6e 65 74 46 78 34 37 32  netFx45 netFx472
29160 20 6e 65 74 46 78 34 35 20 6e 65 74 53 74 61 6e   netFx45 netStan
29170 64 61 72 64 32 30 20 6e 65 74 46 78 34 35 20 5c  dard20 netFx45 \
29180 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65  ..            ne
29190 74 53 74 61 6e 64 61 72 64 32 31 20 6e 65 74 46  tStandard21 netF
291a0 78 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65  x45] [getBuildNe
291b0 74 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61  tFx]]] EntityFra
291c0 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  mework.dll]]....
291d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
291e0 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
291f0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74   the list of nat
29200 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  ive assembly fil
29210 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
29220 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
29230 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
29240 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  eFileNames [list
29250 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61  ]....        eva
29260 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65  l lappend native
29270 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61  FileNames [getNa
29280 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
29290 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20  amesOnly]..
292a0 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
292b0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
292c0 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
292d0 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
292e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
292f0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
29300 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f  Build the list o
29310 66 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  f mixed-mode ass
29320 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
29330 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20   we handle...
29340 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
29350 73 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d  set mixedFileNam
29360 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  es [list]....
29370 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
29380 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
29390 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
293a0 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69        lappend mi
293b0 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73  xedFileNames Sys
293c0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
293d0 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dll..        }..
293e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
293f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
29400 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d  ld the list of m
29410 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
29420 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
29430 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
29440 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61  ..        set ma
29450 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b  nagedFileNames [
29460 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
29470 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
29480 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20  SQLite.Linq.dll
29490 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
294a0 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20  te.EF6.dll]....
294b0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73         if {![has
294c0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61  RuntimeOption na
294d0 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tive]} then {..
294e0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
294f0 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65   managedFileName
29500 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
29510 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Lite.dll..
29520 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
29530 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
29540 3a 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f  : Show the vario
29550 75 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65  us lists of file
29560 20 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20   names that are
29570 68 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d  handled by this.
29580 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
29590 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
295a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
295b0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 295c0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 295d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 295e0 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c "---- list of \ 295f0 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 "configuration\" 29600 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 file names is: 29610 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 29620 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 [expr {[llength 29630 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65$configFileName
29640 73 5d 20 3e 20 30 20 3f 20 24 63 6f 6e 66 69 67  s] > 0 ? $config 29650 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 FileNames : \.. 29660 20 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e "<non 29670 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 e>"}] \n].... 29680 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
29690 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
296a0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
296b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74        "---- list
296c0 20 6f 66 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67   of \"MDA config
296d0 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 6e  uration\" file n
296e0 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 20  ames is: " \..
296f0 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
29700 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 64 61 43 6f  {[llength $mdaCo 29710 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 5d 20 3e nfigFileNames] > 29720 20 30 20 3f 20 24 6d 64 61 43 6f 6e 66 69 67 46 0 ?$mdaConfigF
29730 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20  ileNames : \..
29740 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65            "<none
29750 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  >"}] \n]....
29760 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 29770 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 29780 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 29790 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 "---- list 297a0 6f 66 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 of \"external\" 297b0 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 297c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 297d0 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 [expr {[llength 297e0 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d$externalFileNam
297f0 65 73 5d 20 3e 20 30 20 3f 20 24 65 78 74 65 72  es] > 0 ? $exter 29800 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c nalFileNames : \ 29810 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3c .. "< 29820 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a none>"}] \n].... 29830 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
29840 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
29850 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
29860 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c           "---- l
29870 69 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c  ist of \"native\
29880 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a  " file names is:
29890 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
298a0 20 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74    [expr {[llengt
298b0 68 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  h $nativeFileNam 298c0 65 73 5d 20 3e 20 30 20 3f 20 24 6e 61 74 69 76 es] > 0 ?$nativ
298d0 65 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a  eFileNames : \..
298e0 20 20 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f              "<no
298f0 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20  ne>"}] \n]....
29900 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 29910 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 29920 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 29930 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 "---- lis 29940 74 20 6f 66 20 5c 22 6d 69 78 65 64 5c 22 20 66 t of \"mixed\" f 29950 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 29960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 29970 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 expr {[llength$
29980 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 5d 20  mixedFileNames]
29990 3e 20 30 20 3f 20 24 6d 69 78 65 64 46 69 6c 65  > 0 ? $mixedFile 299a0 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20 20 20 Names : \.. 299b0 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e 22 7d "<none>"} 299c0 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 299d0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
299e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
299f0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
29a00 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20    "---- list of
29a10 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c 65  \"managed\" file
29a20 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a   names is: " \..
29a30 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
29a40 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 6e  r {[llength $man 29a50 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 5d 20 3e agedFileNames] > 29a60 20 30 20 3f 20 24 6d 61 6e 61 67 65 64 46 69 6c 0 ?$managedFil
29a70 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20 20  eNames : \..
29a80 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e 22          "<none>"
29a90 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  }] \n]....
29aa0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
29ab0 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20  OTE: Remove any
29ac0 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
29ad0 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
29ae0 68 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72  he native and/or
29af0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
29b00 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62    managed assemb
29b10 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
29b20 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66   handle unless f
29b30 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20  orbidden from..
29b40 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
29b50 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20  oing so...
29b60 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
29b70 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
29b80 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65  :no(sqliteRemove
29b90 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
29ba0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
29bb0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
29bc0 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  e $configFileNam 29bd0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 29be0 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 29bf0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 29c00 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
29c10 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
29c20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
29c30 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 29c40 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 29c50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 29c60 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 29c70 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 29c80 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
29c90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29ca0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
29cb0 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c  leName $external 29cc0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 29cd0 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 29ce0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 29cf0 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c dArgs file_ [fil 29d00 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
29d10 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ]]..          }.
29d20 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
29d30 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 29d40 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 29d50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 29d60 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 29d70 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 29d80 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
29d90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29da0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
29db0 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c  leName $mixedFil 29dc0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 29dd0 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 29de0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 29df0 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
29e00 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
29e10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
29e20 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $29e30 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 29e40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 29e50 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 29e60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 29e70 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 e_$fileName]..
29e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
29e90 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29ea0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
29eb0 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
29ec0 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72  e "autoSelect" r
29ed0 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  untime option.
29ee0 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20  If present,..
29ef0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74       #       att
29f00 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69  empt to automati
29f10 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65  cally select the
29f20 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65   first available
29f30 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
29f40 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c    build (or "rel
29f50 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65  ease") of SQLite
29f60 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61   and System.Data
29f70 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20  .SQLite..
29f80 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65   #       for use
29f90 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73   with the test s
29fa0 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  uite...        #
29fb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
29fc0 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  asRuntimeOption
29fd0 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65  autoSelect]} the
29fe0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
29ff0 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c  f {![checkForSQL
2a000 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 2a010 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d t_channel true]} 2a020 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a030 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 2a040 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 iteReleases$::t
2a050 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
2a060 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
2a070 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
2a080 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2a090 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74  Show (and log) t
2a0a0 68 65 20 67 6c 6f 62 61 6c 20 70 61 72 61 6d 65  he global parame
2a0b0 74 65 72 73 20 74 68 61 74 20 63 6f 6e 74 72 6f  ters that contro
2a0c0 6c 20 77 68 65 72 65 0d 0a 20 20 20 20 20 20 20  l where..
2a0d0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 62     #       the b
2a0e0 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73  uild directory s
2a0f0 68 6f 75 6c 64 20 62 65 2e 20 20 54 68 65 20 61  hould be.  The a
2a100 75 74 6f 2d 73 65 6c 65 63 74 69 6f 6e 20 6d 61  uto-selection ma
2a110 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #
2a120 20 20 20 20 20 68 61 76 65 20 6d 6f 64 69 66 69       have modifi
2a130 65 64 20 73 6f 6d 65 20 6f 66 20 74 68 65 73 65  ed some of these
2a140 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...
2a150 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2a160 20 20 20 20 20 73 68 6f 77 53 51 4c 69 74 65 42       showSQLiteB
2a170 75 69 6c 64 50 61 72 61 6d 65 74 65 72 73 20 24  uildParameters $2a180 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 2a190 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2a1a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a1b0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c # NOTE: Skip all 2a1c0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2a1d0 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 ite related file 2a1e0 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 handling (delet 2a1f0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ing,.. # 2a200 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 copying, a 2a210 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 nd loading) if i 2a220 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 2a230 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 2a240 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2a250 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 ::no(sqliteFile 2a260 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 2a270 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a280 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 2a290 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 trying to delet 2a2a0 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 e any files if i 2a2b0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 2a2c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a2d0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 2a2e0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 2a2f0 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 2a300 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2a310 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 2a320 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 2a330 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 SqliteConfigFile 2a340 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 2a350 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 2a360 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e ch fileName$con
2a370 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
2a380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a390 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
2a3a0 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 2a3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 2a3c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 2a3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 2a3e0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 2a3f0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 2a400 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d ExternalFiles)]} 2a410 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a420 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 2a430 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
2a440 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
2a450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a460 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
2a470 65 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65  e $fileName true 2a480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a490 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2a4a0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 2a4b0 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c ame$externalFil
2a4c0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
2a4d0 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
2a4e0 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66  eteBinaryFile $f 2a4f0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName.. 2a500 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2a510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2a520 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2a530 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 2a540 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65 leteSqliteNative 2a550 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 2a560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 2a570 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2a580 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 2a590 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 teImplicitNative 2a5a0 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 2a5b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2a5c0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 2a5d0 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d e$nativeFileNam
2a5e0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
2a5f0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
2a600 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 2a610 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 2a620 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2a630 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2a640 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 2a650 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 2a660 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 deleteSqliteNonI 2a670 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 2a680 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2a690 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2a6a0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 2a6b0 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 eleteSqlitePlatf 2a6c0 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ormFiles)] && \. 2a6d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2a6e0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 2a6f0 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
2a700 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2a710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2a720 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $2a730 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 2a740 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2a750 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 2a760 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
2a770 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 2a780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a790 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2a7a0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2a7b0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2a7c0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 2a7d0 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 eleteSqliteArchi 2a7e0 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 2a7f0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 2a800 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2a810 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
2a820 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
2a830 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2a840 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
2a850 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 2a860 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 2a870 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 2a880 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 2a890 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68$fileName $arch 2a8a0 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 itecture.. 2a8b0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2a8c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 2a8d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a8e0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 2a8f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2a900 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2a910 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 2a920 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d iteMixedFiles)]} 2a930 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a940 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a950 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2a960 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 If the "native" 2a970 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 runtime option i 2a980 73 20 73 65 74 2c 20 64 65 6c 65 74 65 20 69 6d s set, delete im 2a990 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 plicit.. 2a9a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 # mi 2a9b0 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 2a9c0 79 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e y files as well. 2a9d0 20 20 54 68 69 73 20 72 75 6e 74 69 6d 65 20 6f This runtime o 2a9e0 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ption.. 2a9f0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 68 65 # che 2aa00 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 20 77 68 ck is handled wh 2aa10 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 en building the 2aa20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f list of mixed-mo 2aa30 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 de.. 2aa40 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 2aa50 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a ly file names... 2aa60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 2aa70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 2aa80 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2aa90 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 2aaa0 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 46 teImplicitMixedF 2aab0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 2aac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2aad0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 2aae0 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
2aaf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2ab00 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
2ab10 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 2ab20 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 2ab30 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2ab40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2ab50 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2ab60 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 2ab70 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 leteSqliteNonImp 2ab80 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 2ab90 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2aba0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 2abb0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 2abc0 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 eteSqlitePlatfor 2abd0 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 mFiles)] && \.. 2abe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2abf0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 2ac00 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 h$platform] > 0
2ac10 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2ac20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2ac30 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69  ach fileName $mi 2ac40 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a xedFileNames {.. 2ac50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2ac60 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 2ac70 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
2ac80 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20  $platform.. 2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 2aca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2acb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2acc0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2acd0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 2ace0 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 teSqliteArchitec 2acf0 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 2ad00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2ad10 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 2ad20 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
2ad30 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
2ad40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2ad50 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
2ad60 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61  ame $mixedFileNa 2ad70 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 2ad80 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 2ad90 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 leteAssembly$fi
2ada0 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63  leName $architec 2adb0 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ture.. 2adc0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2add0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2ade0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2adf0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2ae00 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2ae10 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 2ae20 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d no(deleteSqliteM 2ae30 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 anagedFiles)]} t 2ae40 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2ae50 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 2ae60 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 eName$managedFi
2ae70 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
2ae80 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
2ae90 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 2aea0 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 2aeb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2aec0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2aed0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2aee0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 2aef0 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 NOTE: Show (and 2af00 6c 6f 67 29 20 74 68 65 20 67 6c 6f 62 61 6c 20 log) the global 2af10 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 parameters that 2af20 63 6f 6e 74 72 6f 6c 20 77 68 65 72 65 0d 0a 20 control where.. 2af30 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2af40 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 2af50 74 6f 72 79 20 73 68 6f 75 6c 64 20 62 65 2e 0d tory should be.. 2af60 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 2af70 20 20 20 20 20 20 20 20 73 68 6f 77 53 51 4c 69 showSQLi 2af80 74 65 42 75 69 6c 64 50 61 72 61 6d 65 74 65 72 teBuildParameter 2af90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2afa0 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  l....          #
2afb0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
2afc0 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
2afd0 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75  to verify the bu
2afe0 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66  ild directory if
2aff0 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20   instructed;..
2b000 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2b010 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20  otherwise, make
2b020 73 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79  sure it actually
2b030 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20   exists or halt
2b040 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20  the entire..
2b050 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
2b060 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66  sting process if
2b070 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
2b080 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  st...          #
2b090 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
2b0a0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2b0b0 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69  no(verifyBuildDi
2b0c0 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20  rectory)]} then
2b0d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2b0e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
2b0f0 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f  NOTE: At this po
2b100 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64  int, the build d
2b110 69 72 65 63 74 6f 72 69 65 73 20 4d 55 53 54 20  irectories MUST
2b120 65 78 69 73 74 20 66 6f 72 0d 0a 20 20 20 20 20  exist for..
2b130 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
2b140 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
2b150 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d  ss to continue..
2b160 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
2b170 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
2b180 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75  directory [getBu
2b190 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c  ildDirectory fal
2b1a0 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se]....
2b1b0 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
2b1c0 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d  ists $directory] 2b1d0 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 2b1e0 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 ![file is 2b1f0 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
2b200 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
2b210 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
2b220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
2b230 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72  NOTE: Just prior
2b240 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c   to actually hal
2b250 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ting the testing
2b260 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20   process,..
2b270 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2b280 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f   add an error to
2b290 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69   the test log fi
2b2a0 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
2b2b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2b2c0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2b2d0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 2b2e0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 2b2f0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2b300 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 could not verif 2b310 79 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 64 y native build d 2b320 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a irectory \"" \.. 2b330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b340 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22$directory "\"
2b350 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61  , all testing ha
2b360 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20  lted\n"]....
2b370 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2b380 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
2b390 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72  E: Raising a scr
2b3a0 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74  ipt error from t
2b3b0 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64  his point should
2b3c0 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20   halt..
2b3d0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2b3e0 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
2b3f0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
2b400 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
2b410 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
2b420 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2b430 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could
2b440 6e 6f 74 20 76 65 72 69 66 79 20 6e 61 74 69 76  not verify nativ
2b450 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
2b460 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  y \"" \..
2b470 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65             $dire 2b480 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c 6c 20 74 ctory "\", all t 2b490 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d esting halted"]. 2b4a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2b4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 2b4c0 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get 2b4d0 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 74 BuildDirectory t 2b4e0 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 rue].... 2b4f0 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 2b500 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
2b510 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
2b520 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
2b530 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 2b540 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 2b550 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 2b560 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 2b570 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 2b580 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 2b590 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 2b5a0 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 2b5b0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 2b5c0 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 2b5d0 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 2b5e0 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 2b5f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2b600 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2b610 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2b620 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
2b630 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2b640 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
2b650 66 79 20 6d 61 6e 61 67 65 64 20 62 75 69 6c 64  fy managed build
2b660 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c   directory \"" \
2b670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2b680 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22      $directory " 2b690 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 \", all testing 2b6a0 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 halted\n"].... 2b6b0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 2b6c0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 2b6d0 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 OTE: Raising a s 2b6e0 63 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d cript error from 2b6f0 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 this point shou 2b700 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 ld halt.. 2b710 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 2b720 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 he testing proce 2b730 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ss... 2b740 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2b750 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e error [appen 2b760 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 2b770 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c "coul 2b780 64 20 6e 6f 74 20 76 65 72 69 66 79 20 6d 61 6e d not verify man 2b790 61 67 65 64 20 62 75 69 6c 64 20 64 69 72 65 63 aged build direc 2b7a0 74 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 tory \"" \.. 2b7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64$d
2b7c0 69 72 65 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c  irectory "\", al
2b7d0 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
2b7e0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
2b7f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
2b800 20 73 65 74 20 6c 6f 67 44 69 72 65 63 74 6f 72   set logDirector
2b810 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  y $directory.. 2b820 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 2b830 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 2b840 74 20 6c 6f 67 44 69 72 65 63 74 6f 72 79 20 5b t logDirectory [ 2b850 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 2b860 79 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 y true].. 2b870 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2b880 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 2b890 20 4e 4f 54 45 3a 20 57 65 27 72 65 20 67 6f 69 NOTE: We're goi 2b8a0 6e 67 20 74 6f 20 6d 6f 76 65 20 74 68 65 20 74 ng to move the t 2b8b0 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 74 6f 20 est log file to 2b8c0 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 the directory.. 2b8d0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2b8e0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the 2b8f0 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 managed assembli 2b900 65 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e es being tested. 2b910 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2b920 20 20 20 20 20 20 20 20 20 6d 6f 76 65 54 65 73 moveTes 2b930 74 4c 6f 67 46 69 6c 65 20 24 6c 6f 67 44 69 72 tLogFile$logDir
2b940 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20  ectory....
2b950 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2b960 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72   # NOTE: Skip tr
2b970 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79  ying to copy any
2b980 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75   files if instru
2b990 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
2b9a0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
2b9b0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
2b9c0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46  ::no(copySqliteF
2b9d0 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
2b9e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2b9f0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2ba00 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e  no(copySqliteCon
2ba10 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  figFiles)]} then
2ba20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2ba30 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2ba40 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 2ba50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 2ba60 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 63 6f 6e -- copying \"con 2ba70 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c figuration\" fil 2ba80 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 es...\n".... 2ba90 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 2baa0 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 h fileName$conf
2bab0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
2bac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2bad0 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
2bae0 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d 0a  $fileName true.. 2baf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 2bb00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2bb10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2bb20 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 2bb30 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 ::no(copySqliteE 2bb40 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 2bb50 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2bb60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2bb70 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 2bb80 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 opy the Managed 2bb90 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 2bba0 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 ants (MDA) confi 2bbb0 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 2bbc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2bbd0 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 file for the Eag 2bbe0 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 le shell to the 2bbf0 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 build output dir 2bc00 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 ectory,.. 2bc10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 2bc20 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 hile using each 2bc30 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 of the names of 2bc40 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 the various lega 2bc50 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 cy test.. 2bc60 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 # e 2bc70 78 65 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 xecutables. Thi 2bc80 73 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d s will help to m 2bc90 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c ake sure that al 2bca0 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 l the.. 2bcb0 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 # leg 2bcc0 61 63 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 acy tests run wi 2bcd0 74 68 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 th exactly the s 2bce0 61 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 ame set of Manag 2bcf0 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed.. 2bd00 20 20 23 20 20 20 20 20 20 20 44 65 62 75 67 67 # Debugg 2bd10 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 ing Assistants c 2bd20 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 onfigured... 2bd30 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2bd40 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 2bd50 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2bd60 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2bd70 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79        "---- copy
2bd80 69 6e 67 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67  ing \"MDA config
2bd90 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 73 2e  uration\" files.
2bda0 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
2bdb0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
2bdc0 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66  ileName $mdaConf 2bdd0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 2bde0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 2bdf0 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 ryCopyBinaryFile 2be00 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e EagleShell.exe. 2be10 6d 64 61 2e 63 6f 6e 66 69 67 20 74 72 75 65 20 mda.config true 2be20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ""$fileName..
2be30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2be40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
2be50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2be60 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
2be70 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69   external binari
2be80 65 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74  es, if any, to t
2be90 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61  he directory tha
2bea0 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..
2beb0 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
2bec0 73 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c  s the Eagle shel
2bed0 6c 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 69  l.  This is typi
2bee0 63 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d 61  cally used to ma
2bef0 6b 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ke..
2bf00 20 20 23 20 20 20 20 20 20 20 73 75 72 65 20 61    #       sure a
2bf10 73 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 65  ssemblies refere
2bf20 6e 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 73  nced by the ones
2bf30 20 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 72   being tested ar
2bf40 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
2bf50 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62   #       availab
2bf60 6c 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 65  le during the te
2bf70 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a  sting process...
2bf80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
2bf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
2bfa0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2bfb0 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 nnel "---- copyi 2bfc0 6e 67 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 ng \"external\" 2bfd0 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 files...\n".... 2bfe0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 2bff0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 each fileName$e
2c000 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
2c010 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2c020 20 20 20 20 74 72 79 43 6f 70 79 45 78 74 65 72      tryCopyExter
2c030 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  nalFile $fileNam 2c040 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 2c050 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2c060 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2c070 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 2c080 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 2c090 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d teNativeFiles)]} 2c0a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2c0b0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2c0c0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2c0d0 49 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 74 If the test plat 2c0e0 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 form is likely t 2c0f0 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 he default for t 2c100 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 his.. 2c110 20 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 69 # machi 2c120 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 ne, also try to 2c130 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 copy the native 2c140 66 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 files to the.. 2c150 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 2c160 20 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 binary locat 2c170 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ion... 2c180 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2c190 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2c1a0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 2c1b0 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 SqliteImplicitNa 2c1c0 74 69 76 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tiveFiles)] && \ 2c1d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c1e0 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42 75 [isDefaultBu 2c1f0 69 6c 64 50 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 ildPlatform]} th 2c200 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2c210 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2c220 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
2c230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c240 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67     "---- copying
2c250 20 69 6d 70 6c 69 63 69 74 20 5c 22 6e 61 74 69   implicit \"nati
2c260 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22  ve\" files...\n"
2c270 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2c280 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
2c290 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 2c2a0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 2c2b0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 2c2c0 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
2c2d0 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  Name false..
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
2c2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c300 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2c310 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2c320 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
2c330 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65  eNonImplicitFile
2c340 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
2c350 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
2c360 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
2c370 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c  :no(copySqlitePl
2c380 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26  atformFiles)] &&
2c390 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2c3a0 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
2c3b0 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 2c3c0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 2c3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c3e0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2c3f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2c400 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2c410 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2c420 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69  - copying \"nati
2c430 76 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70  ve\" files for p
2c440 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20  latform \"" \..
2c450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c460 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c       $platform \ 2c470 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 "...\n].... 2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 2c490 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e each fileName$n
2c4a0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
2c4b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2c4c0 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
2c4d0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 2c4e0 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d false$platform.
2c4f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2c500 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2c510 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2c520 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2c530 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
2c540 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68  o(copySqliteArch
2c550 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
2c560 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
2c570 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
2c580 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 2c590 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 2c5a0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2c5b0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2c5c0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
2c5d0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
2c5e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c5f0 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20    "---- copying
2c600 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 73  \"native\" files
2c610 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72   for architectur
2c620 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
2c630 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $2c640 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e architecture \". 2c650 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ..\n].... 2c660 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 2c670 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
2c680 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c6a0 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
2c6b0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  bly $fileName fa 2c6c0 6c 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 lse$architectur
2c6d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
2c6e0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2c6f0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2c700 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
2c710 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
2c720 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 6f  :no(copySqliteFo
2c730 72 63 65 64 4e 61 74 69 76 65 46 69 6c 65 73 29  rcedNativeFiles)
2c740 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
2c750 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
2c760 42 75 69 6c 64 4e 61 74 69 76 65 5d 7d 20 74 68  BuildNative]} th
2c770 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2c780 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2c790 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 2c7a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2c7b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 "---- cop 2c7c0 79 69 6e 67 20 66 6f 72 63 65 64 20 5c 22 6e 61 ying forced \"na 2c7d0 74 69 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c tive\" files...\ 2c7e0 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n".... 2c7f0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 2c800 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
2c810 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
2c820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c830 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
2c840 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65   $fileName false 2c850 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c860 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2c870 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2c880 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2c890 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2c8a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2c8b0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 2c8c0 6f 70 79 53 71 6c 69 74 65 4d 69 78 65 64 46 69 opySqliteMixedFi 2c8d0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 2c8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 2c8f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 2c900 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 NOTE: If the "na 2c910 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 tive" runtime op 2c920 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 63 6f 70 tion is set, cop 2c930 79 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 y implicit.. 2c940 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 2c950 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 mixed-mode ass 2c960 65 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 embly files as w 2c970 65 6c 6c 2e 20 20 54 68 65 20 72 75 6e 74 69 6d ell. The runtim 2c980 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 e option.. 2c990 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2c9a0 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 check is handled 2c9b0 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 when building t 2c9c0 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 he list of mixed 2c9d0 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 -mode.. 2c9e0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 2c9f0 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 embly file names 2ca00 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2ca10 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2ca20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 2ca30 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 2ca40 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 iteImplicitMixed 2ca50 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 2ca60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2ca70 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2ca80 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2ca90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2caa0 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c  --- copying impl
2cab0 69 63 69 74 20 5c 22 6d 69 78 65 64 5c 22 20 66  icit \"mixed\" f
2cac0 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
2cad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2cae0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $2caf0 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b mixedFileNames { 2cb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2cb10 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 2cb20 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 bly$fileName fa
2cb30 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..
2cb40 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2cb50 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2cb60 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
2cb70 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
2cb80 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70  copySqliteNonImp
2cb90 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68  licitFiles)]} th
2cba0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2cbb0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
2cbc0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
2cbd0 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  ySqlitePlatformF
2cbe0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
2cbf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cc00 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
2cc10 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 2cc20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2cc30 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 2cc40 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2cc50 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
2cc60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cc70 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69       "---- copyi
2cc80 6e 67 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c  ng \"mixed\" fil
2cc90 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20  es for platform
2cca0 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
2ccb0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c               $pl 2ccc0 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d atform \"...\n]. 2ccd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2cce0 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 2ccf0 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
2cd00 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
2cd20 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 2cd30 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c leName false$pl
2cd40 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
2cd50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2cd80 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2cd90 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
2cda0 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
2cdb0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cdd0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
2cde0 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e  $architecture] > 2cdf0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2ce00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 2ce10 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
2ce20 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
2ce30 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2ce40 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
2ce50 6f 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 5c 22  opying \"mixed\"
2ce60 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68 69   files for archi
2ce70 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a 20  tecture \"" \..
2ce80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ce90 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 2cea0 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 re \"...\n].... 2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2cec0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 2ced0 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 e$mixedFileName
2cee0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
2cef0 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
2cf00 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 2cf10 6d 65 20 66 61 6c 73 65 20 24 61 72 63 68 69 74 me false$archit
2cf20 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
2cf30 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2cf40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cf50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2cf60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2cf70 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
2cf80 69 74 65 46 6f 72 63 65 64 4d 69 78 65 64 46 69  iteForcedMixedFi
2cf90 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
2cfa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cfb0 5b 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 5d  [getBuildNative]
2cfc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2cfd0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
2cfe0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2cff0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 2d000 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2d010 20 63 6f 70 79 69 6e 67 20 66 6f 72 63 65 64 20 copying forced 2d020 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e \"mixed\" files. 2d030 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ..\n".... 2d040 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 2d050 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 ch fileName$mix
2d060 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  edFileNames {..
2d070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d080 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
2d090 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c  ly $fileName fal 2d0a0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se.. 2d0b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2d0c0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2d0d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2d0e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2d0f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2d100 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 2d110 28 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 (copySqliteManag 2d120 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 edFiles)]} then 2d130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d140 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d150 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70  hannel "---- cop
2d160 79 69 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22  ying \"managed\"
2d170 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a   files...\n"....
2d180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2d190 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $2d1a0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 2d1b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d1c0 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 2d1d0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 bly$fileName tr
2d1e0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
2d1f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
2d200 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2d210 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
2d220 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2d230 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f  : Skip trying to
2d240 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20   load any files
2d250 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  if instructed...
2d260 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2d270 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
2d280 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
2d290 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  adSqliteFiles)]}
2d2a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d2b0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
2d2c0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
2d2d0 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69  SqliteImplicitFi
2d2e0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
2d2f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
2d300 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
2d310 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2d320 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
2d330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
2d340 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2d350 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
2d360 69 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20  iteLinqFiles)]}
2d370 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2d380 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
2d390 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
2d3a0 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c  a.SQLite.Linq.dl
2d3b0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
2d3c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2d3d0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2d3e0 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
2d3f0 65 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65  eEf6Files)]} the
2d400 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2d410 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
2d420 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
2d430 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20  QLite.EF6.dll..
2d440 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d450 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2d460 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2d470 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e  no(loadSqliteNon
2d480 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
2d490 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d4a0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
2d4b0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
2d4c0 61 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d  adSqlitePlatform
2d4d0 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
2d4e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d4f0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $2d500 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 platform] > 0} t 2d510 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2d520 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 tryLoadAs 2d530 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 2d540 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 ta.SQLite.dll$p
2d550 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..
2d560 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2d570 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2d580 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
2d590 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69  (loadSqliteArchi
2d5a0 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
2d5b0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
2d5c0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2d5d0 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74  ength $architect 2d5e0 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ure] > 0} then { 2d5f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2d600 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 2d610 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 2d620 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 Lite.dll$archit
2d630 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
2d640 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2d650 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2d660 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2d670 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
2d680 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24  h fileNameOnly $2d690 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 2d6a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 {.. cat 2d6b0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 2d6c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2d6d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2d6e0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2d6f0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
2d700 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
2d710 20 6e 61 74 69 76 65 2f 20 24 66 69 6c 65 4e 61   native/ $fileNa 2d720 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 meOnly \.. 2d730 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... 2d740 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 2d750 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 2d760 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 2d770 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
2d780 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a  meOnly]] \"\n]..
2d790 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2d7a0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2d7b0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
2d7c0 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c  meOnly $mixedFil 2d7d0 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 2d7e0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 2d7f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
2d800 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
2d810 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
2d820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2d830 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
2d840 20 6f 66 20 5c 22 22 20 6d 69 78 65 64 2f 20 24   of \"" mixed/ $2d850 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a fileNameOnly \.. 2d860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d870 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 2d880 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e version [getBin 2d890 61 72 79 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 aryFileName \.. 2d8a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
2d8b0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c  fileNameOnly]] \
2d8c0 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
2d8d0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2d8e0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
2d8f0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 61  fileNameOnly $ma 2d900 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b nagedFileNames { 2d910 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 2d920 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 2d930 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d940 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2d950 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2d960 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
2d970 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
2d980 6d 61 6e 61 67 65 64 2f 20 24 66 69 6c 65 4e 61  managed/ $fileNa 2d990 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 meOnly \.. 2d9a0 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... 2d9b0 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 2d9c0 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 2d9d0 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 2d9e0 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
2d9f0 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a  meOnly]] \"\n]..
2da00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2da10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2da20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
2da30 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 2da40 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 2da50 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 2da60 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 ileNameOnly$nat
2da70 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
2da80 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2da90 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
2daa0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2dab0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 2dac0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 2dad0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 2dae0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 2daf0 5c 22 22 20 6e 61 74 69 76 65 2f 70 6c 61 74 66 \"" native/platf 2db00 6f 72 6d 2f 20 5c 0d 0a 20 20 20 20 20 20 20 20 orm/ \.. 2db10 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
2db20 6f 72 6d 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f  orm / $fileNameO 2db30 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b nly "\"... \"" [ 2db40 66 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 file \.. 2db50 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f versio 2db60 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 2db70 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e Name$fileNameOn
2db80 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ly \..
2db90 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 2dba0 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 m]] \"\n].. 2dbb0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2dbc0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2dbd0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 2dbe0 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 ameOnly$mixedFi
2dbf0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
2dc00 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
2dc10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
2dc20 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2dc30 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 2dc40 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2dc50 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 2dc60 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d version of \"" m 2dc70 69 78 65 64 2f 70 6c 61 74 66 6f 72 6d 2f 20 5c ixed/platform/ \ 2dc80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2dc90 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 20$platform /
2dca0 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c  $fileNameOnly "\ 2dcb0 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 5c "... \"" [file \ 2dcc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2dcd0 20 20 20 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 version [get 2dce0 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
2dcf0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a  fileNameOnly \..
2dd00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dd10 20 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22    $platform]] \" 2dd20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 2dd30 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 2dd40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 2dd50 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 2dd60 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 g length$archit
2dd70 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65  ecture] > 0} the
2dd80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
2dd90 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
2dda0 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  nly $nativeFileN 2ddb0 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 2ddc0 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 2ddd0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 2dde0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2ddf0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
2de00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2de10 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
2de20 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6e 61 74 69  sion of \"" nati
2de30 76 65 2f 61 72 63 68 69 74 65 63 74 75 72 65 2f  ve/architecture/
2de40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2de50 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 2de60 75 72 65 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f ure /$fileNameO
2de70 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b  nly "\"... \"" [
2de80 66 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  file \..
2de90 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f            versio
2dea0 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
2deb0 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 2dec0 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ly \.. 2ded0 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65$archite
2dee0 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  cture]] \"\n]..
2def0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2df00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2df10 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
2df20 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78  ileNameOnly $mix 2df30 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 2df40 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 catch 2df50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2df60 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2df70 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2df80 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2df90 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
2dfa0 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
2dfb0 22 22 20 6d 69 78 65 64 2f 61 72 63 68 69 74 65  "" mixed/archite
2dfc0 63 74 75 72 65 2f 20 5c 0d 0a 20 20 20 20 20 20  cture/ \..
2dfd0 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63              $arc 2dfe0 68 69 74 65 63 74 75 72 65 20 2f 20 24 66 69 6c hitecture /$fil
2dff0 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e  eNameOnly "\"...
2e000 20 5c 22 22 20 5b 66 69 6c 65 20 5c 0d 0a 20 20   \"" [file \..
2e010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e020 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
2e030 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 2e040 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 NameOnly \.. 2e050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61$a
2e060 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22  rchitecture]] \"
2e070 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
2e080 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2e090 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2e0a0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2e0b0 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
2e0c0 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65  e list of manage
2e0d0 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72  d assemblies for
2e0e0 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2e0f0 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20  cess..        #
2e100 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74        and report
2e110 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44   on the System.D
2e120 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
2e130 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20  ed ones...
2e140 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
2e150 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
2e160 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
2e170 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
2e180 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
2e190 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
2e1a0 6e 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 47 65  nvoke Utility Ge
2e1b0 74 41 73 73 65 6d 62 6c 69 65 73 0d 0a 20 20 20  tAssemblies..
2e1c0 20 20 20 20 20 20 20 7d 20 61 73 73 65 6d 62 6c         } assembl
2e1d0 69 65 73 5d 20 3d 3d 20 30 20 7c 7c 20 5b 63 61  ies] == 0 || [ca
2e1e0 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
2e1f0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
2e200 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65   AppDomain.Curre
2e210 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65  ntDomain GetAsse
2e220 6d 62 6c 69 65 73 0d 0a 20 20 20 20 20 20 20 20  mblies..
2e230 20 20 7d 20 61 73 73 65 6d 62 6c 69 65 73 5d 20    } assemblies]
2e240 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
2e250 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2e260 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c   foreach assembl
2e270 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d  y $assemblies {. 2e280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 2e290 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 f {[string match 2e2a0 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \{System.Data.S 2e2b0 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 QLite*$assembly
2e2c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2e2d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
2e2e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2e2f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 2e300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e310 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 "---- found 2e320 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a loaded assembly: 2e330 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d "$assembly \n]
2e340 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e350 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2e360 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2e370 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e380 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
2e390 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2e3a0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 2e3c0 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 --- define const 2e3d0 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 ants for \"Syste 2e3e0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e m.Data.SQLite\". 2e3f0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 2e400 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 2e410 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 2e420 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 2e430 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 2e440 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 2e450 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2e460 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 e.SQLite3 Define 2e470 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 Constants.. 2e480 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e } defineCon 2e490 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 stants] == 0} th 2e4a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2e4b0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2e4c0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2e4d0 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20  rgs [formatList
2e4e0 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  [lsort \..
2e4f0 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e            $defin 2e500 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e eConstants] <non 2e510 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e>] \n].. 2e520 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 2e530 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
2e540 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
2e550 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
2e560 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2e570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
2e580 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
2e590 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2e5a0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 2e5b0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 "---- sour 2e5c0 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 ce version of \" 2e5d0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2e5e0 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d te.dll\"... "... 2e5f0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 2e600 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 2e610 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 2e620 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 2e630 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 2e640 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 2e650 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 2e660 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 eConnection Prov 2e670 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 iderVersion.. 2e680 20 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e } version 2e690 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 2e6a0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2e6b0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
2e6c0 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74  version] == 0} t
2e6d0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2e6e0 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e       set version
2e6f0 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..
2e700 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2e710 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2e720 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2e730 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d rgs$version \n]
2e740 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
2e750 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
2e760 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2e770 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c channel unknown\ 2e780 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a n.. }.. 2e790 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2e7a0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 2e7b0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2e7c0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
2e7d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
2e7e0 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63  ---- source chec
2e7f0 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d  kout of \"System
2e800 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
2e810 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  \"... "....
2e820 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
2e830 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
2e840 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
2e850 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
2e860 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e870 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
2e880 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
2e890 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f  ction ProviderSo
2e8a0 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20  urceId..
2e8b0 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d    } sourceId] ==
2e8c0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2e8d0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
2e8e0 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72  ing length $sour 2e8f0 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 2e900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e910 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e set sourceId n 2e920 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ull.. 2e930 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2e940 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2e950 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2e960 73 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d  s $sourceId \n]. 2e970 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 2e980 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 2e990 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2e9a0 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
2e9b0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2e9c0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e9d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2e9e0 20 4e 4f 54 45 3a 20 52 65 73 65 74 20 63 61 63   NOTE: Reset cac
2e9f0 68 65 64 20 22 62 72 65 61 6b 20 69 6e 74 6f 20  hed "break into
2ea00 64 65 62 75 67 67 65 72 22 20 73 65 74 74 69 6e  debugger" settin
2ea10 67 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  g so that it can
2ea20 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
2ea30 20 20 20 20 20 75 73 65 64 20 64 75 72 69 6e 67       used during
2ea40 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 2c 20   the test file,
2ea50 69 66 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  if needed...
2ea60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
2ea70 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
2ea80 20 3a 3a 6e 6f 28 72 65 73 65 74 42 72 65 61 6b   ::no(resetBreak
2ea90 49 6e 74 6f 44 65 62 75 67 67 65 72 29 5d 20 26  IntoDebugger)] &
2eaa0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
2eab0 20 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65   [haveSQLiteObje
2eac0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
2ead0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
2eae0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
2eaf0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
2eb00 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
2eb10 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
2eb20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
2eb30 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 48 65  m.Data.SQLite.He
2eb40 6c 70 65 72 4d 65 74 68 6f 64 73 20 52 65 73 65  lperMethods Rese
2eb50 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67  tBreakIntoDebugg
2eb60 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  er..          }
2eb70 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
2eb80 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2eb90 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2eba0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2ebb0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 2ebc0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 2ebd0 6c 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f l ResetBreakInto 2ebe0 44 65 62 75 67 67 65 72 28 29 2e 2e 2e 20 6f 6b Debugger()... ok 2ebf0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 2ec00 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2ec10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2ec20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2ec30 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
2ec40 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2ec50 20 63 61 6c 6c 20 52 65 73 65 74 42 72 65 61 6b   call ResetBreak
2ec60 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29 2e 2e  IntoDebugger()..
2ec70 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  . error: " \..
2ec80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
2ec90 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 2eca0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2ecb0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2ecc0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2ecd0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 OTE: Check the a 2ece0 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 vailable builds 2ecf0 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 (and "releases") 2ed00 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a of SQLite and.. 2ed10 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2ed20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2ed30 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 2ed40 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2ed50 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a SQLiteBuilds$::
2ed60 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
2ed70 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
2ed80 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a  LiteReleases $:: 2ed90 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 2eda0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2edb0 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 # NOTE: Now, 2edc0 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 we need to know 2edd0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f if the SQLite co 2ede0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 re library is av 2edf0 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 ailable.. 2ee00 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 # (i.e. b 2ee10 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 ecause the manag 2ee20 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 ed-only System.D 2ee30 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d ata.SQLite assem 2ee40 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 bly can.. 2ee50 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 # load wi 2ee60 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 thout it; howeve 2ee70 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 r, it cannot do 2ee80 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 anything useful 2ee90 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 without.. 2eea0 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 # it). I 2eeb0 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 f we are using t 2eec0 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 he mixed-mode as 2eed0 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c sembly and we al 2eee0 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 ready.. # 2eef0 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 found it 2ef00 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 (above), this sh 2ef10 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 ould always succ 2ef20 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d eed... #. 2ef30 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 2ef40 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 rSQLiteLibrary$
2ef50 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
2ef60 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2ef70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
2ef80 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ck if the SQLite
2ef90 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
2efa0 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  y is available..
2efb0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2efc0 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
2efd0 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73  teInterop $::tes 2efe0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 2eff0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2f000 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 # NOTE: Check th 2f010 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 e SQLite databas 2f020 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 2f030 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 directories... 2f040 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2f050 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 2f060 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 irectories$::te
2f070 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
2f080 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2f090 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
2f0a0 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
2f0b0 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65   various compile
2f0c0 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65  -time options ne
2f0d0 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20  eded for..
2f0e0 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63    #       test c
2f0f0 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20  onstraints were
2f100 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
2f110 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
2f120 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20  .  There..
2f130 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f    #       are so
2f140 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  me compile-time
2f150 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73  options that mus
2f160 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e  t also have been
2f170 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20   enabled..
2f180 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68    #       for th
2f190 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
2f1a0 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ly in order to b
2f1b0 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f  e effective.  Fo
2f1c0 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20  r those..
2f1d0 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73   #       options
2f1e0 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73  , it will be ass
2f1f0 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73  umed that it was
2f200 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65   enabled for the
2f210 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20   interop..
2f220 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62    #       assemb
2f230 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61  ly if it was ena
2f240 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e  bled for the man
2f250 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  aged assembly...
2f260 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2f270 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e     foreach defin
2f280 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20  eConstant [list
2f290 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  \..            C
2f2a0 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54  HECK_STATE COUNT
2f2b0 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e  _HANDLE DEBUG IN
2f2c0 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45  TEROP_CODEC INTE
2f2d0 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20  ROP_DEBUG \..
2f2e0 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
2f2f0 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54  _EXTENSION_FUNCT
2f300 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53  IONS INTEROP_FTS
2f310 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20  5_EXTENSION \..
2f320 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
2f330 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44  OP_INCLUDE_CEROD
2f340 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45   INTEROP_INCLUDE
2f350 5f 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49  _EXTRA INTEROP_I
2f360 4e 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20  NCLUDE_SEE \..
2f370 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
2f380 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53  P_INCLUDE_ZIPVFS
2f390 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45   INTEROP_JSON1_E
2f3a0 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20  XTENSION \..
2f3b0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
2f3c0 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54  LEGACY_CLOSE INT
2f3d0 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50  EROP_LOG INTEROP
2f3e0 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45  _PERCENTILE_EXTE
2f3f0 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
2f400 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47       INTEROP_REG
2f410 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e  EXP_EXTENSION IN
2f420 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58  TEROP_SESSION_EX
2f430 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
2f440 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53         INTEROP_S
2f450 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e  HA1_EXTENSION IN
2f460 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e  TEROP_TEST_EXTEN
2f470 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
2f480 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59      INTEROP_TOTY
2f490 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  PE_EXTENSION INT
2f4a0 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
2f4b0 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  LE \..
2f4c0 20 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20    NET_20 NET_35
2f4d0 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45  NET_40 NET_45 NE
2f4e0 54 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45  T_451 NET_452 NE
2f4f0 54 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a  T_46 NET_461 \..
2f500 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f              NET_
2f510 34 36 32 20 4e 45 54 5f 34 37 20 4e 45 54 5f 34  462 NET_47 NET_4
2f520 37 31 20 4e 45 54 5f 34 37 32 20 4e 45 54 5f 43  71 NET_472 NET_C
2f530 4f 4d 50 41 43 54 5f 32 30 20 4e 45 54 5f 53 54  OMPACT_20 NET_ST
2f540 41 4e 44 41 52 44 5f 32 30 20 5c 0d 0a 20 20 20  ANDARD_20 \..
2f550 20 20 20 20 20 20 20 20 20 4e 45 54 5f 53 54 41           NET_STA
2f560 4e 44 41 52 44 5f 32 31 20 50 4c 41 54 46 4f 52  NDARD_21 PLATFOR
2f570 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
2f580 52 4b 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56  RK PRELOAD_NATIV
2f590 45 5f 4c 49 42 52 41 52 59 20 5c 0d 0a 20 20 20  E_LIBRARY \..
2f5a0 20 20 20 20 20 20 20 20 20 52 45 54 41 52 47 45           RETARGE
2f5b0 54 41 42 4c 45 20 53 51 4c 49 54 45 5f 53 54 41  TABLE SQLITE_STA
2f5c0 4e 44 41 52 44 20 54 48 52 4f 57 5f 4f 4e 5f 44  NDARD THROW_ON_D
2f5d0 49 53 50 4f 53 45 44 20 5c 0d 0a 20 20 20 20 20  ISPOSED \..
2f5e0 20 20 20 20 20 20 20 54 52 41 43 45 20 54 52 41         TRACE TRA
2f5f0 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 52  CE_CONNECTION TR
2f600 41 43 45 5f 44 45 54 45 43 54 49 4f 4e 20 54 52  ACE_DETECTION TR
2f610 41 43 45 5f 48 41 4e 44 4c 45 20 54 52 41 43 45  ACE_HANDLE TRACE
2f620 5f 50 52 45 4c 4f 41 44 20 5c 0d 0a 20 20 20 20  _PRELOAD \..
2f630 20 20 20 20 20 20 20 20 54 52 41 43 45 5f 53 48          TRACE_SH
2f640 41 52 45 44 20 54 52 41 43 45 5f 53 54 41 54 45  ARED TRACE_STATE
2f650 4d 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e 49  MENT TRACE_WARNI
2f660 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  NG TRACK_MEMORY_
2f670 42 59 54 45 53 20 5c 0d 0a 20 20 20 20 20 20 20  BYTES \..
2f680 20 20 20 20 20 55 53 45 5f 45 4e 54 49 54 59 5f       USE_ENTITY_
2f690 46 52 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45 5f  FRAMEWORK_6 USE_
2f6a0 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f  INTEROP_DLL USE_
2f6b0 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f  PREPARE_V2 WINDO
2f6c0 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  WS] {..
2f6d0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
2f6e0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
2f6f0 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time
2f700 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64  option is listed
2f710 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d   in the list of.
2f720 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
2f730 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74     "define const
2f740 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b  ants" kept track
2f750 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67   of by the manag
2f760 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  ed assembly...
2f770 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2f780 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
2f790 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
2f7a0 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  t $::test_channe 2f7b0 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e l$defineConstan
2f7c0 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  t..        }....
2f7d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2f7e0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
2f7f0 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  pt to determine
2f800 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69  if various compi
2f810 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options
2f820 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20  needed for..
2f830 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
2f840 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72   constraints wer
2f850 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68  e enabled for th
2f860 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
2f870 6c 79 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20  ly and/or..
2f880 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74     #       for t
2f890 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
2f8a0 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...
2f8b0 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
2f8c0 61 63 68 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f  ach compileOptio
2f8d0 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  n [list \..
2f8e0 20 20 20 20 20 20 20 43 4f 44 45 43 20 45 58 54         CODEC EXT
2f8f0 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53  ENSION_FUNCTIONS
2f900 20 48 41 53 5f 43 4f 44 45 43 20 49 4e 43 4c 55   HAS_CODEC INCLU
2f910 44 45 5f 43 45 52 4f 44 20 49 4e 43 4c 55 44 45  DE_CEROD INCLUDE
2f920 5f 45 58 54 52 41 20 5c 0d 0a 20 20 20 20 20 20  _EXTRA \..
2f930 20 20 20 20 20 20 49 4e 43 4c 55 44 45 5f 53 45        INCLUDE_SE
2f940 45 20 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53  E INCLUDE_ZIPVFS
2f950 20 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e   JSON1_EXTENSION
2f960 20 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 4c 4f   LEGACY_CLOSE LO
2f970 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  G \..
2f980 20 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45   PERCENTILE_EXTE
2f990 4e 53 49 4f 4e 20 52 45 47 45 58 50 5f 45 58 54  NSION REGEXP_EXT
2f9a0 45 4e 53 49 4f 4e 20 53 45 53 53 49 4f 4e 5f 45  ENSION SESSION_E
2f9b0 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20  XTENSION \..
2f9c0 20 20 20 20 20 20 20 20 53 48 41 31 5f 45 58 54          SHA1_EXT
2f9d0 45 4e 53 49 4f 4e 20 54 45 53 54 5f 45 58 54 45  ENSION TEST_EXTE
2f9e0 4e 53 49 4f 4e 20 54 4f 54 59 50 45 5f 45 58 54  NSION TOTYPE_EXT
2f9f0 45 4e 53 49 4f 4e 20 56 49 52 54 55 41 4c 5f 54  ENSION VIRTUAL_T
2fa00 41 42 4c 45 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ABLE] {..
2fa10 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2fa20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
2fa30 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
2fa40 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74  e option is list
2fa50 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 0d 0a  ed in the list..
2fa60 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2fa70 20 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20    kept track of
2fa80 62 79 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61  by the interop a
2fa90 73 73 65 6d 62 6c 79 20 61 6e 64 2f 6f 72 20 74  ssembly and/or t
2faa0 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  he SQLite..
2fab0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72       #       cor
2fac0 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...
2fad0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2fae0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
2faf0 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 24  eCompileOption $2fb00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
2fb10 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 0d 0a 20  compileOption..
2fb20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2fb30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2fb40 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
2fb50 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
2fb60 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20  SQLite provider
2fb70 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
2fb80 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  h..        #
2fb90 20 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61     support for a
2fba0 6e 79 20 65 6e 63 72 79 70 74 65 64 20 64 61 74  ny encrypted dat
2fbb0 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20  abases...
2fbc0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
2fbd0 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e  [haveSQLiteDefin
2fbe0 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f  eConstant INTERO
2fbf0 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20  P_CODEC] || \..
2fc00 20 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65             [have
2fc10 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
2fc20 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43  tant INTEROP_INC
2fc30 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20  LUDE_SEE]} then
2fc40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
2fc50 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2fc60 3a 20 4e 6f 77 20 63 68 65 63 6b 20 69 66 20 74  : Now check if t
2fc70 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  he interop assem
2fc80 62 6c 79 20 77 61 73 20 61 6c 73 6f 20 63 6f 6d  bly was also com
2fc90 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20  piled with..
2fca0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
2fcb0 70 70 6f 72 74 20 66 6f 72 20 65 6e 63 72 79 70  pport for encryp
2fcc0 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a  ted databases...
2fcd0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2fce0 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65         if {[have
2fcf0 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74  SQLiteCompileOpt
2fd00 69 6f 6e 20 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d  ion CODEC] || \.
2fd10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2fd20 68 61 76 65 53 51 4c 69 74 65 43 6f 6d 70 69 6c  haveSQLiteCompil
2fd30 65 4f 70 74 69 6f 6e 20 49 4e 43 4c 55 44 45 5f  eOption INCLUDE_
2fd40 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  SEE]} then {..
2fd50 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2fd60 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2fd70 20 46 69 6e 61 6c 6c 79 2c 20 63 68 65 63 6b 20   Finally, check
2fd80 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
2fd90 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63  re library was c
2fda0 6f 6d 70 69 6c 65 64 0d 0a 20 20 20 20 20 20 20  ompiled..
2fdb0 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74       #       wit
2fdc0 68 20 73 75 70 70 6f 72 74 20 66 6f 72 20 65 6e  h support for en
2fdd0 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
2fde0 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
2fdf0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  #..            i
2fe00 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 43 6f  f {[haveSQLiteCo
2fe10 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 48 41 53 5f  mpileOption HAS_
2fe20 43 4f 44 45 43 5d 7d 20 74 68 65 6e 20 7b 0d 0a  CODEC]} then {..
2fe30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
2fe40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
2fe50 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20   NOTE: Yes, add
2fe60 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75  constraint for u
2fe70 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
2fe80 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  uite...
2fe90 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2fea0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
2feb0 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
2fec0 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f  SQLite.Encryptio
2fed0 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  n..            }
2fee0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2fef0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2ff00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2ff10 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65   NOTE: Try to se
2ff20 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74  tup an interrupt
2ff30 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using
2ff40 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67  the script debug
2ff50 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ger..        #
2ff60 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63       that will c
2ff70 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75  ancel all SQL qu
2ff80 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
2ff90 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61  s for all databa
2ffa0 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  se..        #
2ffb0 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20      connections
2ffc0 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e  known to this in
2ffd0 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
2ffe0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
2fff0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
30000 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65   ::no(sqliteInte
30010 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d  rruptCallback)]}
30020 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
30030 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72     setupDbInterr
30040 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74  uptCallback $::t 30050 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 est_channel$::t
30060 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20  est_log..
30070 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
30080 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
30090 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e   Check for the n
300a0 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70  ative runtime op
300b0 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c  tion, which woul
300c0 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20  d mean we are..
300d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75         #       u
300e0 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d  sing the mixed-m
300f0 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
30100 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
30110 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d    checkForRuntim
30120 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f  eOption $::test_ 30130 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a channel native.. 30140 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 30150 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 30160 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 ck if the test s 30170 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e uite should coun 30180 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 t the number of 30190 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 connections.. 301a0 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 # "op 301b0 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 ened" and "close 301c0 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c d" from the pool 301d0 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e when determinin 301e0 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 g if a test.. 301f0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 # pas 30200 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 sed. Disabling 30210 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 this behavior is 30220 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 sometimes neces 30230 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 sary (e.g... 30240 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 # duri 30250 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 ng the release t 30260 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 esting process) 30270 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 because there ar 30280 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 e several.. 30290 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests 302a0 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 that rely on th 302b0 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 e "opened from p 302c0 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 ool" count being 302d0 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 greater.. 302e0 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a # than z 302f0 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 ero. These test 30300 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 s may fail due t 30310 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d o the non-determ 30320 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 inistic.. 30330 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f # behavio 30340 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c r of the CLR GC, 30350 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 even when there 30360 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 is no bug in th 30370 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 e code.. 30380 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 # being te 30390 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 sted... # 303a0 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 303b0 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 orRuntimeOption 303c0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
303d0 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a  noPoolCounts....
303e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
303f0 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
30400 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69   if the test sui
30410 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 68  te should use sh
30420 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e  ared-cache mode.
30430 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
30440 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e       checkForRun
30450 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65  timeOption $::te 30460 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 st_channel share 30470 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 dCache.... 30480 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 30490 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 304a0 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 resource usage p 304b0 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 rior to running 304c0 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 any tests... 304d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 304e0 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 304f0 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
30500 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
30510 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
30520 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74  E: Grab the list
30530 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c   of native modul
30540 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  es for the curre
30550 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a  nt process and..
30560 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
30570 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79  report on the Sy
30580 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
30590 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a   related ones...
305a0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
305b0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
305c0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
305d0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
305e0 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20      set modules
305f0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c  [object invoke \
30600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
30610 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
30620 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 75  cs.Process.GetCu
30630 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64  rrentProcess Mod
30640 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ules]....
30650 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
30660 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20  h -alias module
30670 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20  $modules {.. 30680 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 30690 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 306a0 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e he module file n 306b0 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 65 ame here must be 306c0 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 normalized... 306d0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 306e0 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c set fil 306f0 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d eName [file norm 30700 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 alize [$module F
30710 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20  ileName]]..
30720 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
30730 61 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 61  ameOnly [file ta
30740 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  il $fileName]... 30750 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 30760 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact 30770 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 -nocase -- \.. 30780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 30790 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 getNativeLibrary 307a0 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 FileNamesOnly]$
307b0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d  fileNameOnly] !=
307c0 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   -1} then {..
307d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
307e0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 307f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 30800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30810 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f "---- found lo 30820 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69 aded SQLite nati 30830 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c ve library modul 30840 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 e: " \.. 30850 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e$fileN
30860 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ame \n]..
30870 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
30880 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d  lsearch -exact -
30890 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20  nocase -- \..
308a0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
308b0 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79  tInteropAssembly
308c0 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24  FileNamesOnly] $308d0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d fileNameOnly] != 308e0 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 -1} then {.. 308f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 30900 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
30910 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
30920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
30930 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
30940 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65  aded SQLite inte
30950 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64  rop assembly mod
30960 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ule: " \..
30970 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 30980 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 eName \n].. 30990 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 309a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 309b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 309c0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 309d0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
309e0 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
309f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70        "---- comp
30a00 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
30a10 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65   for SQLite core
30a20 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d   library... "...
30a30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
30a40 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
30a50 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
30a60 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
30a70 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
30a80 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
30a90 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
30aa0 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65  e3 SQLiteCompile
30ab0 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  Options..
30ac0 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69     } compileOpti
30ad0 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ons] == 0} then
30ae0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
30af0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 30b00 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 30b10 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 30b20 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 30b30 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f$compileO
30b40 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  ptions] <none>]
30b50 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
30b60 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
30b70 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 30b80 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 30b90 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 30ba0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 30bb0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 30bc0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 30bd0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
30be0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
30bf0 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d    "---- compile-
30c00 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72  time options for
30c10 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20   SQLite interop
30c20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d  assembly... "...
30c30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
30c40 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
30c50 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
30c60 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
30c70 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
30c80 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
30c90 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
30ca0 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c  e3 InteropCompil
30cb0 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  eOptions..
30cc0 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74      } compileOpt
30cd0 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ions] == 0} then
30ce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
30cf0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 30d00 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 30d10 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 30d20 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 30d30 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65$compile
30d40 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d  Options] <none>]
30d50 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
30d60 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
30d70 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 30d80 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 30d90 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 30da0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 30db0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30dc0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 30dd0 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73 74 the active test 30de0 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 constraints... 30df0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 30e00 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
30e10 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
30e20 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72  rgs "---- constr
30e30 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20  aints: " \..
30e40 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c          [formatL
30e50 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43  ist [lsort [getC
30e60 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f  onstraints]] <no
30e70 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ne>] \n]....
30e80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
30e90 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
30ea0 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
30eb0 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 65   for use by thre
30ec0 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 74  ads created in t
30ed0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  his..        #
30ee0 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e       application
30ef0 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69   domain.  This i
30f00 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 61  s necessary beca
30f10 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c  use all the Eagl
30f20 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
30f30 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74     "test context
30f40 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  " information is
30f50 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20   per-thread...
30f60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
30f70 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
30f80 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72  ts ::test_constr
30f90 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  aints]} then {..
30fa0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
30fb0 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
30fc0 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28   $::eagle_tests( 30fd0 43 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 Constraints).. 30fe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 30ff0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 31000 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 NOTE: Load the " 31010 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 after-constraint 31020 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 s" custom per-us 31030 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f er and/or per-ho 31040 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 31050 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 test setting 31060 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 31070 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 #.. uplev 31080 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 el 1 [list loadS 31090 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 QLiteTestSetting 310a0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
310b0 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20  l .after]....
310c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
310d0 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73  # NOTE: If neces
310e0 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68 61  sary, enable sha
310f0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
31100 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
31110 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
31120 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
31130 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
31140 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
31150 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
31160 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 31170 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d true.. }. 31180 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 31190 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 311a0 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test 311b0 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e s actually began 311c0 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... 311d0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 311e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
311f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
31200 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
31210 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
31220 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 61  QLite tests bega
31230 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  n at " \..
31240 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
31250 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
31260 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ds]] \n]..
31270 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
31280 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54   proc runSQLiteT
31290 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65  estFilesPrologue
312a0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
312b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
312c0 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
312d0 75 73 74 6f 6d 20 66 69 6c 65 73 20 70 72 6f 6c  ustom files prol
312e0 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e  ogue if the main
312f0 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20   one has been..
31300 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69       #       ski
31310 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  pped...      #..
31320 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
31330 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f   exists ::no(pro
31340 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
31350 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
31360 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20  plevel 1 {..
31370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
31380 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70     # NOTE: Setup
31390 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 74   the variables t
313a0 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
313b0 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 74   various non-dat
313c0 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20  a files..
313d0 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69     #       requi
313e0 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73  red by the tests
313f0 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a   in this file...
31400 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
31410 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74         set entit
31420 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c  yFrameworkDllFil
31430 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
31440 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
31450 4e 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65  Name EntityFrame
31460 77 6f 72 6b 2e 64 6c 6c 20 74 72 75 65 5d 0d 0a  work.dll true]..
31470 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
31480 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
31490 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
314a0 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
314b0 61 6d 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78  ame Installer.ex
314c0 65 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20  e true]....
314d0 20 20 20 20 20 73 65 74 20 73 71 6c 69 74 65 44       set sqliteD
314e0 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5c  esignerDllFile \
314f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
31500 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
31510 65 20 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65  e SQLite.Designe
31520 72 2e 64 6c 6c 20 74 72 75 65 5d 0d 0a 0d 0a 20  r.dll true]....
31530 20 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73           set sys
31540 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
31550 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
31560 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46        [getBuildF
31570 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44  ileName System.D
31580 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 74  ata.SQLite.dll t
31590 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue]....
315a0 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61    set systemData
315b0 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c  SQLiteLinqDllFil
315c0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
315d0 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
315e0 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
315f0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
31600 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....
31610 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61      set systemDa
31620 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69  taSQLiteEf6DllFi
31630 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
31640 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
31650 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
31660 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
31670 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....
31680 20 20 20 20 73 65 74 20 74 65 73 74 45 78 65 46      set testExeF
31690 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ile [getBuildFil
316a0 65 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 20 74  eName test.exe t
316b0 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  rue]..
316c0 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46  set testLinqExeF
316d0 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ile [getBuildFil
316e0 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65  eName testlinq.e
316f0 78 65 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20  xe true]..
31700 20 20 20 20 73 65 74 20 74 65 73 74 45 66 36 45      set testEf6E
31710 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64  xeFile [getBuild
31720 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36  FileName testef6
31730 2e 65 78 65 20 74 72 75 65 5d 0d 0a 0d 0a 20 20  .exe true]....
31740 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
31750 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74       # NOTE: Set
31760 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73  up the variables
31770 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
31780 68 65 20 76 61 72 69 6f 75 73 20 64 61 74 61 20  he various data
31790 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 20  files..
317a0 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65   #       require
317b0 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69  d by the tests i
317c0 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  n this file...
317d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
317e0 20 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e       set testLin
317f0 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e  qOutFile [file n
31800 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
31810 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
31820 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
31830 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65  TestDataPath] te
31840 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a  stlinq.out]]....
31850 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
31860 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20  rthwindEfDbFile
31870 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
31880 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
31890 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
318a0 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65  le dirname [file
318b0 20 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c   dirname [getSQL
318c0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
318d0 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ]] \..
318e0 20 20 20 20 74 65 73 74 6c 69 6e 71 20 6e 6f 72      testlinq nor
318f0 74 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d  thwindEF.db]]...
31900 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e  .          set n
31910 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c  onWalDbFile [fil
31920 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
31930 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
31940 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
31950 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
31960 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a   nonWal.db]]....
31970 20 20 20 20 20 20 20 20 20 20 73 65 74 20 77 61            set wa
31980 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  lDbFile [file na
31990 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
319a0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
319b0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
319c0 65 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c  estDataPath] wal
319d0 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .db]]....
319e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
319f0 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69  # NOTE: The vari
31a00 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e  ous install/unin
31a10 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20  stall log files
31a20 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
31a30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
31a40 20 20 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20      design-time
31a50 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c  component instal
31a60 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...
31a70 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
31a80 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
31a90 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  05LogFile [file
31aa0 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
31ab0 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
31ac0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
31ad0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
31ae0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
31af0 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2005.log]]....
31b00 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
31b10 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  InstallVs2008Log
31b20 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
31b30 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
31b40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31b50 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
31b60 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
31b70 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e  ler_Test_Vs2008.
31b80 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
31b90 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
31ba0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20  llVs2010LogFile
31bb0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
31bc0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
31bd0 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
31be0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
31bf0 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
31c00 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d  est_Vs2010.log]]
31c10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
31c20 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
31c30 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  012LogFile [file
31c40 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
31c50 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
31c60 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
31c70 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
31c80 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
31c90 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2012.log]]....
31ca0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
31cb0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f  tInstallVs2013Lo
31cc0 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
31cd0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
31ce0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
31cf0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
31d00 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
31d10 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33  ller_Test_Vs2013
31d20 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
31d30 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74      set testInst
31d40 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
31d50 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
31d60 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
31d70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
31d80 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
31d90 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f  Path] Installer_
31da0 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d  Test_Vs2015.log]
31db0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
31dc0 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  et testInstallVs
31dd0 32 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2017LogFile [fil
31de0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
31df0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
31e00 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
31e10 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
31e20 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f   Installer_Test_
31e30 56 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2017.log]]....
31e40 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65            set te
31e50 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
31e60 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  5LogFile [file n
31e70 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
31e80 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
31e90 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
31ea0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e  TestDataPath] Un
31eb0 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  installer_Test_V
31ec0 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2005.log]]....
31ed0 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
31ee0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
31ef0 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
31f00 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
31f10 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
31f20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
31f30 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
31f40 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
31f50 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2008.log]]....
31f60 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
31f70 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  UninstallVs2010L
31f80 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
31f90 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
31fa0 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
31fb0 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
31fc0 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
31fd0 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
31fe0 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  010.log]]....
31ff0 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
32000 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  ninstallVs2012Lo
32010 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
32020 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
32030 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
32040 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
32050 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
32060 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
32070 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  12.log]]....
32080 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e        set testUn
32090 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  installVs2013Log
320a0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
320b0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
320c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
320d0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
320e0 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
320f0 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
32100 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  3.log]]....
32110 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
32120 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46  nstallVs2015LogF
32130 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
32140 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
32150 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
32160 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
32170 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
32180 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35  ller_Test_Vs2015
32190 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
321a0 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
321b0 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69  stallVs2017LogFi
321c0 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
321d0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
321e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
321f0 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
32200 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
32210 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e  ler_Test_Vs2017.
32220 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
32230 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
32240 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32250 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32260 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32270 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
32280 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
32290 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 68 65   exists ::no(che
322a0 63 6b 46 6f 72 53 71 6c 69 74 65 46 69 6c 65 73  ckForSqliteFiles
322b0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
322c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
322d0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
322e0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
322f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
32300 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e    [file tail $en 32310 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 32320 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 32330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 32340 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
32350 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74  t_channel $entit 32360 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c yFrameworkDllFil 32370 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 32380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 32390 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 323a0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 323b0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 323c0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 323d0 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 tail$installerE
323e0 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
323f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
32400 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 32410 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 est_channel$ins
32420 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e  tallerExeFile In
32430 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20  staller.exe..
32440 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
32450 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
32460 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
32470 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
32480 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
32490 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $324a0 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c sqliteDesignerDl 324b0 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 324c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 324d0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
324e0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69  st_channel $sqli 324f0 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c teDesignerDllFil 32500 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 32510 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 32520 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 32530 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 32540 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 32550 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 32560 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 tail$systemData
32570 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d  SQLiteDllFile]]]
32580 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
32590 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
325a0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 325b0 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 el$systemDataSQ
325c0 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  LiteDllFile..
325d0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
325e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
325f0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
32600 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
32610 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
32620 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $32630 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 32640 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 LinqDllFile]]]} 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 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 teLinqDllFile.. 326a0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 326b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 326c0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 326d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 326e0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 326f0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 32700 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
32710 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  teEf6DllFile]]]}
32720 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
32730 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
32740 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 32750 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c l$systemDataSQL
32760 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20  iteEf6DllFile..
32770 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32780 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
32790 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
327a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
327b0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
327c0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
327d0 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d   $testExeFile]]] 327e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 327f0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 32800 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
32810 65 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20  el $testExeFile 32820 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 test.exe.. 32830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 32840 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 32850 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 32860 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 32870 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 32880 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
32890 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d  tLinqExeFile]]]}
328a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
328b0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
328c0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 328d0 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 l$testLinqExeFi
328e0 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d  le testlinq.exe.
328f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32910 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
32920 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
32930 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
32940 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
32950 69 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69  il $testEf6ExeFi 32960 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 32970 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 32980 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
32990 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36  channel $testEf6 329a0 45 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e ExeFile testef6. 329b0 65 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 exe.. 329c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 329d0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 329e0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 329f0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 32a00 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 32a10 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 e tail$testLinq
32a20 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  OutFile]]]} then
32a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
32a40 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $32a50 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
32a60 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20  stLinqOutFile..
32a70 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32a80 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
32a90 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
32aa0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
32ab0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
32ac0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
32ad0 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46   $northwindEfDbF 32ae0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 32af0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 ch 32b00 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
32b10 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77  _channel $northw 32b20 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 indEfDbFile.. 32b30 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 32b40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 32b50 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 32b60 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 32b70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 32b80 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
32b90 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d  nonWalDbFile]]]}
32ba0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
32bb0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
32bc0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 32bd0 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d l$nonWalDbFile.
32be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32c00 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
32c10 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
32c20 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
32c30 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
32c40 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d  il $walDbFile]]] 32c50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 32c60 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 32c70 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
32c80 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20  el $walDbFile.. 32c90 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 32ca0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 32cb0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 32cc0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 32cd0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 32ce0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 32cf0 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
32d00 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  005LogFile]]]} t
32d10 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
32d20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
32d30 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 32d40 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
32d50 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  05LogFile..
32d60 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
32d70 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
32d80 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
32d90 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
32da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
32db0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 32dc0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c stInstallVs2008L 32dd0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 32de0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 32df0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
32e00 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 32e10 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f tInstallVs2008Lo 32e20 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 32e30 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 32e40 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 32e50 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 32e60 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 32e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 32e80 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
32e90 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
32ea0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
32eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
32ec0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 32ed0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 channel$testIns
32ee0 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
32ef0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
32f00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
32f10 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
32f20 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
32f30 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
32f40 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
32f50 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 32f60 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d lVs2012LogFile]] 32f70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 32f80 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 32f90 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
32fa0 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  nel $testInstall 32fb0 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 Vs2012LogFile.. 32fc0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 32fd0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 32fe0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 32ff0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 33000 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 33010 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 33020 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
33030 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  013LogFile]]]} t
33040 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
33050 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
33060 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 33070 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
33080 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  13LogFile..
33090 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
330a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
330b0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
330c0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
330d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
330e0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 330f0 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c stInstallVs2015L 33100 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 33110 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 33120 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
33130 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 33140 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 33150 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 33160 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 33170 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 33180 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 33190 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 331a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 331b0 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
331c0 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69  stallVs2017LogFi
331d0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
331e0 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
331f0 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 33200 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 channel$testIns
33210 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c  tallVs2017LogFil
33220 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
33230 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
33240 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
33250 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
33260 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
33270 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
33280 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 33290 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 332a0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 332b0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 332c0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
332d0 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 332e0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c tallVs2005LogFil 332f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 33300 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 33310 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 33320 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 33330 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 33340 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 33350 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 tail$testUninst
33360 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
33370 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
33380 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
33390 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 333a0 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 annel$testUnins
333b0 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c  tallVs2008LogFil
333c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
333d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
333e0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
333f0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
33400 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
33410 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
33420 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 33430 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 33440 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 33450 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 33460 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
33470 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 33480 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 33490 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 334a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 334b0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 334c0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 334d0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 334e0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 334f0 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 tail$testUninst
33500 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
33510 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
33520 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
33530 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 33540 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 annel$testUnins
33550 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c  tallVs2012LogFil
33560 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
33570 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
33580 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
33590 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
335a0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
335b0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
335c0 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 335d0 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 allVs2013LogFile 335e0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 335f0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 33600 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
33610 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 33620 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c tallVs2013LogFil 33630 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 33640 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 33650 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 33660 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 33670 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 33680 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 33690 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 tail$testUninst
336a0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
336b0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
336c0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
336d0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 336e0 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 annel$testUnins
336f0 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c  tallVs2015LogFil
33700 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
33710 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
33720 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
33730 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
33740 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
33750 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
33760 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 33770 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 33780 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 33790 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 337a0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
337b0 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 337c0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c tallVs2017LogFil 337d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 337e0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 337f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 33800 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 33810 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 proc runSQLiteT 33820 65 73 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 estFilesEpilogue 33830 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 33840 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 33850 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 ip running our c 33860 75 73 74 6f 6d 20 66 69 6c 65 73 20 65 70 69 6c ustom files epil 33870 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e ogue if the main 33880 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 one has been.. 33890 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 # ski 338a0 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a pped... #.. 338b0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 338c0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 exists ::no(epi 338d0 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 logue.eagle)]} t 338e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 hen {.. u 338f0 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 plevel 1 {.. 33900 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 33910 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 omplain \.. 33920 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 testUni 33930 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 nstallVs2017LogF 33940 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c ile testUninstal 33950 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5c lVs2015LogFile \ 33960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 33970 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 33980 30 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 013LogFile testU 33990 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f ninstallVs2012Lo 339a0 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 gFile \.. 339b0 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 testUnins 339c0 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 339d0 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 e testUninstallV 339e0 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a s2008LogFile \.. 339f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 te 33a00 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 33a10 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 5LogFile testIns 33a20 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c tallVs2017LogFil 33a30 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 33a40 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 testInstallVs 33a50 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 2015LogFile test 33a60 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 InstallVs2013Log 33a70 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 33a80 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c testInstal 33a90 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 lVs2012LogFile t 33aa0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 estInstallVs2010 33ab0 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 LogFile \.. 33ac0 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 testIns 33ad0 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c tallVs2008LogFil 33ae0 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 e testInstallVs2 33af0 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 005LogFile.... 33b00 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 33b10 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 ocomplain \.. 33b20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 north 33b30 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 windEfDbFile tes 33b40 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a tLinqOutFile \.. 33b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 wa 33b60 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 lDbFile nonWalDb 33b70 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 33b80 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 33b90 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ain \.. 33ba0 20 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 testEf6ExeF 33bb0 69 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 ile testLinqExeF 33bc0 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 33bd0 20 20 20 20 20 74 65 73 74 45 78 65 46 69 6c 65 testExeFile 33be0 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 33bf0 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 eEf6DllFile \.. 33c00 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 sys 33c10 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e temDataSQLiteLin 33c20 71 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44 qDllFile systemD 33c30 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 ataSQLiteDllFile 33c40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 33c50 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 sqliteDesigner 33c60 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 DllFile installe 33c70 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 rExeFile \.. 33c80 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 entity 33c90 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 FrameworkDllFile 33ca0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 33cb0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 33cc0 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 proc runSQLi 33cd0 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b teTestEpilogue { 33ce0 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 33cf0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 33d00 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 running our cus 33d10 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 tom epilogue if 33d20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 the main one has 33d30 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 been.. # 33d40 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 skipped... 33d50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 33d60 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 33d70 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 ::no(epilogue.ea 33d80 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 gle)]} then {.. 33d90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 33da0 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 # NOTE: Show w 33db0 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 hen our tests ac 33dc0 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f tually ended (no 33dd0 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a w)... #.. 33de0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
33df0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
33e00 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
33e10 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53           "---- S
33e20 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
33e30 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74  e tests ended at
33e40 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
33e50 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    [clock format
33e60 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d  [clock seconds]]
33e70 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
33e80 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
33e90 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 69  E: Load the "epi
33ea0 6c 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 65  logue" custom pe
33eb0 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
33ec0 72 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 20  r-host test..
33ed0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
33ee0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20  tings now...
33ef0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75      #..        u
33f00 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c  plevel 1 [list l
33f10 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
33f20 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68  tings $::test_ch 33f30 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65 5d annel .epilogue] 33f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 33f50 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a # BUGFIX: 33f60 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 Before checking 33f70 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 the final resou 33f80 72 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 rces in use by S 33f90 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 QLite, make.. 33fa0 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 # s 33fb0 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 ure both of the 33fc0 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 PRAGMA related d 33fd0 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 irectory names a 33fe0 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 re freed... 33ff0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 34000 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 eckForSQLiteDire 34010 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f ctories$::test_
34020 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a  channel true....
34030 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
34040 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20     # NOTE: Also
34050 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75  report the resou
34060 72 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20  rce usage after
34070 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74  running the test
34080 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
34090 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c         reportSQL
340a0 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a  iteResources $:: 340b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 340c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 340d0 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 # NOTE: Repor 340e0 74 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 t the critical h 340f0 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 andle counts aft 34100 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 er running the t 34110 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ests... # 34120 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c .. getSQL 34130 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 iteHandleCounts 34140 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
34150 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
34160 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
34170 20 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 61   necessary, disa
34180 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  ble shared-cache
34190 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20   mode now...
341a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
341b0 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  f {[hasRuntimeOp
341c0 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65  tion sharedCache
341d0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
341e0 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65       enableShare
341f0 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63  dCache \$::test_c
34200 68 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20  hannel false..
34210 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
34220 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
34230 4e 4f 54 45 3a 20 52 65 73 74 6f 72 65 20 74 68  NOTE: Restore th
34240 65 20 70 72 65 76 69 6f 75 73 6c 79 20 73 61 76  e previously sav
34250 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  ed environment v
34260 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 77 65  ariables that we
34270 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
34280 20 20 63 68 61 6e 67 65 64 20 66 6f 72 20 74 68    changed for th
34290 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
342a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
342b0 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e    restoreEnviron
342c0 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5c 0d  mentVariables \.
342d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69  .            [li
342e0 73 74 20 49 6e 69 74 69 61 6c 69 7a 65 5f 53 51  st Initialize_SQ
342f0 4c 69 74 65 4c 6f 67 5d 20 3a 3a 74 65 73 74 53  LiteLog] ::testS
34300 75 69 74 65 53 61 76 65 64 45 6e 76 0d 0a 20 20  uiteSavedEnv..
34310 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
34320 0a 20 20 20 20 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 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34350 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34360 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34370 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
34380 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34390 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e  ### END Eagle ON
343a0 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23  LY #############
343b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
343c0 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
343d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
343e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
343f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34410 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ##..  }....  #..
34420 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
34430 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
34440 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
34450 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a  ing this file...
34460 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66    #..  if {![inf
34470 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f  o exists common_
34480 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
34490 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d   {..    set comm
344a0 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69  on_directory [fi
344b0 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f  le dirname [info
344c0 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a   script]]..  }..
344d0 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
344e0 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73   Provide the Sys
344f0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
34500 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20  test package to
34510 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
34520 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65  ..  #..  package
34530 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e   provide System.
34540 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74  Data.SQLite.Test
34550 20 31 2e 30 0d 0a 7d 0d 0a                        1.0..}..