System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 57166862b112ba8f3abafa1d2b4dcbc556a68a8c:

• File lib/System.Data.SQLite/common.eagle — part of check-in [cdd3330990] at 2019-10-05 02:06:44 on branch trunk — Update SQLite core library to the 3.30.0 release. (user: mistachkin size: 214521)

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 69  ##....    proc i
0330: 73 4e 65 74 46 78 34 30 20 7b 7d 20 7b 0d 0a 20  sNetFx40 {} {..
0340: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
0350: 65 78 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f 70  exists ::eagle_p
0360: 6c 61 74 66 6f 72 6d 28 66 72 61 6d 65 77 6f 72  latform(framewor
0370: 6b 56 65 72 73 69 6f 6e 29 5d 7d 20 74 68 65 6e  kVersion)]} then
0380: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
0390: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  rn false..
03a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 76  }....      set v
03b0: 65 72 73 69 6f 6e 20 34 2e 30 2e 33 30 33 31 39  ersion 4.0.30319
03c0: 2e 34 32 30 30 30 3b 20 23 20 2e 4e 45 54 20 46  .42000; # .NET F
03d0: 72 61 6d 65 77 6f 72 6b 20 34 2e 30 20 52 54 4d  ramework 4.0 RTM
03e0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 70  ....      if {[p
03f0: 61 63 6b 61 67 65 20 76 63 6f 6d 70 61 72 65 20  ackage vcompare
0400: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 3a 3a  \..          $:: 0410: 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d 28 66 eagle_platform(f 0420: 72 61 6d 65 77 6f 72 6b 56 65 72 73 69 6f 6e 29 rameworkVersion) 0430: 20 24 76 65 72 73 69 6f 6e 5d 20 3e 3d 20 30 7d$version] >= 0}
0440: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
0450: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
0460: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
0470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c        return fal
0480: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  se..      }..
0490: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
04a0: 67 65 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43  getSQLiteDefineC
04b0: 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 20 7b 7d  onstantPrefix {}
04c0: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
04d0: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
04e0: 66 20 74 68 65 20 64 65 66 69 6e 65 20 63 6f 6e  f the define con
04f0: 73 74 61 6e 74 20 70 72 65 66 69 78 20 73 65 74  stant prefix set
0500: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76  ting has been ov
0510: 65 72 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20  erridden..
0520: 23 20 20 20 20 20 20 20 62 79 20 74 68 65 20 75  #       by the u
0530: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65  ser (e.g. on the
0540: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d   command line)..
0550: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
0560: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
0570: 20 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 74 61   ::define_consta
0580: 6e 74 5f 70 72 65 66 69 78 5d 20 26 26 20 5c 0d  nt_prefix] && \.
0590: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
05a0: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 64 65 66  ng length $::def 05b0: 69 6e 65 5f 63 6f 6e 73 74 61 6e 74 5f 70 72 65 ine_constant_pre 05c0: 66 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b fix] > 0} then { 05d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 05e0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 05f0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 the specified d 0600: 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 70 efine constant p 0610: 72 65 66 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 refix... 0620: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 0630: 6e 20 24 3a 3a 64 65 66 69 6e 65 5f 63 6f 6e 73 n$::define_cons
0640: 74 61 6e 74 5f 70 72 65 66 69 78 0d 0a 20 20 20  tant_prefix..
0650: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
0660: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0670: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
0680: 64 65 66 61 75 6c 74 20 64 65 66 69 6e 65 20 63  default define c
0690: 6f 6e 73 74 61 6e 74 20 70 72 65 66 69 78 2e 0d  onstant prefix..
06a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
06b0: 20 20 20 20 72 65 74 75 72 6e 20 64 65 66 69 6e      return defin
06c0: 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d  eConstant.System
06d0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 0d 0a 20  .Data.SQLite...
06e0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
06f0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51  ..    proc getSQ
0700: 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f  LiteCompileOptio
0710: 6e 50 72 65 66 69 78 20 7b 7d 20 7b 0d 0a 20 20  nPrefix {} {..
0720: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
0730: 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20  OTE: See if the
0740: 63 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 70  compile option p
0750: 72 65 66 69 78 20 73 65 74 74 69 6e 67 20 68 61  refix setting ha
0760: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
0770: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
0780: 20 62 79 20 74 68 65 20 75 73 65 72 20 28 65 2e   by the user (e.
0790: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e  g. on the comman
07a0: 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20  d line)...
07b0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
07c0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 70  fo exists ::comp
07d0: 69 6c 65 5f 6f 70 74 69 6f 6e 5f 70 72 65 66 69  ile_option_prefi
07e0: 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  x] && \..
07f0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
0800: 68 20 24 3a 3a 63 6f 6d 70 69 6c 65 5f 6f 70 74  h $::compile_opt 0810: 69 6f 6e 5f 70 72 65 66 69 78 5d 20 3e 20 30 7d ion_prefix] > 0} 0820: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 0830: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 0840: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 0850: 69 66 69 65 64 20 63 6f 6d 70 69 6c 65 20 6f 70 ified compile op 0860: 74 69 6f 6e 20 70 72 65 66 69 78 2e 0d 0a 20 20 tion prefix... 0870: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 0880: 20 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 70 69 return$::compi
0890: 6c 65 5f 6f 70 74 69 6f 6e 5f 70 72 65 66 69 78  le_option_prefix
08a0: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
08b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
08c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
08d0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6d   the default com
08e0: 70 69 6c 65 20 6f 70 74 69 6f 6e 20 70 72 65 66  pile option pref
08f0: 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ix...        #..
0900: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 63          return c
0910: 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 2e 53 51 4c  ompileOption.SQL
0920: 69 74 65 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ite...      }..
0930: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
0940: 63 20 68 61 76 65 53 51 4c 69 74 65 44 65 66 69  c haveSQLiteDefi
0950: 6e 65 43 6f 6e 73 74 61 6e 74 20 7b 20 6e 61 6d  neConstant { nam
0960: 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 74  e } {..      ret
0970: 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 74 72 61  urn [haveConstra
0980: 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  int \..
0990: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65   [appendArgs [ge
09a0: 74 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e  tSQLiteDefineCon
09b0: 73 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61  stantPrefix] $na 09c0: 6d 65 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a me]].. }..... 09d0: 20 20 20 20 70 72 6f 63 20 68 61 76 65 53 51 4c proc haveSQL 09e0: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e iteCompileOption 09f0: 20 7b 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 { name } {.. 0a00: 20 20 20 72 65 74 75 72 6e 20 5b 68 61 76 65 43 return [haveC 0a10: 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 onstraint \.. 0a20: 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 [appendAr 0a30: 67 73 20 5b 67 65 74 53 51 4c 69 74 65 43 6f 6d gs [getSQLiteCom 0a40: 70 69 6c 65 4f 70 74 69 6f 6e 50 72 65 66 69 78 pileOptionPrefix 0a50: 5d 20 24 6e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d ]$name]]..    }
0a60: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
0a70: 74 42 75 69 6c 64 4e 61 74 69 76 65 20 7b 7d 20  tBuildNative {}
0a80: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
0a90: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20    # NOTE: Check
0aa0: 69 66 20 77 65 20 61 72 65 20 62 65 69 6e 67 20  if we are being
0ab0: 66 6f 72 63 65 64 20 74 6f 20 74 72 65 61 74 20  forced to treat
0ac0: 74 68 69 73 20 61 73 20 61 20 6e 61 74 69 76 65  this as a native
0ad0: 20 62 75 69 6c 64 2e 0d 0a 20 20 20 20 20 20 23   build...      #
0ae0: 20 20 20 20 20 20 20 54 68 69 73 20 69 73 20 6e         This is n
0af0: 6f 72 6d 61 6c 6c 79 20 64 6f 6e 65 20 28 61 75  ormally done (au
0b00: 74 6f 6d 61 74 69 63 61 6c 6c 79 29 20 6f 6e 6c  tomatically) onl
0b10: 79 20 77 68 65 6e 20 74 68 65 20 6d 69 78 65 64  y when the mixed
0b20: 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 23 20 20  -mode..      #
0b30: 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 69 73       assembly is
0b40: 20 69 6e 20 75 73 65 3b 20 68 6f 77 65 76 65 72   in use; however
0b50: 2c 20 69 6e 20 73 6f 6d 65 20 63 69 72 63 75 6d  , in some circum
0b60: 73 74 61 6e 63 65 73 20 69 74 20 69 73 20 75 73  stances it is us
0b70: 65 66 75 6c 0d 0a 20 20 20 20 20 20 23 20 20 20  eful..      #
0b80: 20 20 20 20 74 6f 20 66 6f 72 63 65 20 74 68 69      to force thi
0b90: 73 20 62 65 68 61 76 69 6f 72 2e 0d 0a 20 20 20  s behavior...
0ba0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
0bb0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
0bc0: 65 73 74 5f 6e 61 74 69 76 65 5d 20 26 26 20 5c  est_native] && \
0bd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
0be0: 69 6e 67 20 69 73 20 62 6f 6f 6c 65 61 6e 20 2d  ing is boolean -
0bf0: 73 74 72 69 63 74 20 24 3a 3a 74 65 73 74 5f 6e  strict $::test_n 0c00: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a ative]} then {.. 0c10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
0c20: 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 0d 0a 20  ::test_native..
0c30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0c40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
0c50: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  lse..      }..
0c60: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
0c70: 20 67 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d   getBuildYear {}
0c80: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
0c90: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
0ca0: 66 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74  f the "year" set
0cb0: 74 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76  ting has been ov
0cc0: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20  erridden by the
0cd0: 75 73 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20  user (e.g...
0ce0: 20 20 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65    #       on the
0cf0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20   command line).
0d00: 20 54 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74   This helps cont
0d10: 72 6f 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63  rol exactly whic
0d20: 68 20 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20  h set of..
0d30: 23 20 20 20 20 20 20 20 62 69 6e 61 72 69 65 73  #       binaries
0d40: 20 77 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c   we are testing,
0d50: 20 74 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20   those produced
0d60: 75 73 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c  using the Visual
0d70: 20 53 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23   Studio..      #
0d80: 20 20 20 20 20 20 20 32 30 30 35 2c 20 32 30 30         2005, 200
0d90: 38 2c 20 32 30 31 30 2c 20 32 30 31 32 2c 20 32  8, 2010, 2012, 2
0da0: 30 31 33 2c 20 32 30 31 35 2c 20 6f 72 20 32 30  013, 2015, or 20
0db0: 31 37 20 62 75 69 6c 64 20 73 79 73 74 65 6d 73  17 build systems
0dc0: 2e 20 20 54 6f 0d 0a 20 20 20 20 20 20 23 20 20  .  To..      #
0dd0: 20 20 20 20 20 6f 76 65 72 72 69 64 65 20 74 68       override th
0de0: 69 73 20 76 61 6c 75 65 20 76 69 61 20 74 68 65  is value via the
0df0: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65   command line, e
0e00: 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73  nter a command s
0e10: 69 6d 69 6c 61 72 0d 0a 20 20 20 20 20 20 23 20  imilar..      #
0e20: 20 20 20 20 20 20 74 6f 20 6f 6e 65 20 6f 66 20        to one of
0e30: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61  the following (a
0e40: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
0e50: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0e60: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0e70: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0e80: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
0e90: 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20 20 20  _year 2005"..
0ea0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69     #         -fi
0eb0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c  le .\path\to\all
0ec0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d  .eagle..      #.
0ed0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45  .      #       E
0ee0: 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61  agleShell.exe -a
0ef0: 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65  nyInitialize "se
0f00: 74 20 74 65 73 74 5f 79 65 61 72 20 32 30 30 38  t test_year 2008
0f10: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  "..      #
0f20: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c     -file .\path\
0f30: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20  to\all.eagle..
0f40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20      #..      #
0f50: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
0f60: 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69  exe -anyInitiali
0f70: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0f80: 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20 20 23  r 2010"..      #
0f90: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
0fa0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
0fb0: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
0fc0: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0fd0: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0fe0: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0ff0: 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d 0a 20  st_year 2012"..
1000: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
1010: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
1020: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
1030: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
1040: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
1050: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
1060: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
1070: 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  13"..      #
1080: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
1090: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
10a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
10b0: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
10c0: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
10d0: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
10e0: 65 61 72 20 32 30 31 35 22 0d 0a 20 20 20 20 20  ear 2015"..
10f0: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
1100: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
1110: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
1120: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
1130: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
1140: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
1150: 74 65 73 74 5f 79 65 61 72 20 32 30 31 37 22 0d  test_year 2017".
1160: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
1170: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
1180: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
1190: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
11a0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
11b0: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
11c0: 20 22 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c   "unset -nocompl
11d0: 61 69 6e 20 74 65 73 74 5f 79 65 61 72 22 0d 0a  ain test_year"..
11e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
11f0: 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c  -file .\path\to\
1200: 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20  all.eagle..
1210: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69   #..      if {[i
1220: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
1230: 74 5f 79 65 61 72 5d 20 26 26 20 5b 73 74 72 69  t_year] && [stri
1240: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1250: 74 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 68 65 t_year] > 0} the 1260: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 1270: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1280: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 1290: 64 20 74 65 73 74 20 79 65 61 72 2e 20 20 49 66 d test year. If 12a0: 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 20 69 this variable i 12b0: 73 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 0d 0a s not set, the.. 12c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 12d0: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 default value wi 12e0: 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e 20 77 ll be based on w 12f0: 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 45 61 hether or not Ea 1300: 67 6c 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 gle has been.. 1310: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 1320: 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20 74 mpiled against t 1330: 68 65 20 43 4c 52 20 76 32 2e 30 20 6f 72 20 43 he CLR v2.0 or C 1340: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 LR v4.0... 1350: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 1360: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 urn$::test_year
1370: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1380: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1390: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
13a0: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63  Eagle has been c
13b0: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against
13c0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2c 20 75 73  the CLR v4.0, us
13d0: 65 20 22 32 30 31 30 22 20 62 79 0d 0a 20 20 20  e "2010" by..
13e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66       #       def
13f0: 61 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75  ault (we could u
1400: 73 65 20 22 32 30 31 32 22 2c 20 22 32 30 31 33  se "2012", "2013
1410: 22 2c 20 22 32 30 31 35 22 2c 20 6f 72 20 22 32  ", "2015", or "2
1420: 30 31 37 22 20 69 6e 20 74 68 61 74 0d 0a 20 20  017" in that..
1430: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
1440: 73 65 20 61 73 20 77 65 6c 6c 29 20 61 73 20 74  se as well) as t
1450: 68 65 20 74 65 73 74 20 79 65 61 72 3b 20 6f 74  he test year; ot
1460: 68 65 72 77 69 73 65 2c 20 75 73 65 20 22 32 30  herwise, use "20
1470: 30 38 22 20 62 79 20 64 65 66 61 75 6c 74 0d 0a  08" by default..
1480: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1490: 28 77 65 20 63 6f 75 6c 64 20 75 73 65 20 22 32  (we could use "2
14a0: 30 30 35 22 20 69 6e 20 74 68 61 74 20 63 61 73  005" in that cas
14b0: 65 20 61 73 20 77 65 6c 6c 29 2e 20 20 49 66 20  e as well).  If
14c0: 61 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 0d 0a 20  another major..
14d0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b         #       [
14e0: 69 6e 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65  incompatible] ve
14f0: 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52  rsion of the CLR
1500: 20 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68   is released, th
1510: 69 73 20 63 68 65 63 6b 20 77 69 6c 6c 0d 0a 20  is check will..
1520: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 68         #       h
1530: 61 76 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65  ave to be change
1540: 64 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 20  d.  The default
1550: 74 65 73 74 20 79 65 61 72 20 74 6f 20 75 73 65  test year to use
1560: 20 66 6f 72 20 61 0d 0a 20 20 20 20 20 20 20 20   for a..
1570: 23 20 20 20 20 20 20 20 70 61 72 74 69 63 75 6c  #       particul
1580: 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20 6d  ar CLR version m
1590: 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e  ay be overridden
15a0: 20 62 79 20 73 65 74 74 69 6e 67 20 74 68 65 20   by setting the
15b0: 67 6c 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20  global..
15c0: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65  #       variable
15d0: 20 22 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f   "test_year_clr_
15e0: 76 24 58 22 2c 20 77 68 65 72 65 20 22 24 58 22  v$X", where "$X"
15f0: 20 6d 61 79 20 5b 63 75 72 72 65 6e 74 6c 79 5d   may [currently]
1600: 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
1610: 20 20 20 20 20 65 69 74 68 65 72 20 22 32 22 20       either "2"
1620: 6f 72 20 22 34 22 2e 0d 0a 20 20 20 20 20 20 20  or "4"...
1630: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
1640: 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20  [haveConstraint
1650: 69 6d 61 67 65 52 75 6e 74 69 6d 65 34 30 5d 7d  imageRuntime40]}
1660: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1670: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1680: 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f  sts ::test_year_
1690: 63 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a 20 20  clr_v4] && \..
16a0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72              [str
16b0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 16c0: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 st_year_clr_v4] 16d0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 16e0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 16f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1700: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 Use the specifie 1710: 64 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 d test year for 1720: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 1730: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1740: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 1750: 20 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c$::test_year_cl
1760: 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20  r_v4..
1770: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1780: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1790: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
17a0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73   the default tes
17b0: 74 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43  t year for the C
17c0: 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20  LR v4.0...
17d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17e0: 20 20 20 20 20 72 65 74 75 72 6e 20 32 30 31 30       return 2010
17f0: 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22  ; # TODO: Good "
1800: 66 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c  fallback" defaul
1810: 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t?..          }.
1820: 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
1830: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
1840: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
1850: 74 65 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32  test_year_clr_v2
1860: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
1870: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
1880: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65 61  ngth $::test_yea 1890: 72 5f 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 r_clr_v2] > 0} t 18a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 18b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 18c0: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 18d0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 18e0: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c year for the CL 18f0: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20 R v2.0... 1900: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1910: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 return$::te
1920: 73 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 0d 0a  st_year_clr_v2..
1930: 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
1940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1950: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
1960: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64   NOTE: Use the d
1970: 65 66 61 75 6c 74 20 74 65 73 74 20 79 65 61 72  efault test year
1980: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e   for the CLR v2.
1990: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0...
19a0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  #..            r
19b0: 65 74 75 72 6e 20 32 30 30 38 3b 20 23 20 54 4f  eturn 2008; # TO
19c0: 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61  DO: Good "fallba
19d0: 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20  ck" default?..
19e0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
19f0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20     }..      }..
1a00: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1a10: 63 20 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65  c getBuildNative
1a20: 59 65 61 72 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  Year {} {..
1a30: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1a40: 73 20 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f  s ::test_native_
1a50: 79 65 61 72 5d 20 26 26 20 5c 0d 0a 20 20 20 20  year] && \..
1a60: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
1a70: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 61 74  ngth $::test_nat 1a80: 69 76 65 5f 79 65 61 72 5d 20 3e 20 30 7d 20 74 ive_year] > 0} t 1a90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 1aa0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 1ab0: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 1ac0: 69 65 64 20 74 65 73 74 20 79 65 61 72 20 66 6f ied test year fo 1ad0: 72 20 6e 61 74 69 76 65 20 62 69 6e 61 72 69 65 r native binarie 1ae0: 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20 20 s. If this.. 1af0: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 # var 1b00: 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 iable is not set 1b10: 2c 20 74 68 65 20 76 61 6c 75 65 20 72 65 74 75 , the value retu 1b20: 72 6e 65 64 20 62 79 20 5b 67 65 74 42 75 69 6c rned by [getBuil 1b30: 64 59 65 61 72 5d 0d 0a 20 20 20 20 20 20 20 20 dYear].. 1b40: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62 65 20 # will be 1b50: 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 used... # 1b60: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 1b70: 20 24 3a 3a 74 65 73 74 5f 6e 61 74 69 76 65 5f$::test_native_
1b80: 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20 65 6c  year..      } el
1b90: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
1ba0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
1bb0: 20 46 61 6c 6c 62 61 63 6b 20 6f 6e 20 74 68 65   Fallback on the
1bc0: 20 28 6e 6f 72 6d 61 6c 29 20 62 75 69 6c 64 20   (normal) build
1bd0: 79 65 61 72 20 66 6f 72 20 6d 61 6e 61 67 65 64  year for managed
1be0: 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20 20   binaries...
1bf0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72      #..        r
1c00: 65 74 75 72 6e 20 5b 67 65 74 42 75 69 6c 64 59  eturn [getBuildY
1c10: 65 61 72 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ear]..      }..
1c20: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1c30: 63 20 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65  c getBuildNative
1c40: 59 65 61 72 46 6f 72 44 6f 74 4e 65 74 43 6f 72  YearForDotNetCor
1c50: 65 20 7b 20 79 65 61 72 20 7d 20 7b 0d 0a 20 20  e { year } {..
1c60: 20 20 20 20 69 66 20 7b 5b 69 73 44 6f 74 4e 65      if {[isDotNe
1c70: 74 43 6f 72 65 5d 20 26 26 20 5b 69 73 57 69 6e  tCore] && [isWin
1c80: 64 6f 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  dows]} then {..
1c90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 32 30         return 20
1ca0: 31 35 3b 20 23 20 48 41 43 4b 3a 20 53 70 65 63  15; # HACK: Spec
1cb0: 69 61 6c 20 63 61 73 65 2c 20 75 73 65 20 32 30  ial case, use 20
1cc0: 31 35 20 6e 61 74 69 76 65 20 62 69 6e 61 72 69  15 native binari
1cd0: 65 73 2e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  es...      } els
1ce0: 65 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e  eif {[string len
1cf0: 67 74 68 20 24 79 65 61 72 5d 20 3e 20 30 7d 20  gth $year] > 0} 1d00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1d10: 72 65 74 75 72 6e 20 24 79 65 61 72 0d 0a 20 20 return$year..
1d20: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
1d30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65        return [ge
1d40: 74 42 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72  tBuildNativeYear
1d50: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
1d60: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
1d70: 65 74 42 75 69 6c 64 59 65 61 72 73 20 7b 7d 20  etBuildYears {}
1d80: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1d90: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
1da0: 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74 65 73   the list of tes
1db0: 74 20 79 65 61 72 73 20 68 61 73 20 62 65 65 6e  t years has been
1dc0: 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 20 74   overridden by t
1dd0: 68 65 20 75 73 65 72 0d 0a 20 20 20 20 20 20 23  he user..      #
1de0: 20 20 20 20 20 20 20 28 65 2e 67 2e 20 6f 6e 20         (e.g. on
1df0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
1e00: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
1e10: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1e20: 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 73  sts ::test_years
1e30: 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20 24 3a  ] && [llength $: 1e40: 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 3e 20 30 :test_years] > 0 1e50: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e60: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1e70: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 1e80: 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 cified list of t 1e90: 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20 20 est years... 1ea0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 1eb0: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
1ec0: 61 72 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  ars..      } els
1ed0: 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f  eif {[isDotNetCo
1ee0: 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  re]} then {..
1ef0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1f00: 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20  # NOTE: Running
1f10: 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 70 72  on .NET Core, pr
1f20: 69 6f 72 69 74 69 7a 65 20 69 74 73 20 6c 69 73  ioritize its lis
1f30: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 2e  t of test years.
1f40: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1f50: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
1f60: 74 20 4e 65 74 53 74 61 6e 64 61 72 64 32 30 5d  t NetStandard20]
1f70: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
1f80: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1f90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
1fa0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73   the default lis
1fb0: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1fc0: 28 69 2e 65 2e 20 61 6c 6c 29 2e 0d 0a 20 20 20  (i.e. all)...
1fd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1fe0: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30  return [list 200
1ff0: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32  5 2008 2010 2012
2000: 20 32 30 31 33 20 32 30 31 35 20 32 30 31 37 20   2013 2015 2017
2010: 4e 65 74 53 74 61 6e 64 61 72 64 32 30 5d 0d 0a  NetStandard20]..
2020: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2030: 0c 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    #
2040: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65  NOTE: This proce
2050: 64 75 72 65 20 69 73 20 6f 6e 6c 79 20 75 73 65  dure is only use
2060: 64 20 77 68 65 6e 20 61 64 64 69 6e 67 20 73 68  d when adding sh
2070: 69 6d 6d 65 64 20 74 65 73 74 20 63 6f 6e 73 74  immed test const
2080: 72 61 69 6e 74 73 2e 0d 0a 20 20 20 20 23 0d 0a  raints...    #..
2090: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
20a0: 64 43 6c 72 56 65 72 73 69 6f 6e 20 7b 7d 20 7b  dClrVersion {} {
20b0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66  ..      if {[inf
20c0: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
20d0: 63 6c 72 5d 20 26 26 20 5b 73 74 72 69 6e 67 20  clr] && [string
20e0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63  length $::test_c 20f0: 6c 72 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d lr] > 0} then {. 2100: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 2110: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 # NOTE: Use 2120: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 65 the specified te 2130: 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 st version for t 2140: 68 65 20 43 4c 52 2e 20 20 49 66 20 74 68 69 73 he CLR. If this 2150: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 2160: 20 20 20 23 20 20 20 20 20 20 20 69 73 20 6e 6f # is no 2170: 74 20 73 65 74 2c 20 74 68 65 20 64 65 66 61 75 t set, the defau 2180: 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 lt value will be 2190: 20 62 61 73 65 64 20 6f 6e 20 77 68 65 74 68 65 based on whethe 21a0: 72 20 6f 72 20 6e 6f 74 0d 0a 20 20 20 20 20 20 r or not.. 21b0: 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 20 # Eagle 21c0: 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c 65 has been compile 21d0: 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43 4c d against the CL 21e0: 52 20 76 32 2e 30 20 6f 72 20 43 4c 52 20 76 34 R v2.0 or CLR v4 21f0: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a .0... #.. 2200: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
2210: 3a 3a 74 65 73 74 5f 63 6c 72 0d 0a 20 20 20 20  ::test_clr..
2220: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
2230: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2240: 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
2250: 45 61 67 6c 65 20 68 61 73 20 62 65 65 6e 20 63  Eagle has been c
2260: 6f 6d 70 69 6c 65 64 20 61 67 61 69 6e 73 74 20  ompiled against
2270: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 20 20 49  the CLR v4.0.  I
2280: 66 20 73 6f 2c 0d 0a 20 20 20 20 20 20 20 20 23  f so,..        #
2290: 20 20 20 20 20 20 20 6a 75 73 74 20 75 73 65 20         just use
22a0: 74 68 61 74 20 43 4c 52 20 76 65 72 73 69 6f 6e  that CLR version
22b0: 2e 20 20 4f 74 68 65 72 77 69 73 65 2c 20 75 73  .  Otherwise, us
22c0: 65 20 74 68 65 20 76 65 72 73 69 6f 6e 20 66 6f  e the version fo
22d0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  r the..        #
22e0: 20 20 20 20 20 20 20 43 4c 52 20 76 32 2e 30 2e         CLR v2.0.
22f0: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
2300: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
2310: 5d 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65  ] version of the
2320: 20 43 4c 52 0d 0a 20 20 20 20 20 20 20 20 23 20   CLR..        #
2330: 20 20 20 20 20 20 69 73 20 72 65 6c 65 61 73 65        is release
2340: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
2350: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 20 63 68  ll have to be ch
2360: 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66 61  anged.  The defa
2370: 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ult..        #
2380: 20 20 20 20 20 76 65 72 73 69 6f 6e 20 76 61 6c       version val
2390: 75 65 20 66 6f 72 20 61 20 70 61 72 74 69 63 75  ue for a particu
23a0: 6c 61 72 20 43 4c 52 20 76 65 72 73 69 6f 6e 20  lar CLR version
23b0: 6d 61 79 20 62 65 20 6f 76 65 72 72 69 64 64 65  may be overridde
23c0: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  n..        #
23d0: 20 20 20 62 79 20 73 65 74 74 69 6e 67 20 74 68     by setting th
23e0: 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  e global variabl
23f0: 65 20 22 74 65 73 74 5f 63 6c 72 5f 76 24 58 22  e "test_clr_v$X" 2400: 2c 20 77 68 65 72 65 20 22 24 58 22 20 6d 61 79 , where "$X" may
2410: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
2420: 20 20 5b 63 75 72 72 65 6e 74 6c 79 5d 20 62 65    [currently] be
2430: 20 65 69 74 68 65 72 20 22 32 22 20 6f 72 20 22   either "2" or "
2440: 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  4"...        #..
2450: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76          if {[hav
2460: 65 43 6f 6e 73 74 72 61 69 6e 74 20 69 6d 61 67  eConstraint imag
2470: 65 52 75 6e 74 69 6d 65 34 30 5d 7d 20 74 68 65  eRuntime40]} the
2480: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
2490: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20  f {[info exists
24a0: 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 5d 20 26  ::test_clr_v4] &
24b0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
24c0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
24d0: 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34  h $::test_clr_v4 24e0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 24f0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 2500: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 2510: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 2520: 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f 6e ied test version 2530: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 2540: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 2550: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 2560: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6c eturn$::test_cl
2570: 72 5f 76 34 0d 0a 20 20 20 20 20 20 20 20 20 20  r_v4..
2580: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
2590: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
25a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65       # NOTE: Use
25b0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73   the default tes
25c0: 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68  t version for th
25d0: 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 20 20  e CLR v4.0...
25e0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
25f0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 34          return 4
2600: 2e 30 2e 33 30 33 31 39 3b 20 23 20 54 4f 44 4f  .0.30319; # TODO
2610: 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b  : Good "fallback
2620: 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20  " default?..
2630: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2640: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
2650: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
2660: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72  xists ::test_clr
2670: 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  _v2] && \..
2680: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
2690: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f   length $::test_ 26a0: 63 6c 72 5f 76 32 5d 20 3e 20 30 7d 20 74 68 65 clr_v2] > 0} the 26b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 26c0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 26d0: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 # NOTE: Use the 26e0: 73 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76 specified test v 26f0: 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 ersion for the C 2700: 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 LR v2.0... 2710: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2720: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
2730: 65 73 74 5f 63 6c 72 5f 76 32 0d 0a 20 20 20 20  est_clr_v2..
2740: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
2750: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
2760: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
2770: 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75  E: Use the defau
2780: 6c 74 20 74 65 73 74 20 76 65 72 73 69 6f 6e 20  lt test version
2790: 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 2e 30  for the CLR v2.0
27a0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
27b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
27c0: 74 75 72 6e 20 32 2e 30 2e 35 30 37 32 37 3b 20  turn 2.0.50727;
27d0: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61  # TODO: Good "fa
27e0: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f  llback" default?
27f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2800: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
2810: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
2820: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 65   proc getBuildNe
2830: 74 46 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  tFx {} {..
2840: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2850: 20 53 65 65 20 69 66 20 74 68 65 20 74 65 73 74   See if the test
2860: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20   .NET Framework
2870: 73 65 74 74 69 6e 67 20 68 61 73 20 62 65 65 6e  setting has been
2880: 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a   overridden by..
2890: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
28a0: 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20  e user (e.g. on
28b0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
28c0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
28d0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
28e0: 73 74 73 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66  sts ::test_net_f
28f0: 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  x] && \..
2900: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
2910: 68 20 24 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78  h $::test_net_fx 2920: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 2930: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2940: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 2950: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 2960: 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 2e .NET Framework. 2970: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2980: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
2990: 65 73 74 5f 6e 65 74 5f 66 78 0d 0a 20 20 20 20  est_net_fx..
29a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
29b0: 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 67 65      set year [ge
29c0: 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20 20  tBuildYear]..
29d0: 20 20 20 20 20 73 65 74 20 79 65 61 72 56 61 72       set yearVar
29e0: 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73  Name [appendArgs
29f0: 20 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 5f 20   ::test_net_fx_
2a00: 24 79 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  $year].... 2a10: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 2a20: 74 73 20 24 79 65 61 72 56 61 72 4e 61 6d 65 5d ts$yearVarName]
2a30: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
2a40: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
2a50: 68 20 5b 73 65 74 20 24 79 65 61 72 56 61 72 4e  h [set $yearVarN 2a60: 61 6d 65 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ame]] > 0} then 2a70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 2a80: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 2a90: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 2aa0: 69 65 64 20 74 65 73 74 20 2e 4e 45 54 20 46 72 ied test .NET Fr 2ab0: 61 6d 65 77 6f 72 6b 2c 20 62 61 73 65 64 20 6f amework, based o 2ac0: 6e 20 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 n the build.. 2ad0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 79 # y 2ae0: 65 61 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ear... 2af0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 #.. ret 2b00: 75 72 6e 20 5b 73 65 74 20 24 79 65 61 72 56 61 urn [set$yearVa
2b10: 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20  rName]..
2b20: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
2b30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2b40: 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63   # NOTE: Fallbac
2b50: 6b 20 74 6f 20 74 68 65 20 22 77 65 6c 6c 20 6b  k to the "well k
2b60: 6e 6f 77 6e 22 20 2e 4e 45 54 20 46 72 61 6d 65  nown" .NET Frame
2b70: 77 6f 72 6b 20 76 65 72 73 69 6f 6e 20 74 68 61  work version tha
2b80: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  t..          #
2b90: 20 20 20 20 20 69 73 20 6d 6f 73 74 20 63 6c 6f       is most clo
2ba0: 73 65 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20  sely associated
2bb0: 77 69 74 68 20 61 20 70 61 72 74 69 63 75 6c 61  with a particula
2bc0: 72 20 76 65 72 73 69 6f 6e 20 6f 66 0d 0a 20 20  r version of..
2bd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2be0: 56 69 73 75 61 6c 20 53 74 75 64 69 6f 2e 0d 0a  Visual Studio...
2bf0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2c00: 20 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65         switch -e
2c10: 78 61 63 74 20 2d 2d 20 24 79 65 61 72 20 7b 0d  xact -- $year {. 2c20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 30 . 200 2c30: 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 5 {.. 2c40: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 return netFx2 2c50: 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0.. } 2c60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 30 .. 20 2c70: 30 38 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 08 {.. 2c80: 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 return netFx 2c90: 33 35 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 35.. 2ca0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 32 }.. 2 2cb0: 30 31 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 010 {.. 2cc0: 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 return netF 2cd0: 78 34 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x40.. 2ce0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2cf0: 32 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 2012 {.. 2d00: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2d10: 46 78 34 35 0d 0a 20 20 20 20 20 20 20 20 20 20 Fx45.. 2d20: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2d30: 20 32 30 31 33 20 7b 0d 0a 20 20 20 20 20 20 20 2013 {.. 2d40: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 2d50: 74 46 78 34 35 31 3b 20 23 20 54 4f 44 4f 3a 20 tFx451; # TODO: 2d60: 4f 72 20 22 6e 65 74 46 78 34 35 32 22 3f 0d 0a Or "netFx452"?.. 2d70: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2d80: 20 20 20 20 20 20 20 20 20 20 20 32 30 31 35 20 2015 2d90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2da0: 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 36 3b return netFx46; 2db0: 20 23 20 54 4f 44 4f 3a 20 4f 72 20 22 6e 65 74 # TODO: Or "net 2dc0: 46 78 34 36 31 22 20 2f 20 22 6e 65 74 46 78 34 Fx461" / "netFx4 2dd0: 36 32 22 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 62"?.. 2de0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.. 2df0: 20 32 30 31 37 20 7b 0d 0a 20 20 20 20 20 20 20 2017 {.. 2e00: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 return ne 2e10: 74 46 78 34 37 3b 20 23 20 54 4f 44 4f 3a 20 4f tFx47; # TODO: O 2e20: 72 20 22 6e 65 74 46 78 34 37 31 22 20 2f 20 22 r "netFx471" / " 2e30: 6e 65 74 46 78 34 37 32 22 3f 0d 0a 20 20 20 20 netFx472"?.. 2e40: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2e50: 20 20 20 20 20 20 20 4e 65 74 53 74 61 6e 64 61 NetStanda 2e60: 72 64 32 30 20 7b 0d 0a 20 20 20 20 20 20 20 20 rd20 {.. 2e70: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65 74 return net 2e80: 53 74 61 6e 64 61 72 64 32 30 0d 0a 20 20 20 20 Standard20.. 2e90: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2ea0: 20 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b default { 2eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2ec0: 72 65 74 75 72 6e 20 6e 65 74 46 78 33 35 3b 20 return netFx35; 2ed0: 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 # TODO: Good "fa 2ee0: 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74 3f llback" default? 2ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 2f00: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 2f10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 2f20: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 2f30: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 #.. # NOTE: T 2f40: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 68 his procedure sh 2f50: 6f 75 6c 64 20 72 65 74 75 72 6e 20 6e 6f 6e 2d ould return non- 2f60: 7a 65 72 6f 20 69 66 20 74 68 65 20 63 6f 6e 66 zero if the conf 2f70: 69 67 75 72 65 64 20 74 65 73 74 0d 0a 20 20 20 igured test.. 2f80: 20 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 # platfor 2f90: 6d 20 69 73 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 m is most likely 2fa0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 the default for 2fb0: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 2e 0d 0a this machine... 2fc0: 20 20 20 20 23 0d 0a 20 20 20 20 70 72 6f 63 20 #.. proc 2fd0: 69 73 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c isDefaultBuildPl 2fe0: 61 74 66 6f 72 6d 20 7b 20 7b 76 65 72 62 6f 73 atform { {verbos 2ff0: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 e true} } {.. 3000: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 3010: 54 45 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 57 TE: Running on W 3020: 6f 57 36 34 20 69 73 20 6e 65 76 65 72 20 74 68 oW64 is never th 3030: 65 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f e default platfo 3040: 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 rm... #.. 3050: 20 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 if {[isRunni 3060: 6e 67 57 6f 57 36 34 5d 7d 20 74 68 65 6e 20 7b ngWoW64]} then { 3070: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 .. if {$v
3080: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
3090: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
30a0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 30b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 30c0: 20 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 "---- detected 30d0: 6e 6f 6e 2d 64 65 66 61 75 6c 74 20 70 6c 61 74 non-default plat 30e0: 66 6f 72 6d 20 28 57 6f 57 36 34 29 5c 6e 22 0d form (WoW64)\n". 30f0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 3100: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 3110: 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 se.. }.... 3120: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 3130: 4e 4f 54 45 3a 20 54 68 69 73 20 68 61 73 20 61 NOTE: This has a 3140: 20 67 6f 6f 64 20 63 68 61 6e 63 65 20 6f 66 20 good chance of 3150: 62 65 69 6e 67 20 74 68 65 20 64 65 66 61 75 6c being the defaul 3160: 74 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 t platform... 3170: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 3180: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
3190: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
31a0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 31b0: 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 64 "---- detected d 31c0: 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 6d 5c efault platform\ 31d0: 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 n".. }.... 31e0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 return true 31f0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 3200: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 proc getBuildPla 3210: 74 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d tform { native } 3220: 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 {.. if {[i 3230: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 3240: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c t_platform] && \ 3250: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 3260: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 ing length$::te
3270: 73 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  st_platform] > 0
3280: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
3290: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
32a0: 4f 54 45 3a 20 50 6f 73 73 69 62 6c 79 20 75 73  OTE: Possibly us
32b0: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified
32c0: 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e 20 20  test platform.
32d0: 49 66 20 74 68 69 73 20 76 61 72 69 61 62 6c 65  If this variable
32e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
32f0: 20 20 69 73 20 6e 6f 74 20 73 65 74 2c 20 74 68    is not set, th
3300: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value
3310: 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20 6f 6e  will be based on
3320: 20 74 68 65 20 6d 61 63 68 69 6e 65 0d 0a 20 20   the machine..
3330: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
3340: 63 68 69 74 65 63 74 75 72 65 2e 20 20 4e 6f 72  chitecture.  Nor
3350: 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 73 20 64  mally, this is d
3360: 6f 6e 65 20 66 6f 72 20 62 75 69 6c 64 73 20 74  one for builds t
3370: 68 61 74 20 69 6e 76 6f 6c 76 65 0d 0a 20 20 20  hat involve..
3380: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
3390: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65   mixed-mode asse
33a0: 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23  mbly...        #
33b0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
33c0: 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20   [expr {$native 33d0: 3f 20 24 3a 3a 74 65 73 74 5f 70 6c 61 74 66 6f ?$::test_platfo
33e0: 72 6d 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20  rm : ""}]..
33f0: 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f   } elseif {[info
3400: 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6d   exists ::test_m
3410: 61 63 68 69 6e 65 5d 20 26 26 20 5c 0d 0a 20 20  achine] && \..
3420: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
3430: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6d  length $::test_m 3440: 61 63 68 69 6e 65 5d 20 3e 20 30 7d 20 74 68 65 achine] > 0} the 3450: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 3460: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 3470: 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 For native build 3480: 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c s, return the pl 3490: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 atform name corr 34a0: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 esponding to.. 34b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 34c0: 65 20 74 65 73 74 20 6d 61 63 68 69 6e 65 20 61 e test machine a 34d0: 72 63 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 rchitecture; oth 34e0: 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 erwise, return a 34f0: 6e 20 65 6d 70 74 79 0d 0a 20 20 20 20 20 20 20 n empty.. 3500: 20 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2e # string. 3510: 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 Normally, this 3520: 20 69 73 20 64 6f 6e 65 20 66 6f 72 20 62 75 69 is done for bui 3530: 6c 64 73 20 74 68 61 74 20 69 6e 76 6f 6c 76 65 lds that involve 3540: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 3550: 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f 64 65 mixed-mode 3560: 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 assembly... 3570: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 3580: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 eturn [expr {.. 3590: 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76 65$native
35a0: 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61   ? [machineToPla
35b0: 74 66 6f 72 6d 20 24 3a 3a 74 65 73 74 5f 6d 61  tform $::test_ma 35c0: 63 68 69 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 20 chine] : "".. 35d0: 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d }].. } 35e0: 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 elseif {[info e 35f0: 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 xists ::tcl_plat 3600: 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 form(machine)]} 3610: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3620: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3630: 45 3a 20 46 6f 72 20 6e 61 74 69 76 65 20 62 75 E: For native bu 3640: 69 6c 64 73 2c 20 72 65 74 75 72 6e 20 74 68 65 ilds, return the 3650: 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 platform name c 3660: 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d orresponding to. 3670: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 3680: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61 72 63 the machine arc 3690: 68 69 74 65 63 74 75 72 65 3b 20 6f 74 68 65 72 hitecture; other 36a0: 77 69 73 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 wise, return an 36b0: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 empty string... 36c0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e # N 36d0: 6f 72 6d 61 6c 6c 79 2c 20 74 68 69 73 20 69 73 ormally, this is 36e0: 20 64 6f 6e 65 20 66 6f 72 20 62 75 69 6c 64 73 done for builds 36f0: 20 74 68 61 74 20 69 6e 76 6f 6c 76 65 20 74 68 that involve th 3700: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 0d 0a 20 20 e mixed-mode.. 3710: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 # as 3720: 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 20 20 sembly... 3730: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 3740: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 rn [expr {.. 3750: 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20$native ?
3760: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f  [machineToPlatfo
3770: 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  rm $::tcl_platfo 3780: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 3a 20 22 rm(machine)] : " 3790: 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 20 ".. }].. 37a0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 37b0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 37c0: 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 6d 61 63 # NOTE: No mac 37d0: 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 hine architectur 37e0: 65 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 e is available, 37f0: 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 return an empty 3800: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 string... 3810: 20 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 # It is i 3820: 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 mportant to retu 3830: 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 rn an empty stri 3840: 6e 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 ng here because 3850: 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 the.. # 3860: 20 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 result of t 3870: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 his procedure ma 3880: 79 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b y be used with [ 3890: 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 file join]... 38a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 38b0: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 return "".. 38c0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 38d0: 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 43 proc getBuildC 38e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7b 7d 20 onfiguration {} 38f0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 3900: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 # NOTE: See if 3910: 20 74 68 65 20 22 63 6f 6e 66 69 67 75 72 61 74 the "configurat 3920: 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 68 61 73 ion" setting has 3930: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 3940: 20 62 79 20 74 68 65 0d 0a 20 20 20 20 20 20 23 by the.. # 3950: 20 20 20 20 20 20 20 75 73 65 72 20 28 65 2e 67 user (e.g 3960: 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 . on the command 3970: 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 20 68 65 line). This he 3980: 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 78 61 63 lps control exac 3990: 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 tly.. # 39a0: 20 20 20 77 68 69 63 68 20 73 65 74 20 6f 66 20 which set of 39b0: 62 69 6e 61 72 69 65 73 20 77 65 20 61 72 65 20 binaries we are 39c0: 74 65 73 74 69 6e 67 20 28 69 2e 65 2e 20 74 68 testing (i.e. th 39d0: 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 74 68 65 ose built in the 39e0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 39f0: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 "Debug" or "Rele 3a00: 61 73 65 22 20 62 75 69 6c 64 20 63 6f 6e 66 69 ase" build confi 3a10: 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 54 6f 20 gurations). To 3a20: 6f 76 65 72 72 69 64 65 20 74 68 69 73 0d 0a 20 override this.. 3a30: 20 20 20 20 20 23 20 20 20 20 20 20 20 76 61 6c # val 3a40: 75 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 ue via the comma 3a50: 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 nd line, enter a 3a60: 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 command similar 3a70: 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 20 20 20 to one of.. 3a80: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 66 6f # the fo 3a90: 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 llowing (all on 3aa0: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 3ab0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 3ac0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 3ad0: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 3ae0: 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 "set test_confi 3af0: 67 75 72 61 74 69 6f 6e 20 44 65 62 75 67 22 0d guration Debug". 3b00: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 . # 3b10: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f -file .\path\to 3b20: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 \all.eagle.. 3b30: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 3b40: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 3b50: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 e -anyInitialize 3b60: 20 22 73 65 74 20 74 65 73 74 5f 63 6f 6e 66 69 "set test_confi 3b70: 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 61 73 65 guration Release 3b80: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ".. # 3b90: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 3ba0: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 3bb0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 3bc0: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e EagleShell. 3bd0: 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 exe -file .\path 3be0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 20 2d 70 \to\all.eagle -p 3bf0: 72 65 54 65 73 74 0d 0a 20 20 20 20 20 20 23 20 reTest.. # 3c00: 20 20 20 20 20 20 20 20 22 75 6e 73 65 74 20 2d "unset - 3c10: 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f nocomplain test_ 3c20: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 22 0d 0a configuration".. 3c30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 3c40: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 3c50: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 ::test_configura 3c60: 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 tion] && \.. 3c70: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 3c80: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e ngth$::test_con
3c90: 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e 20 30 7d  figuration] > 0}
3ca0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3cb0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
3cc0: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63  TE: Use the spec
3cd0: 69 66 69 65 64 20 74 65 73 74 20 63 6f 6e 66 69  ified test confi
3ce0: 67 75 72 61 74 69 6f 6e 2e 20 20 54 68 65 20 64  guration.  The d
3cf0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 75 73 65  efault value use
3d00: 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
3d10: 20 20 20 66 6f 72 20 74 68 69 73 20 76 61 72 69     for this vari
3d20: 61 62 6c 65 20 69 73 20 74 79 70 69 63 61 6c 6c  able is typicall
3d30: 79 20 22 52 65 6c 65 61 73 65 22 2c 20 61 73 20  y "Release", as
3d40: 73 65 74 20 62 79 20 74 68 65 20 74 65 73 74 0d  set by the test.
3d50: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3d60: 20 73 75 69 74 65 20 69 74 73 65 6c 66 2e 0d 0a   suite itself...
3d70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
3d80: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73     return $::tes 3d90: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d t_configuration. 3da0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 3db0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3dc0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 72 6d # NOTE: Norm 3dd0: 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c 20 6e 65 ally, we will ne 3de0: 76 65 72 20 68 69 74 20 74 68 69 73 20 63 61 73 ver hit this cas 3df0: 65 20 62 65 63 61 75 73 65 20 74 68 65 20 76 61 e because the va 3e00: 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 lue of the.. 3e10: 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 # test 3e20: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 configuration v 3e30: 61 72 69 61 62 6c 65 20 69 73 20 61 6c 77 61 79 ariable is alway 3e40: 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65 73 s set by the tes 3e50: 74 20 73 75 69 74 65 0d 0a 20 20 20 20 20 20 20 t suite.. 3e60: 20 23 20 20 20 20 20 20 20 69 74 73 65 6c 66 3b # itself; 3e70: 20 68 6f 77 65 76 65 72 2c 20 69 74 20 63 61 6e however, it can 3e80: 20 62 65 20 6f 76 65 72 72 69 64 64 65 6e 20 75 be overridden u 3e90: 73 69 6e 67 20 74 68 65 20 75 6e 73 65 74 20 63 sing the unset c 3ea0: 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 ommand.. 3eb0: 23 20 20 20 20 20 20 20 66 72 6f 6d 20 74 68 65 # from the 3ec0: 20 2d 70 72 65 54 65 73 74 20 6f 70 74 69 6f 6e -preTest option 3ed0: 20 74 6f 20 74 68 65 20 74 65 73 74 20 73 75 69 to the test sui 3ee0: 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 3ef0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
3f00: 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 6f 72 6d  ::eagle_platform
3f10: 28 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 29 0d  (configuration).
3f20: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
3f30: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
3f40: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
3f50: 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ons {} {..
3f60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
3f70: 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73 74   See if the list
3f80: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75   of test configu
3f90: 72 61 74 69 6f 6e 73 20 68 61 73 20 62 65 65 6e  rations has been
3fa0: 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d 0a   overridden by..
3fb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
3fc0: 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20  e user (e.g. on
3fd0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
3fe0: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
3ff0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
4000: 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69  sts ::test_confi
4010: 67 75 72 61 74 69 6f 6e 73 5d 20 26 26 20 5c 0d  gurations] && \.
4020: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
4030: 67 74 68 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  gth $::test_conf 4040: 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e 20 30 7d igurations] > 0} 4050: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4060: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4070: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 4080: 69 66 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 ified list of te 4090: 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st configuration 40a0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 40b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
40c0: 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
40d0: 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ions..      } el
40e0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
40f0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
4100: 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c 74   Use the default
4110: 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f   list of test co
4120: 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e 0d 0a 20  nfigurations...
4130: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4140: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 44    return [list D
4150: 65 62 75 67 20 52 65 6c 65 61 73 65 5d 0d 0a 20  ebug Release]..
4160: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
4170: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
4180: 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ildConfiguration
4190: 53 75 66 66 69 78 20 7b 7d 20 7b 0d 0a 20 20 20  Suffix {} {..
41a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
41b0: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74  TE: See if the t
41c0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  est configuratio
41d0: 6e 20 73 75 66 66 69 78 20 68 61 73 20 62 65 65  n suffix has bee
41e0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79 0d  n overridden by.
41f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
4200: 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e  he user (e.g. on
4210: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
4220: 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e)...      #..
4230: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
4240: 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66  ists ::test_conf
4250: 69 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69 78  iguration_suffix
4260: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
4270: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
4280: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu 4290: 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 5d 20 3e ration_suffix] > 42a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 42b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 42c0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 42d0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f pecified test co 42e0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66 nfiguration suff 42f0: 69 78 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ix... #.. 4300: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
4310: 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61  ::test_configura
4320: 74 69 6f 6e 5f 73 75 66 66 69 78 0d 0a 20 20 20  tion_suffix..
4330: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
4340: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4350: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
4360: 64 65 66 61 75 6c 74 20 74 65 73 74 20 63 6f 6e  default test con
4370: 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66 66 69  figuration suffi
4380: 78 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64 20  x, which should
4390: 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  be..        #
43a0: 20 20 20 20 61 6e 20 65 6d 70 74 79 20 73 74 72      an empty str
43b0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ing...        #.
43c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
43d0: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ""..      }..
43e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
43f0: 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 43 6f  getBuildNativeCo
4400: 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69  nfigurationSuffi
4410: 78 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  x {} {..      #.
4420: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53  .      # NOTE: S
4430: 65 65 20 69 66 20 74 68 65 20 74 65 73 74 20 6e  ee if the test n
4440: 61 74 69 76 65 20 63 6f 6e 66 69 67 75 72 61 74  ative configurat
4450: 69 6f 6e 20 73 75 66 66 69 78 20 68 61 73 20 62  ion suffix has b
4460: 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  een..      #
4470: 20 20 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79     overridden by
4480: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20   the user (e.g.
4490: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
44a0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ine)...      #..
44b0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
44c0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 61  exists ::test_na
44d0: 74 69 76 65 5f 63 6f 6e 66 69 67 75 72 61 74 69  tive_configurati
44e0: 6f 6e 5f 73 75 66 66 69 78 5d 20 26 26 20 5c 0d  on_suffix] && \.
44f0: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
4500: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 4510: 74 5f 6e 61 74 69 76 65 5f 63 6f 6e 66 69 67 75 t_native_configu 4520: 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 5d 20 3e ration_suffix] > 4530: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 4540: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 4550: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 4560: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 6e 61 pecified test na 4570: 74 69 76 65 20 63 6f 6e 66 69 67 75 72 61 74 69 tive configurati 4580: 6f 6e 20 73 75 66 66 69 78 2e 0d 0a 20 20 20 20 on suffix... 4590: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 45a0: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 6e 61 eturn$::test_na
45b0: 74 69 76 65 5f 63 6f 6e 66 69 67 75 72 61 74 69  tive_configurati
45c0: 6f 6e 5f 73 75 66 66 69 78 0d 0a 20 20 20 20 20  on_suffix..
45d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
45e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
45f0: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 65  NOTE: Use the de
4600: 66 61 75 6c 74 20 74 65 73 74 20 6e 61 74 69 76  fault test nativ
4610: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration
4620: 73 75 66 66 69 78 2c 20 77 68 69 63 68 0d 0a 20  suffix, which..
4630: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73         #       s
4640: 68 6f 75 6c 64 20 62 65 20 61 6e 20 65 6d 70 74  hould be an empt
4650: 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20  y string...
4660: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
4670: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d  turn ""..      }
4680: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
4690: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 4e 61 74  proc getBuildNat
46a0: 69 76 65 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e  iveConfiguration
46b0: 53 75 66 66 69 78 46 6f 72 44 6f 74 4e 65 74 43  SuffixForDotNetC
46c0: 6f 72 65 20 7b 20 73 75 66 66 69 78 20 7d 20 7b  ore { suffix } {
46d0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 73 44  ..      if {[isD
46e0: 6f 74 4e 65 74 43 6f 72 65 5d 20 26 26 20 5b 69  otNetCore] && [i
46f0: 73 57 69 6e 64 6f 77 73 5d 7d 20 74 68 65 6e 20  sWindows]} then
4700: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
4710: 6e 20 4e 61 74 69 76 65 4f 6e 6c 79 3b 20 23 20  n NativeOnly; #
4720: 48 41 43 4b 3a 20 53 70 65 63 69 61 6c 20 63 61  HACK: Special ca
4730: 73 65 2c 20 75 73 65 20 32 30 31 35 20 6e 61 74  se, use 2015 nat
4740: 69 76 65 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20  ive binaries...
4750: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
4760: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73  string length $s 4770: 75 66 66 69 78 5d 20 3e 20 30 7d 20 74 68 65 6e uffix] > 0} then 4780: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 4790: 72 6e 20 24 73 75 66 66 69 78 0d 0a 20 20 20 20 rn$suffix..
47a0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
47b0: 20 20 20 20 72 65 74 75 72 6e 20 5b 67 65 74 42      return [getB
47c0: 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 67  uildNativeConfig
47d0: 75 72 61 74 69 6f 6e 53 75 66 66 69 78 5d 0d 0a  urationSuffix]..
47e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
47f0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
4800: 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f  uildConfiguratio
4810: 6e 53 75 66 66 69 78 65 73 20 7b 7d 20 7b 0d 0a  nSuffixes {} {..
4820: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4830: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
4840: 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63  e list of test c
4850: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 66  onfiguration suf
4860: 66 69 78 65 73 20 68 61 73 20 62 65 65 6e 0d 0a  fixes has been..
4870: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 76        #       ov
4880: 65 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20  erridden by the
4890: 75 73 65 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68  user (e.g. on th
48a0: 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e  e command line).
48b0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
48c0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
48d0: 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75  s ::test_configu
48e0: 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 65 73 5d  ration_suffixes]
48f0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
4900: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73   [llength $::tes 4910: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5f t_configuration_ 4920: 73 75 66 66 69 78 65 73 5d 20 3e 20 30 7d 20 74 suffixes] > 0} t 4930: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 4940: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 4950: 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 66 : Use the specif 4960: 69 65 64 20 6c 69 73 74 20 6f 66 20 74 65 73 74 ied list of test 4970: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 configurations 4980: 73 75 66 66 69 78 65 73 2e 0d 0a 20 20 20 20 20 suffixes... 4990: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 #.. re 49a0: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e turn$::test_con
49b0: 66 69 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69  figuration_suffi
49c0: 78 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  xes..      } els
49d0: 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f  eif {[isDotNetCo
49e0: 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  re]} then {..
49f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4a00: 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e 67 20  # NOTE: Running
4a10: 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20 70 72  on .NET Core, pr
4a20: 69 6f 72 69 74 69 7a 65 20 69 74 73 20 74 65 73  ioritize its tes
4a30: 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 0d  t configuration.
4a40: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
4a50: 20 73 75 66 66 69 78 65 73 20 66 6f 72 20 6c 69   suffixes for li
4a60: 62 72 61 72 79 20 66 69 6c 65 73 2e 0d 0a 20 20  brary files...
4a70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4a80: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 4e 65   return [list Ne
4a90: 74 53 74 61 6e 64 61 72 64 32 30 20 22 22 5d 0d  tStandard20 ""].
4aa0: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
4ab0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4ac0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
4ad0: 74 68 65 20 64 65 66 61 75 6c 74 20 6c 69 73 74  the default list
4ae0: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75   of test configu
4af0: 72 61 74 69 6f 6e 73 20 73 75 66 66 69 78 65 73  rations suffixes
4b00: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
4b10: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
4b20: 73 74 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d 0d  st ""]..      }.
4b30: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
4b40: 72 6f 63 20 67 65 74 42 75 69 6c 64 45 78 74 72  roc getBuildExtr
4b50: 61 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  a {} {..      if
4b60: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4b70: 3a 74 65 73 74 5f 65 78 74 72 61 5d 20 26 26 20  :test_extra] &&
4b80: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
4b90: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74  ring length $::t 4ba0: 65 73 74 5f 65 78 74 72 61 5d 20 3e 20 30 7d 20 est_extra] > 0} 4bb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 4bc0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 4bd0: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 4be0: 66 69 65 64 20 65 78 74 72 61 20 6f 75 74 70 75 fied extra outpu 4bf0: 74 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 t directory... 4c00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 4c10: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
4c20: 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d 20 65  extra..      } e
4c30: 6c 73 65 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74  lseif {[isDotNet
4c40: 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Core]} then {..
4c50: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4c60: 20 20 23 20 4e 4f 54 45 3a 20 52 75 6e 6e 69 6e    # NOTE: Runnin
4c70: 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 2c 20  g on .NET Core,
4c80: 75 73 65 20 74 68 65 20 65 78 74 72 61 20 6f 75  use the extra ou
4c90: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 20 66  tput directory f
4ca0: 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  or..        #
4cb0: 20 20 20 20 6c 69 62 72 61 72 79 20 66 69 6c 65      library file
4cc0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
4cd0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 65         return ne
4ce0: 74 73 74 61 6e 64 61 72 64 32 2e 30 0d 0a 20 20  tstandard2.0..
4cf0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
4d00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4d10: 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 65 78 74 72   # NOTE: No extr
4d20: 61 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f  a output directo
4d30: 72 79 20 69 73 20 72 65 71 75 69 72 65 64 2e 0d  ry is required..
4d40: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4d50: 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20      return ""..
4d60: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
4d70: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
4d80: 69 6c 64 45 78 74 72 61 73 20 7b 7d 20 7b 0d 0a  ildExtras {} {..
4d90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
4da0: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68   NOTE: See if th
4db0: 65 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61 20  e list of extra
4dc0: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 69  output directori
4dd0: 65 73 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  es has been over
4de0: 72 69 64 64 65 6e 0d 0a 20 20 20 20 20 20 23 20  ridden..      #
4df0: 20 20 20 20 20 20 62 79 20 74 68 65 20 75 73 65        by the use
4e00: 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63  r (e.g. on the c
4e10: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20  ommand line)...
4e20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
4e30: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
4e40: 3a 74 65 73 74 5f 65 78 74 72 61 73 5d 20 26 26  :test_extras] &&
4e50: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c   \..          [l
4e60: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 65  length $::test_e 4e70: 78 74 72 61 73 5d 20 3e 20 30 7d 20 74 68 65 6e xtras] > 0} then 4e80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 4e90: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 4ea0: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 4eb0: 20 6c 69 73 74 20 6f 66 20 65 78 74 72 61 20 6f list of extra o 4ec0: 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 69 65 utput directorie 4ed0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 4ee0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
4ef0: 3a 74 65 73 74 5f 65 78 74 72 61 73 0d 0a 20 20  :test_extras..
4f00: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
4f10: 73 44 6f 74 4e 65 74 43 6f 72 65 5d 7d 20 74 68  sDotNetCore]} th
4f20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
4f30: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
4f40: 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 54   Running on .NET
4f50: 20 43 6f 72 65 2c 20 70 72 69 6f 72 69 74 69 7a   Core, prioritiz
4f60: 65 20 69 74 73 20 65 78 74 72 61 20 6f 75 74 70  e its extra outp
4f70: 75 74 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  ut directory..
4f80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6f        #       fo
4f90: 72 20 6c 69 62 72 61 72 79 20 66 69 6c 65 73 2e  r library files.
4fa0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4fb0: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
4fc0: 74 20 6e 65 74 73 74 61 6e 64 61 72 64 32 2e 30  t netstandard2.0
4fd0: 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c   ""]..      } el
4fe0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
4ff0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
5000: 20 55 73 65 20 64 65 66 61 75 6c 74 20 6c 69 73   Use default lis
5010: 74 20 6f 66 20 65 78 74 72 61 20 6f 75 74 70 75  t of extra outpu
5020: 74 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 77  t directories, w
5030: 68 69 63 68 20 69 73 20 6f 6e 65 0d 0a 20 20 20  hich is one..
5040: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 6d 70       #       emp
5050: 74 79 20 73 74 72 69 6e 67 20 28 6e 6f 2d 6f 70  ty string (no-op
5060: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  )...        #..
5070: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c         return [l
5080: 69 73 74 20 22 22 5d 0d 0a 20 20 20 20 20 20 7d  ist ""]..      }
5090: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
50a0: 70 72 6f 63 20 67 65 74 42 75 69 6c 64 42 61 73  proc getBuildBas
50b0: 65 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d  eDirectory {} {.
50c0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
50d0: 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
50e0: 75 74 20 74 68 65 20 62 61 73 65 20 64 69 72 65  ut the base dire
50f0: 63 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20  ctory where all
5100: 74 68 65 20 62 75 69 6c 64 73 20 73 68 6f 75 6c  the builds shoul
5110: 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20  d be..      #
5120: 20 20 20 20 6c 6f 63 61 74 65 64 2e 20 20 54 68      located.  Th
5130: 69 73 20 77 69 6c 6c 20 62 65 20 74 68 65 20 64  is will be the d
5140: 69 72 65 63 74 6f 72 79 20 74 68 61 74 20 63 6f  irectory that co
5150: 6e 74 61 69 6e 73 20 74 68 65 20 61 63 74 75 61  ntains the actua
5160: 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  l..      #
5170: 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69   build output di
5180: 72 65 63 74 6f 72 79 20 28 65 2e 67 2e 20 70 61  rectory (e.g. pa
5190: 72 65 6e 74 20 6f 66 20 22 62 69 6e 22 29 2e 0d  rent of "bin")..
51a0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
51b0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
51c0: 20 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69   ::build_base_di
51d0: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
51e0: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
51f0: 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64   length $::build 5200: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 5d _base_directory] 5210: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 5220: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5230: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 5240: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 ation of the bui 5250: 6c 64 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 ld base director 5260: 79 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 y has been overr 5270: 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 20 20 20 idden;.. 5280: 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f 72 # therefor 5290: 65 2c 20 75 73 65 20 69 74 20 76 65 72 62 61 74 e, use it verbat 52a0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a im... #.. 52b0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
52c0: 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64 69 72  ::build_base_dir
52d0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
52e0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
52f0: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ists ::common_di
5300: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
5310: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
5320: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f   length $::commo 5330: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 n_directory] > 0 5340: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 5350: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 5360: 4f 54 45 3a 20 4e 65 78 74 2c 20 66 61 6c 6c 62 OTE: Next, fallb 5370: 61 63 6b 20 74 6f 20 74 68 65 20 67 72 61 6e 64 ack to the grand 5380: 70 61 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79 parent directory 5390: 20 6f 66 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 of the one.. 53a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 53b0: 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c taining this fil 53c0: 65 20 28 69 2e 65 2e 20 22 63 6f 6d 6d 6f 6e 2e e (i.e. "common. 53d0: 65 61 67 6c 65 22 29 2c 20 69 66 20 61 76 61 69 eagle"), if avai 53e0: 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... 53f0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 5400: 6e 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 n [file dirname 5410: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a [file dirname$:
5420: 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72  :common_director
5430: 79 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  y]]..      } els
5440: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74  eif {[info exist
5450: 73 20 3a 3a 70 61 74 68 5d 20 26 26 20 5c 0d 0a  s ::path] && \..
5460: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
5470: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 70 61 74 68  g length $::path 5480: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 5490: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 54a0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 6e 61 6c 6c # NOTE: Finall 54b0: 79 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 74 y, fallback to t 54c0: 68 65 20 70 61 72 65 6e 74 20 64 69 72 65 63 74 he parent direct 54d0: 6f 72 79 20 6f 66 20 74 68 65 20 45 61 67 6c 65 ory of the Eagle 54e0: 54 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 Test.. # 54f0: 20 20 20 20 20 20 70 61 74 68 2e 20 20 54 68 65 path. The 5500: 20 45 61 67 6c 65 54 65 73 74 20 70 61 63 6b 61 EagleTest packa 5510: 67 65 20 67 75 61 72 61 6e 74 65 65 73 20 74 68 ge guarantees th 5520: 61 74 20 74 68 69 73 20 76 61 72 69 61 62 6c 65 at this variable 5530: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5540: 20 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74 6f will be set to 5550: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 the directory c 5560: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 66 69 ontaining the fi 5570: 72 73 74 20 66 69 6c 65 20 74 6f 0d 0a 20 20 20 rst file to.. 5580: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 78 65 # exe 5590: 63 75 74 65 20 74 68 65 20 5b 72 75 6e 54 65 73 cute the [runTes 55a0: 74 50 72 6f 6c 6f 67 75 65 5d 20 73 63 72 69 70 tPrologue] scrip 55b0: 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 t library proced 55c0: 75 72 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ure... #. 55d0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 55e0: 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 3a [file dirname$:
55f0: 3a 70 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 20  :path]..      }
5600: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
5610: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
5620: 45 3a 20 4e 6f 20 70 61 74 68 20 69 73 20 61 76  E: No path is av
5630: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20  ailable, return
5640: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
5650: 20 20 54 68 69 73 20 70 6f 69 6e 74 0d 0a 20 20    This point..
5660: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68        #       sh
5670: 6f 75 6c 64 20 6e 6f 74 20 62 65 20 72 65 61 63  ould not be reac
5680: 68 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  hed...        #.
5690: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
56a0: 22 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  ""..      }..
56b0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
56c0: 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
56d0: 61 50 61 74 68 20 7b 7d 20 7b 0d 0a 20 20 20 20  aPath {} {..
56e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
56f0: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 68  E: Figure out th
5700: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72  e directory wher
5710: 65 20 61 6c 6c 20 74 68 65 20 74 65 73 74 20 64  e all the test d
5720: 61 74 61 20 66 69 6c 65 73 20 73 68 6f 75 6c 64  ata files should
5730: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
5740: 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69  be located.  Thi
5750: 73 20 73 68 6f 75 6c 64 20 62 65 20 74 68 65 20  s should be the
5760: 22 64 61 74 61 22 20 64 69 72 65 63 74 6f 72 79  "data" directory
5770: 20 62 65 6e 65 61 74 68 20 74 68 65 0d 0a 20 20   beneath the..
5780: 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65      #       dire
5790: 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67  ctory containing
57a0: 20 74 68 65 20 61 63 74 75 61 6c 20 74 65 73 74   the actual test
57b0: 20 73 63 72 69 70 74 73 2e 0d 0a 20 20 20 20 20   scripts...
57c0: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
57d0: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 3a 3a 70   [file join $::p 57e0: 61 74 68 20 64 61 74 61 5d 0d 0a 20 20 20 20 7d ath data].. } 57f0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 5800: 52 75 6e 6e 69 6e 67 57 6f 57 36 34 20 7b 7d 20 RunningWoW64 {} 5810: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 5820: 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f # NOTE: For no 5830: 77 2c 20 6a 75 73 74 20 75 73 65 20 74 68 65 20 w, just use the 5840: 65 78 69 73 74 69 6e 67 20 74 65 73 74 20 63 6f existing test co 5850: 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 64 65 74 nstraint for det 5860: 65 63 74 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 ecting.. # 5870: 20 20 20 20 20 20 61 20 57 6f 57 36 34 20 70 72 a WoW64 pr 5880: 6f 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d ocess... #. 5890: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 68 . return [h 58a0: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 77 6f aveConstraint wo 58b0: 77 36 34 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a w64].. }..... 58c0: 20 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 64 proc isMixed 58d0: 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 ModeAssembly { f 58e0: 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 ileName {varName 58f0: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 5900: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 5910: 20 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 First, make sur 5920: 65 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 e the test suite 5930: 20 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 20 infrastructure 5940: 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 is allowed to.. 5950: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 5960: 20 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d the [exec] comm 5970: 61 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 and... #.. 5980: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 5990: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 exists ::no(exec 59a0: 29 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 )] && ![info exi 59b0: 73 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 sts ::no(corFlag 59c0: 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 59d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 59e0: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6c # NOTE: If the l 59f0: 6f 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c ocation of CorFl 5a00: 61 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 69 ags is present i 5a10: 6e 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e n the environmen 5a20: 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t,.. # 5a30: 20 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 65 use it; othe 5a40: 72 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 20 rwise assume it 5a50: 69 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e 0d is in the PATH.. 5a60: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5a70: 20 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 73 set corFlags 5a80: 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 [expr {.. 5a90: 20 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 [info exists 5aa0: 20 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 ::env(CorFlags) 5ab0: 5d 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c ] ?$::env(CorFl
5ac0: 61 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67 73  ags) : "CorFlags
5ad0: 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d  "..        }]...
5ae0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
5af0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
5b00: 6d 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43  mpt to execute C
5b10: 6f 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20 73  orFlags on the s
5b20: 70 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a  pecified file...
5b30: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
5b40: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
5b50: 0a 20 20 20 20 20 20 20 20 20 20 65 78 65 63 20  .          exec
5b60: 2d 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66 69  -- $corFlags [fi 5b70: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 le nativename$f
5b80: 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
5b90: 20 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20    } exec] == 0}
5ba0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5bb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
5bc0: 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73   NOTE: If reques
5bd0: 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65  ted by our calle
5be0: 72 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65  r, attempt to de
5bf0: 74 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20  termine the..
5c00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70         #       p
5c10: 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65 20  latform for the
5c20: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 61  specified file a
5c30: 73 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20  s well...
5c40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
5c50: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
5c60: 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30  th $varName] > 0 5c70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 5c80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5c90: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f # NOTE: Sto 5ca0: 72 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 re the platform 5cb0: 69 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72 in the named var 5cc0: 69 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 iable in the.. 5cd0: 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 5ce0: 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 context of our 5cf0: 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 caller... 5d00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5d10: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
5d20: 72 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a  rName platform..
5d30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
5d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
5d50: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
5d60: 65 78 74 72 61 63 74 20 74 68 65 20 50 45 20 6c  extract the PE l
5d70: 69 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70  ine from the cap
5d80: 74 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20  tured..
5d90: 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75     #       outpu
5da0: 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75  t.  If this valu
5db0: 65 20 69 73 20 22 50 45 33 32 22 20 6f 72 20 22  e is "PE32" or "
5dc0: 50 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20  PE32+", the..
5dd0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
5de0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 69   assembly file i
5df0: 73 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d 62  s 32-bit or 64-b
5e00: 69 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79  it, respectively
5e10: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ;..            #
5e20: 20 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65         otherwise
5e30: 2c 20 69 74 73 20 74 79 70 65 20 69 73 20 75 6e  , its type is un
5e40: 6b 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20  known...
5e50: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
5e60: 20 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b     set pattern {
5e70: 5e 50 45 20 20 20 20 20 20 20 20 3a 20 28 50 45  ^PE        : (PE
5e80: 33 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d  32|PE32\+)\s+$}. 5e90: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 5ea0: 66 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 f {[regexp -line 5eb0: 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 --$pattern $ex 5ec0: 65 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 ec dummy pe32]} 5ed0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 5ee0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5ef0: 20 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 54 # HACK: T 5f00: 68 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 73 his [switch] ass 5f10: 75 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 74 umes that 32-bit 5f20: 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 executables are 5f30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 5f40: 23 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 78 # always x 5f50: 38 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d 62 86 and that 64-b 5f60: 69 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 it executables a 5f70: 72 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 re always.. 5f80: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 5f90: 20 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 x64... 5fa0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5fb0: 20 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 switch -ex 5fc0: 61 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a act --$pe32 {..
5fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
5fe0: 50 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20  PE32 {..
5ff0: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c            set pl
6000: 61 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20  atform Win32..
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6020: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
6030: 20 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20   PE32+ {..
6040: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
6050: 70 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20  platform x64..
6060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
6080: 20 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20   default {..
6090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
60a0: 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20  t platform ""..
60b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
60c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
60d0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
60e0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
60f0: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
6100: 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20  orm ""..
6110: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
6120: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
6130: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
6140: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
6150: 65 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f 4e  extract the ILON
6160: 4c 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65  LY line from the
6170: 20 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20   captured..
6180: 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74       #       out
6190: 70 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61  put.  If this va
61a0: 6c 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65  lue is zero, the
61b0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
61c0: 6d 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20  must..
61d0: 23 20 20 20 20 20 20 20 62 65 20 61 20 6d 69 78  #       be a mix
61e0: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79  ed-mode assembly
61f0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20  ; otherwise, it
6200: 63 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20  contains only..
6210: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
6220: 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65   managed compone
6230: 6e 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  nts...
6240: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
6250: 20 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c   pattern {^ILONL
6260: 59 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24  Y    : (0|1)\s+$6270: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 }.... i 6280: 66 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e f {![regexp -lin 6290: 65 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 e --$pattern $e 62a0: 78 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 xec dummy ilOnly 62b0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 62c0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 return fa 62d0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d lse.. } 62e0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 62f0: 20 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e {!$ilOnly} then
6300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
6310: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20  return true..
6320: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
6330: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
6340: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
6350: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65   NOTE: If the te
6360: 73 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74 20  st suite cannot
6370: 75 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65 78  use [exec] or ex
6380: 65 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c  ecution of CorFl
6390: 61 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ags..      #
63a0: 20 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72     failed, retur
63b0: 6e 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20  n false...
63c0: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
63d0: 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  false..    }....
63e0: 0a 20 20 20 20 70 72 6f 63 20 69 73 44 61 72 77  .    proc isDarw
63f0: 69 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 72  in {} {..      r
6400: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20  eturn [expr {..
6410: 20 20 20 20 20 20 20 5b 69 6e 66 6f 20 65 78 69         [info exi
6420: 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f  sts ::tcl_platfo
6430: 72 6d 28 6f 73 29 5d 20 26 26 20 24 3a 3a 74 63  rm(os)] && $::tc 6440: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6f 73 29 20 65 l_platform(os) e 6450: 71 20 22 44 61 72 77 69 6e 22 0d 0a 20 20 20 20 q "Darwin".. 6460: 20 20 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }].. }..... 6470: 20 20 20 20 70 72 6f 63 20 67 65 74 4e 61 74 69 proc getNati 6480: 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d veLibraryFileNam 6490: 65 73 4f 6e 6c 79 20 7b 7d 20 7b 0d 0a 20 20 20 esOnly {} {.. 64a0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 64b0: 54 45 3a 20 46 69 72 73 74 2c 20 63 68 65 63 6b TE: First, check 64c0: 20 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 if the list of 64d0: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66 native library f 64e0: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65 ile names has be 64f0: 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 en.. # 6500: 20 20 6d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 manually overr 6510: 69 64 64 65 6e 2e 0d 0a 20 20 20 20 20 20 23 0d idden... #. 6520: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 6530: 20 65 78 69 73 74 73 20 3a 3a 6e 61 74 69 76 65 exists ::native 6540: 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 _library_file_na 6550: 6d 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 mes] && \.. 6560: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a [llength$:
6570: 3a 6e 61 74 69 76 65 5f 6c 69 62 72 61 72 79 5f  :native_library_
6580: 66 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d  file_names] > 0}
6590: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
65a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
65b0: 54 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20  TE: The list of
65c0: 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66  native library f
65d0: 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62 65  ile names has be
65e0: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
65f0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
6600: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
6610: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
6620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6630: 72 65 74 75 72 6e 20 24 3a 3a 6e 61 74 69 76 65  return $::native 6640: 5f 6c 69 62 72 61 72 79 5f 66 69 6c 65 5f 6e 61 _library_file_na 6650: 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 mes.. } els 6660: 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d eif {[isWindows] 6670: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6680: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 6690: 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 OTE: Otherwise, 66a0: 6f 6e 20 57 69 6e 33 32 2c 20 61 6c 77 61 79 73 on Win32, always 66b0: 20 75 73 65 20 74 68 65 20 73 74 61 6e 64 61 72 use the standar 66c0: 64 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 d native library 66d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 66e0: 20 20 66 69 6c 65 20 6e 61 6d 65 20 22 73 71 6c file name "sql 66f0: 69 74 65 33 2e 64 6c 6c 22 2e 0d 0a 20 20 20 20 ite3.dll"... 6700: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 6710: 65 74 75 72 6e 20 5b 6c 69 73 74 20 73 71 6c 69 eturn [list sqli 6720: 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20 20 20 20 20 te3.dll].. 6730: 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 6f 74 } elseif {[isDot 6740: 4e 65 74 43 6f 72 65 5d 7d 20 74 68 65 6e 20 7b NetCore]} then { 6750: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6760: 20 20 20 20 20 23 20 20 20 20 20 20 20 57 68 65 # Whe 6770: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 2e 4e 45 n running on .NE 6780: 54 20 43 6f 72 65 2c 20 72 65 74 75 72 6e 20 74 T Core, return t 6790: 68 65 20 73 61 6d 65 20 6e 61 74 69 76 65 20 6c he same native l 67a0: 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 ibrary.. 67b0: 23 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d # file nam 67c0: 65 20 74 68 61 74 20 69 73 20 75 73 65 64 20 6f e that is used o 67d0: 6e 20 57 69 6e 64 6f 77 73 20 28 69 2e 65 2e 20 n Windows (i.e. 67e0: 6f 74 68 65 72 77 69 73 65 2c 20 61 73 73 75 6d otherwise, assum 67f0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 6800: 20 20 20 77 65 20 61 72 65 20 72 75 6e 6e 69 6e we are runnin 6810: 67 20 6f 6e 20 4d 6f 6e 6f 20 61 6e 64 20 75 73 g on Mono and us 6820: 65 20 69 74 73 20 50 2f 49 6e 76 6f 6b 65 20 63 e its P/Invoke c 6830: 6f 6e 76 65 6e 74 69 6f 6e 73 29 2e 0d 0a 20 20 onventions)... 6840: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 6850: 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 73 71 return [list sq 6860: 6c 69 74 65 33 2e 64 6c 6c 5d 0d 0a 20 20 20 20 lite3.dll].. 6870: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 73 44 } elseif {[isD 6880: 61 72 77 69 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a arwin]} then {.. 6890: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 68a0: 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 # NOTE: When 68b0: 72 75 6e 6e 69 6e 67 20 6f 6e 20 44 61 72 77 69 running on Darwi 68c0: 6e 20 28 69 2e 65 2e 20 74 68 65 20 6b 65 72 6e n (i.e. the kern 68d0: 65 6c 20 6f 66 20 69 4f 53 20 2f 20 4d 61 63 20 el of iOS / Mac 68e0: 4f 53 20 58 29 2c 0d 0a 20 20 20 20 20 20 20 20 OS X),.. 68f0: 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 # return t 6900: 68 65 20 4d 61 63 20 4f 53 20 58 20 6e 61 74 69 he Mac OS X nati 6910: 76 65 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 ve library file 6920: 6e 61 6d 65 2e 20 20 54 68 69 73 20 66 69 6c 65 name. This file 6930: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 6940: 20 20 6e 61 6d 65 20 69 73 20 6e 6f 72 6d 61 6c name is normal 6950: 6c 79 20 72 65 71 75 69 72 65 64 20 66 6f 72 20 ly required for 6960: 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 Mono... # 6970: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6980: 20 5b 6c 69 73 74 20 6c 69 62 73 71 6c 69 74 65 [list libsqlite 6990: 33 2e 64 79 6c 69 62 5d 0d 0a 20 20 20 20 20 20 3.dylib].. 69a0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 69b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 69c0: 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 65 2c 20 OTE: Otherwise, 69d0: 72 65 74 75 72 6e 20 74 68 65 20 67 65 6e 65 72 return the gener 69e0: 69 63 20 50 4f 53 49 58 20 6e 61 74 69 76 65 20 ic POSIX native 69f0: 6c 69 62 72 61 72 79 20 66 69 6c 65 0d 0a 20 20 library file.. 6a00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 6a10: 6d 65 2e 20 20 54 68 69 73 20 66 69 6c 65 20 6e me. This file n 6a20: 61 6d 65 20 69 73 20 6e 6f 72 6d 61 6c 6c 79 20 ame is normally 6a30: 72 65 71 75 69 72 65 64 20 66 6f 72 20 4d 6f 6e required for Mon 6a40: 6f 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 o... #.. 6a50: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c return [l 6a60: 69 73 74 20 6c 69 62 73 71 6c 69 74 65 33 2e 73 ist libsqlite3.s 6a70: 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 o].. }.. 6a80: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 6a90: 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 getInteropAssemb 6aa0: 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 lyFileNamesOnly 6ab0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 6ac0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 # NOTE: Fir 6ad0: 73 74 2c 20 63 68 65 63 6b 20 69 66 20 74 68 65 st, check if the 6ae0: 20 6c 69 73 74 20 6f 66 20 69 6e 74 65 72 6f 70 list of interop 6af0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e assembly file n 6b00: 61 6d 65 73 20 68 61 73 20 62 65 65 6e 0d 0a 20 ames has been.. 6b10: 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e # man 6b20: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e ually overridden 6b30: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 6b40: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 6b50: 74 73 20 3a 3a 69 6e 74 65 72 6f 70 5f 61 73 73 ts ::interop_ass 6b60: 65 6d 62 6c 79 5f 66 69 6c 65 5f 6e 61 6d 65 73 embly_file_names 6b70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 6b80: 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 69 6e [llength$::in
6b90: 74 65 72 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66  terop_assembly_f
6ba0: 69 6c 65 5f 6e 61 6d 65 73 5d 20 3e 20 30 7d 20  ile_names] > 0}
6bb0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
6bc0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
6bd0: 45 3a 20 54 68 65 20 6c 69 73 74 20 6f 66 20 69  E: The list of i
6be0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20  nterop assembly
6bf0: 66 69 6c 65 20 6e 61 6d 65 73 20 68 61 73 20 62  file names has b
6c00: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
6c10: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6c20: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
6c30: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
6c40: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
6c50: 20 72 65 74 75 72 6e 20 24 3a 3a 69 6e 74 65 72   return $::inter 6c60: 6f 70 5f 61 73 73 65 6d 62 6c 79 5f 66 69 6c 65 op_assembly_file 6c70: 5f 6e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 20 _names.. } 6c80: 65 6c 73 65 69 66 20 7b 5b 69 73 57 69 6e 64 6f elseif {[isWindo 6c90: 77 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ws]} then {.. 6ca0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6cb0: 23 20 4e 4f 54 45 3a 20 4f 74 68 65 72 77 69 73 # NOTE: Otherwis 6cc0: 65 2c 20 6f 6e 20 57 69 6e 33 32 2c 20 61 6c 77 e, on Win32, alw 6cd0: 61 79 73 20 75 73 65 20 74 68 65 20 69 6e 74 65 ays use the inte 6ce0: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c rop assembly fil 6cf0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 6d00: 20 20 20 6e 61 6d 65 20 22 53 51 4c 69 74 65 2e name "SQLite. 6d10: 49 6e 74 65 72 6f 70 2e 64 6c 6c 22 2e 0d 0a 20 Interop.dll"... 6d20: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 6d30: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 53 return [list S 6d40: 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c QLite.Interop.dl 6d50: 6c 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 l].. } else 6d60: 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f 72 if {[isDotNetCor 6d70: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 6d80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 6d90: 20 20 20 20 20 20 20 57 68 65 6e 20 72 75 6e 6e When runn 6da0: 69 6e 67 20 6f 6e 20 2e 4e 45 54 20 43 6f 72 65 ing on .NET Core 6db0: 2c 20 72 65 74 75 72 6e 20 74 68 65 20 73 61 6d , return the sam 6dc0: 65 20 69 6e 74 65 72 70 20 61 73 73 65 6d 62 6c e interp assembl 6dd0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 y.. # 6de0: 20 20 20 66 69 6c 65 20 6e 61 6d 65 20 74 68 61 file name tha 6df0: 74 20 69 73 20 75 73 65 64 20 6f 6e 20 57 69 6e t is used on Win 6e00: 64 6f 77 73 20 28 69 2e 65 2e 20 6f 74 68 65 72 dows (i.e. other 6e10: 77 69 73 65 2c 20 61 73 73 75 6d 65 0d 0a 20 20 wise, assume.. 6e20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 65 # we 6e30: 20 61 72 65 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 are running on 6e40: 4d 6f 6e 6f 20 61 6e 64 20 75 73 65 20 69 74 73 Mono and use its 6e50: 20 50 2f 49 6e 76 6f 6b 65 20 63 6f 6e 76 65 6e P/Invoke conven 6e60: 74 69 6f 6e 73 29 2e 0d 0a 20 20 20 20 20 20 20 tions)... 6e70: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 6e80: 72 6e 20 5b 6c 69 73 74 20 53 51 4c 69 74 65 2e rn [list SQLite. 6e90: 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 0d 0a 20 20 Interop.dll].. 6ea0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 } elseif {[i 6eb0: 73 44 61 72 77 69 6e 5d 7d 20 74 68 65 6e 20 7b sDarwin]} then { 6ec0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 6ed0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 # NOTE: Whe 6ee0: 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 44 61 72 n running on Dar 6ef0: 77 69 6e 20 28 69 2e 65 2e 20 74 68 65 20 6b 65 win (i.e. the ke 6f00: 72 6e 65 6c 20 6f 66 20 69 4f 53 20 2f 20 4d 61 rnel of iOS / Ma 6f10: 63 20 4f 53 20 58 29 2c 0d 0a 20 20 20 20 20 20 c OS X),.. 6f20: 20 20 23 20 20 20 20 20 20 20 72 65 74 75 72 6e # return 6f30: 20 74 68 65 20 4d 61 63 20 4f 53 20 58 20 69 6e the Mac OS X in 6f40: 74 65 72 70 20 61 73 73 65 6d 62 6c 79 20 66 69 terp assembly fi 6f50: 6c 65 20 6e 61 6d 65 2e 20 20 54 68 69 73 20 66 le name. This f 6f60: 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ile.. # 6f70: 20 20 20 20 20 6e 61 6d 65 20 69 73 20 6e 6f 72 name is nor 6f80: 6d 61 6c 6c 79 20 72 65 71 75 69 72 65 64 20 66 mally required f 6f90: 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 20 20 20 20 20 or Mono... 6fa0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 6fb0: 75 72 6e 20 5b 6c 69 73 74 20 6c 69 62 53 51 4c urn [list libSQL 6fc0: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 79 6c 69 ite.Interop.dyli 6fd0: 62 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 b].. } else 6fe0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 6ff0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f # NOTE: O 7000: 74 68 65 72 77 69 73 65 2c 20 72 65 74 75 72 6e therwise, return 7010: 20 74 68 65 20 67 65 6e 65 72 69 63 20 50 4f 53 the generic POS 7020: 49 58 20 69 6e 74 65 72 70 20 61 73 73 65 6d 62 IX interp assemb 7030: 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20 20 20 20 ly file.. 7040: 20 23 20 20 20 20 20 20 20 6e 61 6d 65 2e 20 20 # name. 7050: 54 68 69 73 20 66 69 6c 65 20 6e 61 6d 65 20 69 This file name i 7060: 73 20 6e 6f 72 6d 61 6c 6c 79 20 72 65 71 75 69 s normally requi 7070: 72 65 64 20 66 6f 72 20 4d 6f 6e 6f 2e 0d 0a 20 red for Mono... 7080: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 7090: 20 20 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 6c return [list l 70a0: 69 62 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 ibSQLite.Interop 70b0: 2e 73 6f 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 .so].. }.. 70c0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 70d0: 63 20 67 65 74 43 6f 72 65 45 78 74 65 6e 73 69 c getCoreExtensi 70e0: 6f 6e 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 onBinaryFileName 70f0: 20 7b 20 7b 64 65 66 61 75 6c 74 20 22 22 7d 20 { {default ""} 7100: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 } {.. set f 7110: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 43 6f 72 65 ileName [getCore 7120: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 5d 0d BinaryFileName]. 7130: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 ... if {[fi 7140: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
7150: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
7160: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69        return $fi 7170: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d leName.. }. 7180: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 7190: 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 7d 0d$default..    }.
71a0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 42  ....    proc isB
71b0: 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 7b 20  uildAvailable {
71c0: 6e 61 74 69 76 65 20 73 6b 69 70 4e 61 74 69 76  native skipNativ
71d0: 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72  e directory {var
71e0: 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  Name ""} } {..
71f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
7200: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66  OTE: Build the f
7210: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66  ully qualified f
7220: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
7230: 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c   primary assembl
7240: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
7250: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the
7260: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
7270: 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f  te managed compo
7280: 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20 20  nents.  It..
7290: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64    #       should
72a0: 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20 74   be noted that t
72b0: 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  his assembly fil
72c0: 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74 61  e may also conta
72d0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
72e0: 20 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f 6d        native com
72f0: 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e 61  ponents, if a na
7300: 74 69 76 65 20 62 75 69 6c 64 20 69 73 20 69 6e  tive build is in
7310: 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   use...      #..
7320: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61        set fileNa
7330: 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  me [file nativen
7340: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  ame [file join $7350: 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 directory \.. 7360: 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 7370: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d ta.SQLite.dll]]. 7380: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 ... if {![f 7390: 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 ile exists$file
73a0: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
73b0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
73c0: 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  lse..      }....
73d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
73e0: 20 4e 4f 54 45 3a 20 49 66 20 77 65 20 61 72 65   NOTE: If we are
73f0: 20 73 6b 69 70 70 69 6e 67 20 6c 6f 6f 6b 69 6e   skipping lookin
7400: 67 20 66 6f 72 20 74 68 65 20 6e 61 74 69 76 65  g for the native
7410: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 73 74 6f   components, sto
7420: 70 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  p..      #
7430: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a   now...      #..
7440: 20 20 20 20 20 20 69 66 20 7b 24 73 6b 69 70 4e        if {$skipN 7450: 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 ative} then {.. 7460: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 return tr 7470: 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 ue.. }.... 7480: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 7490: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 74a0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 automatically d 74b0: 65 74 65 63 74 20 69 66 20 74 68 65 20 70 72 69 etect if the pri 74c0: 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 mary assembly.. 74d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e # con 74e0: 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69 76 65 tains any native 74f0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 components, if 7500: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 necessary... 7510: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ 7520: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e string length$n
7530: 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74 68 65  ative] == 0} the
7540: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
7550: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
7560: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  $varName] > 0} t 7570: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 7580: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
7590: 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20  e $varName.. 75a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 75b0: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69 73 4d set native [isM 75c0: 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62 6c 79 ixedModeAssembly 75d0: 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61 72 4e$fileName $varN 75e0: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ame].. }... 75f0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 7600: 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 70 # NOTE: If the p 7610: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 20 rimary assembly 7620: 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20 74 68 also contains th 7630: 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 e native compone 7640: 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 nts,.. # 7650: 20 20 20 20 77 65 20 68 61 76 65 20 65 76 65 72 we have ever 7660: 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64 2e 0d ything we need.. 7670: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 7680: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 if {$native} the
7690: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
76a0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
76b0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
76c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
76d0: 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 6d 65 20  he machine name
76e0: 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 2c 20  is unavailable,
76f0: 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 6e 67  there is nothing
7700: 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 20 20 20   else we..
7710: 23 20 20 20 20 20 20 20 63 61 6e 20 64 6f 2e 0d  #       can do..
7720: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
7730: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
7740: 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d  s ::tcl_platform
7750: 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e  (machine)]} then
7760: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
7770: 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20  rn false..
7780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
7790: 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 61 74      # NOTE: What
77a0: 20 69 73 20 74 68 65 20 61 72 63 68 69 74 65 63   is the architec
77b0: 74 75 72 65 20 66 6f 72 20 74 68 69 73 20 6d 61  ture for this ma
77c0: 63 68 69 6e 65 3f 0d 0a 20 20 20 20 20 20 23 0d  chine?..      #.
77d0: 0a 20 20 20 20 20 20 73 65 74 20 61 72 63 68 69  .      set archi
77e0: 74 65 63 74 75 72 65 20 5b 6d 61 63 68 69 6e 65  tecture [machine
77f0: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63  ToPlatform $::tc 7800: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69 l_platform(machi 7810: 6e 65 29 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 ne) true].... 7820: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 7830: 54 45 3a 20 57 68 61 74 20 69 73 20 74 68 65 20 TE: What is the 7840: 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 69 platform for thi 7850: 73 20 6d 61 63 68 69 6e 65 3f 0d 0a 20 20 20 20 s machine?.. 7860: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 #.. set p 7870: 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 68 69 6e 65 latform [machine 7880: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 63 ToPlatform$::tc
7890: 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d 61 63 68 69  l_platform(machi
78a0: 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  ne)]....      #.
78b0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
78c0: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71  uild the fully q
78d0: 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61  ualified file na
78e0: 6d 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72  me for the inter
78f0: 6f 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20  op assembly..
7900: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61     #       conta
7910: 69 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d  ining the System
7920: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74  .Data.SQLite nat
7930: 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20  ive components.
7940: 20 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20   If this..
7950: 23 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69  #       file exi
7960: 73 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68  sts, we should h
7970: 61 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77  ave everything w
7980: 65 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23  e need...      #
7990: 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
79a0: 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5b 67 65  fileNameOnly [ge
79b0: 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79  tInteropAssembly
79c0: 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 7b  FileNamesOnly] {
79d0: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69  ..        set fi
79e0: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74  leName [file nat
79f0: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
7a00: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d  in $directory \. 7a10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 .$ar
7a20: 63 68 69 74 65 63 74 75 72 65 20 24 66 69 6c 65  chitecture $file 7a30: 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 NameOnly]].... 7a40: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file 7a50: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
7a60: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
7a70: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
7a80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
7a90: 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
7aa0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
7ab0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
7ac0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 7ad0: 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
7ae0: 6f 72 6d 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c  orm $fileNameOnl 7af0: 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 y]].... i 7b00: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 f {[file exists 7b10: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
7b20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65   {..          re
7b30: 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
7b40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
7b50: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
7b60: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
7b70: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 7b80: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 7b90: 20 20 20 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79$fileNameOnly
7ba0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  ]]....        if
7bb0: 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24   {[file exists $7bc0: 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 fileName]} then 7bd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 {.. ret 7be0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 urn true.. 7bf0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 7c00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 7c10: 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 NOTE: Build the 7c20: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 fully qualified 7c30: 20 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 file name for t 7c40: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a he SQLite core.. 7c50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li 7c60: 62 72 61 72 79 2e 20 20 49 66 20 74 68 69 73 20 brary. If this 7c70: 66 69 6c 65 20 65 78 69 73 74 73 2c 20 77 65 20 file exists, we 7c80: 73 68 6f 75 6c 64 20 68 61 76 65 20 65 76 65 72 should have ever 7c90: 79 74 68 69 6e 67 20 77 65 0d 0a 20 20 20 20 20 ything we.. 7ca0: 20 23 20 20 20 20 20 20 20 6e 65 65 64 2e 0d 0a # need... 7cb0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 #.. f 7cc0: 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f oreach fileNameO 7cd0: 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65 4c 69 nly [getNativeLi 7ce0: 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73 4f 6e braryFileNamesOn 7cf0: 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 ly] {.. s 7d00: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c et fileName [fil 7d10: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 e nativename [fi 7d20: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f le join$directo
7d30: 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ry \..
7d40: 20 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20    $architecture 7d50: 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d$fileNameOnly]].
7d60: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  ...        if {[
7d70: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 7d80: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 7d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 7da0: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d true.. } 7db0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 .... set 7dc0: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e fileName [file n 7dd0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 ativename [file 7de0: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 join$directory
7df0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24  \..            $7e00: 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 platform$fileNa
7e10: 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20  meOnly]]....
7e20: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78      if {[file ex
7e30: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} 7e40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 7e50: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 7e60: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 7e70: 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d set fileNam 7e80: 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 e [file nativena 7e90: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 me [file join$d
7ea0: 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
7eb0: 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d          $fileNam 7ec0: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20 eOnly]].... 7ed0: 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 if {[file exi 7ee0: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 sts$fileName]}
7ef0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
7f00: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
7f10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
7f20: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
7f30: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e 65 20      # NOTE: One
7f40: 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 20 63  or more native c
7f50: 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 65 64  omponents needed
7f60: 20 62 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e   by System.Data.
7f70: 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 23 20  SQLite..      #
7f80: 20 20 20 20 20 20 61 72 65 20 6d 69 73 73 69 6e        are missin
7f90: 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  g...      #..
7fa0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
7fb0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
7fc0: 72 6f 63 20 69 73 52 65 6c 65 61 73 65 41 76 61  roc isReleaseAva
7fd0: 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 74 6f  ilable { directo
7fe0: 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20  ry {varName ""}
7ff0: 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
8000: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76  string length $v 8010: 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 arName] > 0} the 8020: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 8030: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76 ar 1$varName $v 8040: 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d arName.. }. 8050: 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 8060: 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c [isBuildAvailabl 8070: 65 20 22 22 20 66 61 6c 73 65 20 24 64 69 72 65 e "" false$dire
8080: 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65 5d 0d  ctory $varName]. 8090: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 80a0: 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 69 72 roc joinBuildDir 80b0: 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 65 20 ectory { native 80c0: 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 66 6f path year platfo 80d0: 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e rm configuration 80e0: 20 65 78 74 72 61 20 7d 20 7b 0d 0a 20 20 20 20 extra } {.. 80f0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 8100: 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 61 6e E: Figure out an 8110: 64 20 74 68 65 6e 20 72 65 74 75 72 6e 20 74 68 d then return th 8120: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 e fully qualifie 8130: 64 20 70 61 74 68 20 74 6f 20 74 68 65 20 62 75 d path to the bu 8140: 69 6c 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ild.. # 8150: 20 20 20 64 69 72 65 63 74 6f 72 79 20 62 61 73 directory bas 8160: 65 64 20 6f 6e 20 61 6c 6c 20 74 68 65 20 61 72 ed on all the ar 8170: 67 75 6d 65 6e 74 73 20 70 72 6f 76 69 64 65 64 guments provided 8180: 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d by our caller.. 8190: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 81a0: 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 if {$native} the
81b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
81c0: 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24  urn [file join $81d0: 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20 24 path bin$year $81e0: 70 6c 61 74 66 6f 72 6d 20 24 63 6f 6e 66 69 67 platform$config
81f0: 75 72 61 74 69 6f 6e 20 24 65 78 74 72 61 5d 0d  uration $extra]. 8200: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 8210: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 8220: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 [file join$path
8230: 20 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66   bin $year$conf
8240: 69 67 75 72 61 74 69 6f 6e 20 62 69 6e 20 24 65  iguration bin $e 8250: 78 74 72 61 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a xtra].. }.. 8260: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 8270: 6f 63 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 oc getBuildDirec 8280: 74 6f 72 79 20 7b 20 6d 61 6e 61 67 65 64 4f 6e tory { managedOn 8290: 6c 79 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d ly } {.. #. 82a0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 . # NOTE: S 82b0: 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 76 ee if the "nativ 82c0: 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f e" runtime optio 82d0: 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 20 n has been set. 82e0: 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d If so, use the. 82f0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 8300: 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 irectory for the 8310: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 8320: 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 65 mbly (a.k.a. the 8330: 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 0d native interop. 8340: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 8350: 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 6e ssembly). To en 8360: 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f 6e able this option 8370: 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e 64 via the command 8380: 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d 0a line, enter a.. 8390: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f # co 83a0: 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f mmand similar to 83b0: 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c 6c one of the foll 83c0: 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f 6e owing (all on on 83d0: 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 20 e line):.. 83e0: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 #.. # 83f0: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20 EagleShell.exe 8400: 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 6e -initialize -run 8410: 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 timeOption nativ 8420: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8430: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c -file .\path\ 8440: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 to\all.eagle.. 8450: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 #.. # 8460: 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 To enable t 8470: 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 74 his option via t 8480: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20 he command line 8490: 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 65 prior to the "be 84a0: 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 20 ta 16".. # 84b0: 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66 release of 84c0: 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c Eagle, the foll 84d0: 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75 owing command mu 84e0: 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65 st be used inste 84f0: 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ad.. # 8500: 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 6f (also all on o 8510: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 8520: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 8530: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 8540: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 6f -initialize -po 8550: 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 20 stInitialize.. 8560: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 6f # "o 8570: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 bject invoke Int 8580: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi 8590: 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 74 ve AddRuntimeOpt 85a0: 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 20 ion native".. 85b0: 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 # -fi 85c0: 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c le .\path\to\all 85d0: 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d .eagle.. #. 85e0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 85f0: 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 5f exists ::build_ 8600: 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d directory] && \. 8610: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 8620: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 69 ng length$::bui
8630: 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20  ld_directory] >
8640: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
8650: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
8660: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69  NOTE: The locati
8670: 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20  on of the build
8680: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
8690: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
86a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
86b0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
86c0: 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  t verbatim...
86d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
86e0: 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 5f  return $::build_ 86f0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 8700: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 8710: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8720: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 NOTE: If the "na 8730: 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 tive" runtime op 8740: 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 65 tion is set, the 8750: 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 mixed-mode asse 8760: 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 20 mbly.. # 8770: 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 74 is being t 8780: 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 20 ested. In that 8790: 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 74 case, the path t 87a0: 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 o the build dire 87b0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 23 ctory.. # 87c0: 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e 74 will cont 87d0: 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 6d ain the platform 87e0: 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 68 name and all th 87f0: 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 e binaries under 8800: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 8810: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 should be 8820: 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 74 present in that 8830: 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 20 directory. If 8840: 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 6e the "native" run 8850: 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 20 time.. # 8860: 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 20 option is 8870: 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 69 not set, the bui 8880: 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 6c ld directory wil 8890: 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 20 l be considered 88a0: 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 to be.. # 88b0: 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 6d "platform 88c0: 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 20 -neutral", with 88d0: 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 the notable exce 88e0: 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 74 ption of any nat 88f0: 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ive.. # 8900: 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 65 assembly (e 8910: 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 65 .g. "SQLite.Inte 8920: 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 64 rop.dll") copied 8930: 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 68 there during th 8940: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 8950: 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 build process 8960: 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 65 itself. If the 8970: 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 73 build process s 8980: 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 0d omehow does not. 8990: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 89a0: 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 copy the native 89b0: 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 68 assembly for th 89c0: 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f 73 is platform, mos 89d0: 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d 0a t of the tests.. 89e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 89f0: 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 6c in the suite wil 8a00: 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 70 l simply be skip 8a10: 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 20 ped. Generally 8a20: 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 0d speaking, there. 8a30: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8a40: 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 6f are two ways to 8a50: 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 72 build the binar 8a60: 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 69 ies when prepari 8a70: 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a 20 ng to run the.. 8a80: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 8a90: 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 20 est suite:.. 8aa0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 8ab0: 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 20 1. Build 8ac0: 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 6e the separate man 8ad0: 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 20 aged and native 8ae0: 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e 67 assemblies using 8af0: 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 some.. # 8b00: 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e comman 8b10: 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a ds similar to:.. 8b20: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8b30: 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 # bu 8b40: 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 ild.bat${Config
8b50: 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64 4f  uration}ManagedO
8b60: 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d  nly ${Platform}. 8b70: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8b80: 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b build.bat${
8b90: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e 61  Configuration}Na
8ba0: 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74 66  tiveOnly ${Platf 8bb0: 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d orm}.. #. 8bc0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8bd0: 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 Where${Conf
8be0: 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69  iguration} is ei
8bf0: 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20  ther "Debug" or
8c00: 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20  "Release" and..
8c10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20         #
8c20: 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73    ${Platform} is 8c30: 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 either "Win32" 8c40: 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 20 or "x64"... 8c50: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8c60: 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 74 2. Build t 8c70: 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 he mixed-mode as 8c80: 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 63 sembly using a c 8c90: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 ommand similar t 8ca0: 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 o:.. #.. 8cb0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 8cc0: 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f build.bat${Co
8cd0: 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b 50  nfiguration} ${P 8ce0: 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 latform}.. 8cf0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 20 #.. # 8d00: 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24 7b Where${
8d10: 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 69  Configuration} i
8d20: 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67 22  s either "Debug"
8d30: 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61 6e   or "Release" an
8d40: 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
8d50: 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d        ${Platform 8d60: 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69 6e } is either "Win 8d70: 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 49 32" or "x64". I 8d80: 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 69 f this command i 8d90: 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 s.. # 8da0: 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 69 used, vari 8db0: 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20 72 ous tests that r 8dc0: 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 6e equire supplemen 8dd0: 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 20 tary managed.. 8de0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 8df0: 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e 67 assemblies (e.g 8e00: 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 73 . LINQ) may be s 8e10: 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 68 kipped unless th 8e20: 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 20 ose binaries.. 8e30: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 8e40: 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 6c are subsequentl 8e50: 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 68 y copied into th 8e60: 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 74 e correct direct 8e70: 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 20 ory (i.e. by.. 8e80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 8e90: 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 29 "test_all.bat") 8ea0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 8eb0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f # No 8ec0: 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 74 te that all of t 8ed0: 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e 64 he build command 8ee0: 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 66 s above will def 8ef0: 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a 20 ault to using.. 8f00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 8f10: 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 6f he latest versio 8f20: 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 61 n of MSBuild ava 8f30: 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 22 ilable and the " 8f40: 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d 0a test_year" may.. 8f50: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 8f60: 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 73 need to be adjus 8f70: 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 20 ted accordingly 8f80: 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e 20 to actually run 8f90: 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. 8fa0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 8fb0: 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 6f Refer to the co 8fc0: 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 75 mments in [getBu 8fd0: 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f 72 ildYear] for mor 8fe0: 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 6e e information on 8ff0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 9000: 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 69 how to set thi 9010: 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 20 s variable... 9020: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 9030: 73 65 74 20 6e 61 74 69 76 65 20 5b 65 78 70 72 set native [expr 9040: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 21 24 {.. !$
9050: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 26 26 20 28  managedOnly && (
9060: 5b 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 5d  [getBuildNative]
9070: 20 7c 7c 20 5b 68 61 73 52 75 6e 74 69 6d 65 4f   || [hasRuntimeO
9080: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 29 0d 0a  ption native])..
9090: 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20          }]....
90a0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6a 6f        return [jo
90b0: 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79  inBuildDirectory
90c0: 20 24 6e 61 74 69 76 65 20 5b 67 65 74 42 75 69   $native [getBui 90d0: 6c 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d ldBaseDirectory] 90e0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 90f0: 5b 65 78 70 72 20 7b 24 6d 61 6e 61 67 65 64 4f [expr {$managedO
9100: 6e 6c 79 20 3f 20 5b 67 65 74 42 75 69 6c 64 59  nly ? [getBuildY
9110: 65 61 72 5d 20 3a 20 5b 67 65 74 42 75 69 6c 64  ear] : [getBuild
9120: 4e 61 74 69 76 65 59 65 61 72 5d 7d 5d 20 5c 0d  NativeYear]}] \.
9130: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
9140: 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24  tBuildPlatform $9150: 6e 61 74 69 76 65 5d 20 5b 61 70 70 65 6e 64 41 native] [appendA 9160: 72 67 73 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e rgs [getBuildCon 9170: 66 69 67 75 72 61 74 69 6f 6e 5d 20 5c 0d 0a 20 figuration] \.. 9180: 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 [expr 9190: 20 7b 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 3f {$managedOnly ?
91a0: 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67   [getBuildConfig
91b0: 75 72 61 74 69 6f 6e 53 75 66 66 69 78 5d 20 3a  urationSuffix] :
91c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
91d0: 5b 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 43  [getBuildNativeC
91e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66  onfigurationSuff
91f0: 69 78 5d 7d 5d 5d 20 5b 65 78 70 72 20 7b 24 6d  ix]}]] [expr {$m 9200: 61 6e 61 67 65 64 4f 6e 6c 79 20 3f 20 5c 0d 0a anagedOnly ? \.. 9210: 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 9220: 42 75 69 6c 64 45 78 74 72 61 5d 20 3a 20 22 22 BuildExtra] : "" 9230: 7d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 }]].. }.. 9240: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9250: 20 67 65 74 52 65 6c 65 61 73 65 56 65 72 73 69 getReleaseVersi 9260: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 on {} {.. # 9270: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 9280: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 72 Figure out the r 9290: 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e 20 66 elease version f 92a0: 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 65 20 or use with the 92b0: 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d build directory. 92c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 . # w 92d0: 68 65 6e 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 hen checking for 92e0: 20 61 76 61 69 6c 61 62 6c 65 20 72 65 6c 65 61 available relea 92f0: 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ses... #.. 9300: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 9310: 78 69 73 74 73 20 3a 3a 72 65 6c 65 61 73 65 5f xists ::release_ 9320: 76 65 72 73 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 version] && \.. 9330: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 9340: 20 6c 65 6e 67 74 68 20 24 3a 3a 72 65 6c 65 61 length$::relea
9350: 73 65 5f 76 65 72 73 69 6f 6e 5d 20 3e 20 30 7d  se_version] > 0}
9360: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
9370: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
9380: 54 45 3a 20 54 68 65 20 72 65 6c 65 61 73 65 20  TE: The release
9390: 76 65 72 73 69 6f 6e 20 68 61 73 20 62 65 65 6e  version has been
93a0: 20 6f 76 65 72 72 69 64 64 65 6e 3b 20 74 68 65   overridden; the
93b0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 0d 0a  refore, use it..
93c0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
93d0: 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20  verbatim...
93e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
93f0: 74 75 72 6e 20 24 3a 3a 72 65 6c 65 61 73 65 5f  turn $::release_ 9400: 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 7d version.. } 9410: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 9420: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 9430: 54 45 3a 20 4e 6f 20 72 65 6c 65 61 73 65 20 76 TE: No release v 9440: 65 72 73 69 6f 6e 20 69 73 20 61 76 61 69 6c 61 ersion is availa 9450: 62 6c 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 ble, return an e 9460: 6d 70 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 mpty string... 9470: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 49 74 # It 9480: 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f is important to 9490: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 94a0: 20 73 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 string here bec 94b0: 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 ause the.. 94c0: 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 # result 94d0: 20 6f 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 of this procedu 94e0: 72 65 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 re may be used w 94f0: 69 74 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e ith [file join]. 9500: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 9510: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a return "".. 9520: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 9530: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 ... proc getB 9540: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66 uildFileName { f 9550: 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f ileName managedO 9560: 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 nly {platform "" 9570: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 9580: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 9590: 74 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 turns the specif 95a0: 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 ied file name as 95b0: 20 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 if it were loca 95c0: 74 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 ted in the.. 95d0: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 # build 95e0: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 directory, disca 95f0: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 rding any direct 9600: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 ory information 9610: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 present.. # 9620: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 in the fi 9630: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 le name as provi 9640: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 9650: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 9660: 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 set result [f 9670: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c ile nativename \ 9680: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c .. [fil 9690: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 e join [getBuild 96a0: 44 69 72 65 63 74 6f 72 79 20 24 6d 61 6e 61 67 Directory$manag
96b0: 65 64 4f 6e 6c 79 5d 20 24 70 6c 61 74 66 6f 72  edOnly] $platfor 96c0: 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b m \.. [ 96d0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e file tail$fileN
96e0: 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  ame]]]....
96f0: 23 0d 0a 20 20 20 20 20 20 23 20 48 41 43 4b 3a  #..      # HACK:
9700: 20 57 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e   When running on
9710: 20 57 6f 57 36 34 2c 20 61 73 73 75 6d 65 20 74   WoW64, assume t
9720: 68 65 20 74 65 73 74 20 65 78 65 63 75 74 61 62  he test executab
9730: 6c 65 73 20 61 72 65 20 70 72 65 73 65 6e 74 0d  les are present.
9740: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77  .      #       w
9750: 69 74 68 20 74 68 65 20 22 33 32 22 20 73 75 66  ith the "32" suf
9760: 66 69 78 20 6f 6e 20 74 68 65 6d 2e 0d 0a 20 20  fix on them...
9770: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
9780: 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 6f 57 36 34  {[isRunningWoW64
9790: 5d 20 26 26 20 5b 66 69 6c 65 20 65 78 74 65 6e  ] && [file exten
97a0: 73 69 6f 6e 20 24 72 65 73 75 6c 74 5d 20 65 71  sion $result] eq 97b0: 20 22 2e 65 78 65 22 7d 20 74 68 65 6e 20 7b 0d ".exe"} then {. 97c0: 0a 20 20 20 20 20 20 20 20 73 65 74 20 72 65 73 . set res 97d0: 75 6c 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ult [appendArgs 97e0: 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 24 [file rootname$
97f0: 72 65 73 75 6c 74 5d 20 33 32 2e 65 78 65 5d 0d  result] 32.exe].
9800: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
9810: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74    return $result 9820: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 9830: 70 72 6f 63 20 67 65 74 45 78 74 65 72 6e 61 6c proc getExternal 9840: 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a Directory {} {.. 9850: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 9860: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 9870: 65 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 edure returns th 9880: 65 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 e directory wher 9890: 65 20 74 68 65 20 65 78 74 65 72 6e 61 6c 20 62 e the external b 98a0: 69 6e 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 inary.. # 98b0: 20 20 20 20 20 66 69 6c 65 73 20 61 72 65 20 6c files are l 98c0: 6f 63 61 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 ocated... # 98d0: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b .. return [ 98e0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 file nativename 98f0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 \.. [fi 9900: 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 le dirname [file 9910: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 dirname [file d 9920: 69 72 6e 61 6d 65 20 5b 69 6e 66 6f 20 62 69 6e irname [info bin 9930: 61 72 79 5d 5d 5d 5d 5d 0d 0a 20 20 20 20 7d 0d ary]]]]].. }. 9940: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 9950: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 20 BinaryDirectory 9960: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 9970: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 # NOTE: Thi 9980: 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 s procedure retu 9990: 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 rns the director 99a0: 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 y where the test 99b0: 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 application.. 99c0: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 99d0: 6c 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 lf (i.e. the Eag 99e0: 6c 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 le shell) is loc 99f0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c ated. This will 9a00: 20 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 be used as.. 9a10: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 64 # the d 9a20: 65 73 74 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 estination for t 9a30: 68 65 20 63 6f 70 69 65 64 20 53 79 73 74 65 6d he copied System 9a40: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 .Data.SQLite nat 9a50: 69 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 ive and.. # 9a60: 20 20 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 managed a 9a70: 73 73 65 6d 62 6c 69 65 73 20 28 69 2e 65 2e 20 ssemblies (i.e. 9a80: 62 65 63 61 75 73 65 20 74 68 69 73 20 69 73 20 because this is 9a90: 6f 6e 65 20 6f 66 20 74 68 65 20 66 65 77 20 70 one of the few p 9aa0: 6c 61 63 65 73 0d 0a 20 20 20 20 20 20 23 20 20 laces.. # 9ab0: 20 20 20 20 20 77 68 65 72 65 20 74 68 65 20 43 where the C 9ac0: 4c 52 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 LR will actually 9ad0: 20 66 69 6e 64 20 61 6e 64 20 6c 6f 61 64 20 74 find and load t 9ae0: 68 65 6d 20 70 72 6f 70 65 72 6c 79 29 2e 0d 0a hem properly)... 9af0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 9b00: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 9b10: 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65 63 74 6f ::binary_directo 9b20: 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 ry] && \.. 9b30: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 [string leng 9b40: 74 68 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 th$::binary_dir
9b50: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
9b60: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
9b70: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
9b80: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
9b90: 74 68 65 20 62 69 6e 61 72 79 20 64 69 72 65 63  the binary direc
9ba0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
9bb0: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
9bc0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
9bd0: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72  fore, use it ver
9be0: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20  batim...
9bf0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
9c00: 6e 20 24 3a 3a 62 69 6e 61 72 79 5f 64 69 72 65  n $::binary_dire 9c10: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 ctory.. } e 9c20: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 lse {.. r 9c30: 65 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 eturn [info bina 9c40: 72 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 ry].. }.. 9c50: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 9c60: 20 67 65 74 45 78 74 65 72 6e 61 6c 46 69 6c 65 getExternalFile 9c70: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 Name { fileName 9c80: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 9c90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 9ca0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 9cb0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 9cc0: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 9cd0: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 9ce0: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 9cf0: 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 y containing the 9d00: 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69 external binari 9d10: 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 es... #.. 9d20: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 9d30: 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c nativename [fil 9d40: 65 20 6a 6f 69 6e 20 5b 67 65 74 45 78 74 65 72 e join [getExter 9d50: 6e 61 6c 44 69 72 65 63 74 6f 72 79 5d 20 24 66 nalDirectory]$f
9d60: 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 7d  ileName]]..    }
9d70: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
9d80: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
9d90: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
9da0: 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20  form ""} } {..
9db0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
9dc0: 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65  OTE: Returns the
9dd0: 20 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20   specified file
9de0: 6e 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65  name as if it we
9df0: 72 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68  re located in th
9e00: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
9e10: 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72   binary director
9e20: 79 2c 20 64 69 73 63 61 72 64 69 6e 67 20 61 6e  y, discarding an
9e30: 79 20 64 69 72 65 63 74 6f 72 79 20 69 6e 66 6f  y directory info
9e40: 72 6d 61 74 69 6f 6e 20 70 72 65 73 65 6e 74 0d  rmation present.
9e50: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
9e60: 6e 20 74 68 65 20 66 69 6c 65 20 6e 61 6d 65 20  n the file name
9e70: 61 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f  as provided by o
9e80: 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20  ur caller...
9e90: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
9ea0: 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  n [file nativena
9eb0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
9ec0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42  [file join [getB
9ed0: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20  inaryDirectory]
9ee0: 24 70 6c 61 74 66 6f 72 6d 20 5b 66 69 6c 65 20  $platform [file 9ef0: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
9f00: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
9f10: 20 70 72 6f 63 20 67 65 74 43 6f 72 65 42 69 6e   proc getCoreBin
9f20: 61 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 7b 70  aryFileName { {p
9f30: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 73 74 61  latform ""} {sta
9f40: 6e 64 61 72 64 20 22 22 7d 20 7d 20 7b 0d 0a 20  ndard ""} } {..
9f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
9f60: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68  NOTE: Returns th
9f70: 65 20 66 75 6c 6c 20 70 61 74 68 20 66 6f 72 20  e full path for
9f80: 74 68 65 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e  the file contain
9f90: 69 6e 67 20 74 68 65 20 53 51 4c 69 74 65 20 63  ing the SQLite c
9fa0: 6f 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ore..      #
9fb0: 20 20 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72     native librar
9fc0: 79 20 63 6f 64 65 20 66 6f 72 20 74 68 69 73 20  y code for this
9fd0: 70 6c 61 74 66 6f 72 6d 2e 20 20 46 69 72 73 74  platform.  First
9fe0: 2c 20 63 68 65 63 6b 20 61 6e 64 20 73 65 65 20  , check and see
9ff0: 69 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  if..      #
a000: 20 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72    the SQLite cor
a010: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
a020: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65   has already bee
a030: 6e 20 6c 6f 61 64 65 64 2e 20 20 4e 65 78 74 2c  n loaded.  Next,
a040: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
a050: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 77 68 61 74  fallback to what
a060: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 73   the full path s
a070: 68 6f 75 6c 64 20 62 65 2c 20 62 61 73 65 64 20  hould be, based
a080: 6f 6e 20 77 68 65 74 68 65 72 20 74 68 65 0d 0a  on whether the..
a090: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69        #       mi
a0a0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
a0b0: 79 20 69 73 20 62 65 69 6e 67 20 75 73 65 64 20  y is being used
a0c0: 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  and the name of
a0d0: 74 68 65 20 63 75 72 72 65 6e 74 0d 0a 20 20 20  the current..
a0e0: 20 20 20 23 20 20 20 20 20 20 20 70 6c 61 74 66     #       platf
a0f0: 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  orm...      #..
a100: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
a110: 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63  {..        objec
a120: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
a130: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
a140: 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
a150: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
a160: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
a170: 20 5f 53 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f   _SQLiteNativeMo
a180: 64 75 6c 65 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  duleFileName..
a190: 20 20 20 20 7d 20 66 69 6c 65 4e 61 6d 65 5d 20      } fileName]
a1a0: 3d 3d 20 30 20 26 26 20 5b 73 74 72 69 6e 67 20  == 0 && [string
a1b0: 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65  length $fileName a1c0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. a1d0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. a1e0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 53 51 # NOTE: The SQ a1f0: 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69 76 65 Lite core native a200: 20 6c 69 62 72 61 72 79 20 68 61 73 20 61 6c 72 library has alr a210: 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64 65 64 eady been loaded a220: 20 76 69 61 0d 0a 20 20 20 20 20 20 20 20 23 20 via.. # a230: 20 20 20 20 20 20 74 68 65 20 6e 61 74 69 76 65 the native a240: 20 6c 69 62 72 61 72 79 20 70 72 65 2d 6c 6f 61 library pre-loa a250: 64 65 72 2e 20 20 52 65 74 75 72 6e 20 74 68 61 der. Return tha a260: 74 20 66 69 6c 65 20 6e 61 6d 65 20 6e 6f 77 2e t file name now. a270: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a280: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c return$fil
a290: 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  eName..      }..
a2a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
a2b0: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
a2c0: 22 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65  "native" runtime
a2d0: 20 6f 70 74 69 6f 6e 20 68 61 73 20 62 65 65 6e   option has been
a2e0: 20 73 65 74 2c 20 61 6c 77 61 79 73 20 72 65 74   set, always ret
a2f0: 75 72 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  urn the..      #
a300: 20 20 20 20 20 20 20 66 69 6c 65 20 6e 61 6d 65         file name
a310: 20 66 6f 72 20 74 68 65 20 6d 69 78 65 64 2d 6d   for the mixed-m
a320: 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
a330: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
a340: 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74   {[hasRuntimeOpt
a350: 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65  ion native]} the
a360: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
a370: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
a380: 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78 65 64  Return the mixed
a390: 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 66  -mode assembly f
a3a0: 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20  ile name...
a3b0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
a3c0: 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76  turn [file nativ
a3d0: 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  ename \..
a3e0: 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20       [file join
a3f0: 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74  [getBinaryDirect
a400: 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53  ory] $platform S a410: 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit a420: 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d e.dll]].. } a430: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. a440: 20 20 20 23 20 4e 4f 54 45 3a 20 41 72 65 20 77 # NOTE: Are w a450: 65 20 61 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 e attempting to a460: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 automatically de a470: 74 65 63 74 20 77 68 65 74 68 65 72 20 6f 72 20 tect whether or a480: 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 20 20 23 not the.. # a490: 20 20 20 20 20 20 20 69 6e 74 65 72 6f 70 20 61 interop a a4a0: 73 73 65 6d 62 6c 79 20 73 68 6f 75 6c 64 20 62 ssembly should b a4b0: 65 20 75 73 65 64 3f 0d 0a 20 20 20 20 20 20 23 e used?.. # a4c0: 0d 0a 20 20 20 20 20 20 73 65 74 20 61 75 74 6f .. set auto a4d0: 6d 61 74 69 63 20 5b 65 78 70 72 20 7b 5b 73 74 matic [expr {[st a4e0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 74 61 ring length$sta
a4f0: 6e 64 61 72 64 5d 20 3d 3d 20 30 7d 5d 0d 0a 0d  ndard] == 0}]...
a500: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
a510: 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 69  # NOTE: First, i
a520: 6e 20 65 69 74 68 65 72 20 22 61 75 74 6f 6d 61  n either "automa
a530: 74 69 63 22 20 6f 72 20 22 6e 6f 6e 2d 73 74 61  tic" or "non-sta
a540: 6e 64 61 72 64 22 20 6d 6f 64 65 73 2c 20 61 74  ndard" modes, at
a550: 74 65 6d 70 74 0d 0a 20 20 20 20 20 20 23 20 20  tempt..      #
a560: 20 20 20 20 20 74 6f 20 66 69 6e 64 20 74 68 65       to find the
a570: 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74   native-only int
a580: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  erop assembly...
a590: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
a5a0: 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c  f {$automatic || a5b0: 20 21 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 !$standard} the
a5c0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
a5d0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
a5e0: 41 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72  Attempt to deter
a5f0: 6d 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d  mine the native-
a600: 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 20 61 73 73  only interop ass
a610: 65 6d 62 6c 79 20 66 69 6c 65 0d 0a 20 20 20 20  embly file..
a620: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65      #       name
a630: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
a640: 72 6d 20 61 6e 64 20 74 68 65 6e 20 72 65 74 75  rm and then retu
a650: 72 6e 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  rn it...
a660: 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61  #..        forea
a670: 63 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20  ch fileNameOnly
a680: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
a690: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
a6a0: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ] {..          s
a6b0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
a6c0: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a  e nativename \..
a6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66                [f
a6e0: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
a6f0: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p a700: 6c 61 74 66 6f 72 6d 20 24 66 69 6c 65 4e 61 6d latform$fileNam
a710: 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20 20 20 20 20  eOnly]]....
a720: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
a730: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] a740: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. a750: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 return$fi
a760: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
a770: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
a780: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
a790: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
a7a0: 3a 20 54 68 65 6e 2c 20 69 6e 20 65 69 74 68 65  : Then, in eithe
a7b0: 72 20 22 61 75 74 6f 6d 61 74 69 63 22 20 6f 72  r "automatic" or
a7c0: 20 22 73 74 61 6e 64 61 72 64 22 20 6d 6f 64 65   "standard" mode
a7d0: 73 2c 20 61 74 74 65 6d 70 74 20 74 6f 0d 0a 20  s, attempt to..
a7e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6e       #       fin
a7f0: 64 20 74 68 65 20 73 74 61 6e 64 61 72 64 20 53  d the standard S
a800: 51 4c 69 74 65 20 6c 69 62 72 61 72 79 2e 0d 0a  QLite library...
a810: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
a820: 66 20 7b 24 61 75 74 6f 6d 61 74 69 63 20 7c 7c  f {$automatic || a830: 20 24 73 74 61 6e 64 61 72 64 7d 20 74 68 65 6e$standard} then
a840: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
a850: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
a860: 74 74 65 6d 70 74 20 74 6f 20 64 65 74 65 72 6d  ttempt to determ
a870: 69 6e 65 20 74 68 65 20 6e 61 74 69 76 65 2d 6f  ine the native-o
a880: 6e 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c  nly standard SQL
a890: 69 74 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20  ite library..
a8a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
a8b0: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73 20  e name for this
a8c0: 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 74 68 65  platform and the
a8d0: 6e 20 72 65 74 75 72 6e 20 69 74 2e 0d 0a 20 20  n return it...
a8e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
a8f0: 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
a900: 65 4f 6e 6c 79 20 5b 67 65 74 4e 61 74 69 76 65  eOnly [getNative
a910: 4c 69 62 72 61 72 79 46 69 6c 65 4e 61 6d 65 73  LibraryFileNames
a920: 4f 6e 6c 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20  Only] {..
a930: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
a940: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
a950: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
a960: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
a970: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
a980: 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 66 69 6c  ] $platform$fil
a990: 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 0d 0a 0d 0a 20  eNameOnly]]....
a9a0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
a9b0: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e  le exists $fileN a9c0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. a9d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return a9e0: 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20$fileName..
a9f0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
aa00: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
aa10: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
aa20: 4e 4f 54 45 3a 20 57 61 73 20 74 68 65 20 6d 61  NOTE: Was the ma
aa30: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20 63  naged assembly c
aa40: 6f 6d 70 69 6c 65 64 20 65 78 70 65 63 74 69 6e  ompiled expectin
aa50: 67 20 74 6f 20 64 65 61 6c 20 77 69 74 68 20 74  g to deal with t
aa60: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
aa70: 20 20 73 74 61 6e 64 61 72 64 20 63 6f 72 65 20    standard core
aa80: 6c 69 62 72 61 72 79 3f 0d 0a 20 20 20 20 20 20  library?..
aa90: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61  #..      if {[ha
aaa0: 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f  veSQLiteDefineCo
aab0: 6e 73 74 61 6e 74 20 53 51 4c 49 54 45 5f 53 54  nstant SQLITE_ST
aac0: 41 4e 44 41 52 44 5d 7d 20 74 68 65 6e 20 7b 0d  ANDARD]} then {.
aad0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
aae0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 6c 6c      # NOTE: Fall
aaf0: 62 61 63 6b 20 74 6f 20 72 65 74 75 72 6e 69 6e  back to returnin
ab00: 67 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c  g the native-onl
ab10: 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  y standard SQLit
ab20: 65 20 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20  e library..
ab30: 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65 20     #       file
ab40: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 70 6c 61  name for the pla
ab50: 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 20 20  tform...
ab60: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66  #..        set f
ab70: 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 5b 67 65  ileNamesOnly [ge
ab80: 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
ab90: 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 0d 0a  leNamesOnly]....
aba0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65          if {[lle
abb0: 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 73 4f  ngth $fileNamesO abc0: 6e 6c 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 nly] == 0} then abd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 {.. ret abe0: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 20 20 urn "".. abf0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 }.... ret ac00: 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 urn [file native ac10: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join ac20: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ ac30: 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f getBinaryDirecto ac40: 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 5b 6c ry]$platform [l
ac50: 69 6e 64 65 78 20 24 66 69 6c 65 4e 61 6d 65 73  index $fileNames ac60: 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a 20 20 20 20 20 Only 0]]].. ac70: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. ac80: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # ac90: 4e 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 NOTE: Fallback t aca0: 6f 20 72 65 74 75 72 6e 69 6e 67 20 74 68 65 20 o returning the acb0: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 native-only inte acc0: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c rop assembly fil acd0: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # ace0: 20 20 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 name for the acf0: 70 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 platform... ad00: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 #.. se ad10: 74 20 66 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 20 t fileNamesOnly ad20: 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d [getInteropAssem ad30: 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 blyFileNamesOnly ad40: 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 ].... if ad50: 7b 5b 6c 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e {[llength$fileN
ad60: 61 6d 65 73 4f 6e 6c 79 5d 20 3d 3d 20 30 7d 20  amesOnly] == 0}
ad70: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ad80: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
ad90: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
ada0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
adb0: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
adc0: 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
add0: 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 44 69      [getBinaryDi
ade0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f  rectory] $platfo adf0: 72 6d 20 5b 6c 69 6e 64 65 78 20 24 66 69 6c 65 rm [lindex$file
ae00: 4e 61 6d 65 73 4f 6e 6c 79 20 30 5d 5d 5d 0d 0a  NamesOnly 0]]]..
ae10: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ae20: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
ae30: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b  ommonDirectory {
ae40: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
ae50: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
ae60: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
ae70: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ns the directory
ae80: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20   where the test
ae90: 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23  scripts..      #
aea0: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
aeb0: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
aec0: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
aed0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67   returns the Eag
aee0: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
aef0: 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f    binary directo
af00: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
af10: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
af20: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ists ::common_di
af30: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
af40: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
af50: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f   length $::commo af60: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 n_directory] > 0 af70: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. af80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N af90: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio afa0: 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 n of the common afb0: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be afc0: 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 en set;.. afd0: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo afe0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 re, use it... aff0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b000: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e return$::common
b010: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
b020: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
b030: 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f  o exists ::vendo
b040: 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  r_directory] &&
b050: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
b060: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76  ring length $::v b070: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d endor_directory] b080: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. b090: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. b0a0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc b0b0: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e ation of the ven b0c0: 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 dor directory ha b0d0: 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 s been set;.. b0e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the b0f0: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. b100: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. b110: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 return$::ve
b120: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a  ndor_directory..
b130: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
b140: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
b150: 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c  cl_library] && \
b160: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
b170: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63  ing length $::tc b180: 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 l_library] > 0 & b190: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ b1a0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory b1b0: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d$::tcl_library]
b1c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
b1d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
b1e0: 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c  OTE: The variabl
b1f0: 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74  e with the locat
b200: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70  ion of the scrip
b210: 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20  t library is..
b220: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
b230: 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f  t and appears to
b240: 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63   be a real direc
b250: 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65  tory (i.e. not e
b260: 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20  mbedded..
b270: 20 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20   #       within
b280: 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f  a file); therefo
b290: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
b2a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
b2b0: 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69  return $::tcl_li b2c0: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 brary.. } e b2d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # b2e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE b2f0: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 : Fallback to th b300: 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 e directory cont b310: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 aining the execu b320: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 table... b330: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur b340: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d n [info binary]. b350: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. b360: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get b370: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 DatabaseDirector b380: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. b390: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T b3a0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re b3b0: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct b3c0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te b3d0: 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 st databases.. b3e0: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou b3f0: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. b400: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this b410: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t b420: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. b430: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director b440: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for b450: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... b460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if b470: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : b480: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct b490: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. b4a0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len b4b0: 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f gth$::database_
b4c0: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
b4d0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
b4e0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
b4f0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
b500: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
b510: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
b520: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
b530: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
b540: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
b550: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
b560: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: b570: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct b580: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els b590: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist b5a0: 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 s ::scratch_dire b5b0: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. b5c0: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l b5d0: 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 ength$::scratch
b5e0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
b5f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
b600: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
b610: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
b620: 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20   of the scratch
b630: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
b640: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
b650: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
b660: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
b670: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
b680: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: b690: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo b6a0: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else b6b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu b6c0: 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 rn [getTemporary b6d0: 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a Path].. }.. b6e0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr b6f0: 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 oc getTemporaryD b700: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. b710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # b720: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce b730: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the b740: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where b750: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 the temporary f b760: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 iles.. # b770: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo b780: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau b790: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us b7a0: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary b7b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # b7c0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config b7d0: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy b7e0: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. b7f0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info b800: 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 exists ::tempora b810: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ry_directory] && b820: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s b830: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
b840: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
b850: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
b860: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b870: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
b880: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
b890: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
b8a0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
b8b0: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
b8c0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
b8d0: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
b8e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
b8f0: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70    return $::temp b900: 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d orary_directory. b910: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif b920: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: b930: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director b940: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. b950: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt b960: 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 h$::scratch_dir
b970: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
b980: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
b990: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
b9a0: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
b9b0: 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65  the scratch dire
b9c0: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f  ctory has been o
b9d0: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20  verridden;..
b9e0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
b9f0: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
ba00: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
ba10: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72     return $::scr ba20: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a atch_directory.. ba30: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. ba40: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ ba50: 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 getTemporaryPath ba60: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. ba70: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g ba80: 65 74 45 78 65 63 75 74 65 4f 6e 53 65 74 75 70 etExecuteOnSetup ba90: 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 {} {.. if baa0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: bab0: 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65 74 75 70 execute_on_setup bac0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. bad0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length bae0: 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73$::execute_on_s
baf0: 65 74 75 70 5d 20 3e 20 30 7d 20 74 68 65 6e 20  etup] > 0} then
bb00: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
bb10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
bb20: 74 75 72 6e 20 74 68 65 20 63 6f 6e 66 69 67 75  turn the configu
bb30: 72 65 64 20 53 51 4c 20 74 6f 20 65 78 65 63 75  red SQL to execu
bb40: 74 65 20 64 75 72 69 6e 67 20 74 68 65 20 63 6f  te during the co
bb50: 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20  nnection..
bb60: 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70 20    #       setup
bb70: 70 72 6f 63 65 64 75 72 65 20 28 69 2e 65 2e 20  procedure (i.e.
bb80: 66 6f 72 20 65 76 65 72 79 20 74 65 73 74 20 64  for every test d
bb90: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
bba0: 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  on)...        #.
bbb0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
bbc0: 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65  $::execute_on_se bbd0: 74 75 70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 tup.. } els bbe0: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a e {.. #.. bbf0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: bc00: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 65 72 By default, ther bc10: 65 20 69 73 20 6e 6f 20 53 51 4c 20 74 6f 20 65 e is no SQL to e bc20: 78 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 xecute during th bc30: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 e connection.. bc40: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 # se bc50: 74 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 tup procedure (i bc60: 2e 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 .e. for every te bc70: 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e st database conn bc80: 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 ection)... bc90: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret bca0: 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d 0d urn "".. }. bcb0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p bcc0: 72 6f 63 20 67 65 74 53 74 72 69 6e 67 4d 61 70 roc getStringMap bcd0: 46 6f 72 54 63 6c 45 73 63 61 70 65 20 7b 7d 20 ForTclEscape {} bce0: 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 {.. return bcf0: 5b 6c 69 73 74 20 5c 5c 20 5c 5c 5c 5c 20 5c 5b [list \\ \\\\ $bd00: 20 5c 5c 5c 5b 20 5c 5d 20 5c 5c 5c 5d 20 5c 24 \\\[$ \\\] \$
bd10: 20 5c 5c 5c 24 5d 0d 0a 20 20 20 20 7d 0d 0a 0c   \\\$].. }... bd20: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 54 65 .. proc getTe bd30: 73 74 4f 76 65 72 72 69 64 65 73 50 72 65 61 6d stOverridesPream bd40: 62 6c 65 20 7b 20 7b 65 78 74 72 61 56 61 72 4e ble { {extraVarN bd50: 61 6d 65 73 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 ames ""} } {.. bd60: 20 20 20 20 73 65 74 20 76 61 72 4e 61 6d 65 73 set varNames bd70: 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... bd80: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE bd90: 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 : If available, bda0: 73 74 61 72 74 20 77 69 74 68 20 74 68 65 20 6d start with the m bdb0: 61 73 74 65 72 20 6c 69 73 74 20 6f 66 20 74 65 aster list of te bdc0: 73 74 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 st override.. bdd0: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia bde0: 62 6c 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a bles... #.. bdf0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info be00: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6f 76 exists ::test_ov be10: 65 72 72 69 64 65 73 5d 20 26 26 20 5c 0d 0a 20 errides] && \.. be20: 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 [llengt be30: 68 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 h$::test_overri
be40: 64 65 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  des] > 0} then {
be50: 0d 0a 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c  ..        eval l
be60: 61 70 70 65 6e 64 20 76 61 72 4e 61 6d 65 73 20  append varNames
be70: 24 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65  $::test_override be80: 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 s.. }.... be90: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N bea0: 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74 65 OTE: If requeste beb0: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c d by our caller, bec0: 20 61 64 64 20 61 6e 79 20 61 64 64 69 74 69 6f add any additio bed0: 6e 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 nal variable.. bee0: 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name bef0: 73 20 74 6f 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a s to copy now... bf00: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i bf10: 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 65 78 74 f {[llength$ext
bf20: 72 61 56 61 72 4e 61 6d 65 73 5d 20 3e 20 30 7d  raVarNames] > 0}
bf30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
bf40: 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20 76 61   eval lappend va
bf50: 72 4e 61 6d 65 73 20 24 65 78 74 72 61 56 61 72  rNames $extraVar bf60: 4e 61 6d 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a Names.. }.. bf70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. bf80: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 # NOTE: Build t bf90: 68 65 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 he script fragme bfa0: 6e 74 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 nt to be returne bfb0: 64 20 62 79 20 70 72 6f 63 65 73 73 69 6e 67 20 d by processing bfc0: 65 61 63 68 0d 0a 20 20 20 20 20 20 23 20 20 20 each.. # bfd0: 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d variable nam bfe0: 65 20 61 6e 64 20 61 64 64 69 6e 67 20 74 68 65 e and adding the bff0: 20 6e 65 63 65 63 65 73 73 61 72 79 20 73 63 72 nececessary scr c000: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 20 66 6f ipt fragments fo c010: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # c020: 20 65 61 63 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 each one... c030: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 72 #.. set r c040: 65 73 75 6c 74 20 22 22 0d 0a 0d 0a 20 20 20 20 esult "".... c050: 20 20 66 6f 72 65 61 63 68 20 76 61 72 4e 61 6d foreach varNam c060: 65 20 24 76 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 e$varNames {..
c070: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
c080: 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
c090: 74 68 65 20 71 75 61 6c 69 66 69 65 64 20 67 6c  the qualified gl
c0a0: 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 6e 61  obal variable na
c0b0: 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  me...        #..
c0c0: 20 20 20 20 20 20 20 20 73 65 74 20 66 75 6c 6c          set full
c0d0: 56 61 72 4e 61 6d 65 20 5b 61 70 70 65 6e 64 41  VarName [appendA
c0e0: 72 67 73 20 3a 3a 20 24 76 61 72 4e 61 6d 65 5d  rgs :: $varName] c0f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. c100: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D c110: 6f 65 73 20 74 68 65 20 76 61 72 69 61 62 6c 65 oes the variable c120: 20 65 78 69 73 74 20 69 6e 20 74 68 69 73 20 69 exist in this i c130: 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 nterpreter conte c140: 78 74 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a xt?.. #.. c150: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 if {[inf c160: 6f 20 65 78 69 73 74 73 20 24 66 75 6c 6c 56 61 o exists$fullVa
c170: 72 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  rName]} then {..
c180: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
c190: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
c1a0: 70 70 65 6e 64 20 61 20 73 63 72 69 70 74 20 66  ppend a script f
c1b0: 72 61 67 6d 65 6e 74 20 74 6f 20 74 68 65 20 72  ragment to the r
c1c0: 65 73 75 6c 74 20 74 68 61 74 20 77 69 6c 6c 20  esult that will
c1d0: 63 6f 72 72 65 63 74 6c 79 0d 0a 20 20 20 20 20  correctly..
c1e0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70       #       cop
c1f0: 79 20 61 6e 79 20 63 6f 6e 74 61 69 6e 65 64 20  y any contained
c200: 76 61 6c 75 65 20 74 6f 20 61 6e 6f 74 68 65 72  value to another
c210: 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 6f 6e   interpreter con
c220: 74 65 78 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  text...
c230: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 70   #..          ap
c240: 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 20 22  pend result \n "
c250: 73 65 74 20 22 20 24 66 75 6c 6c 56 61 72 4e 61  set " $fullVarNa c260: 6d 65 20 22 20 5c 7b 22 20 5b 73 74 72 69 6e 67 me " \{" [string c270: 20 6d 61 70 20 5c 0d 0a 20 20 20 20 20 20 20 20 map \.. c280: 20 20 20 20 20 20 5b 67 65 74 53 74 72 69 6e 67 [getString c290: 4d 61 70 46 6f 72 54 63 6c 45 73 63 61 70 65 5d MapForTclEscape] c2a0: 20 5b 73 65 74 20 24 66 75 6c 6c 56 61 72 4e 61 [set$fullVarNa
c2b0: 6d 65 5d 5d 20 5c 7d 0d 0a 20 20 20 20 20 20 20  me]] \}..
c2c0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
c2d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
c2e0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 72 65 73  NOTE: If the res
c2f0: 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 6f 6e 65  ult contains one
c300: 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 70 74 20   or more script
c310: 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 70 65 6e  fragments, appen
c320: 64 20 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20  d a..      #
c330: 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a 20 20 20     newline...
c340: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
c350: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $c360: 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 74 68 65 result] > 0} the c370: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 n {.. app c380: 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e 0d 0a 20 end result \n.. c390: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... c3a0: 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a return$result..
c3b0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
c3c0: 6f 63 20 6d 6f 76 65 53 79 73 74 65 6d 44 61 74  oc moveSystemDat
c3d0: 61 53 51 4c 69 74 65 44 6c 6c 43 6f 6e 66 69 67  aSQLiteDllConfig
c3e0: 20 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 6c 73   { {restore fals
c3f0: 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65  e} {verbose true
c400: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74  } } {..      set
c410: 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42   directory [getB
c420: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d  inaryDirectory].
c430: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74  ...      if {[st
c440: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72  ring length $dir c450: 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 ectory] == 0} th c460: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 en {.. if c470: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e {$verbose} then
c480: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70   {..          tp
c490: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan c4a0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs c4b0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. c4c0: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d "---- skipped m c4d0: 6f 76 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44 oving \"System.D c4e0: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 ata.SQLite.dll.c c4f0: 6f 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 onfig\", " \.. c500: 20 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 "no c510: 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 binary directory c520: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. c530: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 ... retur c540: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 n.. }.... c550: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName c560: 28 31 29 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c (1) [file normal c570: 69 7a 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ize \.. c580: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
c590: 65 63 74 6f 72 79 20 53 79 73 74 65 6d 2e 44 61  ectory System.Da
c5a0: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f  ta.SQLite.dll.co
c5b0: 6e 66 69 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  nfig]]....
c5c0: 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 32 29 20  set fileName(2)
c5d0: 5b 61 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c  [appendArgs $fil c5e0: 65 4e 61 6d 65 28 31 29 20 2e 6d 6f 76 65 64 5d eName(1) .moved] c5f0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 72 .... if {$r
c600: 65 73 74 6f 72 65 7d 20 74 68 65 6e 20 7b 0d 0a  estore} then {..
c610: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
c620: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa c630: 6d 65 28 32 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a me(2)]} then {.. c640: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 file r c650: 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 ename$fileName(
c660: 32 29 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 0d  2) $fileName(1). c670: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if c680: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
c690: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
c6a0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha c6b0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs c6c0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c6d0: 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 "---- moved c6e0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 \""$fileName(2)
c6f0: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
c700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $c710: 66 69 6c 65 4e 61 6d 65 28 31 29 20 5c 22 5c 6e fileName(1) \"\n c720: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. c730: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { c740: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { c750: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
c760: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
c770: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan c780: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs c790: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. c7a0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped c7b0: 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c moving \""$fil
c7c0: 65 4e 61 6d 65 28 32 29 20 5c 0d 0a 20 20 20 20  eName(2) \..
c7d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
c7e0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
c7f0: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
c800: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
c810: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
c820: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c          if {[fil
c830: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61  e exists $fileNa c840: 6d 65 28 31 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a me(1)]} then {.. c850: 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 72 file r c860: 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 28 ename$fileName(
c870: 31 29 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 0d  1) $fileName(2). c880: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if c890: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
c8a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
c8b0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha c8c0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs c8d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. c8e0: 20 20 20 20 22 2d 2d 2d 2d 20 6d 6f 76 65 64 20 "---- moved c8f0: 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 \""$fileName(1)
c900: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20   "\" to \"" \..
c910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $c920: 66 69 6c 65 4e 61 6d 65 28 32 29 20 5c 22 5c 6e fileName(2) \"\n c930: 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. c940: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { c950: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { c960: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
c970: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
c980: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan c990: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs c9a0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. c9b0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped c9c0: 20 6d 6f 76 69 6e 67 20 5c 22 22 20 24 66 69 6c moving \""$fil
c9d0: 65 4e 61 6d 65 28 31 29 20 5c 0d 0a 20 20 20 20  eName(1) \..
c9e0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c              "\",
c9f0: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
ca00: 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  st\n"]..
ca10: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
ca20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ca30: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 77 72 69 74  ...    proc writ
ca40: 65 53 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74  eSystemDataSQLit
ca50: 65 44 6c 6c 43 6f 6e 66 69 67 20 7b 20 64 61 74  eDllConfig { dat
ca60: 61 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 7d  a {verbose true}
ca70: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20   } {..      set
ca80: 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 69  directory [getBi
ca90: 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 0d 0a  naryDirectory]..
caa0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
cab0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 72 65  ing length $dire cac0: 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 ctory] == 0} the cad0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if cae0: 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 {$verbose} then
caf0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
cb00: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann cb10: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ cb20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. cb30: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6d 6f "---- skipped mo cb40: 76 69 6e 67 20 5c 22 53 79 73 74 65 6d 2e 44 61 ving \"System.Da cb50: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f ta.SQLite.dll.co cb60: 6e 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 nfig\", " \.. cb70: 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 "no b cb80: 69 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c inary directory\ cb90: 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. cba0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return cbb0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... cbc0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName cbd0: 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 [file normalize cbe0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 \.. [fi cbf0: 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f le join$directo
cc00: 72 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ry System.Data.S
cc10: 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67  QLite.dll.config
cc20: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 77 72 69 74  ]]....      writ
cc30: 65 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20  eFile $fileName cc40: 24 64 61 74 61 0d 0a 0d 0a 20 20 20 20 20 20 69$data....      i
cc50: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the cc60: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu cc70: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
cc80: 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
cc90: 20 20 22 2d 2d 2d 2d 20 77 72 6f 74 65 20 5c 22    "---- wrote \"
cca0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
ccb0: 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 5c 22 5c  te.dll.config\"\
ccc0: 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  n"..      }....
ccd0: 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c       return $fil cce0: 65 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d eName.. }.... ccf0: 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 45 61 . proc moveEa cd00: 67 6c 65 53 68 65 6c 6c 4d 64 61 43 6f 6e 66 69 gleShellMdaConfi cd10: 67 20 7b 20 7b 72 65 73 74 6f 72 65 20 66 61 6c g { {restore fal cd20: 73 65 7d 20 7b 76 65 72 62 6f 73 65 20 74 72 75 se} {verbose tru cd30: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 e} } {.. se cd40: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get cd50: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d BinaryDirectory] cd60: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 .... if {[s cd70: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 69 tring length$di
cd80: 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20 74  rectory] == 0} t
cd90: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  hen {..        i
cda0: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65  f {$verbose} the cdb0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 n {.. t cdc0: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
cdd0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
cde0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
cdf0: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20    "---- skipped
ce00: 6d 6f 76 69 6e 67 20 5c 22 45 61 67 6c 65 53 68  moving \"EagleSh
ce10: 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66  ell.exe.mda.conf
ce20: 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20 20  ig\", " \..
ce30: 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69 6e           "no bin
ce40: 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e 22  ary directory\n"
ce50: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ]..        }....
ce60: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d 0a          return..
ce70: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
ce80: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 28 31 29   set fileName(1)
ce90: 20 5b 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65   [file normalize
cea0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66   \..          [f
ceb0: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct cec0: 6f 72 79 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 ory EagleShell.e ced0: 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 5d 0d xe.mda.config]]. cee0: 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c ... set fil cef0: 65 4e 61 6d 65 28 32 29 20 5b 61 70 70 65 6e 64 eName(2) [append cf00: 41 72 67 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 Args$fileName(1
cf10: 29 20 2e 6d 6f 76 65 64 5d 0d 0a 0d 0a 20 20 20  ) .moved]....
cf20: 20 20 20 69 66 20 7b 24 72 65 73 74 6f 72 65 7d     if {$restore} cf30: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. cf40: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist cf50: 73 20 24 66 69 6c 65 4e 61 6d 65 28 32 29 5d 7d s$fileName(2)]}
cf60: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
cf70: 20 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24     file rename $cf80: 66 69 6c 65 4e 61 6d 65 28 32 29 20 24 66 69 6c fileName(2)$fil
cf90: 65 4e 61 6d 65 28 31 29 0d 0a 0d 0a 20 20 20 20  eName(1)....
cfa0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo cfb0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. cfc0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
cfd0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
cfe0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
cff0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
d000: 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69  -- moved \"" $fi d010: 6c 65 4e 61 6d 65 28 32 29 20 22 5c 22 20 74 6f leName(2) "\" to d020: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. d030: 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
d040: 65 28 31 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  e(1) \"\n]..
d050: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
d060: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
d070: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos d080: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. d090: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
d0a0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
d0b0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
d0c0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d0d0: 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67  - skipped moving
d0e0: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 32   \"" $fileName(2 d0f0: 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) \.. d100: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe d110: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. d120: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. d130: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } d140: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. d150: 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist d160: 73 20 24 66 69 6c 65 4e 61 6d 65 28 31 29 5d 7d s$fileName(1)]}
d170: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
d180: 20 20 20 66 69 6c 65 20 72 65 6e 61 6d 65 20 24     file rename $d190: 66 69 6c 65 4e 61 6d 65 28 31 29 20 24 66 69 6c fileName(1)$fil
d1a0: 65 4e 61 6d 65 28 32 29 0d 0a 0d 0a 20 20 20 20  eName(2)....
d1b0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo d1c0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. d1d0: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
d1e0: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
d1f0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
d200: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
d210: 2d 2d 20 6d 6f 76 65 64 20 5c 22 22 20 24 66 69  -- moved \"" $fi d220: 6c 65 4e 61 6d 65 28 31 29 20 22 5c 22 20 74 6f leName(1) "\" to d230: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. d240: 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d$fileNam
d250: 65 28 32 29 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20  e(2) \"\n]..
d260: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
d270: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
d280: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73       if {$verbos d290: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. d2a0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
d2b0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
d2c0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
d2d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
d2e0: 2d 20 73 6b 69 70 70 65 64 20 6d 6f 76 69 6e 67  - skipped moving
d2f0: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 28 31   \"" $fileName(1 d300: 29 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ) \.. d310: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 "\", it doe d320: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. d330: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. d340: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } d350: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... d360: 70 72 6f 63 20 77 72 69 74 65 45 61 67 6c 65 53 proc writeEagleS d370: 68 65 6c 6c 4d 64 61 43 6f 6e 66 69 67 20 7b 20 hellMdaConfig { d380: 64 61 74 61 20 7b 76 65 72 62 6f 73 65 20 74 72 data {verbose tr d390: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 ue} } {.. s d3a0: 65 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 et directory [ge d3b0: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 tBinaryDirectory d3c0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ].... if {[ d3d0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64 string length$d
d3e0: 69 72 65 63 74 6f 72 79 5d 20 3d 3d 20 30 7d 20  irectory] == 0}
d3f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
d400: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68  if {$verbose} th d410: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. d420: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
d430: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
d440: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
d450: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64     "---- skipped
d460: 20 6d 6f 76 69 6e 67 20 5c 22 45 61 67 6c 65 53   moving \"EagleS
d470: 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e  hell.exe.mda.con
d480: 66 69 67 5c 22 2c 20 22 20 5c 0d 0a 20 20 20 20  fig\", " \..
d490: 20 20 20 20 20 20 20 20 20 20 22 6e 6f 20 62 69            "no bi
d4a0: 6e 61 72 79 20 64 69 72 65 63 74 6f 72 79 5c 6e  nary directory\n
d4b0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  "]..        }...
d4c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d  .        return.
d4d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
d4e0: 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b    set fileName [
d4f0: 66 69 6c 65 20 6e 6f 72 6d 61 6c 69 7a 65 20 5c  file normalize \
d500: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c  ..          [fil
d510: 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72  e join $director d520: 79 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 y EagleShell.exe d530: 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 5d 0d 0a 0d .mda.config]]... d540: 0a 20 20 20 20 20 20 77 72 69 74 65 46 69 6c 65 . writeFile d550: 20 24 66 69 6c 65 4e 61 6d 65 20 24 64 61 74 61$fileName $data d560: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 76 .... if {$v
d570: 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a  erbose} then {..
d580: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: d590: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. d5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- d5b0: 2d 2d 20 77 72 6f 74 65 20 5c 22 45 61 67 6c 65 -- wrote \"Eagle d5c0: 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f Shell.exe.mda.co d5d0: 6e 66 69 67 5c 22 5c 6e 22 0d 0a 20 20 20 20 20 nfig\"\n".. d5e0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu d5f0: 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 rn$fileName..
d600: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
d610: 20 67 65 74 41 70 70 44 6f 6d 61 69 6e 50 72 65   getAppDomainPre
d620: 61 6d 62 6c 65 20 7b 20 7b 70 72 65 66 69 78 20  amble { {prefix
d630: 22 22 7d 20 7b 73 75 66 66 69 78 20 22 22 7d 20  ""} {suffix ""}
d640: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
d650: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
d660: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
d670: 6e 73 20 61 20 74 65 73 74 20 73 65 74 75 70 20  ns a test setup
d680: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20  script fragment
d690: 73 75 69 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20  suitable for..
d6a0: 20 20 20 20 23 20 20 20 20 20 20 20 65 76 61 6c      #       eval
d6b0: 75 61 74 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74  uation by an int
d6c0: 65 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64  erpreter created
d6d0: 20 69 6e 20 61 6e 20 69 73 6f 6c 61 74 65 64 20   in an isolated
d6e0: 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20  application..
d6f0: 20 20 20 23 20 20 20 20 20 20 20 64 6f 6d 61 69     #       domai
d700: 6e 2e 20 20 54 68 65 20 73 63 72 69 70 74 20 66  n.  The script f
d710: 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72 65  ragment being re
d720: 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73  turned will be s
d730: 75 72 72 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20  urrounded by..
d740: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
d750: 70 72 65 66 69 78 20 61 6e 64 20 73 75 66 66 69  prefix and suffi
d760: 78 20 22 73 63 72 69 70 74 20 66 72 61 67 6d 65  x "script fragme
d770: 6e 74 73 22 20 73 70 65 63 69 66 69 65 64 20 62  nts" specified b
d780: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20  y our caller,..
d790: 20 20 20 20 20 23 20 20 20 20 20 20 20 69 66 20       #       if
d7a0: 61 6e 79 2e 20 20 54 68 65 20 65 6e 74 69 72 65  any.  The entire
d7b0: 20 73 63 72 69 70 74 20 62 65 69 6e 67 20 72 65   script being re
d7c0: 74 75 72 6e 65 64 20 77 69 6c 6c 20 62 65 20 73  turned will be s
d7d0: 75 62 73 74 69 74 75 74 65 64 20 76 69 61 0d 0a  ubstituted via..
d7e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73        #       [s
d7f0: 75 62 73 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f  ubst], in the co
d800: 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61 6c  ntext of our cal
d810: 6c 65 72 2c 20 62 65 66 6f 72 65 20 62 65 69 6e  ler, before bein
d820: 67 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  g returned...
d830: 20 20 20 23 20 20 20 20 20 20 20 54 68 69 73 20     #       This
d840: 73 74 65 70 20 69 73 20 6e 65 63 65 73 73 61 72  step is necessar
d850: 79 20 73 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c  y so that some l
d860: 69 6d 69 74 65 64 20 63 6f 6e 74 65 78 74 20 69  imited context i
d870: 6e 66 6f 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20  nformation,..
d880: 20 20 20 23 20 20 20 20 20 20 20 70 72 69 6d 61     #       prima
d890: 72 69 6c 79 20 72 65 6c 61 74 65 64 20 74 6f 20  rily related to
d8a0: 74 68 65 20 74 65 73 74 69 6e 67 20 64 69 72 65  the testing dire
d8b0: 63 74 6f 72 69 65 73 2c 20 63 61 6e 20 62 65 20  ctories, can be
d8c0: 74 72 61 6e 73 66 65 72 72 65 64 0d 0a 20 20 20  transferred..
d8d0: 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68     #       to th
d8e0: 65 20 69 6e 74 65 72 70 72 65 74 65 72 20 69 6e  e interpreter in
d8f0: 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20 61 70   the isolated ap
d900: 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e  plication domain
d910: 2c 20 6d 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20  , making it..
d920: 20 20 20 23 20 20 20 20 20 20 20 61 62 6c 65 20     #       able
d930: 74 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20  to successfully
d940: 72 75 6e 20 74 65 73 74 73 20 74 68 61 74 20 72  run tests that r
d950: 65 71 75 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f  equire one or mo
d960: 72 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  re of the..
d970: 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 69   #       files i
d980: 6e 20 6f 6e 65 20 6f 66 20 74 68 65 20 74 65 73  n one of the tes
d990: 74 69 6e 67 20 64 69 72 65 63 74 6f 72 69 65 73  ting directories
d9a0: 2e 20 20 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c  .  Callers shoul
d9b0: 64 20 6b 65 65 70 20 69 6e 0d 0a 20 20 20 20 20  d keep in..
d9c0: 20 23 20 20 20 20 20 20 20 6d 69 6e 64 20 74 68   #       mind th
d9d0: 61 74 20 74 68 65 20 74 65 73 74 20 73 63 72 69  at the test scri
d9e0: 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 6e  pt fragment bein
d9f0: 67 20 72 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f  g returned canno
da00: 74 20 72 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20  t rely on..
da10: 20 23 20 20 20 20 20 20 20 61 6e 79 20 73 63 72   #       any scr
da20: 69 70 74 20 6c 69 62 72 61 72 79 20 70 72 6f 63  ipt library proc
da30: 65 64 75 72 65 73 20 74 68 61 74 20 61 72 65 20  edures that are
da40: 6e 6f 74 20 70 72 6f 76 69 64 65 64 20 62 79 20  not provided by
da50: 74 68 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20  the Eagle..
da60: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79   #       library
da70: 20 70 61 63 6b 61 67 65 20 28 69 2e 65 2e 20 22   package (i.e. "
da80: 69 6e 69 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e  init.eagle"), in
da90: 63 6c 75 64 69 6e 67 20 74 68 6f 73 65 20 70 72  cluding those pr
daa0: 6f 76 69 64 65 64 20 62 79 0d 0a 20 20 20 20 20  ovided by..
dab0: 20 23 20 20 20 20 20 20 20 74 68 65 20 45 61 67   #       the Eag
dac0: 6c 65 20 74 65 73 74 20 70 61 63 6b 61 67 65 2c  le test package,
dad0: 20 75 6e 6c 65 73 73 20 74 68 65 20 66 69 6c 65   unless the file
dae0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d   containing them
daf0: 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20   is loaded..
db00: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 75 61 6c    #       manual
db10: 6c 79 20 76 69 61 20 73 6f 6d 65 20 6f 74 68 65  ly via some othe
db20: 72 20 6d 65 63 68 61 6e 69 73 6d 20 28 65 2e 67  r mechanism (e.g
db30: 2e 20 62 79 20 69 6e 63 6c 75 64 69 6e 67 20 61  . by including a
db40: 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20 20 20  ppropriate..
db50: 20 20 23 20 20 20 20 20 20 20 5b 70 61 63 6b 61    #       [packa
db60: 67 65 20 72 65 71 75 69 72 65 5d 20 6f 72 20 5b  ge require] or [
db70: 73 6f 75 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73  source] commands
db80: 20 69 6e 20 74 68 65 20 70 72 65 66 69 78 20 6f   in the prefix o
db90: 72 20 73 75 66 66 69 78 0d 0a 20 20 20 20 20 20  r suffix..
dba0: 23 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66  #       script f
dbb0: 72 61 67 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f  ragments).  Also
dbc0: 2c 20 61 6c 6c 20 76 61 72 69 61 62 6c 65 20 72  , all variable r
dbd0: 65 66 65 72 65 6e 63 65 73 20 61 6e 64 20 61 6c  eferences and al
dbe0: 6c 20 6e 65 73 74 65 64 0d 0a 20 20 20 20 20 20  l nested..
dbf0: 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73  #       commands
dc00: 20 28 69 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20   (i.e. those in
dc10: 73 71 75 61 72 65 20 62 72 61 63 6b 65 74 73 29  square brackets)
dc20: 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 74 68   contained in th
dc30: 65 20 66 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23  e final..      #
dc40: 20 20 20 20 20 20 20 73 63 72 69 70 74 20 66 72         script fr
dc50: 61 67 6d 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20  agment will end
dc60: 75 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74  up being evaluat
dc70: 65 64 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ed in the contex
dc80: 74 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20  t of the..
dc90: 23 20 20 20 20 20 20 20 63 61 6c 6c 69 6e 67 20  #       calling
dca0: 69 6e 74 65 72 70 72 65 74 65 72 20 61 6e 64 20  interpreter and
dcb0: 6e 6f 74 20 74 68 65 20 74 61 72 67 65 74 20 69  not the target i
dcc0: 6e 74 65 72 70 72 65 74 65 72 20 63 72 65 61 74  nterpreter creat
dcd0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  ed in the..
dce0: 20 23 20 20 20 20 20 20 20 69 73 6f 6c 61 74 65   #       isolate
dcf0: 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f  d application do
dd00: 6d 61 69 6e 20 75 6e 6c 65 73 73 20 74 68 65 20  main unless the
dd10: 64 6f 6c 6c 61 72 20 73 69 67 6e 73 20 61 6e 64  dollar signs and
dd20: 2f 6f 72 20 73 71 75 61 72 65 0d 0a 20 20 20 20  /or square..
dd30: 20 20 23 20 20 20 20 20 20 20 62 72 61 63 6b 65    #       bracke
dd40: 74 73 20 61 72 65 20 73 70 65 63 69 61 6c 6c 79  ts are specially
dd50: 20 71 75 6f 74 65 64 20 77 69 74 68 20 62 61 63   quoted with bac
dd60: 6b 73 6c 61 73 68 65 73 2e 0d 0a 20 20 20 20 20  kslashes...
dd70: 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   #..      return
dd80: 20 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73   [uplevel 1 [lis
dd90: 74 20 73 75 62 73 74 20 5b 61 70 70 65 6e 64 41  t subst [appendA
dda0: 72 67 73 20 24 70 72 65 66 69 78 20 7b 0d 0a 20  rgs $prefix {.. ddb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. ddc0: 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 5c 5b # NOTE: The $ddd0: 6f 62 6a 65 63 74 5c 5d 20 63 6f 6d 6d 61 6e 64 object$ command dde0: 20 6d 61 79 20 62 65 20 6d 69 73 73 69 6e 67 20 may be missing ddf0: 69 6e 20 73 6f 6d 65 20 45 61 67 6c 65 20 63 6f in some Eagle co de00: 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # de10: 20 20 20 20 6c 69 62 72 61 72 79 20 63 6f 6e 66 library conf de20: 69 67 75 72 61 74 69 6f 6e 73 2e 20 20 43 6c 6f igurations. Clo de30: 6e 69 6e 67 20 61 6e 64 20 75 73 69 6e 67 20 74 ning and using t de40: 68 65 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 he procedure.. de50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5c 5b # $de60: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt de70: 69 6d 65 4f 70 74 69 6f 6e 5c 5d 20 6d 61 79 20 imeOption$ may de80: 68 65 6c 70 20 74 6f 20 6d 69 74 69 67 61 74 65 help to mitigate de90: 20 74 68 69 73 2e 0d 0a 20 20 20 20 20 20 20 20 this... dea0: 23 0d 0a 20 20 20 20 20 20 20 20 70 72 6f 63 20 #.. proc deb0: 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 6e 74 changeNativeRunt dec0: 69 6d 65 4f 70 74 69 6f 6e 20 5c 0d 0a 20 20 20 imeOption \.. ded0: 20 20 20 20 20 20 20 20 20 7b 5b 69 6e 66 6f 20 {[info dee0: 61 72 67 73 20 63 68 61 6e 67 65 4e 61 74 69 76 args changeNativ def0: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 5d 7d eRuntimeOption]} df00: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. df10: 7b 5b 69 6e 66 6f 20 62 6f 64 79 20 63 68 61 6e {[info body chan df20: 67 65 4e 61 74 69 76 65 52 75 6e 74 69 6d 65 4f geNativeRuntimeO df30: 70 74 69 6f 6e 5d 7d 0d 0a 0d 0a 20 20 20 20 20 ption]}.... df40: 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. df50: 20 20 20 20 20 20 63 68 61 6e 67 65 4e 61 74 69 changeNati df60: 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 veRuntimeOption df70: 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f [hasRuntimeOptio df80: 6e 20 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 n native].. df90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67 }.. } [g dfa0: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP dfb0: 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61 reamble [list pa dfc0: 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d th test_channel] dfd0: 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20 ]$suffix]]]..
dfe0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
dff0: 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c   tryCopyExternal
e000: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  File {..
e010: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
e020: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46  atform ""} {newF
e030: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72  ileName ""} {ver
e040: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a  bose true} } {..
e050: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65        set source
e060: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78 74  FileName [getExt
e070: 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24 66  ernalFileName $f e080: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... e090: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 if {![file exi e0a0: 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e sts$sourceFileN
e0b0: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
e0c0: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo e0d0: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. e0e0: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
e0f0: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
e100: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
e110: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
e120: 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 65  kipped copying e
e130: 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22 22  xternal file \""
e140: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName e150: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. e160: 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e "\", it does n e170: 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. e180: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... e190: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. e1a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { e1b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
e1c0: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  newFileName] > 0
e1d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
e1e0: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
e1f0: 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46  Name [getBinaryF
e200: 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65  ileName $newFile e210: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
e220: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
e230: 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72  .        set tar
e240: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74  getFileName [get
e250: 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24  BinaryFileName $e260: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f fileName$platfo
e270: 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rm]..      }....
e280: 20 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74        set target
e290: 44 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20  Directory [file
e2a0: 64 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46  dirname $targetF e2b0: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 ileName].... e2c0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. e2d0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 if {![fi e2e0: 6c 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 le exists$targe
e2f0: 74 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  tDirectory]} the
e300: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
e310: 69 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65  ile mkdir $targe e320: 74 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 tDirectory.. e330: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... e340: 20 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 file copy -forc e350: 65 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d e$sourceFileNam
e360: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d  e $targetFileNam e370: 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 e.. }] == 0 e380: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. e390: 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
e3a0: 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
e3b0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
e3c0: 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20     "---- copied
e3d0: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 66 72  external file fr
e3e0: 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  om \"" $sourceFi e3f0: 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 leName "\" to \" e400: 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. e410: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
e420: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20   \"\n]..      }
e430: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
e440: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch e450: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg e460: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. e470: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f "---- failed to e480: 20 63 6f 70 79 20 65 78 74 65 72 6e 61 6c 20 66 copy external f e490: 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f ile from \""$so
e4a0: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
e4b0: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20              "\"
e4c0: 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 69  to \"" $targetFi e4d0: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 leName \"\n].. e4e0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... e4f0: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 . proc tryCop e500: 79 42 69 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 yBinaryFile {.. e510: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e fileN e520: 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 ame managedOnly e530: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e {platform ""} {n e540: 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 0d 0a ewFileName ""}.. e550: 20 20 20 20 20 20 20 20 20 20 20 20 7b 76 65 72 {ver e560: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. e570: 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 65 set source e580: 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e FileName [getBin e590: 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c aryFileName$fil
e5a0: 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d  eName $platform] e5b0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ e5c0: 66 69 6c 65 20 65 78 69 73 74 73 20 24 73 6f 75 file exists$sou
e5d0: 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68  rceFileName]} th
e5e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  en {..        if
e5f0: 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e   {$verbose} then e600: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 {.. tp e610: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
e620: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e630: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
e640: 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 63   "---- skipped c
e650: 6f 70 79 69 6e 67 20 62 69 6e 61 72 79 20 66 69  opying binary fi
e660: 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69  le \"" $sourceFi e670: 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 leName \.. e680: 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 "\", it e690: 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n e6a0: 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d "].. }... e6b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. e6c0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... e6d0: 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le e6e0: 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e 61 6d ngth$newFileNam
e6f0: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
e700: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
e710: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
e720: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  uildFileName \..
e730: 20 20 20 20 20 20 20 20 20 20 20 20 24 6e 65 77              $new e740: 46 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 FileName$manage
e750: 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d  dOnly $platform] e760: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { e770: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta e780: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge e790: 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 5c tBuildFileName \ e7a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 66 ..$f
e7b0: 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64  ileName $managed e7c0: 4f 6e 6c 79 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Only$platform].
e7d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
e7e0: 20 20 73 65 74 20 74 61 72 67 65 74 44 69 72 65    set targetDire
e7f0: 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e  ctory [file dirn
e800: 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e  ame $targetFileN e810: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 ame].... if e820: 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. e830: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e e840: 78 69 73 74 73 20 24 74 61 72 67 65 74 44 69 72 xists$targetDir
e850: 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d  ectory]} then {.
e860: 0a 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 20  .          file
e870: 6d 6b 64 69 72 20 24 74 61 72 67 65 74 44 69 72  mkdir $targetDir e880: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. e890: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 69 6c }.... fil e8a0: 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24 73 e copy -force$s
e8b0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 74  ourceFileName $t e8c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 argetFileName.. e8d0: 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 }] == 0} th e8e0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 en {.. tp e8f0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
e900: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
e910: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
e920: 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 62 69 6e 61  ---- copied bina
e930: 72 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22  ry file from \""
e940: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName e950: 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 "\" to \"" \.. e960: 20 20 20 20 20 20 20 20 20 20 20 24 74 61 72 67$targ
e970: 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d  etFileName \"\n]
e980: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
e990: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
e9a0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel e9b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. e9c0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- e9d0: 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 failed to copy e9e0: 62 69 6e 61 72 79 20 66 69 6c 65 20 66 72 6f 6d binary file from e9f0: 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 \""$sourceFile
ea00: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  Name \..
ea10: 20 20 20 20 22 5c 22 20 74 6f 20 5c 22 22 20 24      "\" to \"" $ea20: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c targetFileName \ ea30: 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 "\n].. }.. ea40: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro ea50: 63 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46 69 c tryCopyBuildFi ea60: 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 le {.. ea70: 20 20 66 69 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 fileName manag ea80: 65 64 4f 6e 6c 79 20 7b 70 6c 61 74 66 6f 72 6d edOnly {platform ea90: 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d ""} {newFileNam eaa0: 65 20 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 e ""}.. eab0: 20 20 20 7b 76 65 72 62 6f 73 65 20 74 72 75 65 {verbose true eac0: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 } } {.. set ead0: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 sourceFileName eae0: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d [getBuildFileNam eaf0: 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e e$fileName $man eb00: 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 6f agedOnly$platfo
eb10: 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  rm]....      if
eb20: 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24  {![file exists $eb30: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 5d 7d sourceFileName]} eb40: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. eb50: 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 if {$verbose} t
eb60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
eb70: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c eb80: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr eb90: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. eba0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 "---- skippe ebb0: 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64 20 d copying build ebc0: 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63 65 file \""$source
ebd0: 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  FileName \..
ebe0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69            "\", i
ebf0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
ec00: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  \n"]..        }.
ec10: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
ec20: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  n..      }....
ec30: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
ec40: 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65 4e  length $newFileN ec50: 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ame] > 0} then { ec60: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 61 .. set ta ec70: 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 rgetFileName [ge ec80: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 tBinaryFileName ec90: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c$newFileName $pl eca0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } ecb0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. ecc0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN ecd0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi ece0: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
ecf0: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20   $platform].. ed00: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 }.... se ed10: 74 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 t targetDirector ed20: 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 y [file dirname ed30: 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d$targetFileName]
ed40: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
ed50: 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
ed60: 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74  if {![file exist
ed70: 73 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f  s $targetDirecto ed80: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ry]} then {.. ed90: 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 file mkdi eda0: 72 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f r$targetDirecto
edb0: 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ry..        }...
edc0: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f  .        file co
edd0: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63  py -force $sourc ede0: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 eFileName$targe
edf0: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  tFileName..
ee00: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
ee10: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
ee20: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel ee30: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. ee40: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- ee50: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 copied build fi ee60: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
ee70: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20  rceFileName "\"
ee80: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
ee90: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c        $targetFil eea0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. eeb0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. eec0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
eed0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
eee0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
eef0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
ef00: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64  ed to copy build
ef10: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $ef20: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ ef30: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ ef40: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 " to \""$target
ef50: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
ef60: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
ef70: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44  ...    proc tryD
ef80: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile
ef90: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
efa0: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73  form ""} {verbos
efb0: 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20  e true} } {..
efc0: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName
efd0: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
efe0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  me $fileName$pl
eff0: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
f000: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
f010: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t f020: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i f030: 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 65 f {$verbose} the
f040: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
f050: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha f060: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs f070: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f080: 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 "---- skipped f090: 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 20 deleting binary f0a0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
f0b0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
f0c0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73      "\", it does
f0d0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a   not exist\n"]..
f0e0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
f0f0: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20       return..
f100: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66     }....      if
f110: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64   {[catch {file d
f120: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d  elete $fileName} f130: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. f140: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
f150: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
f160: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
f170: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64           "---- d
f180: 65 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69  eleted binary fi
f190: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName f1a0: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 \"\n].. } f1b0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. f1c0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
f1d0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
f1e0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
f1f0: 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f   "---- failed to
f200: 20 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66   delete binary f
f210: 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam f220: 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d e \"\n].. } f230: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... f240: 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 proc tryDeleteBu f250: 69 6c 64 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 ildFile {.. f260: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName f270: 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 7b 70 6c 61 managedOnly {pla f280: 74 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f tform ""} {verbo f290: 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 se true} } {.. f2a0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 set fileName f2b0: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 [getBuildFileNa f2c0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 6d 61 me$fileName $ma f2d0: 6e 61 67 65 64 4f 6e 6c 79 20 24 70 6c 61 74 66 nagedOnly$platf
f2e0: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
f2f0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
f300: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then f310: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { f320: 24 76 65 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b$verbose} then {
f330: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
f340: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe f350: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. f360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " f370: 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c ---- skipped del f380: 65 74 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 eting build file f390: 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c \""$fileName \
f3a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
f3b0: 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74  "\", it does not
f3c0: 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20   exist\n"]..
f3d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
f3e0: 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 7d   return..      }
f3f0: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63  ....      if {[c
f400: 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74  atch {file delet
f410: 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d  e $fileName}] == f420: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. f430: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
f440: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
f450: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
f460: 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 74       "---- delet
f470: 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  ed build file \"
f480: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n f490: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else f4a0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs f4b0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
f4c0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
f4d0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
f4e0: 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  - failed to dele
f4f0: 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22  te build file \"
f500: 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  " $fileName \"\n f510: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. f520: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 }..... proc t f530: 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b ryCopyAssembly { f540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 .. fi f550: 6c 65 4e 61 6d 65 20 6d 61 6e 61 67 65 64 4f 6e leName managedOn f560: 6c 79 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d ly {platform ""} f570: 20 7b 70 64 62 20 74 72 75 65 7d 20 7b 76 65 72 {pdb true} {ver f580: 62 6f 73 65 20 74 72 75 65 7d 20 7d 20 7b 0d 0a bose true} } {.. f590: 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69 tryCopyBui f5a0: 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 ldFile$fileName
f5b0: 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 70   $managedOnly$p
f5c0: 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62  latform "" $verb f5d0: 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ose.... if f5e0: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 {$pdb} then {..
f5f0: 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75         tryCopyBu
f600: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41  ildFile [appendA
f610: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
f620: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d     [file rootnam
f630: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64  e $fileName] .pd f640: 62 5d 20 24 6d 61 6e 61 67 65 64 4f 6e 6c 79 20 b]$managedOnly
f650: 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65  $platform ""$ve
f660: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  rbose..      }..
f670: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
f680: 6f 63 20 74 72 79 44 65 6c 65 74 65 41 73 73 65  oc tryDeleteAsse
f690: 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  mbly {..
f6a0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c      fileName {pl
f6b0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20  atform ""} {pdb
f6c0: 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65 20 74  true} {verbose t
f6d0: 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
f6e0: 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
f6f0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ile $fileName$p
f700: 6c 61 74 66 6f 72 6d 20 24 76 65 72 62 6f 73 65  latform $verbose f710: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 70 .... if {$p
f720: 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  db} then {..
f730: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e      tryDeleteBin
f740: 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e 64 41  aryFile [appendA
f750: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
f760: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d     [file rootnam
f770: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64  e $fileName] .pd f780: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 b]$platform $ve f790: 72 62 6f 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a rbose.. }.. f7a0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr f7b0: 6f 63 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 oc tryLoadAssemb f7c0: 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 ly { fileName {p f7d0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d latform ""} } {. f7e0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN f7f0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi f800: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 leName$fileName
f810: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20   $platform].... f820: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch f830: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 61 {.. set a f840: 73 73 65 6d 62 6c 79 20 5b 6f 62 6a 65 63 74 20 ssembly [object f850: 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46 load -loadtype F f860: 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65 ile -alias$file
f870: 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 20  Name]..      }]
f880: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
f890: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f8a0: 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64   # NOTE: Now, ad
f8b0: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary
f8c0: 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e  test constraint.
f8d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
f8e0: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
f8f0: 6e 74 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d  nt [file rootnam
f900: 65 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  e [file tail $fi f910: 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 leName]].... f920: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # f930: 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 NOTE: Grab the f940: 69 6d 61 67 65 20 72 75 6e 74 69 6d 65 20 76 65 image runtime ve f950: 72 73 69 6f 6e 20 66 72 6f 6d 20 74 68 65 20 61 rsion from the a f960: 73 73 65 6d 62 6c 79 20 62 65 63 61 75 73 65 0d ssembly because. f970: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # f980: 20 73 65 76 65 72 61 6c 20 74 65 73 74 73 20 72 several tests r f990: 65 6c 79 20 6f 6e 20 69 74 20 68 61 76 69 6e 67 ely on it having f9a0: 20 61 20 63 65 72 74 61 69 6e 20 76 61 6c 75 65 a certain value f9b0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. f9c0: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra f9d0: 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 int [appendArgs f9e0: 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 [file tail$file
f9f0: 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 20 20 20 20  Name] _ \..
fa00: 20 20 20 20 20 20 20 5b 24 61 73 73 65 6d 62 6c         [$assembl fa10: 79 20 49 6d 61 67 65 52 75 6e 74 69 6d 65 56 65 y ImageRuntimeVe fa20: 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20 20 20 rsion]].... fa30: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # fa40: 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 NOTE: Return the fa50: 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20 74 68 full path of th fa60: 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e 0d 0a e loaded file... fa70: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. fa80: 20 20 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e return$fileN
fa90: 61 6d 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ame..      }....
faa0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
fab0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
fac0: 72 6f 63 20 69 73 53 51 4c 69 74 65 52 65 61 64  roc isSQLiteRead
fad0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d  y {} {..      #.
fae0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54  .      # NOTE: T
faf0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 75  his procedure mu
fb00: 73 74 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65  st return non-ze
fb10: 72 6f 20 6f 6e 6c 79 20 69 66 20 74 68 65 20 53  ro only if the S
fb20: 51 4c 69 74 65 20 6e 61 74 69 76 65 0d 0a 20 20  QLite native..
fb30: 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 62 72      #       libr
fb40: 61 72 79 20 61 6e 64 20 74 68 65 20 53 79 73 74  ary and the Syst
fb50: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d  em.Data.SQLite m
fb60: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
fb70: 61 72 65 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20  are loaded..
fb80: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65    #       and re
fb90: 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74  ady for use by t
fba0: 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 20 20  he test suite.
fbb0: 43 75 72 72 65 6e 74 6c 79 2c 20 74 68 69 73 20  Currently, this
fbc0: 70 72 6f 63 65 64 75 72 65 0d 0a 20 20 20 20 20  procedure..
fbd0: 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20   #       should
fbe0: 62 65 20 63 61 6c 6c 65 64 20 6f 6e 6c 79 20 61  be called only a
fbf0: 66 74 65 72 20 74 68 65 20 5b 74 72 79 4c 6f 61  fter the [tryLoa
fc00: 64 41 73 73 65 6d 62 6c 79 5d 20 70 72 6f 63 65  dAssembly] proce
fc10: 64 75 72 65 20 68 61 73 0d 0a 20 20 20 20 20 20  dure has..
fc20: 23 20 20 20 20 20 20 20 62 65 65 6e 20 63 61 6c  #       been cal
fc30: 6c 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72  led to probe for
fc40: 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61   the System.Data
fc50: 2e 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20  .SQLite managed
fc60: 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20  assembly..
fc70: 23 20 20 20 20 20 20 20 61 6e 64 20 74 68 65 20  #       and the
fc80: 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 5d  [checkForSQLite]
fc90: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 62   procedure has b
fca0: 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 72  een called to pr
fcb0: 6f 62 65 20 66 6f 72 0d 0a 20 20 20 20 20 20 23  obe for..      #
fcc0: 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74         the SQLit
fcd0: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79  e native library
fce0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69  ; otherwise, thi
fcf0: 73 20 70 72 6f 63 65 64 75 72 65 20 77 69 6c 6c  s procedure will
fd00: 20 73 69 6d 70 6c 79 0d 0a 20 20 20 20 20 20 23   simply..      #
fd10: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 72 65         always re
fd20: 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  turn zero...
fd30: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
fd40: 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20  n [expr {..
fd50: 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69     [haveConstrai
fd60: 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  nt System.Data.S
fd70: 51 4c 69 74 65 5d 20 26 26 20 5b 68 61 76 65 43  QLite] && [haveC
fd80: 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
fd90: 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20  ]..      }]..
fda0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
fdb0: 6d 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 7b 20  matchPlatform {
fdc0: 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a 20 20  platform } {..
fdd0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
fde0: 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 73 74  OTE: An empty st
fdf0: 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 6c 61  ring for the pla
fe00: 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 61 74  tform means that
fe10: 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 6e 6f   the build is no
fe20: 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  t..      #
fe30: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 20 6e   [primarily] a n
fe40: 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 68 65  ative build; the
fe50: 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 61 79  refore, it alway
fe60: 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 20 20  s matches...
fe70: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
fe80: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70  string length $p fe90: 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 latform] == 0} t fea0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r feb0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. fec0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. fed0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If fee0: 20 74 68 65 20 6d 61 63 68 69 6e 65 20 6e 61 6d the machine nam fef0: 65 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 e is unavailable ff00: 2c 20 74 68 65 72 65 20 69 73 20 6e 6f 74 68 69 , there is nothi ff10: 6e 67 20 65 6c 73 65 20 77 65 0d 0a 20 20 20 20 ng else we.. ff20: 20 20 23 20 20 20 20 20 20 20 63 61 6e 20 64 6f # can do ff30: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ff40: 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi ff50: 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f sts ::tcl_platfo ff60: 72 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 rm(machine)]} th ff70: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re ff80: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 turn false.. ff90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. ffa0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f # NOTE: Do ffb0: 65 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 es the specified ffc0: 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63 68 20 platform match ffd0: 75 70 20 74 6f 20 74 68 65 20 63 75 72 72 65 6e up to the curren ffe0: 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20 20 20 t process?.. fff0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
10000 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d 61 63  platform eq [mac
10010 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24  hineToPlatform $10020 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d ::tcl_platform(m 10030 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20 7b achine)]} then { 10040 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 10050 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. 10060 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 10070 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73 70 65 # NOTE: The spe 10080 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 cified platform 10090 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 75 does not match u 100a0 70 20 77 69 74 68 20 74 68 65 20 70 6c 61 74 66 p with the platf 100b0 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20 20 20 orm.. # 100c0 20 20 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 for the curre 100d0 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 nt process... 100e0 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 #.. retu 100f0 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d rn false.. }. 10100 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68 61 76 .... proc hav 10110 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 10120 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 mand {} {.. 10130 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 10140 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a 65 63 74 : Is the [object 10150 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72 72 65 6e ] command curren 10160 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 3f 0d 0a tly available?.. 10170 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 10180 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 5b 6c 6c eturn [expr {[ll 10190 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63 6f 6d 6d ength [info comm 101a0 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d 20 3e 20 ands object]] > 101b0 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 0}].. }..... 101c0 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor 101d0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 101e0 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 and { channel } 101f0 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 {.. tputs$
10200 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68  channel "---- ch
10210 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 6f 62 6a  ecking for \"obj
10220 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 75 73  ect\" command us
10230 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  age... "....
10240 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
10250 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 4f  sts ::no(sqliteO
10260 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 5d 20 26  bjectCommand)] &
10270 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
10280 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
10290 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
102a0 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
102b0 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a  $channel yes\n.. 102c0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 102d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 102e0 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e 6c 65 73 # NOTE: Unles 102f0 73 20 77 65 20 61 72 65 20 66 6f 72 62 69 64 64 s we are forbidd 10300 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67 20 73 6f en from doing so 10310 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f 6e 73 74 , add some const 10320 72 61 69 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 raints.. 10330 23 20 20 20 20 20 20 20 74 68 61 74 20 77 69 6c # that wil 10340 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20 6f 66 20 l allow most of 10350 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 74 the test suite t 10360 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74 68 6f 73 o run (i.e. thos 10370 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # 10380 20 20 20 74 65 73 74 73 20 74 68 61 74 20 64 6f tests that do 10390 20 6e 6f 74 20 64 69 72 65 63 74 6c 79 20 72 65 not directly re 103a0 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b 6f 62 6a ly upon the [obj 103b0 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29 2e 0d 0a ect] command)... 103c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 103d0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 103e0 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69 6d 53 51 ists ::no(shimSQ 103f0 4c 69 74 65 41 73 73 65 6d 62 6c 79 43 6f 6e 73 LiteAssemblyCons 10400 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 traints)]} then 10410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 {.. add 10420 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 Constraint SQLit 10430 65 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 e.. add 10440 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 Constraint SQLit 10450 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 eInterop.. 10460 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 10470 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 t System.Data.SQ 10480 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Lite.. 10490 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 79 addConstraint Sy 104a0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 104b0 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a 20 20 20 .Encryption.. 104c0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr 104d0 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 aint System.Data 104e0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d 0a 0d 0a .SQLite.Linq.... 104f0 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e addCon 10500 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 straint [appendA 10510 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 10520 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 10530 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76 20 5b 67 .SQLite.dll_v [g 10540 65 74 42 75 69 6c 64 43 6c 72 56 65 72 73 69 6f etBuildClrVersio 10550 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n]].. }.. 10560 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 10570 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 10580 28 73 68 69 6d 53 51 4c 69 74 65 44 65 66 69 6e (shimSQLiteDefin 10590 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73 74 72 61 eConstantConstra 105a0 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a ints)]} then {.. 105b0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 105c0 68 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 h defineConstant 105d0 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 [list \.. 105e0 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f INTEROP_ 105f0 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 EXTENSION_FUNCTI 10600 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53 35 ONS INTEROP_FTS5 10610 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 _EXTENSION \.. 10620 20 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 INTE 10630 52 4f 50 5f 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 ROP_JSON1_EXTENS 10640 49 4f 4e 20 49 4e 54 45 52 4f 50 5f 50 45 52 43 ION INTEROP_PERC 10650 45 4e 54 49 4c 45 5f 45 58 54 45 4e 53 49 4f 4e ENTILE_EXTENSION 10660 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10670 20 20 49 4e 54 45 52 4f 50 5f 52 45 47 45 58 50 INTEROP_REGEXP 10680 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 _EXTENSION INTER 10690 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e 53 49 4f OP_TEST_EXTENSIO 106a0 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 N \.. 106b0 20 20 20 49 4e 54 45 52 4f 50 5f 53 45 53 53 49 INTEROP_SESSI 106c0 4f 4e 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54 ON_EXTENSION INT 106d0 45 52 4f 50 5f 53 48 41 31 5f 45 58 54 45 4e 53 EROP_SHA1_EXTENS 106e0 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ION \.. 106f0 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 INTEROP_TOT 10700 59 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e YPE_EXTENSION IN 10710 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 TEROP_VIRTUAL_TA 10720 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 BLE \.. 10730 20 20 20 20 20 55 53 45 5f 49 4e 54 45 52 4f 50 USE_INTEROP 10740 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20 _DLL] {.. 10750 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 addConstrai 10760 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c nt [appendArgs \ 10770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10780 20 20 5b 67 65 74 53 51 4c 69 74 65 44 65 66 69 [getSQLiteDefi 10790 6e 65 43 6f 6e 73 74 61 6e 74 50 72 65 66 69 78 neConstantPrefix 107a0 5d 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e ]$defineConstan
107b0 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  t]..          }.
107c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
107d0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
107e0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69   exists ::no(shi
107f0 6d 53 51 4c 69 74 65 56 69 73 75 61 6c 53 74 75  mSQLiteVisualStu
10800 64 69 6f 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  dioConstraints)]
10810 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
10820 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
10830 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 76 69  t [appendArgs vi
10840 73 75 61 6c 53 74 75 64 69 6f 20 5b 67 65 74 42  sualStudio [getB
10850 75 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 20 20 20  uildYear]]..
10860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
10870 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 10880 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 no\n.. }.. 10890 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 108a0 63 20 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 c changeNativeRu 108b0 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 7b 20 6e 61 ntimeOption { na 108c0 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 tive } {.. 108d0 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e if {[llength [in 108e0 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 fo commands debu 108f0 67 5d 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20 g]] > 0 && \.. 10900 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 [llength 10910 20 5b 69 6e 66 6f 20 73 75 62 63 6f 6d 6d 61 6e [info subcomman 10920 64 73 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 ds debug runtime 10930 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 20 26 26 20 option]] > 0 && 10940 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 10950 20 20 64 65 62 75 67 20 72 75 6e 74 69 6d 65 6f debug runtimeo 10960 70 74 69 6f 6e 20 5b 65 78 70 72 20 7b 24 6e 61 ption [expr {$na
10970 74 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22  tive ? "add" : "
10980 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 69 76 65  remove"}] native
10990 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d  ..      }] == 0}
109a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
109b0 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
109c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
109d0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
109e0 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20  jectCommand] &&
109f0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
10a00 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
10a10 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41  Interpreter.GetA
10a20 63 74 69 76 65 20 5b 65 78 70 72 20 7b 24 6e 61  ctive [expr {$na 10a30 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 tive ? \.. 10a40 20 20 20 20 20 20 22 41 64 64 52 75 6e 74 69 6d "AddRuntim 10a50 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52 65 6d 6f eOption" : "Remo 10a60 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 veRuntimeOption" 10a70 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 }] native.. 10a80 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { 10a90 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 10aa0 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a true.. }.. 10ab0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f 10ac0 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... 10ad0 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 10ae0 72 53 51 4c 69 74 65 42 75 69 6c 64 73 20 7b 20 rSQLiteBuilds { 10af0 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 channel {select 10b00 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 10b10 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 10b20 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 65 76 65 E: Check for eve 10b30 72 79 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 69 ry possible vali 10b40 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e 20 6f 66 d combination of 10b50 20 76 61 6c 75 65 73 20 75 73 65 64 20 77 68 65 values used whe 10b60 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 n.. # 10b70 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74 20 74 68 locating out th 10b80 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 e build output d 10b90 69 72 65 63 74 6f 72 79 2c 20 73 68 6f 77 69 6e irectory, showin 10ba0 67 20 65 61 63 68 20 61 76 61 69 6c 61 62 6c 65 g each available 10bb0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 10bc0 62 75 69 6c 64 20 76 61 72 69 61 74 69 6f 6e 20 build variation 10bd0 61 6c 6f 6e 67 20 74 68 65 20 77 61 79 2e 0d 0a along the way... 10be0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 66 #.. f 10bf0 6f 72 65 61 63 68 20 6e 61 74 69 76 65 20 5b 6c oreach native [l 10c00 69 73 74 20 66 61 6c 73 65 20 74 72 75 65 5d 20 ist false true] 10c10 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 {.. forea 10c20 63 68 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c ch year [getBuil 10c30 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20 20 20 20 dYears] {.. 10c40 20 20 20 20 20 66 6f 72 65 61 63 68 20 63 6f 6e foreach con 10c50 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74 42 figuration [getB 10c60 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 10c70 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ns] {.. 10c80 20 20 20 66 6f 72 65 61 63 68 20 73 75 66 66 69 foreach suffi 10c90 78 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 x [getBuildConfi 10ca0 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78 65 73 gurationSuffixes 10cb0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. 10cc0 20 20 20 66 6f 72 65 61 63 68 20 65 78 74 72 61 foreach extra 10cd0 20 5b 67 65 74 42 75 69 6c 64 45 78 74 72 61 73 [getBuildExtras 10ce0 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] {.. 10cf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 10d00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 10d10 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 65 Figure out the e 10d20 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 70 ffective build p 10d30 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 latform. This i 10d40 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 s.. 10d50 20 20 20 23 20 20 20 20 20 20 20 62 61 73 65 64 # based 10d60 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 6e on whether or n 10d70 6f 74 20 61 20 5b 70 72 69 6d 61 72 69 6c 79 5d ot a [primarily] 10d80 20 6e 61 74 69 76 65 20 62 75 69 6c 64 0d 0a 20 native build.. 10d90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 # 10da0 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 is being 10db0 75 73 65 64 2e 20 20 46 6f 72 20 5b 70 72 69 6d used. For [prim 10dc0 61 72 69 6c 79 5d 20 6e 6f 6e 2d 6e 61 74 69 76 arily] non-nativ 10dd0 65 20 62 75 69 6c 64 73 2c 0d 0a 20 20 20 20 20 e builds,.. 10de0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 10df0 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65 20 this will be 10e00 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e an empty string. 10e10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 10e20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 10e30 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 set platfor 10e40 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 74 66 m [getBuildPlatf 10e50 6f 72 6d 20 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a orm$native]....
10e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
10e70 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  #..
10e80 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
10e90 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   the fully quali
10ea0 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 77  fied directory w
10eb0 68 65 72 65 20 74 68 65 0d 0a 20 20 20 20 20 20  here the..
10ec0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
10ed0 20 20 6e 65 63 65 73 73 61 72 79 20 63 6f 6d 70    necessary comp
10ee0 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65  onents for Syste
10ef0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68  m.Data.SQLite sh
10f00 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ould..
10f10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
10f20 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20   found...
10f30 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
10f40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
10f50 64 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42  directory [joinB
10f60 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e  uildDirectory $n 10f70 61 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 ative \.. 10f80 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 [ge 10f90 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74 tBuildBaseDirect 10fa0 6f 72 79 5d 20 24 79 65 61 72 20 24 70 6c 61 74 ory]$year $plat 10fb0 66 6f 72 6d 20 5b 61 70 70 65 6e 64 41 72 67 73 form [appendArgs 10fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10fd0 20 20 20 20 20 20 20 20 24 63 6f 6e 66 69 67 75$configu
10fe0 72 61 74 69 6f 6e 20 24 73 75 66 66 69 78 5d 20  ration $suffix] 10ff0 24 65 78 74 72 61 5d 0d 0a 0d 0a 20 20 20 20 20$extra]....
11000 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
11010 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 11020 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 11030 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 11040 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 -- checking for 11050 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 11060 74 65 20 62 75 69 6c 64 20 5c 22 22 20 5b 65 78 te build \"" [ex 11070 70 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 pr \.. 11080 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61 74 69 {$nati
11090 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a  ve ? "native/" :
110a0 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b 73 74   ""}] [expr {[st
110b0 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20  ring length \..
110c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
110d0 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20     $platform] > 110e0 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 0 ? [appendArgs 110f0 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22$platform /] : "
11100 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  "}] \..
11110 20 20 20 20 20 20 20 20 20 20 20 24 79 65 61 72             $year 11120 20 2f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 / [appendArgs$
11130 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 73  configuration $s 11140 75 66 66 69 78 5d 20 22 5c 22 2e 2e 2e 20 22 5d uffix] "\"... "] 11150 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 11160 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 11170 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 # NOTE: D 11180 6f 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 o the necessary 11190 66 69 6c 65 73 20 65 78 69 73 74 3f 20 20 43 75 files exist? Cu 111a0 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 6f 74 68 65 rrently, no othe 111b0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 r.. 111c0 20 20 20 23 20 20 20 20 20 20 20 73 74 65 70 73 # steps 111d0 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 are taken to ve 111e0 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 rify this build 111f0 69 73 20 61 63 74 75 61 6c 6c 79 0d 0a 20 20 20 is actually.. 11200 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 11210 20 20 20 20 20 76 69 61 62 6c 65 2e 0d 0a 20 20 viable... 11220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 11230 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11240 20 73 65 74 20 73 6b 69 70 4e 61 74 69 76 65 20 set skipNative 11250 5b 65 78 70 72 20 7b 5b 69 73 44 6f 74 4e 65 74 [expr {[isDotNet 11260 43 6f 72 65 5d 20 26 26 20 5b 69 73 57 69 6e 64 Core] && [isWind 11270 6f 77 73 5d 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 ows]}].... 11280 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 if {[i 11290 73 42 75 69 6c 64 41 76 61 69 6c 61 62 6c 65 20 sBuildAvailable 112a0 24 6e 61 74 69 76 65 20 24 73 6b 69 70 4e 61 74$native $skipNat 112b0 69 76 65 20 24 64 69 72 65 63 74 6f 72 79 5d 7d ive$directory]}
112c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
112d0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
112e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
112f0 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 6e 20  # NOTE: When in
11300 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c 20 61  "select" mode, a
11310 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c  utomatically sel
11320 65 63 74 20 74 68 65 0d 0a 20 20 20 20 20 20 20  ect the..
11330 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20             #
11340 20 20 20 66 69 72 73 74 20 61 76 61 69 6c 61 62     first availab
11350 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74  le build of Syst
11360 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61  em.Data.SQLite a
11370 6e 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  nd..
11380 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
11390 65 6e 20 72 65 74 75 72 6e 20 69 6d 6d 65 64 69  en return immedi
113a0 61 74 65 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20  ately...
113b0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
113c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
113d0 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b 6d  f {$select && [m 113e0 61 74 63 68 50 6c 61 74 66 6f 72 6d 20 24 70 6c atchPlatform$pl
113f0 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d  atform]} then {.
11400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
11410 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11420 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
11430 54 45 3a 20 4d 61 6e 75 61 6c 6c 79 20 6f 76 65  TE: Manually ove
11440 72 72 69 64 65 20 61 6c 6c 20 74 68 65 20 62 75  rride all the bu
11450 69 6c 64 20 64 69 72 65 63 74 6f 72 79 0d 0a 20  ild directory..
11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11470 20 20 20 23 20 20 20 20 20 20 20 73 65 6c 65 63     #       selec
11480 74 69 6f 6e 20 72 65 6c 61 74 65 64 20 74 65 73  tion related tes
11490 74 20 73 65 74 74 69 6e 67 73 20 69 6e 20 6f 72  t settings in or
114a0 64 65 72 20 74 6f 0d 0a 20 20 20 20 20 20 20 20  der to..
114b0 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
114c0 20 20 20 20 66 6f 72 63 65 20 74 68 69 73 20 62      force this b
114d0 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d 2e 44  uild of System.D
114e0 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 65  ata.SQLite to be
114f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
11500 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73        #       us
11510 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ed...
11520 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
11530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11540 69 66 20 7b 21 5b 63 68 61 6e 67 65 4e 61 74 69  if {![changeNati
11550 76 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  veRuntimeOption
11560 24 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b  $native]} then { 11570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 11580 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
11590 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
115a0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
115c0 22 6e 6f 2c 20 66 61 69 6c 65 64 20 74 6f 20 22  "no, failed to "
115d0 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 65 20   [expr {$native 115e0 3f 20 22 61 64 64 22 20 3a 20 5c 0d 0a 20 20 20 ? "add" : \.. 115f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11600 20 20 20 20 20 20 20 22 72 65 6d 6f 76 65 22 7d "remove"} 11610 5d 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65 ] " the \"native 11620 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f \" runtime optio 11630 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 n\n"].... 11640 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 r 11650 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 eturn false.. 11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11670 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 11680 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 11690 74 65 73 74 5f 6e 61 74 69 76 65 20 24 73 6b 69 test_native$ski
116a0 70 4e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 20  pNative..
116b0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
116c0 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79 65   ::test_year $ye 116d0 61 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ar.... 116e0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 116f0 74 65 73 74 5f 6e 61 74 69 76 65 5f 79 65 61 72 test_native_year 11700 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11710 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 11720 42 75 69 6c 64 4e 61 74 69 76 65 59 65 61 72 46 BuildNativeYearF 11730 6f 72 44 6f 74 4e 65 74 43 6f 72 65 20 24 79 65 orDotNetCore$ye
11740 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ar]....
11750 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
11760 3a 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24  :test_platform $11770 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 platform.. 11780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 se 11790 74 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 t ::test_configu 117a0 72 61 74 69 6f 6e 20 24 63 6f 6e 66 69 67 75 72 ration$configur
117b0 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20  ation..
117c0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a             set :
117d0 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74  :test_configurat
117e0 69 6f 6e 5f 73 75 66 66 69 78 20 24 73 75 66 66  ion_suffix $suff 117f0 69 78 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 ix.... 11800 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 11810 74 65 73 74 5f 6e 61 74 69 76 65 5f 63 6f 6e 66 test_native_conf 11820 69 67 75 72 61 74 69 6f 6e 5f 73 75 66 66 69 78 iguration_suffix 11830 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11840 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 [get 11850 42 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 BuildNativeConfi 11860 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78 46 6f gurationSuffixFo 11870 72 44 6f 74 4e 65 74 43 6f 72 65 20 5c 0d 0a 20 rDotNetCore \.. 11880 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11890 20 20 20 20 20 20 20 24 73 75 66 66 69 78 5d 0d$suffix].
118a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
118b0 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73         set ::tes
118c0 74 5f 65 78 74 72 61 20 24 65 78 74 72 61 0d 0a  t_extra $extra.. 118d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 118e0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
118f0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
11900 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11910 20 20 20 20 20 20 20 20 20 20 20 20 22 79 65 73              "yes
11920 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 5b 65  , selected (" [e
11930 78 70 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 22  xpr {$native ? " 11940 6e 61 74 69 76 65 2f 22 20 3a 20 22 22 7d 5d 20 native/" : ""}] 11950 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11960 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 [expr 11970 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 11980 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20$platform] > 0
11990 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  ? [appendArgs \.
119a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
119b0 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f           $platfo 119c0 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 rm /] : ""}]$ye
119d0 61 72 20 2f 20 5b 61 70 70 65 6e 64 41 72 67 73  ar / [appendArgs
119e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
119f0 20 20 20 20 20 20 20 20 20 20 20 20 24 63 6f 6e              $con 11a00 66 69 67 75 72 61 74 69 6f 6e 20 24 73 75 66 66 figuration$suff
11a10 69 78 5d 20 5b 65 78 70 72 20 7b 5b 73 74 72 69  ix] [expr {[stri
11a20 6e 67 20 6c 65 6e 67 74 68 20 5c 0d 0a 20 20 20  ng length \..
11a30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
11a40 20 20 20 20 20 24 65 78 74 72 61 5d 20 3e 20 30       $extra] > 0 11a50 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 2f ? [appendArgs / 11a60 20 24 65 78 74 72 61 5d 20 3a 20 22 22 7d 5d 20$extra] : ""}]
11a70 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ")\n"]....
11a80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
11a90 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20  turn true..
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65               } e
11ab0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
11ac0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
11ad0 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d   $channel yes\n. 11ae0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 11af0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 11b00 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11b20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
11b30 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20   no\n..
11b40 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11b50 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
11b60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
11b70 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
11b80 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
11b90 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
11ba0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
11bb0 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69  roc checkForSQLi
11bc0 74 65 52 65 6c 65 61 73 65 73 20 7b 20 63 68 61  teReleases { cha
11bd0 6e 6e 65 6c 20 7b 73 65 6c 65 63 74 20 66 61 6c  nnel {select fal
11be0 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
11bf0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
11c00 43 68 65 63 6b 20 66 6f 72 20 70 61 73 74 20 72  Check for past r
11c10 65 6c 65 61 73 65 73 20 6f 66 20 53 79 73 74 65  eleases of Syste
11c20 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 69 6e  m.Data.SQLite in
11c30 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a   the directory..
11c40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
11c50 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 22  ntained in the "
11c60 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
11c70 74 65 22 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20  te" environment
11c80 76 61 72 69 61 62 6c 65 2c 20 69 66 0d 0a 20 20  variable, if..
11c90 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73      #       pres
11ca0 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ent...      #..
11cb0 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
11cc0 78 69 73 74 73 20 3a 3a 65 6e 76 28 53 79 73 74  xists ::env(Syst
11cd0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d  em.Data.SQLite)]
11ce0 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
11cf0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
11d00 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61  $::env(System.Da 11d10 74 61 2e 53 51 4c 69 74 65 29 5d 20 3e 20 30 7d ta.SQLite)] > 0} 11d20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11d30 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 11d40 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 TE: Build the fu 11d50 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 64 69 lly qualified di 11d60 72 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 rectory where th 11d70 65 20 6e 65 63 65 73 73 61 72 79 0d 0a 20 20 20 e necessary.. 11d80 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com 11d90 70 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 ponents for Syst 11da0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 em.Data.SQLite s 11db0 68 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d hould be found.. 11dc0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 11dd0 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 set director 11de0 79 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 y [file nativena 11df0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d me [file join \. 11e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 3a 3a .$::
11e10 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 61 2e  env(System.Data.
11e20 53 51 4c 69 74 65 29 20 5b 67 65 74 52 65 6c 65  SQLite) [getRele
11e30 61 73 65 56 65 72 73 69 6f 6e 5d 5d 5d 0d 0a 0d  aseVersion]]]...
11e40 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $11e50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 11e60 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 11e70 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e "---- checkin 11e80 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 g for System.Dat 11e90 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 65 a.SQLite release 11ea0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 11eb0 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22$directory "
11ec0 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20  \"... "]....
11ed0 20 20 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61      if {[isRelea
11ee0 73 65 41 76 61 69 6c 61 62 6c 65 20 24 64 69 72  seAvailable $dir 11ef0 65 63 74 6f 72 79 20 70 6c 61 74 66 6f 72 6d 5d ectory platform] 11f00 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11f10 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 11f20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
11f30 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
11f40 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
11f50 70 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e  platform unknown
11f60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
11f70 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24  .          if {$11f80 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63 68 select && [match 11f90 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f Platform$platfo
11fa0 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  rm]} then {..
11fb0 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 62           set ::b
11fc0 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20 24  uild_directory $11fd0 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 directory.... 11fe0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
11ff0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
12000 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65 63 74  rgs "yes, select
12010 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20  ed (" $platform 12020 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 ")\n"].... 12030 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 return tru 12040 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 e.. } e 12050 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 12060 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
12070 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79  l [appendArgs "y
12080 65 73 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20  es (" $platform 12090 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 ")\n"].. 120a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 120b0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 120c0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
120d0 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20  no\n....
120e0 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
120f0 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d 20  sts $directory] 12100 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 || \.. 12110 20 20 20 20 21 5b 66 69 6c 65 20 69 73 64 69 72 ![file isdir 12120 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f 72 ectory$director
12130 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
12140 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12150 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12160 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12170 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 "---- envi 12180 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 12190 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S 121a0 51 4c 69 74 65 5c 22 20 69 73 20 61 6e 20 22 20 QLite\" is an " 121b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 121c0 20 20 20 22 69 6e 76 61 6c 69 64 20 64 69 72 65 "invalid dire 121d0 63 74 6f 72 79 2c 20 73 6b 69 70 70 69 6e 67 20 ctory, skipping 121e0 63 68 65 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 check for releas 121f0 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 es...\n"].... 12200 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 12210 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 false.. 12220 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 12230 66 6f 72 65 61 63 68 20 70 61 74 68 20 5b 6c 73 foreach path [ls 12240 6f 72 74 20 2d 64 65 63 72 65 61 73 69 6e 67 20 ort -decreasing 12250 5b 66 69 6c 65 20 6c 69 73 74 20 24 64 69 72 65 [file list$dire
12260 63 74 6f 72 79 20 2a 5d 5d 20 7b 0d 0a 20 20 20  ctory *]] {..
12270 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
12280 6c 65 20 65 78 69 73 74 73 20 24 70 61 74 68 5d  le exists $path] 12290 20 26 26 20 5b 66 69 6c 65 20 69 73 64 69 72 65 && [file isdire 122a0 63 74 6f 72 79 20 24 70 61 74 68 5d 7d 20 74 68 ctory$path]} th
122b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
122c0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 122d0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 122e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 122f0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 12300 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da 12310 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 65 61 73 ta.SQLite releas 12320 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 e \"" \.. 12330 20 20 20 20 20 20 20 20 20 20 20 24 70 61 74 68$path
12340 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20   "\"... "]....
12350 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
12360 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 6c 61  [isReleaseAvaila
12370 62 6c 65 20 24 70 61 74 68 20 70 6c 61 74 66 6f  ble $path platfo 12380 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 rm]} then {.. 12390 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 if 123a0 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 123b0 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d$platform] == 0}
123c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
123d0 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
123e0 6c 61 74 66 6f 72 6d 20 75 6e 6b 6e 6f 77 6e 0d  latform unknown.
123f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
12400 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
12410 20 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63        if {$selec 12420 74 20 26 26 20 5b 6d 61 74 63 68 50 6c 61 74 66 t && [matchPlatf 12430 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 orm$platform]}
12440 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12450 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
12460 62 75 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 20  build_directory
12470 24 70 61 74 68 0d 0a 0d 0a 20 20 20 20 20 20 20  $path.... 12480 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 12490 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
124a0 64 41 72 67 73 20 22 79 65 73 2c 20 73 65 6c 65  dArgs "yes, sele
124b0 63 74 65 64 20 28 22 20 24 70 6c 61 74 66 6f 72  cted (" $platfor 124c0 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 m ")\n"].... 124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 re 124e0 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 124f0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 12500 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 12510 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
12520 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
12530 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 66  s "yes (" $platf 12540 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20 orm ")\n"].. 12550 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 12560 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 } e 12570 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 12580 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
12590 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
125a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
125b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
125c0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
125d0 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
125e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
125f0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 12600 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 12610 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 6e 76 69 "---- envi 12620 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 ronment variable 12630 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \"System.Data.S 12640 51 4c 69 74 65 5c 22 20 69 73 20 6e 6f 74 20 22 QLite\" is not " 12650 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12660 22 73 65 74 2c 20 73 6b 69 70 70 69 6e 67 20 63 "set, skipping c 12670 68 65 63 6b 20 66 6f 72 20 72 65 6c 65 61 73 65 heck for release 12680 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 s...\n"].. 12690 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 126a0 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a n false.. }.. 126b0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 ... proc chec 126c0 6b 46 6f 72 53 51 4c 69 74 65 4c 69 62 72 61 72 kForSQLiteLibrar 126d0 79 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d y { channel } {. 126e0 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
126f0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63  annel "---- chec
12700 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20  king for SQLite
12710 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20  core library...
12720 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  "....      if {[
12730 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
12740 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
12750 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
12760 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
12770 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
12780 74 65 2e 53 51 4c 69 74 65 33 20 53 51 4c 69 74  te.SQLite3 SQLit
12790 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  eVersion..
127a0 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d  } version] == 0}
127b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
127c0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
127d0 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65  TE: Check if the
127e0 20 72 65 74 75 72 6e 65 64 20 76 65 72 73 69 6f   returned versio
127f0 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 66 20  n was null.  If
12800 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 61 73 79  so, make it easy
12810 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
12820 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 20 20    to spot...
12830 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
12840 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
12850 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30  h $version] == 0 12860 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 12870 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 set version 12880 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d null.. }. 12890 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 128a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 # NOTE: At 128b0 74 65 6d 70 74 20 74 6f 20 71 75 65 72 79 20 74 tempt to query t 128c0 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 he Fossil source 128d0 20 69 64 65 6e 74 69 66 69 65 72 20 66 6f 72 20 identifier for 128e0 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 the SQLite.. 128f0 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72 65 # core 12900 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 library... 12910 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 12920 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 12930 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 12940 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 12950 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 12960 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 12970 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 12980 33 20 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 3 SQLiteSourceId 12990 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 6f 75 72 .. } sour 129a0 63 65 49 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ceId]} then {.. 129b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 129c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 129d0 20 66 61 69 6c 65 64 20 74 6f 20 71 75 65 72 79 failed to query 129e0 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 72 the Fossil sour 129f0 63 65 20 69 64 65 6e 74 69 66 69 65 72 2e 0d 0a ce identifier... 12a00 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 12a10 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 set sourc 12a20 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 eId unknown.. 12a30 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 12a40 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 12a50 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 OTE: Check if th 12a60 65 20 72 65 74 75 72 6e 65 64 20 46 6f 73 73 69 e returned Fossi 12a70 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 l source identif 12a80 69 65 72 20 77 61 73 20 6e 75 6c 6c 2e 20 20 49 ier was null. I 12a90 66 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 f.. # 12aa0 20 20 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65 so, make it e 12ab0 61 73 79 20 74 6f 20 73 70 6f 74 2e 0d 0a 20 20 asy to spot... 12ac0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12ad0 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e if {[string len 12ae0 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d 20 3d gth$sourceId] =
12af0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
12b00 20 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63         set sourc
12b10 65 49 64 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20  eId null..
12b20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
12b30 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
12b40 3a 20 59 65 73 2c 20 74 68 65 20 53 51 4c 69 74  : Yes, the SQLit
12b50 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 61  e core library a
12b60 70 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61  ppears to be ava
12b70 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20  ilable...
12b80 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   #..        addC
12b90 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c 69 74 65  onstraint SQLite
12ba0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
12bb0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52         # NOTE: R
12bc0 65 63 6f 72 64 20 76 65 72 73 69 6f 6e 20 6f 66  ecord version of
12bd0 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
12be0 20 6c 69 62 72 61 72 79 20 66 6f 72 20 6c 61 74   library for lat
12bf0 65 72 20 75 73 65 0d 0a 20 20 20 20 20 20 20 20  er use..
12c00 23 20 20 20 20 20 20 20 62 79 20 74 65 73 74 20  #       by test
12c10 63 6f 6e 73 74 72 61 69 6e 74 20 65 78 70 72 65  constraint expre
12c20 73 73 69 6f 6e 73 2c 20 65 74 63 2e 20 20 49 66  ssions, etc.  If
12c30 20 74 68 69 73 20 76 61 6c 75 65 20 68 61 73 0d   this value has.
12c40 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
12c50 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 73 65   already been se
12c60 74 20 28 6f 72 20 6f 76 65 72 72 69 64 64 65 6e  t (or overridden
12c70 29 2c 20 73 6b 69 70 20 73 65 74 74 69 6e 67 20  ), skip setting
12c80 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
12c90 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
12ca0 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 72 65  fo exists ::core
12cb0 5f 6c 69 62 72 61 72 79 5f 76 65 72 73 69 6f 6e  _library_version
12cc0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12cd0 20 20 20 20 20 73 65 74 20 3a 3a 63 6f 72 65 5f       set ::core_
12ce0 6c 69 62 72 61 72 79 5f 76 65 72 73 69 6f 6e 20  library_version
12cf0 24 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20  $version.. 12d00 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 }.... t 12d10 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
12d20 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28  ppendArgs "yes (
12d30 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24  " $version " "$
12d40 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d  sourceId ")\n"].
12d50 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
12d60 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $12d70 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 channel no\n.. 12d80 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 12d90 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 . proc checkF 12da0 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f 70 20 orSQLiteInterop 12db0 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 { channel } {.. 12dc0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
12dd0 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69  nel "---- checki
12de0 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 69 6e  ng for SQLite in
12df0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 2e  terop assembly..
12e00 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  . "....      if
12e10 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
12e20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
12e30 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c   -flags +NonPubl
12e40 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ic \..
12e50 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
12e60 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 6e 74  Lite.SQLite3 Int
12e70 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20  eropVersion..
12e80 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d     } version] ==
12e90 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
12ea0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
12eb0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
12ec0 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 65 72  the returned ver
12ed0 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e 20 20  sion was null.
12ee0 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 20 65  If so, make it e
12ef0 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20  asy..        #
12f00 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d 0a 20       to spot...
12f10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
12f20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
12f30 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d 20 3d  ngth $version] = 12f40 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. 12f50 20 20 20 20 20 20 20 73 65 74 20 76 65 72 73 69 set versi 12f60 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 on null.. 12f70 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 12f80 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 12f90 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 65 72 Attempt to quer 12fa0 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 6f 75 y the Fossil sou 12fb0 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 20 66 rce identifier f 12fc0 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d 0a 20 or the SQLite.. 12fd0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 12fe0 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 ore library... 12ff0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13000 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 13010 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 13020 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 13030 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 13040 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 13050 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 13060 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f 75 72 ite3 InteropSour 13070 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 ceId.. } 13080 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e 20 sourceId]} then 13090 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 130a0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 130b0 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 71 : We failed to q 130c0 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 uery the Fossil 130d0 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 source identifie 130e0 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. 130f0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 . set s 13100 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e 0d ourceId unknown. 13110 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 13120 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13130 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 13140 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 46 f the returned F 13150 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 ossil source ide 13160 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c 6c ntifier was null 13170 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 23 . If.. # 13180 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 20 so, make 13190 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 2e it easy to spot. 131a0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 131b0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 131c0 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 length$sourceI
131d0 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  d] == 0} then {.
131e0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73  .          set s
131f0 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20 20  ourceId null..
13200 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
13210 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
13220 4e 4f 54 45 3a 20 42 65 66 6f 72 65 20 61 63 74  NOTE: Before act
13230 75 61 6c 6c 79 20 61 64 64 69 6e 67 20 74 68 65  ually adding the
13240 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
13250 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 0d  , make sure the.
13260 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
13270 20 76 65 72 73 69 6f 6e 20 69 73 20 76 61 6c 69   version is vali
13280 64 20 28 69 2e 65 2e 20 6e 6f 74 20 6a 75 73 74  d (i.e. not just
13290 20 74 68 61 74 20 77 65 20 63 6f 75 6c 64 20 71   that we could q
132a0 75 65 72 79 20 69 74 29 2e 0d 0a 20 20 20 20 20  uery it)...
132b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66     #..        if
132c0 20 7b 24 76 65 72 73 69 6f 6e 20 6e 65 20 22 6e   {$version ne "n 132d0 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ull"} then {.. 132e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 132f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 # NOTE: Yes 13300 2c 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 , the SQLite int 13310 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61 70 erop assembly ap 13320 70 65 61 72 73 20 74 6f 20 62 65 20 61 76 61 69 pears to be avai 13330 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 lable... 13340 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 #.. a 13350 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 4c ddConstraint SQL 13360 69 74 65 49 6e 74 65 72 6f 70 0d 0a 0d 0a 20 20 iteInterop.... 13370 20 20 20 20 20 20 20 20 73 65 74 20 61 6e 73 77 set answ 13380 65 72 20 79 65 73 0d 0a 20 20 20 20 20 20 20 20 er yes.. 13390 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 133a0 20 20 20 20 73 65 74 20 61 6e 73 77 65 72 20 6e set answer n 133b0 6f 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a o.. }.... 133c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
133d0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
133e0 67 73 20 24 61 6e 73 77 65 72 20 22 20 28 22 20  gs $answer " (" 133f0 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f$version " " $so 13400 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20 urceId ")\n"].. 13410 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 13420 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
13430 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20  annel no\n..
13440 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
13450 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72     proc checkFor
13460 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
13470 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e  tant { channel n
13480 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ame } {..      t
13490 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 134a0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 134b0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 "---- che 134c0 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d cking for System 134d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66 .Data.SQLite def 134e0 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22 ine constant \"" 134f0 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20$name \..
13500 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d      "\"... "]...
13510 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63  .      if {[catc
13520 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a  h {..        obj
13530 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
13540 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
13550 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
13560 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
13570 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e  QLite3 DefineCon
13580 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20  stants..      }
13590 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d  defineConstants]
135a0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
135b0 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61         if {[lsea
135c0 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61  rch -exact -noca
135d0 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61  se $defineConsta 135e0 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 nts$name] != -1
135f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13600 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
13610 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68   # NOTE: Yes, th
13620 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61  is define consta
13630 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77  nt was enabled w
13640 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d  hen the managed.
13650 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
13660 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20     assembly was
13670 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20  compiled...
13680 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
13690 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20    addConstraint
136a0 5b 61 70 70 65 6e 64 41 72 67 73 20 5b 67 65 74  [appendArgs [get
136b0 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
136c0 74 61 6e 74 50 72 65 66 69 78 5d 20 24 6e 61 6d  tantPrefix] $nam 136d0 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 136e0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
136f0 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d 20  es\n..        }
13700 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
13710 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 13720 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 7d no\n.. } 13730 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 13740 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 13750 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f 72 5c 6e$channel error\n
13760 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
13770 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68  .....    proc ch
13780 65 63 6b 46 6f 72 53 51 4c 69 74 65 43 6f 6d 70  eckForSQLiteComp
13790 69 6c 65 4f 70 74 69 6f 6e 20 7b 20 63 68 61 6e  ileOption { chan
137a0 6e 65 6c 20 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20  nel name } {..
137b0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 137c0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 137d0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- 137e0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 - checking for S 137f0 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 QLite interop as 13800 73 65 6d 62 6c 79 20 63 6f 6d 70 69 6c 65 20 6f sembly compile o 13810 70 74 69 6f 6e 20 5c 22 22 20 5c 0d 0a 20 20 20 ption \"" \.. 13820 20 20 20 20 20 20 20 24 6e 61 6d 65 20 22 5c 22$name "\"
13830 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20  ... "]....
13840 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
13850 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
13860 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
13870 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
13880 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
13890 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
138a0 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70  InteropCompileOp
138b0 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d 20 63  tions..      } c
138c0 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 5d 20 3d  ompileOptions] =
138d0 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
138e0 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 72 63       if {[lsearc
138f0 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 73 65  h -exact -nocase
13900 20 24 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73   $compileOptions 13910 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31 7d 20 74$name] != -1} t
13920 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
13930 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
13940 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 69 73 20  NOTE: Yes, this
13950 63 6f 6d 70 69 6c 65 20 6f 70 74 69 6f 6e 20 77  compile option w
13960 61 73 20 65 6e 61 62 6c 65 64 20 77 68 65 6e 20  as enabled when
13970 74 68 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20  the interop..
13980 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
13990 73 73 65 6d 62 6c 79 20 77 61 73 20 63 6f 6d 70  ssembly was comp
139a0 69 6c 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  iled...
139b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64   #..          ad
139c0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
139d0 65 6e 64 41 72 67 73 20 5b 67 65 74 53 51 4c 69  endArgs [getSQLi
139e0 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 50  teCompileOptionP
139f0 72 65 66 69 78 5d 20 24 6e 61 6d 65 5d 0d 0a 0d  refix] $name]... 13a00 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 13a10 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d$channel yes\n.
13a20 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
13a30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
13a40 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e  ts $channel no\n 13a50 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 13a60 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 13a70 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
13a80 6e 65 6c 20 65 72 72 6f 72 5c 6e 0d 0a 20 20 20  nel error\n..
13a90 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74 70     }....      tp
13aa0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 13ab0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 13ac0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 13ad0 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 king for SQLite 13ae0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 63 6f 6d core library com 13af0 70 69 6c 65 20 6f 70 74 69 6f 6e 20 5c 22 22 20 pile option \"" 13b00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 6e 61 \..$na
13b10 6d 65 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a  me "\"... "]....
13b20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
13b30 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
13b40 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
13b50 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
13b60 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
13b70 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51  m.Data.SQLite.SQ
13b80 4c 69 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70  Lite3 SQLiteComp
13b90 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20  ileOptions..
13ba0 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f    } compileOptio
13bb0 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ns] == 0} then {
13bc0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c  ..        if {[l
13bd0 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e  search -exact -n
13be0 6f 63 61 73 65 20 24 63 6f 6d 70 69 6c 65 4f 70  ocase $compileOp 13bf0 74 69 6f 6e 73 20 24 6e 61 6d 65 5d 20 21 3d 20 tions$name] !=
13c00 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  -1} then {..
13c10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13c20 20 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20     # NOTE: Yes,
13c30 74 68 69 73 20 63 6f 6d 70 69 6c 65 20 6f 70 74  this compile opt
13c40 69 6f 6e 20 77 61 73 20 65 6e 61 62 6c 65 64 20  ion was enabled
13c50 77 68 65 6e 20 74 68 65 20 53 51 4c 69 74 65 0d  when the SQLite.
13c60 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
13c70 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20     core library
13c80 77 61 73 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20  was compiled...
13c90 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
13ca0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
13cb0 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
13cc0 5b 67 65 74 53 51 4c 69 74 65 43 6f 6d 70 69 6c  [getSQLiteCompil
13cd0 65 4f 70 74 69 6f 6e 50 72 65 66 69 78 5d 20 24  eOptionPrefix] $13ce0 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 name].... 13cf0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
13d00 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20  l yes\n..
13d10 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
13d20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 13d30 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 nel no\n.. 13d40 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 13d50 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 13d60 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f ts$channel erro
13d70 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  r\n..      }..
13d80 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
13d90 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d   getDateTimeForm
13da0 61 74 20 7b 20 7b 74 69 6d 65 5a 6f 6e 65 20 74  at { {timeZone t
13db0 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20  rue} } {..
13dc0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
13dd0 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
13de0 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74  simply returns t
13df0 68 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74  he "default" Dat
13e00 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65  eTime format use
13e10 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  d..      #
13e20 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69   by the test sui
13e30 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
13e40 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
13e50 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f  ists ::datetime_
13e60 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20  format] && \..
13e70 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
13e80 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69  length $::dateti 13e90 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 me_format] > 0} 13ea0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 13eb0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 13ec0 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 E: Return the ma 13ed0 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 nually overridde 13ee0 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 n value for the 13ef0 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e DateTime format. 13f00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 13f10 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 return$::d
13f20 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a  atetime_format..
13f30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
13f40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13f50 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72     # NOTE: Retur
13f60 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74  n an ISO8601 Dat
13f70 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d  eTime format com
13f80 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c  patible with SQL
13f90 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  ite,..        #
13fa0 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74        System.Dat
13fb0 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75  a.SQLite, and su
13fc0 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64  itable for round
13fd0 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74  -tripping with t
13fe0 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
13ff0 20 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61      DateTime cla
14000 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77  ss of the framew
14010 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61  ork.  If this va
14020 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d  lue is changed,.
14030 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
14040 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d   various tests m
14050 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20  ay fail...
14060 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
14070 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20  urn [appendArgs
14080 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  \..            "
14090 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d  yyyy-MM-dd HH:mm
140a0 3a 73 73 2e 46 46 46 46 46 46 46 22 20 5b 65 78  :ss.FFFFFFF" [ex
140b0 70 72 20 7b 24 74 69 6d 65 5a 6f 6e 65 20 3f 20  pr {$timeZone ? 140c0 22 4b 22 20 3a 20 22 22 7d 5d 5d 0d 0a 20 20 20 "K" : ""}]].. 140d0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 140e0 20 20 20 20 70 72 6f 63 20 67 65 74 44 61 74 65 proc getDate 140f0 54 69 6d 65 54 69 63 6b 73 20 7b 20 76 61 6c 75 TimeTicks { valu 14100 65 20 7b 6c 6f 63 61 6c 20 22 22 7d 20 7b 64 65 e {local ""} {de 14110 66 61 75 6c 74 20 22 22 7d 20 7d 20 7b 0d 0a 20 fault ""} } {.. 14120 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 14130 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 length$value]
14140 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
14150 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 65        return $de 14160 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 7d 0d 0a fault.. }.. 14170 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat 14180 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 ch {.. se 14190 74 20 64 61 74 65 54 69 6d 65 20 5b 6f 62 6a 65 t dateTime [obje 141a0 63 74 20 69 6e 76 6f 6b 65 20 2d 63 72 65 61 74 ct invoke -creat 141b0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 141c0 20 2d 70 61 72 61 6d 65 74 65 72 74 79 70 65 73 -parametertypes 141d0 20 5b 6c 69 73 74 20 53 74 72 69 6e 67 20 53 74 [list String St 141e0 72 69 6e 67 20 49 46 6f 72 6d 61 74 50 72 6f 76 ring IFormatProv 141f0 69 64 65 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 ider \.. 14200 20 20 20 20 53 79 73 74 65 6d 2e 47 6c 6f 62 61 System.Globa 14210 6c 69 7a 61 74 69 6f 6e 2e 44 61 74 65 54 69 6d lization.DateTim 14220 65 53 74 79 6c 65 73 5d 20 44 61 74 65 54 69 6d eStyles] DateTim 14230 65 20 50 61 72 73 65 45 78 61 63 74 20 5c 0d 0a e ParseExact \.. 14240 20 20 20 20 20 20 20 20 20 20 20 20 24 76 61 6c$val
14250 75 65 20 5b 67 65 74 44 61 74 65 54 69 6d 65 46  ue [getDateTimeF
14260 6f 72 6d 61 74 5d 20 6e 75 6c 6c 20 41 64 6a 75  ormat] null Adju
14270 73 74 54 6f 55 6e 69 76 65 72 73 61 6c 5d 0d 0a  stToUniversal]..
14280 20 20 20 20 20 20 7d 5d 7d 20 74 68 65 6e 20 7b        }]} then {
14290 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
142a0 20 24 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20   $default.. 142b0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 142c0 5b 73 74 72 69 6e 67 20 69 73 20 62 6f 6f 6c 65 [string is boole 142d0 61 6e 20 2d 73 74 72 69 63 74 20 24 6c 6f 63 61 an -strict$loca
142e0 6c 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  l]} then {..
142f0 20 20 20 20 73 65 74 20 64 61 74 65 54 69 6d 65      set dateTime
14300 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   [object invoke
14310 2d 63 72 65 61 74 65 20 44 61 74 65 54 69 6d 65  -create DateTime
14320 20 53 70 65 63 69 66 79 4b 69 6e 64 20 5c 0d 0a   SpecifyKind \..
14330 20 20 20 20 20 20 20 20 20 20 20 20 24 64 61 74              $dat 14340 65 54 69 6d 65 20 55 74 63 5d 0d 0a 20 20 20 20 eTime Utc].. 14350 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 14360 20 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a 65 return [obje 14370 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65 54 ct invoke$dateT
14380 69 6d 65 20 54 69 63 6b 73 5d 0d 0a 20 20 20 20  ime Ticks]..
14390 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
143a0 7b 24 6c 6f 63 61 6c 7d 20 74 68 65 6e 20 7b 0d  {$local} then {. 143b0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 143c0 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
143d0 64 61 74 65 54 69 6d 65 20 54 6f 4c 6f 63 61 6c  dateTime ToLocal
143e0 54 69 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20  Time.Ticks]..
143f0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
14400 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6f 62 6a       return [obj
14410 65 63 74 20 69 6e 76 6f 6b 65 20 24 64 61 74 65  ect invoke $date 14420 54 69 6d 65 20 54 6f 55 6e 69 76 65 72 73 61 6c Time ToUniversal 14430 54 69 6d 65 2e 54 69 63 6b 73 5d 0d 0a 20 20 20 Time.Ticks].. 14440 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 14450 20 20 20 20 70 72 6f 63 20 67 65 74 50 72 6f 70 proc getProp 14460 65 72 74 69 65 73 20 7b 20 6f 62 6a 65 63 74 20 erties { object 14470 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 varName } {.. 14480 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
14490 61 6d 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a  ame properties..
144a0 0d 0a 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e  ..      set coun
144b0 74 20 30 0d 0a 20 20 20 20 20 20 73 65 74 20 6e  t 0..      set n
144c0 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20  ames [list]....
144d0 20 20 20 20 20 69 66 20 7b 5b 69 73 4f 62 6a 65       if {[isObje
144e0 63 74 48 61 6e 64 6c 65 20 24 6f 62 6a 65 63 74  ctHandle $object 144f0 5d 20 26 26 20 24 6f 62 6a 65 63 74 20 6e 65 20 ] &&$object ne
14500 22 6e 75 6c 6c 22 7d 20 74 68 65 6e 20 7b 0d 0a  "null"} then {..
14510 20 20 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70          eval lap
14520 70 65 6e 64 20 6e 61 6d 65 73 20 5b 6f 62 6a 65  pend names [obje
14530 63 74 20 6d 65 6d 62 65 72 73 20 5c 0d 0a 20 20  ct members \..
14540 20 20 20 20 20 20 20 20 20 20 2d 6d 65 6d 62 65            -membe
14550 72 74 79 70 65 73 20 50 72 6f 70 65 72 74 79 20  rtypes Property
14560 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 6a 65 63  -nameonly $objec 14570 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 t].... ev 14580 61 6c 20 6c 61 70 70 65 6e 64 20 6e 61 6d 65 73 al lappend names 14590 20 5b 6f 62 6a 65 63 74 20 6d 65 6d 62 65 72 73 [object members 145a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 145b0 2d 6d 65 6d 62 65 72 74 79 70 65 73 20 46 69 65 -membertypes Fie 145c0 6c 64 20 2d 6e 61 6d 65 6f 6e 6c 79 20 24 6f 62 ld -nameonly$ob
145d0 6a 65 63 74 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ject]..      }..
145e0 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20  ..      foreach
145f0 6e 61 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20  name $names {.. 14600 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 14610 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f h {.. o 14620 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 6f 62 bject invoke -ob 14630 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 jectflags +NoDis 14640 70 6f 73 65 20 24 6f 62 6a 65 63 74 20 24 6e 61 pose$object $na 14650 6d 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 76 61 me.. } va 14660 6c 75 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 lue] == 0} then 14670 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 14680 7b 5b 69 73 4f 62 6a 65 63 74 48 61 6e 64 6c 65 {[isObjectHandle 14690 20 24 76 61 6c 75 65 5d 20 26 26 20 24 76 61 6c$value] && $val 146a0 75 65 20 6e 65 20 22 6e 75 6c 6c 22 7d 20 74 68 ue ne "null"} th 146b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 146c0 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c set error null 146d0 3b 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 ; object invoke 146e0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 146f0 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 14700 20 20 20 20 20 2d 6d 61 72 73 68 61 6c 66 6c 61 -marshalfla 14710 67 73 20 2b 4e 6f 48 61 6e 64 6c 65 20 49 6e 74 gs +NoHandle Int 14720 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi 14730 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ve \.. 14740 20 20 20 20 20 20 41 64 64 4f 62 6a 65 63 74 52 AddObjectR 14750 65 66 65 72 65 6e 63 65 20 4f 6b 20 24 76 61 6c eference Ok$val
14760 75 65 20 65 72 72 6f 72 0d 0a 0d 0a 20 20 20 20  ue error....
14770 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20          lappend
14780 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63  properties(objec
14790 74 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20  ts) [list $name 147a0 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20$value]..
147b0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
147c0 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
147d0 20 70 72 6f 70 65 72 74 69 65 73 28 76 61 6c 75   properties(valu
147e0 65 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20  es) [list $name 147f0 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20 20 20 20$value]..
14800 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
14810 20 20 69 6e 63 72 20 63 6f 75 6e 74 0d 0a 20 20    incr count..
14820 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
14830 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e            lappen
14840 64 20 70 72 6f 70 65 72 74 69 65 73 28 65 72 72  d properties(err
14850 6f 72 73 29 20 5b 6c 69 73 74 20 24 6e 61 6d 65  ors) [list $name 14860 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 5d 0d 0a$::errorCode]..
14870 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
14880 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
14890 72 6e 20 24 63 6f 75 6e 74 0d 0a 20 20 20 20 7d  rn $count.. } 148a0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 148b0 74 41 6c 6c 50 72 6f 70 65 72 74 69 65 73 20 7b tAllProperties { 148c0 20 6f 62 6a 65 63 74 20 76 61 72 4e 61 6d 65 20 object varName 148d0 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 } {.. upvar 148e0 20 31 20 24 76 61 72 4e 61 6d 65 20 70 72 6f 70 1$varName prop
148f0 65 72 74 69 65 73 0d 0a 20 20 20 20 20 20 73 65  erties..      se
14900 74 20 76 61 6c 75 65 20 24 6f 62 6a 65 63 74 0d  t value $object. 14910 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20 7b ... while { 14920 74 72 75 65 7d 20 7b 0d 0a 20 20 20 20 20 20 20 true} {.. 14930 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 14940 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 73 65 ts properties(se 14950 65 6e 4f 62 6a 65 63 74 73 29 5d 20 7c 7c 20 5c enObjects)] || \ 14960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 76 ..$v
14970 61 6c 75 65 20 6e 69 20 24 70 72 6f 70 65 72 74  alue ni $propert 14980 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 ies(seenObjects) 14990 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 149a0 20 20 20 20 67 65 74 50 72 6f 70 65 72 74 69 65 getPropertie 149b0 73 20 24 76 61 6c 75 65 20 70 72 6f 70 65 72 74 s$value propert
149c0 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 20 6c  ies..          l
149d0 61 70 70 65 6e 64 20 70 72 6f 70 65 72 74 69 65  append propertie
149e0 73 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 20 24  s(seenObjects) $149f0 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 7d value.. } 14a00 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 14a10 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 70 72 ![info exists pr 14a20 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 73 operties(objects 14a30 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 14a40 20 20 20 20 20 20 62 72 65 61 6b 0d 0a 20 20 20 break.. 14a50 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 14a60 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 if {[llength$
14a70 70 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63  properties(objec
14a80 74 73 29 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ts)] == 0} then
14a90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 6e 73  {..          uns
14aa0 65 74 20 70 72 6f 70 65 72 74 69 65 73 28 6f 62  et properties(ob
14ab0 6a 65 63 74 73 29 3b 20 62 72 65 61 6b 0d 0a 20  jects); break..
14ac0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
14ad0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 6c      set value [l
14ae0 69 6e 64 65 78 20 5b 6c 69 6e 64 65 78 20 24 70  index [lindex $p 14af0 72 6f 70 65 72 74 69 65 73 28 6f 62 6a 65 63 74 roperties(object 14b00 73 29 20 30 5d 20 65 6e 64 5d 0d 0a 20 20 20 20 s) 0] end].. 14b10 20 20 20 20 73 65 74 20 70 72 6f 70 65 72 74 69 set properti 14b20 65 73 28 6f 62 6a 65 63 74 73 29 20 5b 6c 72 61 es(objects) [lra 14b30 6e 67 65 20 24 70 72 6f 70 65 72 74 69 65 73 28 nge$properties(
14b40 6f 62 6a 65 63 74 73 29 20 31 20 65 6e 64 5d 0d  objects) 1 end].
14b50 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
14b60 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
14b70 74 73 20 70 72 6f 70 65 72 74 69 65 73 28 73 65  ts properties(se
14b80 65 6e 4f 62 6a 65 63 74 73 29 5d 7d 20 74 68 65  enObjects)]} the
14b90 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f 72  n {..        for
14ba0 65 61 63 68 20 76 61 6c 75 65 20 24 70 72 6f 70  each value $prop 14bb0 65 72 74 69 65 73 28 73 65 65 6e 4f 62 6a 65 63 erties(seenObjec 14bc0 74 73 29 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 ts) {.. 14bd0 20 69 66 20 7b 24 76 61 6c 75 65 20 65 71 20 24 if {$value eq $14be0 6f 62 6a 65 63 74 7d 20 63 6f 6e 74 69 6e 75 65 object} continue 14bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 14c00 68 20 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 h {object dispos 14c10 65 20 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 e$value}..
14c20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
14c30 75 6e 73 65 74 20 70 72 6f 70 65 72 74 69 65 73  unset properties
14c40 28 73 65 65 6e 4f 62 6a 65 63 74 73 29 0d 0a 20  (seenObjects)..
14c50 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
14c60 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 56 61  ..    proc getVa
14c70 72 69 61 62 6c 65 73 20 7b 20 76 61 72 4e 61 6d  riables { varNam
14c80 65 73 20 7b 6f 62 6a 65 63 74 73 20 66 61 6c 73  es {objects fals
14c90 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
14ca0 74 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 5d 0d  t result [list].
14cb0 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68  ...      foreach
14cc0 20 76 61 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d   varName $varNam 14cd0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 es {.. if 14ce0 20 7b 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 {[uplevel 1 [li 14cf0 73 74 20 61 72 72 61 79 20 65 78 69 73 74 73 20 st array exists 14d00 24 76 61 72 4e 61 6d 65 5d 5d 7d 20 74 68 65 6e$varName]]} then
14d10 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
14d20 74 20 61 72 72 61 79 4e 61 6d 65 20 24 76 61 72  t arrayName $var 14d30 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 Name.... 14d40 20 20 66 6f 72 65 61 63 68 20 65 6c 65 6d 65 6e foreach elemen 14d50 74 4e 61 6d 65 20 5b 75 70 6c 65 76 65 6c 20 31 tName [uplevel 1 14d60 20 5b 6c 69 73 74 20 61 72 72 61 79 20 6e 61 6d [list array nam 14d70 65 73 20 24 61 72 72 61 79 4e 61 6d 65 5d 5d 20 es$arrayName]]
14d80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
14d90 65 74 20 6e 61 6d 65 20 5b 61 70 70 65 6e 64 41  et name [appendA
14da0 72 67 73 20 24 61 72 72 61 79 4e 61 6d 65 20 28  rgs $arrayName ( 14db0 20 24 65 6c 65 6d 65 6e 74 4e 61 6d 65 20 29 5d$elementName )]
14dc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
14dd0 74 20 76 61 72 56 61 6c 75 65 20 5b 75 70 6c 65  t varValue [uple
14de0 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 65 74 20  vel 1 [list set
14df0 24 6e 61 6d 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20  $name]].... 14e00 20 20 20 20 20 20 20 69 66 20 7b 24 6f 62 6a 65 if {$obje
14e10 63 74 73 20 26 26 20 5b 69 73 4f 62 6a 65 63 74  cts && [isObject
14e20 48 61 6e 64 6c 65 20 24 76 61 72 56 61 6c 75 65  Handle $varValue 14e30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 14e40 20 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d unset - 14e50 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70 72 6f 70 65 nocomplain prope 14e60 72 74 69 65 73 0d 0a 20 20 20 20 20 20 20 20 20 rties.. 14e70 20 20 20 20 20 67 65 74 41 6c 6c 50 72 6f 70 65 getAllPrope 14e80 72 74 69 65 73 20 24 76 61 72 56 61 6c 75 65 20 rties$varValue
14e90 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a 20 20  properties....
14ea0 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70              lapp
14eb0 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74  end result [list
14ec0 20 24 6e 61 6d 65 20 5b 61 72 72 61 79 20 67 65   $name [array ge 14ed0 74 20 70 72 6f 70 65 72 74 69 65 73 5d 5d 0d 0a t properties]].. 14ee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c } el 14ef0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 14f00 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 lappend resu 14f10 6c 74 20 5b 6c 69 73 74 20 24 6e 61 6d 65 20 24 lt [list$name $14f20 76 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20 20 20 varValue].. 14f30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 14f40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 14f50 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 14f60 20 20 20 73 65 74 20 76 61 72 56 61 6c 75 65 20 set varValue 14f70 5b 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 [uplevel 1 [list 14f80 20 73 65 74 20 24 76 61 72 4e 61 6d 65 5d 5d 0d set$varName]].
14f90 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
14fa0 7b 24 6f 62 6a 65 63 74 73 20 26 26 20 5b 69 73  {$objects && [is 14fb0 4f 62 6a 65 63 74 48 61 6e 64 6c 65 20 24 76 61 ObjectHandle$va
14fc0 72 56 61 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d  rValue]} then {.
14fd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 6e 73  .            uns
14fe0 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 70  et -nocomplain p
14ff0 72 6f 70 65 72 74 69 65 73 0d 0a 20 20 20 20 20  roperties..
15000 20 20 20 20 20 20 20 67 65 74 41 6c 6c 50 72 6f         getAllPro
15010 70 65 72 74 69 65 73 20 24 76 61 72 56 61 6c 75  perties $varValu 15020 65 20 70 72 6f 70 65 72 74 69 65 73 0d 0a 0d 0a e properties.... 15030 20 20 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 lapp 15040 65 6e 64 20 72 65 73 75 6c 74 20 5b 6c 69 73 74 end result [list 15050 20 24 76 61 72 4e 61 6d 65 20 5b 61 72 72 61 79$varName [array
15060 20 67 65 74 20 70 72 6f 70 65 72 74 69 65 73 5d   get properties]
15070 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65  ]..          } e
15080 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
15090 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
150a0 74 20 5b 6c 69 73 74 20 24 76 61 72 4e 61 6d 65  t [list $varName 150b0 20 24 76 61 72 56 61 6c 75 65 5d 0d 0a 20 20 20$varValue]..
150c0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
150d0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
150e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 150f0 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 15100 20 20 20 20 70 72 6f 63 20 65 6e 75 6d 65 72 61 proc enumera 15110 62 6c 65 54 6f 4c 69 73 74 20 7b 20 65 6e 75 6d bleToList { enum 15120 65 72 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 20 20 erable } {.. 15130 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c 69 set result [li 15140 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 st].... if 15150 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 15160 24 65 6e 75 6d 65 72 61 62 6c 65 5d 20 3d 3d 20$enumerable] ==
15170 30 20 7c 7c 20 24 65 6e 75 6d 65 72 61 62 6c 65  0 || $enumerable 15180 20 65 71 20 22 6e 75 6c 6c 22 7d 20 74 68 65 6e eq "null"} then 15190 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 151a0 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
151b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 6f 62 6a    }....      obj
151c0 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
151d0 61 73 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61  as item $enumera 151e0 62 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 ble {.. i 151f0 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 15200 68 20 24 69 74 65 6d 5d 20 3e 20 30 7d 20 74 68 h$item] > 0} th
15210 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
15220 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5b  lappend result [
15230 24 69 74 65 6d 20 54 6f 53 74 72 69 6e 67 5d 0d  $item ToString]. 15240 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 15250 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 15260 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 urn$result..
15270 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
15280 63 61 74 63 68 41 6e 64 52 65 74 75 72 6e 20 7b  catchAndReturn {
15290 20 73 63 72 69 70 74 20 7b 73 74 61 63 6b 54 72   script {stackTr
152a0 61 63 65 20 66 61 6c 73 65 7d 20 7b 73 74 72 69  ace false} {stri
152b0 63 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20  ct true} } {..
152c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
152d0 4f 54 45 3a 20 45 76 61 6c 75 61 74 65 20 74 68  OTE: Evaluate th
152e0 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 64 65  e script provide
152f0 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 20  d by our caller
15300 69 6e 20 74 68 65 69 72 20 63 6f 6e 74 65 78 74  in their context
15310 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
15320 20 63 61 70 74 75 72 69 6e 67 20 62 6f 74 68 20   capturing both
15330 74 68 65 20 72 65 73 75 6c 74 20 61 6e 64 20 74  the result and t
15340 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  he return code..
15350 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15360 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 20  set code [catch
15370 7b 75 70 6c 65 76 65 6c 20 31 20 24 73 63 72 69  {uplevel 1 $scri 15380 70 74 7d 20 72 65 73 75 6c 74 5d 0d 0a 0d 0a 20 pt} result].... 15390 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 153a0 4e 4f 54 45 3a 20 44 69 64 20 74 68 65 20 73 63 NOTE: Did the sc 153b0 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 79 ript provided by 153c0 20 6f 75 72 20 63 61 6c 6c 65 72 20 4e 4f 54 20 our caller NOT 153d0 72 61 69 73 65 20 61 6e 20 65 72 72 6f 72 3f 0d raise an error?. 153e0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 153f0 69 66 20 7b 24 73 74 72 69 63 74 20 26 26 20 24 if {$strict && $15400 63 6f 64 65 20 3d 3d 20 30 20 7c 7c 20 21 24 73 code == 0 || !$s
15410 74 72 69 63 74 20 26 26 20 24 63 6f 64 65 20 21  trict && $code ! 15420 3d 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 1} then {.. 15430 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15440 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2e # NOTE: Success. 15450 20 20 52 65 74 75 72 6e 20 61 20 6c 69 73 74 20 Return a list 15460 77 69 74 68 20 74 68 65 20 72 65 74 75 72 6e 20 with the return 15470 63 6f 64 65 20 61 6e 64 20 74 68 65 20 72 65 73 code and the res 15480 75 6c 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ult... #. 15490 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 154a0 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 72 65 73 [list$code $res 154b0 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ult].. } el 154c0 73 65 69 66 20 7b 24 73 74 61 63 6b 54 72 61 63 seif {$stackTrac
154d0 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
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 77 61 6e 74 73  Our caller wants
15510 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72   a full stack tr
15520 61 63 65 20 28 69 66 20 61 70 70 6c 69 63 61 62  ace (if applicab
15530 6c 65 29 2c 0d 0a 20 20 20 20 20 20 20 20 23 20  le),..        #
15540 20 20 20 20 20 20 72 65 74 75 72 6e 20 61 20 6c        return a l
15550 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74  ist with the ret
15560 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 68 65  urn code and the
15570 20 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d   result verbatim
15580 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
15590 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
155a0 73 74 20 24 63 6f 64 65 20 24 72 65 73 75 6c 74  st $code$result
155b0 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
155c0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
155d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61        # NOTE: Fa
155e0 69 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c  ilure.  Our call
155f0 65 72 20 64 6f 65 73 20 6e 6f 74 20 77 61 6e 74  er does not want
15600 20 61 20 66 75 6c 6c 20 73 74 61 63 6b 20 74 72   a full stack tr
15610 61 63 65 20 28 69 66 0d 0a 20 20 20 20 20 20 20  ace (if..
15620 20 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61   #       applica
15630 62 6c 65 29 2c 20 72 65 74 75 72 6e 20 61 20 6c  ble), return a l
15640 69 73 74 20 77 69 74 68 20 74 68 65 20 72 65 74  ist with the ret
15650 75 72 6e 20 63 6f 64 65 2c 20 74 68 65 20 65 72  urn code, the er
15660 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ror..        #
15670 20 20 20 20 20 63 6f 64 65 20 66 6f 72 20 74 68       code for th
15680 65 20 69 6e 74 65 72 70 72 65 74 65 72 2c 20 61  e interpreter, a
15690 6e 64 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  nd the error mes
156a0 73 61 67 65 20 75 70 20 74 6f 20 74 68 65 0d 0a  sage up to the..
156b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
156c0 70 6f 69 6e 74 20 77 68 65 72 65 20 74 68 65 20  point where the
156d0 73 74 61 63 6b 20 74 72 61 63 65 20 73 68 6f 75  stack trace shou
156e0 6c 64 20 73 74 61 72 74 2e 0d 0a 20 20 20 20 20  ld start...
156f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
15700 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65  turn [list $code 15710 20 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5c 0d$::errorCode \.
15720 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78  .            [ex
15730 74 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53  tractSystemDataS
15740 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65  QLiteExceptionMe
15750 73 73 61 67 65 20 24 72 65 73 75 6c 74 5d 5d 0d  ssage $result]]. 15760 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 15770 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 73 .... proc res 15780 65 74 45 78 63 65 70 74 69 6f 6e 20 7b 7d 20 7b etException {} { 15790 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 157a0 20 23 20 4e 4f 54 45 3a 20 52 65 73 65 74 20 65 # NOTE: Reset e 157b0 78 63 65 70 74 69 6f 6e 20 61 73 73 6f 63 69 61 xception associa 157c0 74 65 64 20 77 69 74 68 20 74 68 69 73 20 69 6e ted with this in 157d0 74 65 72 70 72 65 74 65 72 20 28 74 6f 20 6e 75 terpreter (to nu 157e0 6c 6c 29 2e 0d 0a 20 20 20 20 20 20 23 20 20 20 ll)... # 157f0 20 20 20 20 54 68 69 73 20 28 70 72 69 76 61 74 This (privat 15800 65 29 20 70 72 6f 70 65 72 74 79 20 69 73 20 6d e) property is m 15810 61 69 6e 74 61 69 6e 65 64 20 6f 6e 20 61 20 70 aintained on a p 15820 65 72 2d 74 68 72 65 61 64 20 62 61 73 69 73 2e er-thread basis. 15830 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 15840 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 15850 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 15860 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 15870 41 63 74 69 76 65 20 45 78 63 65 70 74 69 6f 6e Active Exception 15880 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 72 65 74 null.. ret 15890 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c urn "".. }... 158a0 0d 0a 20 20 20 20 70 72 6f 63 20 63 61 74 63 68 .. proc catch 158b0 41 6e 64 53 65 74 45 78 63 65 70 74 69 6f 6e 20 AndSetException 158c0 7b 20 73 63 72 69 70 74 20 7b 76 61 72 4e 61 6d { script {varNam 158d0 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 e ""} } {.. 158e0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 158f0 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 73 : Evaluate the s 15900 63 72 69 70 74 20 70 72 6f 76 69 64 65 64 20 62 cript provided b 15910 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 69 6e 20 y our caller in 15920 74 68 65 69 72 20 63 6f 6e 74 65 78 74 2e 0d 0a their context... 15930 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 63 #.. c 15940 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 atch {uplevel 1 15950 24 73 63 72 69 70 74 7d 0d 0a 0d 0a 20 20 20 20$script}....
15960 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
15970 45 3a 20 47 72 61 62 20 74 68 65 20 28 70 72 69  E: Grab the (pri
15980 76 61 74 65 29 20 65 78 63 65 70 74 69 6f 6e 20  vate) exception
15990 70 72 6f 70 65 72 74 79 20 66 72 6f 6d 20 74 68  property from th
159a0 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2c 0d  is interpreter,.
159b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66  .      #       f
159c0 6f 72 20 74 68 69 73 20 74 68 72 65 61 64 2c 20  or this thread,
159d0 61 6e 64 20 61 64 64 20 61 73 20 61 6e 20 6f 70  and add as an op
159e0 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64  aque object hand
159f0 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20  le in the..
15a00 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74   #       context
15a10 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d   of our caller..
15a20 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
15a30 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
15a40 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30  th $varName] > 0 15a50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15a60 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
15a70 6d 65 20 65 78 63 65 70 74 69 6f 6e 0d 0a 20 20  me exception..
15a80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73      }....      s
15a90 65 74 20 65 78 63 65 70 74 69 6f 6e 20 5b 6f 62  et exception [ob
15aa0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c 0d 0a 20  ject invoke \..
15ab0 20 20 20 20 20 20 20 20 20 2d 61 6c 69 61 73 20           -alias
15ac0 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
15ad0 63 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65  c Interpreter.Ge
15ae0 74 41 63 74 69 76 65 20 45 78 63 65 70 74 69 6f  tActive Exceptio
15af0 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75  n]....      retu
15b00 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  rn ""..    }....
15b10 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c  .    proc compil
15b20 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20  eCSharpWith {..
15b30 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20             text
15b40 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73  memory symbols s
15b50 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72  trict resultsVar
15b60 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61  Name errorsVarNa
15b70 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20  me fileNames..
15b80 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d            args }
15b90 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d   {..      try {.
15ba0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
15bb0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63      # NOTE: Sinc
15bc0 65 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74  e we are going t
15bd0 6f 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f  o use this metho
15be0 64 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73  d name a lot, as
15bf0 73 69 67 6e 0d 0a 20 20 20 20 20 20 20 20 23 20  sign..        #
15c00 20 20 20 20 20 20 69 74 20 74 6f 20 61 20 76 61        it to a va
15c10 72 69 61 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20  riable first...
15c20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
15c30 20 20 73 65 74 20 61 64 64 20 52 65 66 65 72 65    set add Refere
15c40 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41  ncedAssemblies.A
15c50 64 64 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  dd....        #.
15c60 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
15c70 20 43 72 65 61 74 65 20 74 68 65 20 62 61 73 65   Create the base
15c80 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c   command to eval
15c90 75 61 74 65 20 61 6e 64 20 61 64 64 20 74 68 65  uate and add the
15ca0 20 70 72 6f 70 65 72 74 79 0d 0a 20 20 20 20 20   property..
15cb0 20 20 20 23 20 20 20 20 20 20 20 73 65 74 74 69     #       setti
15cc0 6e 67 73 20 74 68 61 74 20 61 72 65 20 61 6c 6d  ngs that are alm
15cd0 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 64 65  ost always neede
15ce0 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 74 65  d by our unit te
15cf0 73 74 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  sts..        #
15d00 20 20 20 20 20 28 69 2e 65 2e 20 74 68 65 20 53       (i.e. the S
15d10 79 73 74 65 6d 20 61 6e 64 20 53 79 73 74 65 6d  ystem and System
15d20 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72  .Data assembly r
15d30 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20  eferences)...
15d40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15d50 73 65 74 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73  set command [lis
15d60 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
15d70 20 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 20 24   compileCSharp $15d80 74 65 78 74 20 24 6d 65 6d 6f 72 79 20 24 73 79 text$memory $sy 15d90 6d 62 6f 6c 73 20 24 73 74 72 69 63 74 20 72 65 mbols$strict re
15da0 73 75 6c 74 73 20 5c 0d 0a 20 20 20 20 20 20 20  sults \..
15db0 20 20 20 20 20 65 72 72 6f 72 73 20 24 61 64 64       errors $add 15dc0 20 53 79 73 74 65 6d 2e 64 6c 6c 20 24 61 64 64 System.dll$add
15dd0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c   System.Data.dll
15de0 20 24 61 64 64 20 5c 0d 0a 20 20 20 20 20 20 20   $add \.. 15df0 20 20 20 20 20 53 79 73 74 65 6d 2e 54 72 61 6e System.Tran 15e00 73 61 63 74 69 6f 6e 73 2e 64 6c 6c 20 24 61 64 sactions.dll$ad
15e10 64 20 53 79 73 74 65 6d 2e 58 6d 6c 2e 64 6c 6c  d System.Xml.dll
15e20 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
15e30 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
15e40 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72 6f 76  Add all the prov
15e50 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 73 20  ided file names
15e60 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65 66 65  as assembly refe
15e70 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 20 20  rences...
15e80 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
15e90 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69  ach fileName $fi 15ea0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 15eb0 20 20 20 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d lappend com 15ec0 6d 61 6e 64 20 24 61 64 64 20 5b 67 65 74 42 69 mand$add [getBi
15ed0 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69  naryFileName $fi 15ee0 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 leName].. 15ef0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d }.... #. 15f00 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 15f10 20 41 64 64 20 65 78 74 72 61 20 61 72 67 75 6d Add extra argum 15f20 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f ents, if any, to 15f30 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 the command to 15f40 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20 20 20 evaluate... 15f50 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 65 76 #.. ev 15f60 61 6c 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 al lappend comma 15f70 6e 64 20 24 61 72 67 73 0d 0a 0d 0a 20 20 20 20 nd$args....
15f80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
15f90 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 68 65   NOTE: Alias the
15fa0 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 6c 20   compiler local
15fb0 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72 72 6f  results and erro
15fc0 72 73 20 76 61 72 69 61 62 6c 65 73 20 74 6f 0d  rs variables to.
15fd0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
15fe0 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 6e 61   the variable na
15ff0 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20  mes provided by
16000 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20  our caller...
16010 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
16020 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
16030 74 68 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61  th $resultsVarNa 16040 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d me] > 0} then {. 16050 0a 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 . upvar 16060 20 31 20 24 72 65 73 75 6c 74 73 56 61 72 4e 61 1$resultsVarNa
16070 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20 20 20 20  me results..
16080 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
16090 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
160a0 67 74 68 20 24 65 72 72 6f 72 73 56 61 72 4e 61  gth $errorsVarNa 160b0 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d me] > 0} then {. 160c0 0a 20 20 20 20 20 20 20 20 20 20 75 70 76 61 72 . upvar 160d0 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d 1$errorsVarNam
160e0 65 20 65 72 72 6f 72 73 0d 0a 20 20 20 20 20 20  e errors..
160f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
16100 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
16110 3a 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63  : Evaluate the c
16120 6f 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70  onstructed [comp
16130 69 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61  ileCSharp] comma
16140 6e 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 20 20  nd and..
16150 23 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74  #       return t
16160 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20  he result...
16170 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 65      #..        e
16180 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20 20  val $command.. 16190 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d } finally {. 161a0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 161b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 # NOTE: If t 161c0 68 65 20 43 23 20 63 6f 6d 70 69 6c 65 72 20 77 he C# compiler w 161d0 61 73 20 69 6e 76 6f 6b 65 64 20 75 73 69 6e 67 as invoked using 161e0 20 5b 65 78 65 63 5d 2c 20 72 65 73 65 74 20 74 [exec], reset t 161f0 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 16200 20 20 20 20 70 72 65 76 69 6f 75 73 20 70 72 6f previous pro 16210 63 65 73 73 20 69 64 65 6e 74 69 66 69 65 72 20 cess identifier 16220 6e 6f 77 20 28 69 2e 65 2e 20 74 68 61 74 20 77 now (i.e. that w 16230 61 79 2c 20 69 74 20 64 6f 65 73 0d 0a 20 20 20 ay, it does.. 16240 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f 74 # not 16250 20 73 68 6f 77 20 75 70 20 61 73 20 62 65 69 6e show up as bein 16260 67 20 22 6c 65 61 6b 65 64 22 29 2e 0d 0a 20 20 g "leaked")... 16270 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 16280 20 69 66 20 7b 5b 69 73 44 6f 74 4e 65 74 43 6f if {[isDotNetCo 16290 72 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 re]} then {.. 162a0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 69 6e catch {in 162b0 66 6f 20 70 72 65 76 69 6f 75 73 70 69 64 20 74 fo previouspid t 162c0 72 75 65 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d rue}.. }. 162d0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 162e0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 4d .... proc isM 162f0 65 6d 6f 72 79 44 62 20 7b 20 66 69 6c 65 4e 61 emoryDb { fileNa 16300 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d me } {.. #. 16310 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 16320 73 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 s the specified 16330 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 database file na 16340 6d 65 20 72 65 61 6c 6c 79 20 61 6e 20 69 6e 2d me really an in- 16350 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73 65 3f memory database? 16360 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 16370 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 return [expr {$
16380 66 69 6c 65 4e 61 6d 65 20 65 71 20 22 3a 6d 65  fileName eq ":me
16390 6d 6f 72 79 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20  mory:" || \..
163a0 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 72         [string r
163b0 61 6e 67 65 20 24 66 69 6c 65 4e 61 6d 65 20 30  ange $fileName 0 163c0 20 31 32 5d 20 65 71 20 22 66 69 6c 65 3a 3a 6d 12] eq "file::m 163d0 65 6d 6f 72 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d emory:"}].. } 163e0 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 ..... proc is 163f0 54 61 62 6c 65 49 6e 44 62 20 7b 20 6e 61 6d 65 TableInDb { name 16400 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 {varName db} } 16410 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 16420 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 # NOTE: Refer 16430 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64 to the specified 16440 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 variable (e.g. 16450 22 64 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e "db") in the con 16460 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 text of our.. 16470 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 # calle 16480 72 2e 20 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 r. It contains 16490 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e the database con 164a0 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 nection handle t 164b0 68 61 74 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 hat will be.. 164c0 20 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 # used 164d0 74 6f 20 65 78 65 63 75 74 65 20 74 68 65 20 71 to execute the q 164e0 75 65 72 79 20 75 73 65 64 20 74 6f 20 64 65 74 uery used to det 164f0 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 6e 61 ermine if the na 16500 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a 20 20 med table is.. 16510 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 73 # pres 16520 65 6e 74 20 69 6e 20 74 68 61 74 20 64 61 74 61 ent in that data 16530 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a base... #.. 16540 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
16550 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
16560 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
16570 54 45 3a 20 55 73 65 20 74 68 65 20 73 71 6c 69  TE: Use the sqli
16580 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c 65 20  te_master table
16590 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20  to determine if
165a0 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c 65 20  the named table
165b0 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  is..      #
165c0 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65    present in the
165d0 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...
165e0 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73    #..      set s
165f0 71 6c 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 45  ql {..        SE
16600 4c 45 43 54 20 43 4f 55 4e 54 28 2a 29 20 46 52  LECT COUNT(*) FR
16610 4f 4d 20 73 71 6c 69 74 65 5f 6d 61 73 74 65 72  OM sqlite_master
16620 20 57 48 45 52 45 20 74 79 70 65 20 3d 20 27 74   WHERE type = 't
16630 61 62 6c 65 27 20 41 4e 44 20 6e 61 6d 65 20 3d  able' AND name =
16640 20 3f 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   ?;..      }....
16650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
16660 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6e 6f   NOTE: Return no
16670 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6e 61  n-zero if the na
16680 6d 65 64 20 74 61 62 6c 65 20 69 73 20 70 72 65  med table is pre
16690 73 65 6e 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  sent...      #..
166a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78        return [ex
166b0 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 20 5b 73  pr {..        [s
166c0 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
166d0 75 74 65 20 73 63 61 6c 61 72 20 24 64 62 20 24  ute scalar $db$
166e0 73 71 6c 20 5b 6c 69 73 74 20 70 61 72 61 6d 31  sql [list param1
166f0 20 53 74 72 69 6e 67 20 24 6e 61 6d 65 5d 5d 20   String $name]] 16700 3e 20 30 0d 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 > 0.. }].. 16710 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 16720 63 20 67 65 74 44 62 44 65 66 61 75 6c 74 50 61 c getDbDefaultPa 16730 67 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20 20 geSize {} {.. 16740 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 65 if {[catch {e 16750 78 65 63 75 74 65 53 71 6c 20 22 50 52 41 47 4d xecuteSql "PRAGM 16760 41 20 70 61 67 65 5f 73 69 7a 65 3b 22 20 73 63 A page_size;" sc 16770 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20 3d 3d alar} result] == 16780 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 16790 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
167a0 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  lt..      } else
167b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
167c0 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  rn 0..      }..
167d0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
167e0 63 20 67 65 74 44 62 44 65 66 61 75 6c 74 43 61  c getDbDefaultCa
167f0 63 68 65 53 69 7a 65 20 7b 7d 20 7b 0d 0a 20 20  cheSize {} {..
16800 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
16810 65 78 65 63 75 74 65 53 71 6c 20 22 50 52 41 47  executeSql "PRAG
16820 4d 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 20  MA cache_size;"
16830 73 63 61 6c 61 72 7d 20 72 65 73 75 6c 74 5d 20  scalar} result]
16840 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
16850 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 16860 73 75 6c 74 0d 0a 20 20 20 20 20 20 7d 20 65 6c sult.. } el 16870 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 se {.. re 16880 74 75 72 6e 20 30 0d 0a 20 20 20 20 20 20 7d 0d turn 0.. }. 16890 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 168a0 72 6f 63 20 75 73 65 4c 65 67 61 63 79 44 62 50 roc useLegacyDbP 168b0 61 67 65 41 6e 64 43 61 63 68 65 53 69 7a 65 73 ageAndCacheSizes 168c0 20 7b 20 76 61 72 4e 61 6d 65 20 7d 20 7b 0d 0a { varName } {.. 168d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 168e0 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 168f0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 16900 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 16910 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 16920 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 16930 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 16940 20 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 It contains the 16950 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 database connec 16960 74 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 tion handle that 16970 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 will be.. 16980 23 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 # used to 16990 65 78 65 63 75 74 65 20 71 75 65 72 69 65 73 20 execute queries 169a0 75 73 65 64 20 74 6f 20 73 65 74 20 74 68 65 20 used to set the 169b0 70 61 67 65 20 61 6e 64 20 63 61 63 68 65 20 73 page and cache s 169c0 69 7a 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a izes... #.. 169d0 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 upvar 1$v
169e0 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20  arName db....
169f0 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24     sql execute $16a00 64 62 20 7b 0d 0a 20 20 20 20 20 20 20 20 50 52 db {.. PR 16a10 41 47 4d 41 20 70 61 67 65 5f 73 69 7a 65 20 3d AGMA page_size = 16a20 20 31 30 32 34 3b 0d 0a 20 20 20 20 20 20 20 20 1024;.. 16a30 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a PRAGMA cache_siz 16a40 65 20 3d 20 32 30 30 30 3b 0d 0a 20 20 20 20 20 e = 2000;.. 16a50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 16a60 72 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 rn [list \.. 16a70 20 20 20 20 20 20 5b 73 71 6c 20 65 78 65 63 75 [sql execu 16a80 74 65 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c te -execute scal 16a90 61 72 20 24 64 62 20 22 50 52 41 47 4d 41 20 70 ar$db "PRAGMA p
16aa0 61 67 65 5f 73 69 7a 65 3b 22 5d 20 5c 0d 0a 20  age_size;"] \..
16ab0 20 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 78           [sql ex
16ac0 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 73  ecute -execute s
16ad0 63 61 6c 61 72 20 24 64 62 20 22 50 52 41 47 4d  calar $db "PRAGM 16ae0 41 20 63 61 63 68 65 5f 73 69 7a 65 3b 22 5d 5d A cache_size;"]] 16af0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 16b00 70 72 6f 63 20 6e 6f 72 6d 61 6c 69 7a 65 45 78 proc normalizeEx 16b10 63 65 70 74 69 6f 6e 4d 65 73 73 61 67 65 20 7b ceptionMessage { 16b20 20 76 61 6c 75 65 20 7d 20 7b 0d 0a 20 20 20 20 value } {.. 16b30 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 if {[string le 16b40 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d 20 ngth$value] ==
16b50 30 7d 20 74 68 65 6e 20 7b 72 65 74 75 72 6e 20  0} then {return
16b60 24 76 61 6c 75 65 7d 0d 0a 20 20 20 20 20 20 72  $value}.. r 16b70 65 74 75 72 6e 20 5b 73 74 72 69 6e 67 20 6d 61 eturn [string ma 16b80 70 20 5b 6c 69 73 74 20 5c 72 5c 6e 20 22 20 3d p [list \r\n " = 16b90 3d 3e 20 22 20 5c 6e 20 22 20 3d 3d 3e 20 22 5d => " \n " ==> "] 16ba0 20 24 76 61 6c 75 65 5d 0d 0a 20 20 20 20 7d 0d$value]..    }.
16bb0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 78 74  ....    proc ext
16bc0 72 61 63 74 53 79 73 74 65 6d 44 61 74 61 53 51  ractSystemDataSQ
16bd0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 4d 65 73  LiteExceptionMes
16be0 73 61 67 65 20 7b 20 76 61 6c 75 65 20 7d 20 7b  sage { value } {
16bf0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
16c00 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20   # NOTE: If the
16c10 73 74 72 69 6e 67 20 63 6f 6e 66 6f 72 6d 73 20  string conforms
16c20 74 6f 20 66 6f 72 6d 61 74 20 6f 66 20 74 68 65  to format of the
16c30 20 6e 6f 72 6d 61 6c 20 65 78 63 65 70 74 69 6f   normal exceptio
16c40 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
16c50 20 65 72 72 6f 72 20 73 74 72 69 6e 67 73 2c 20   error strings,
16c60 65 78 74 72 61 63 74 20 61 6e 64 20 72 65 74 75  extract and retu
16c70 72 6e 20 6f 6e 6c 79 20 74 68 65 20 65 72 72 6f  rn only the erro
16c80 72 20 6d 65 73 73 61 67 65 0d 0a 20 20 20 20 20  r message..
16c90 20 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e   #       portion
16ca0 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20 20 20   itself...
16cb0 23 0d 0a 20 20 20 20 20 20 73 65 74 20 70 61 74  #..      set pat
16cc0 74 65 72 6e 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  terns [list \..
16cd0 20 20 20 20 20 7b 53 79 73 74 65 6d 5c 2e 44 61       {System\.Da
16ce0 74 61 5c 2e 53 51 4c 69 74 65 5c 2e 53 51 4c 69  ta\.SQLite\.SQLi
16cf0 74 65 45 78 63 65 70 74 69 6f 6e 20 5c 28 30 78  teException $$0x 16d00 28 3f 3a 30 7c 38 29 5b 30 2d 39 41 2d 46 61 2d (?:0|8)[0-9A-Fa- 16d10 66 5d 7b 37 7d 5c 29 3a 5c 0d 0a 20 20 20 20 20 f]{7}$$:\..
16d20 20 20 20 20 20 28 2e 2b 3f 29 20 20 28 3f 3a 20       (.+?)  (?:
16d30 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20 20 7b  )?at} \..      {
16d40 53 79 73 74 65 6d 5c 2e 44 61 74 61 5c 2e 53 51  System\.Data\.SQ
16d50 4c 69 74 65 5c 2e 53 51 4c 69 74 65 45 78 63 65  Lite\.SQLiteExce
16d60 70 74 69 6f 6e 3a 20 28 2e 2b 3f 29 20 20 28 3f  ption: (.+?)  (?
16d70 3a 20 29 3f 61 74 7d 20 5c 0d 0a 20 20 20 20 20  : )?at} \..
16d80 20 7b 45 61 67 6c 65 5c 2e 5f 43 6f 6d 70 6f 6e   {Eagle\._Compon
16d90 65 6e 74 73 5c 2e 50 75 62 6c 69 63 5c 2e 53 63  ents\.Public\.Sc
16da0 72 69 70 74 45 78 63 65 70 74 69 6f 6e 3a 20 28  riptException: (
16db0 2e 2b 3f 29 20 20 28 3f 3a 20 29 3f 61 74 7d 5d  .+?)  (?: )?at}]
16dc0 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63  ....      foreac
16dd0 68 20 70 61 74 74 65 72 6e 20 24 70 61 74 74 65  h pattern $patte 16de0 72 6e 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 rns {.. i 16df0 66 20 7b 5b 72 65 67 65 78 70 20 2d 2d 20 24 70 f {[regexp --$p
16e00 61 74 74 65 72 6e 20 24 76 61 6c 75 65 20 64 75  attern $value du 16e10 6d 6d 79 20 6d 65 73 73 61 67 65 5d 7d 20 74 68 mmy message]} th 16e20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 16e30 73 65 74 20 6d 65 73 73 61 67 65 20 5b 73 74 72 set message [str 16e40 69 6e 67 20 6d 61 70 20 5b 6c 69 73 74 20 5c 72 ing map [list \r 16e50 5c 6e 20 5c 6e 5d 20 5b 73 74 72 69 6e 67 20 74 \n \n] [string t 16e60 72 69 6d 20 24 6d 65 73 73 61 67 65 5d 5d 0d 0a rim$message]]..
16e70 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6c 69            set li
16e80 6e 65 73 20 5b 73 70 6c 69 74 20 24 6d 65 73 73  nes [split $mess 16e90 61 67 65 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 age \n].... 16ea0 20 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 if {[llengt 16eb0 68 20 24 6c 69 6e 65 73 5d 20 3d 3d 20 32 7d 20 h$lines] == 2}
16ec0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16ed0 20 20 20 20 69 66 20 7b 5b 6c 69 6e 64 65 78 20      if {[lindex
16ee0 24 6c 69 6e 65 73 20 30 5d 20 65 71 20 5b 6c 69  $lines 0] eq [li 16ef0 6e 64 65 78 20 24 6c 69 6e 65 73 20 31 5d 7d 20 ndex$lines 1]}
16f00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16f10 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
16f20 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 5d 0d 0a  ndex $lines 0].. 16f30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 16f40 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 16f50 75 72 6e 20 5b 61 70 70 65 6e 64 41 72 67 73 20 urn [appendArgs 16f60 5b 6c 69 6e 64 65 78 20 24 6c 69 6e 65 73 20 30 [lindex$lines 0
16f70 5d 20 22 20 2d 2d 20 22 20 5b 6c 69 6e 64 65 78  ] " -- " [lindex
16f80 20 24 6c 69 6e 65 73 20 31 5d 5d 0d 0a 20 20 20   $lines 1]].. 16f90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 16fa0 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 6d 65 return$me
16fb0 73 73 61 67 65 0d 0a 20 20 20 20 20 20 20 20 7d  ssage..        }
16fc0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
16fd0 20 20 20 72 65 74 75 72 6e 20 24 76 61 6c 75 65     return $value 16fe0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 16ff0 70 72 6f 63 20 74 72 69 6d 53 71 6c 20 7b 20 73 proc trimSql { s 17000 71 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 20 72 65 ql } {.. re 17010 74 75 72 6e 20 5b 72 65 67 73 75 62 20 2d 61 6c turn [regsub -al 17020 6c 20 2d 2d 20 7b 5c 73 2b 7d 20 5b 73 74 72 69 l -- {\s+} [stri 17030 6e 67 20 74 72 69 6d 20 24 73 71 6c 5d 20 22 20 ng trim$sql] "
17040 22 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  "]..    }.....
17050 20 20 70 72 6f 63 20 65 78 65 63 75 74 65 53 71    proc executeSq
17060 6c 20 7b 20 73 71 6c 20 7b 65 78 65 63 75 74 65  l { sql {execute
17070 20 6e 6f 6e 65 7d 20 7b 66 6f 72 6d 61 74 20 6e   none} {format n
17080 6f 6e 65 7d 20 7b 66 69 6c 65 4e 61 6d 65 20 22  one} {fileName "
17090 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66  "} } {..      if
170a0 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
170b0 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30   $fileName] == 0 170c0 7d 20 74 68 65 6e 20 7b 73 65 74 20 66 69 6c 65 } then {set file 170d0 4e 61 6d 65 20 3a 6d 65 6d 6f 72 79 3a 7d 0d 0a Name :memory:}.. 170e0 20 20 20 20 20 20 73 65 74 75 70 44 62 20 24 66 setupDb$f
170f0 69 6c 65 4e 61 6d 65 20 22 22 20 22 22 20 22 22  ileName "" "" ""
17100 20 22 22 20 22 22 20 66 61 6c 73 65 20 66 61 6c   "" "" false fal
17110 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 20 64  se false false d
17120 62 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20  b true....
17130 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  try {..        r
17140 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31  eturn [uplevel 1
17150 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20   [list \..
17160 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74        sql execut
17170 65 20 2d 65 78 65 63 75 74 65 20 24 65 78 65 63  e -execute $exec 17180 75 74 65 20 2d 66 6f 72 6d 61 74 20 24 66 6f 72 ute -format$for
17190 6d 61 74 20 24 64 62 20 24 73 71 6c 5d 5d 0d 0a  mat $db$sql]]..
171a0 20 20 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20        } finally
171b0 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  {..        set c
171c0 6f 6e 6e 65 63 74 69 6f 6e 20 5b 67 65 74 44 62  onnection [getDb
171d0 43 6f 6e 6e 65 63 74 69 6f 6e 5d 0d 0a 0d 0a 20  Connection]....
171e0 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20         try {..
171f0 20 20 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44          cleanupD
17200 62 20 24 66 69 6c 65 4e 61 6d 65 20 64 62 20 66  b $fileName db f 17210 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 65 alse false false 17220 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e 61 .. } fina 17230 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lly {.. 17240 20 6f 62 6a 65 63 74 20 66 6c 61 67 73 20 24 63 object flags$c
17250 6f 6e 6e 65 63 74 69 6f 6e 20 2d 4e 6f 44 69 73  onnection -NoDis
17260 70 6f 73 65 3b 20 66 72 65 65 44 62 43 6f 6e 6e  pose; freeDbConn
17270 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  ection..
17280 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
17290 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 68  }.....    proc h
172a0 61 73 4e 6f 46 6c 61 67 73 20 7b 20 76 61 72 4e  asNoFlags { varN
172b0 61 6d 65 20 6e 6f 6e 65 20 7d 20 7b 0d 0a 20 20  ame none } {..
172c0 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72      upvar 1 $var 172d0 4e 61 6d 65 20 66 6c 61 67 73 0d 0a 0d 0a 20 20 Name flags.... 172e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 172f0 78 69 73 74 73 20 66 6c 61 67 73 5d 7d 20 74 68 xists flags]} th 17300 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 17310 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 turn true.. 17320 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 17330 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
17340 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68 65  flags] == 0} the
17350 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
17360 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
17370 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 24  }....      if {$17380 6e 6f 6e 65 20 26 26 20 24 66 6c 61 67 73 20 65 none &&$flags e
17390 71 20 22 4e 6f 6e 65 22 7d 20 74 68 65 6e 20 7b  q "None"} then {
173a0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
173b0 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a   true..      }..
173c0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
173d0 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
173e0 20 20 20 20 70 72 6f 63 20 67 65 74 43 6f 6e 6e      proc getConn
173f0 65 63 74 69 6f 6e 46 6c 61 67 73 20 7b 20 66 69  ectionFlags { fi
17400 6c 65 4e 61 6d 65 20 66 6c 61 67 73 20 7b 71 75  leName flags {qu
17410 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
17420 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
17430 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f 75   NOTE: Figure ou
17440 74 20 77 68 69 63 68 20 64 61 74 61 62 61 73 65  t which database
17450 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 20 63 6f   file name or co
17460 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string
17470 74 68 65 73 65 0d 0a 20 20 20 20 20 20 23 20 20  these..      #
17480 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20       connection
17490 66 6c 61 67 73 20 77 69 6c 6c 20 61 63 74 75 61  flags will actua
174a0 6c 6c 79 20 61 70 70 6c 79 20 74 6f 2e 20 20 54  lly apply to.  T
174b0 68 69 73 20 69 73 20 6e 6f 74 20 6e 65 63 65 73  his is not neces
174c0 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20  sary..      #
174d0 20 20 20 20 69 6e 20 71 75 69 65 74 20 6d 6f 64      in quiet mod
174e0 65 20 62 65 63 61 75 73 65 20 74 68 69 73 20 69  e because this i
174f0 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73 20 6f 6e  nformation is on
17500 6c 79 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67  ly used for logg
17510 69 6e 67 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ing..      #
17520 20 20 20 61 6e 64 20 72 65 70 6f 72 74 69 6e 67     and reporting
17530 20 70 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20   purposes...
17540 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
17550 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 17560 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 17570 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 ing length$file
17580 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
17590 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
175a0 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 6e   database [appen
175b0 64 41 72 67 73 20 22 66 69 6c 65 20 6e 61 6d 65  dArgs "file name
175c0 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c   \"" $fileName \ 175d0 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c "].. } el 175e0 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 175f0 74 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d ts ::dataSource] 17600 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 17610 20 20 20 21 5b 61 72 72 61 79 20 65 78 69 73 74 ![array exist 17620 73 20 3a 3a 64 61 74 61 53 6f 75 72 63 65 5d 7d s ::dataSource]} 17630 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17640 20 20 20 73 65 74 20 64 61 74 61 62 61 73 65 20 set database 17650 5b 61 70 70 65 6e 64 41 72 67 73 20 22 64 61 74 [appendArgs "dat 17660 61 20 73 6f 75 72 63 65 20 5c 22 22 20 24 3a 3a a source \""$::
17670 64 61 74 61 53 6f 75 72 63 65 20 5c 22 5d 0d 0a  dataSource \"]..
17680 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
17690 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
176a0 64 61 74 61 62 61 73 65 20 3c 75 6e 6b 6e 6f 77  database <unknow
176b0 6e 3e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  n>..        }..
176c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
176d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
176e0 20 45 76 65 6e 20 74 68 6f 75 67 68 20 74 68 65   Even though the
176f0 72 65 20 69 73 20 6f 6e 6c 79 20 6f 6e 65 20 73  re is only one s
17700 6f 75 72 63 65 20 6f 66 20 66 6c 61 67 73 20 73  ource of flags s
17710 6f 20 66 61 72 2c 20 74 68 65 79 0d 0a 20 20 20  o far, they..
17720 20 20 20 23 20 20 20 20 20 20 20 6d 75 73 74 20     #       must
17730 62 65 20 63 6f 6d 62 69 6e 65 64 20 75 73 69 6e  be combined usin
17740 67 20 74 68 65 20 63 6f 72 72 65 63 74 20 73 79  g the correct sy
17750 6e 74 61 78 20 66 6f 72 20 65 6e 75 6d 65 72 61  ntax for enumera
17760 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ted..      #
17770 20 20 20 66 6c 61 67 20 76 61 6c 75 65 73 20 66     flag values f
17780 6f 72 20 74 68 65 20 2e 4e 45 54 20 46 72 61 6d  or the .NET Fram
17790 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 20 20 23 0d  ework...      #.
177a0 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67 73  .      set flags
177b0 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24   [combineFlags $177c0 66 6c 61 67 73 20 22 22 5d 0d 0a 0d 0a 20 20 20 flags ""].... 177d0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 177e0 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f TE: Show (and lo 177f0 67 29 20 74 68 65 20 6c 6f 63 61 6c 20 63 6f 6e g) the local con 17800 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e nection flags an 17810 64 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 d the associated 17820 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 17830 64 61 74 61 20 73 6f 75 72 63 65 20 6f 72 20 66 data source or f 17840 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 ile name... 17850 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
17860 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
17870 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
17880 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d  o exists ::no(em
17890 69 74 4c 6f 63 61 6c 46 6c 61 67 73 29 5d 20 26  itLocalFlags)] &
178a0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
178b0 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   (![info exists
178c0 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 6c  ::no(emitLocalFl
178d0 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c  agsIfNone)] || \
178e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 21  ..             !
178f0 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67  [hasNoFlags flag
17900 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20  s false])} then
17910 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75  {..          tpu
17920 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 17930 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 17940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 17950 22 2d 2d 2d 2d 20 6c 6f 63 61 6c 20 63 6f 6e 6e "---- local conn 17960 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 ection flags for 17970 20 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a "$database \..
17980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                "
17990 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b  are: " [expr {![
179a0 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 73  hasNoFlags flags
179b0 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20   false] ? \..
179c0 20 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65             [appe
179d0 6e 64 41 72 67 73 20 5c 22 20 24 66 6c 61 67 73  ndArgs \" $flags 179e0 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d \"] : "<none>"} 179f0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d ] \n].. } 17a00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 17a10 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 17a20 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f TE: Show (and lo 17a30 67 29 20 74 68 65 20 73 68 61 72 65 64 20 63 6f g) the shared co 17a40 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 2e 0d nnection flags.. 17a50 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 17a60 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
17a70 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  n {..        if
17a80 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
17a90 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
17aa0 6b 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ke System.Data.S
17ab0 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e  QLite.SQLiteConn
17ac0 65 63 74 69 6f 6e 20 53 68 61 72 65 64 46 6c 61  ection SharedFla
17ad0 67 73 0d 0a 20 20 20 20 20 20 20 20 7d 20 73 68  gs..        } sh
17ae0 61 72 65 64 46 6c 61 67 73 5d 20 3d 3d 20 30 7d  aredFlags] == 0}
17af0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17b00 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
17b10 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68  ists ::no(emitSh
17b20 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c  aredFlags)] && \
17b30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17b40 28 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  (![info exists :
17b50 3a 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c  :no(emitSharedFl
17b60 61 67 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c  agsIfNone)] || \
17b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
17b80 20 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 73 68   ![hasNoFlags sh
17b90 61 72 65 64 46 6c 61 67 73 20 74 72 75 65 5d 29  aredFlags true])
17ba0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17bb0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 17bc0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 17bd0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 17be0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17bf0 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 shared connecti 17c00 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 24 on flags for "$
17c10 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20 20  database \..
17c20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61 72              " ar
17c30 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 5b 68 61  e: " [expr {![ha
17c40 73 4e 6f 46 6c 61 67 73 20 73 68 61 72 65 64 46  sNoFlags sharedF
17c50 6c 61 67 73 20 74 72 75 65 5d 20 3f 20 5c 0d 0a  lags true] ? \..
17c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
17c70 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24  [appendArgs \" $17c80 73 68 61 72 65 64 46 6c 61 67 73 20 5c 22 5d 20 sharedFlags \"] 17c90 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d : "<none>"}] \n] 17ca0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 17cb0 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 17cc0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! 17cd0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 17ce0 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 o(emitSharedFlag 17cf0 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. 17d00 20 20 20 20 20 20 20 20 21 5b 69 6e 66 6f 20 65 ![info e 17d10 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 xists ::no(emitS 17d20 68 61 72 65 64 46 6c 61 67 73 49 66 55 6e 61 76 haredFlagsIfUnav 17d30 61 69 6c 61 62 6c 65 29 5d 7d 20 74 68 65 6e 20 ailable)]} then 17d40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 17d50 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
17d60 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
17d70 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
17d80 20 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64      "---- shared
17d90 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
17da0 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73  s for " $databas 17db0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 17dc0 20 20 20 20 20 22 20 61 72 65 3a 20 3c 75 6e 61 " are: <una 17dd0 76 61 69 6c 61 62 6c 65 3e 5c 6e 22 5d 0d 0a 20 vailable>\n"].. 17de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 17df0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 17e00 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 17e10 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 # NOTE: Show (a 17e20 6e 64 20 6c 6f 67 29 20 74 68 65 20 64 65 74 65 nd log) the dete 17e30 63 74 65 64 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e cted global conn 17e40 65 63 74 69 6f 6e 20 66 6c 61 67 73 2c 20 69 66 ection flags, if 17e50 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a any... #.. 17e60 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
17e70 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
17e80 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
17e90 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c  ists ::no(emitGl
17ea0 6f 62 61 6c 46 6c 61 67 73 29 5d 20 26 26 20 5c  obalFlags)] && \
17eb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 21  ..            (!
17ec0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
17ed0 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67  o(emitGlobalFlag
17ee0 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a  sIfNone)] || \..
17ef0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 68               ![h
17f00 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63 6f 6e 6e  asNoFlags ::conn
17f10 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 66 61 6c  ection_flags fal
17f20 73 65 5d 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  se])} then {..
17f30 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 17f40 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 17f50 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 17f60 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 17f70 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 global connecti 17f80 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a 20 22 20 on flags are: " 17f90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17fa0 20 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 [expr {![hasNoF 17fb0 6c 61 67 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f lags ::connectio 17fc0 6e 5f 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 3f n_flags false] ? 17fd0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17fe0 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 [appendArgs \" 17ff0 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66$::connection_f
18000 6c 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e  lags \"] : "<non
18010 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  e>"}] \n]..
18020 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
18030 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
18040 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 72 65  # NOTE: If there
18050 20 61 72 65 20 61 6e 79 20 67 6c 6f 62 61 6c 20   are any global
18060 28 70 65 72 20 74 65 73 74 20 72 75 6e 29 20 63  (per test run) c
18070 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags
18080 63 75 72 72 65 6e 74 6c 79 0d 0a 20 20 20 20 20  currently..
18090 20 23 20 20 20 20 20 20 20 73 65 74 2c 20 75 73   #       set, us
180a0 65 20 74 68 65 6d 20 6e 6f 77 20 28 69 2e 65 2e  e them now (i.e.
180b0 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68   by combining th
180c0 65 6d 20 77 69 74 68 20 74 68 65 20 6f 6e 65 73  em with the ones
180d0 20 66 6f 72 20 74 68 69 73 0d 0a 20 20 20 20 20   for this..
180e0 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74   #       connect
180f0 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ion)...      #..
18100 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
18110 65 78 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74  exists ::connect
18120 69 6f 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e  ion_flags]} then
18130 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
18140 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
18150 6f 6d 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65  ombine and/or re
18160 70 6c 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63  place the connec
18170 74 69 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74  tion flags and t
18180 68 65 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20  hen show the..
18190 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65        #       ne
181a0 77 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20  w value...
181b0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
181c0 20 66 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46   flags [combineF
181d0 6c 61 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63  lags $flags$::c
181e0 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d  onnection_flags]
181f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
18200 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
18210 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74 68  how (and log) th
18220 65 20 6e 65 77 20 65 66 66 65 63 74 69 76 65 20  e new effective
18230 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
18240 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
18250 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 18260 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 18270 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 18280 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit 18290 43 6f 6d 62 69 6e 65 64 46 6c 61 67 73 29 5d 20 CombinedFlags)] 182a0 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 182b0 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 69 73 (![info exis 182c0 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 ts ::no(emitComb 182d0 69 6e 65 64 46 6c 61 67 73 49 66 4e 6f 6e 65 29 inedFlagsIfNone) 182e0 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. 182f0 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c ![hasNoFl 18300 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d ags flags false] 18310 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 )} then {.. 18320 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
18330 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
18340 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
18350 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
18360 2d 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65  - combined conne
18370 63 74 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20  ction flags for
18380 22 20 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20  " $database \.. 18390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 183a0 20 61 72 65 3a 20 22 20 5b 65 78 70 72 20 7b 21 are: " [expr {! 183b0 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67 [hasNoFlags flag 183c0 73 20 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 s false] ? \.. 183d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61 [a 183e0 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 66 6c ppendArgs \"$fl
183f0 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
18400 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
18410 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
18420 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
18430 20 20 20 72 65 74 75 72 6e 20 24 66 6c 61 67 73     return $flags 18440 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 18450 70 72 6f 63 20 67 65 74 46 6c 61 67 73 50 72 6f proc getFlagsPro 18460 70 65 72 74 79 20 7b 20 7b 66 6c 61 67 73 20 22 perty { {flags " 18470 22 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d "} {quiet false} 18480 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 18490 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 # NOTE: Det 184a0 65 72 6d 69 6e 65 20 77 68 61 74 20 74 68 65 20 ermine what the 184b0 63 6f 6d 62 69 6e 65 64 20 28 67 6c 6f 62 61 6c combined (global 184c0 20 61 6e 64 20 6c 6f 63 61 6c 29 20 63 6f 6e 6e and local) conn 184d0 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 ection.. # 184e0 20 20 20 20 20 20 66 6c 61 67 73 20 73 68 6f 75 flags shou 184f0 6c 64 20 62 65 2c 20 70 6f 73 73 69 62 6c 79 20 ld be, possibly 18500 71 75 69 65 74 6c 79 2e 0d 0a 20 20 20 20 20 20 quietly... 18510 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 #.. set fla 18520 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f gs [getConnectio 18530 6e 46 6c 61 67 73 20 22 22 20 24 66 6c 61 67 73 nFlags ""$flags
18540 20 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20   $quiet].... 18550 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18560 45 3a 20 49 66 20 6e 6f 20 67 6c 6f 62 61 6c 20 E: If no global 18570 6f 72 20 6c 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 or local connect 18580 69 6f 6e 20 66 6c 61 67 73 20 77 65 72 65 20 73 ion flags were s 18590 70 65 63 69 66 69 65 64 2c 20 74 68 65 0d 0a 20 pecified, the.. 185a0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 65 66 # def 185b0 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 ault connection 185c0 66 6c 61 67 73 20 73 68 6f 75 6c 64 20 62 65 20 flags should be 185d0 75 73 65 64 3b 20 74 68 65 72 65 66 6f 72 65 2c used; therefore, 185e0 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 23 return.. # 185f0 20 20 20 20 20 20 20 61 6e 20 65 6d 70 74 79 20 an empty 18600 73 74 72 69 6e 67 20 69 6e 20 74 68 61 74 20 63 string in that c 18610 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ase... #.. 18620 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 18630 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 length$flags]
18640 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
18650 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
18660 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
18670 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
18680 45 3a 20 49 6e 20 6f 72 64 65 72 20 74 6f 20 63  E: In order to c
18690 68 65 63 6b 20 69 66 20 74 68 65 20 64 65 66 61  heck if the defa
186a0 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  ult connection f
186b0 6c 61 67 73 20 61 72 65 20 62 65 69 6e 67 20 75  lags are being u
186c0 73 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  sed..      #
186d0 20 20 20 69 74 20 69 73 20 6e 65 63 65 73 73 61     it is necessa
186e0 72 79 20 74 6f 20 61 74 74 65 6d 70 74 20 61 20  ry to attempt a
186f0 63 6f 6e 76 65 72 73 69 6f 6e 20 74 6f 20 74 68  conversion to th
18700 65 20 61 63 74 75 61 6c 20 65 6e 75 6d 65 72 61  e actual enumera
18710 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ted..      #
18720 20 20 20 74 79 70 65 2e 20 20 46 61 69 6c 69 6e     type.  Failin
18730 67 20 74 68 61 74 2c 20 74 68 65 20 63 68 65 63  g that, the chec
18740 6b 20 61 67 61 69 6e 73 74 20 74 68 65 20 64 65  k against the de
18750 66 61 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c  fault value will
18760 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
18770 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20     skipped...
18780 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
18790 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
187a0 20 20 73 65 74 20 65 72 72 6f 72 20 6e 75 6c 6c    set error null
187b0 3b 20 23 20 49 47 4e 4f 52 45 44 0d 0a 0d 0a 20  ; # IGNORED....
187c0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
187d0 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 54 72 79  voke Utility Try
187e0 50 61 72 73 65 46 6c 61 67 73 45 6e 75 6d 20 22  ParseFlagsEnum "
187f0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
18800 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
18810 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite.SQLiteConnec
18820 74 69 6f 6e 46 6c 61 67 73 20 22 22 20 24 66 6c  tionFlags "" $fl 18830 61 67 73 20 6e 75 6c 6c 20 74 72 75 65 20 5c 0d ags null true \. 18840 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 75 . tru 18850 65 20 74 72 75 65 20 65 72 72 6f 72 0d 0a 20 20 e true error.. 18860 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d 20 74 68 } value]} th 18870 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 18880 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 18890 20 41 74 74 65 6d 70 74 69 6e 67 20 74 6f 20 70 Attempting to p 188a0 61 72 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 arse the connect 188b0 69 6f 6e 20 66 6c 61 67 73 20 63 61 75 73 65 64 ion flags caused 188c0 20 61 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 a script.. 188d0 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 # error 188e0 2e 20 20 45 6d 69 74 20 61 20 77 61 72 6e 69 6e . Emit a warnin 188f0 67 20 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f g to the test lo 18900 67 20 66 69 6c 65 20 61 6e 64 20 63 6f 6e 74 69 g file and conti 18910 6e 75 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 nue.. # 18920 20 20 20 20 20 75 73 69 6e 67 20 61 6e 20 65 6d using an em 18930 74 70 79 20 73 74 72 69 6e 67 20 69 6e 73 74 65 tpy string inste 18940 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ad... #.. 18950 20 20 20 20 20 20 20 20 74 6c 6f 67 20 5b 61 70 tlog [ap 18960 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 18970 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 18980 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 18990 20 70 61 72 73 65 20 63 6f 6e 6e 65 63 74 69 6f parse connectio 189a0 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f 72 3a 20 n flags, error: 189b0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 189c0 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c 6e 5d \n\t$value \n]
189d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
189e0 76 61 6c 75 65 20 22 22 0d 0a 20 20 20 20 20 20  value ""..
189f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
18a00 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74      # NOTE: If t
18a10 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 6c 61 67  he combined flag
18a20 73 20 73 74 72 69 6e 67 20 63 6f 75 6c 64 20 6e  s string could n
18a30 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 65 20 63  ot actually be c
18a40 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 20 20 20  onverted..
18a50 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 65  #       to the e
18a60 6e 75 6d 65 72 61 74 65 64 20 74 79 70 65 20 69  numerated type i
18a70 74 20 69 73 20 74 68 65 20 64 65 66 61 75 6c 74  t is the default
18a80 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 6a 75 73   value, then jus
18a90 74 20 75 73 65 0d 0a 20 20 20 20 20 20 23 20 20  t use..      #
18aa0 20 20 20 20 20 69 74 20 76 65 72 62 61 74 69 6d       it verbatim
18ab0 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6a 75 73  ; otherwise, jus
18ac0 74 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74  t return an empt
18ad0 79 20 73 74 72 69 6e 67 2e 20 20 49 6e 20 74 68  y string.  In th
18ae0 61 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  at..      #
18af0 20 20 63 61 73 65 2c 20 74 68 65 20 64 65 66 61    case, the defa
18b00 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  ult connection f
18b10 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 75 73 65  lags will be use
18b20 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  d...      #..
18b30 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
18b40 65 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3d 3d  ength $value] == 18b50 20 30 20 7c 7c 20 24 76 61 6c 75 65 20 6e 65 20 0 ||$value ne
18b60 22 44 65 66 61 75 6c 74 22 7d 20 74 68 65 6e 20  "Default"} then
18b70 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
18b80 20 20 20 20 20 20 23 20 57 41 52 4e 49 4e 47 3a        # WARNING:
18b90 20 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68   This returns th
18ba0 65 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 6f  e string value o
18bb0 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66  f the combined f
18bc0 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 20 20 20  lags, not..
18bd0 20 20 20 23 20 20 20 20 20 20 20 20 20 20 74 68     #          th
18be0 65 20 65 6e 75 6d 65 72 61 74 65 64 20 76 61 6c  e enumerated val
18bf0 75 65 2e 20 20 54 68 69 73 20 69 73 20 62 79 20  ue.  This is by
18c00 64 65 73 69 67 6e 20 61 6e 64 20 73 68 6f 75 6c  design and shoul
18c10 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23  d not..        #
18c20 20 20 20 20 20 20 20 20 20 20 62 65 20 63 68 61            be cha
18c30 6e 67 65 64 20 77 69 74 68 6f 75 74 20 63 61 72  nged without car
18c40 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 61 74 69  eful considerati
18c50 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 6f 75 6c  on (e.g. it woul
18c60 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  d..        #
18c70 20 20 20 20 20 20 70 72 65 76 65 6e 74 20 74 68        prevent th
18c80 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e SQLiteConnecti
18c90 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d 20 61 6c  on class from al
18ca0 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 64 0d 0a  lowing invalid..
18cb0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18cc0 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 5d 20 6d     ["magical"] m
18cd0 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a 20 20 20  eta-flags)...
18ce0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
18cf0 72 65 74 75 72 6e 20 5b 61 70 70 65 6e 64 41 72  return [appendAr
18d00 67 73 20 22 46 6c 61 67 73 3d 22 20 24 66 6c 61  gs "Flags=" $fla 18d10 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20 20 7d 0d gs \;].. }. 18d20 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 18d30 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 "".. }..... 18d40 20 20 70 72 6f 63 20 67 65 74 54 65 73 74 50 72 proc getTestPr 18d50 6f 70 65 72 74 69 65 73 20 7b 20 7b 66 6c 61 67 operties { {flag 18d60 73 20 22 22 7d 20 7b 71 75 69 65 74 20 66 61 6c s ""} {quiet fal 18d70 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 se} } {.. # 18d80 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 18d90 53 74 61 72 74 20 77 69 74 68 20 22 46 6c 61 67 Start with "Flag 18da0 73 22 20 70 72 6f 70 65 72 74 79 20 66 6f 72 20 s" property for 18db0 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 the new connecti 18dc0 6f 6e 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 on, if any... 18dd0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 18de0 72 65 73 75 6c 74 20 5b 67 65 74 46 6c 61 67 73 result [getFlags 18df0 50 72 6f 70 65 72 74 79 20 24 66 6c 61 67 73 20 Property$flags
18e00 24 71 75 69 65 74 5d 0d 0a 0d 0a 20 20 20 20 20  $quiet].... 18e10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 18e20 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f : Add the name o 18e30 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65 f the current te 18e40 73 74 20 66 69 6c 65 2c 20 69 66 20 61 76 61 69 st file, if avai 18e50 6c 61 62 6c 65 2e 20 20 54 68 69 73 20 69 73 0d lable. This is. 18e60 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f . # o 18e70 6e 6c 79 20 75 73 65 64 20 66 6f 72 20 64 65 62 nly used for deb 18e80 75 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 ugging... # 18e90 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 18ea0 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f o exists ::test_ 18eb0 66 69 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 file]} then {.. 18ec0 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 65 append re 18ed0 73 75 6c 74 20 54 65 73 74 46 69 6c 65 3d 20 24 sult TestFile=$
18ee0 3a 3a 74 65 73 74 5f 66 69 6c 65 20 5c 3b 0d 0a  ::test_file \;..
18ef0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
18f00 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
18f10 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20 6f  : Add the name o
18f20 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 65  f the current te
18f30 73 74 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65  st, if available
18f40 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79 0d  .  This is only.
18f50 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75  .      #       u
18f60 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 6e  sed for debuggin
18f70 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  g...      #..
18f80 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
18f90 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65 73 74  sts ::eagle_test
18fa0 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 5d 7d  s(CurrentName)]}
18fb0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
18fc0 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 54   append result T
18fd0 65 73 74 4e 61 6d 65 3d 20 24 3a 3a 65 61 67 6c  estName= $::eagl 18fe0 65 5f 74 65 73 74 73 28 43 75 72 72 65 6e 74 4e e_tests(CurrentN 18ff0 61 6d 65 29 20 5c 3b 0d 0a 20 20 20 20 20 20 7d ame) \;.. } 19000 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return 19010 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d$result..    }.
19020 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 6e 61  ....    proc ena
19030 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20 7b  bleSharedCache {
19040 20 63 68 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20   channel enable
19050 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20  {quiet false} }
19060 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  {..      if {[ca
19070 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f  tch {..        o
19080 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
19090 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
190a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
190b0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
190c0 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  .UnsafeNativeMet
190d0 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  hods \..
190e0 20 20 20 20 73 71 6c 69 74 65 33 5f 65 6e 61 62      sqlite3_enab
190f0 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 68 65 20  le_shared_cache
19100 5b 65 78 70 72 20 69 6e 74 28 24 65 6e 61 62 6c  [expr int($enabl 19110 65 29 5d 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 e)].. } res 19120 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 19130 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! 19140 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
19150 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
19160 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 19170 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 19180 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c "---- call 19190 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f sqlite3_enable_ 191a0 73 68 61 72 65 64 5f 63 61 63 68 65 28 22 20 24 shared_cache("$
191b0 65 6e 61 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20  enable \..
191c0 20 20 20 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b          ")... ok
191d0 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d  : " $result \n]. 191e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 191f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 19200 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
19210 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
19220 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 19230 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 19240 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " 19250 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 ---- call sqlite 19260 33 5f 65 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 3_enable_shared_ 19270 63 61 63 68 65 28 22 20 24 65 6e 61 62 6c 65 20 cache("$enable
19280 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19290 20 22 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20   ")... error: "
192a0 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 192b0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 192c0 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 192d0 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62 proc setupDb 192e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 192f0 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 fileName {mode " 19300 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d "} {dateTimeForm 19310 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 at ""} {dateTime 19320 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 Kind ""} {flags 19330 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ""}.. 19340 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61 {extra ""} {qua 19350 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 lify true} {dele 19360 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61 te true} {uri fa 19370 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 lse}.. 19380 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75 {temporary tru 19390 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 e} {varName db} 193a0 7b 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 {quiet false} } 193b0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 193c0 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 193d0 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c see if our call 193e0 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 er has requested 193f0 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 an in-memory da 19400 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # 19410 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 .. set isMe 19420 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 mory [isMemoryDb 19430 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
19440 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
19450 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61  NOTE: For now, a
19460 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65  ll test database
19470 73 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65  s used by the te
19480 73 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61  st suite are pla
19490 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ced..      #
194a0 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61     into the data
194b0 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 2e 20  base directory.
194c0 20 45 61 63 68 20 64 61 74 61 62 61 73 65 20 61   Each database a
194d0 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c 65 73  nd related files
194e0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
194f0 75 73 65 64 20 62 79 20 61 20 74 65 73 74 20 73  used by a test s
19500 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e 65 64  hould be cleaned
19510 20 75 70 20 62 79 20 74 68 61 74 20 74 65 73 74   up by that test
19520 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20 20   using the..
19530 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 61 6e    #       "clean
19540 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 65 2c  upDb" procedure,
19550 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23   below...      #
19560 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 73  ..      if {!$is 19570 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61 6c 69 Memory &&$quali
19580 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  fy} then {..
19590 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
195a0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74   [file join [get
195b0 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72  DatabaseDirector
195c0 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  y] [file tail $f 195d0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 ileName]].. 195e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 195f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 # NOTE: By 19600 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 default, delete 19610 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e 67 any pre-existing 19620 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20 74 database with t 19630 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 he same file.. 19640 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 6d 65 # name 19650 20 69 66 20 69 74 20 63 75 72 72 65 6e 74 6c 79 if it currently 19660 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 exists... 19670 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 #.. if {!$i
19680 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65  sMemory && $dele 19690 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 te && [file exis 196a0 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
196b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
196c0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
196d0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c  : Attempt to del
196e0 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73  ete any pre-exis
196f0 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 77 69  ting database wi
19700 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65  th the same file
19710 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
19720 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20    name...
19730 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
19740 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c  [catch {file del
19750 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65  ete $fileName} e 19760 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 rror]} then {.. 19770 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 19780 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We 19790 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed 197a0 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 to delete the fi 197b0 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. 197c0 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 197d0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
197e0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
197f0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $19800 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 19810 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 19820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 19830 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 19840 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 led to delete da 19850 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 19860 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
19870 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
19880 20 64 75 72 69 6e 67 20 73 65 74 75 70 2c 20 65   during setup, e
19890 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er 198a0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 198b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 198c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 198d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 198e0 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 198f0 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 19900 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i 19910 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of 19920 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # 19930 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 caller. The 19940 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f handle to the o 19950 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 pened database w 19960 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 ill be stored th 19970 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. 19980 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
19990 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
199a0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
199b0 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e  E: Start buildin
199c0 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
199d0 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e   string.  The on
199e0 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74  ly required port
199f0 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
19a00 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
19a10 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74  tion string is t
19a20 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20  he data source,
19a30 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74  which contains t
19a40 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
19a50 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20    database file
19a60 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66  name itself.  If
19a70 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74   our caller want
19a80 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61  s to use a URI a
19a90 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
19aa0 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65   the data source
19ab0 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72  , use the FullUr
19ac0 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  i connection str
19ad0 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d  ing property to.
19ae0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
19af0 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20  revent the data
19b00 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72  source string fr
19b10 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64  om being mangled
19b20 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
19b30 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e    if {$uri} then 19b40 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 19b50 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c connection {Full 19b60 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d Uri=${fileName}}
19b70 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
19b80 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
19b90 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53  nnection {Data S
19ba0 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65  ource=${fileName 19bb0 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... 19bc0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 19bd0 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 NOTE: Since this 19be0 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e procedure has n 19bf0 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 o special knowle 19c00 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 dge of what the 19c10 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 default.. # 19c20 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 setting i 19c30 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c s for the ToFull 19c40 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 Path connection 19c50 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 string propery, 19c60 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 always.. # 19c70 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 add the va 19c80 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 lue we know abou 19c90 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 t to the connect 19ca0 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 ion string... 19cb0 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 #.. appe 19cc0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; 19cd0 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 ToFullPath=${qua
19ce0 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20  lify}}....
19cf0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
19d00 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
19d10 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e  pecified a journ
19d20 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65  al mode, add the
19d30 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
19d40 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
19d50 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
19d60 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
19d70 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
19d80 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
19d90 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74  th $mode] > 0} t 19da0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 19db0 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection 19dc0 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d {;Journal Mode= 19dd0 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20${mode}}..
19de0 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
19df0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
19e00 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
19e10 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66  ied a DateTime f
19e20 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e  ormat, add the n
19e30 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20  ecessary..
19e40 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20  #       portion
19e50 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
19e60 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20  n string now...
19e70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
19e80 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
19e90 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74   $dateTimeFormat 19ea0 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 19eb0 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co 19ec0 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT 19ed0 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 imeFormat=${date
19ee0 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20  TimeFormat}}..
19ef0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
19f00 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
19f10 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
19f20 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69  ecified a DateTi
19f30 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20  meKind, add the
19f40 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f  necessary portio
19f50 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
19f60 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
19f70 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
19f80 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
19f90 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
19fa0 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d  h $dateTimeKind] 19fb0 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 19fc0 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con 19fd0 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 nection {;DateTi 19fe0 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d meKind=${dateTim
19ff0 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d  eKind}}..      }
1a000 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
1a010 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72     # NOTE: Figur
1a020 65 20 6f 75 74 20 77 68 61 74 20 74 68 65 20 66  e out what the f
1a030 69 6e 61 6c 20 66 6c 61 67 73 20 66 6f 72 20 74  inal flags for t
1a040 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e  his connection n
1a050 65 65 64 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20  eed to be...
1a060 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66    #..      set f
1a070 6c 61 67 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74  lags [getConnect
1a080 69 6f 6e 46 6c 61 67 73 20 24 66 69 6c 65 4e 61  ionFlags $fileNa 1a090 6d 65 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 me$flags $quiet 1a0a0 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. 1a0b0 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f # NOTE: If o 1a0c0 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 ur caller specif 1a0d0 69 65 64 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 ied some SQLiteC 1a0e0 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 onnectionFlags, 1a0f0 61 64 64 20 74 68 65 0d 0a 20 20 20 20 20 20 23 add the.. # 1a100 20 20 20 20 20 20 20 6e 65 63 65 73 73 61 72 79 necessary 1a110 20 70 6f 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 portion of the 1a120 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e connection strin 1a130 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d g 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 66 6c 61 67 73 ng length$flags
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 7b 3b 46 6c 61 67 73  nnection {;Flags
1a190 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20  =${flags}}.. 1a1a0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 1a1b0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 # NOTE: If 1a1c0 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 our caller spec 1a1d0 69 66 69 65 64 20 61 6e 20 65 78 74 72 61 20 70 ified an extra p 1a1e0 61 79 6c 6f 61 64 20 74 6f 20 74 68 65 20 63 6f ayload to the co 1a1f0 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 nnection.. 1a200 23 20 20 20 20 20 20 20 73 74 72 69 6e 67 2c 20 # string, 1a210 61 70 70 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a append it now... 1a220 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1a230 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 1a240 68 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 h$extra] > 0} t
1a250 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61  hen {..        a
1a260 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  ppend connection
1a270 20 5c 3b 20 24 65 78 74 72 61 0d 0a 20 20 20 20   \; $extra.. 1a280 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 1a290 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 # NOTE: Ad 1a2a0 64 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 d the name of th 1a2b0 65 20 63 75 72 72 65 6e 74 20 74 65 73 74 20 66 e current test f 1a2c0 69 6c 65 2c 20 69 66 20 61 76 61 69 6c 61 62 6c ile, if availabl 1a2d0 65 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20 20 e. This is.. 1a2e0 20 20 20 23 20 20 20 20 20 20 20 6f 6e 6c 79 20 # only 1a2f0 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69 used for debuggi 1a300 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ng... #.. 1a310 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex 1a320 69 73 74 73 20 3a 3a 74 65 73 74 5f 66 69 6c 65 ists ::test_file 1a330 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1a340 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec 1a350 74 69 6f 6e 20 7b 3b 54 65 73 74 46 69 6c 65 3d tion {;TestFile= 1a360 24 7b 3a 3a 74 65 73 74 5f 66 69 6c 65 7d 7d 0d${::test_file}}.
1a370 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1a380 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1a390 45 3a 20 41 64 64 20 74 68 65 20 6e 61 6d 65 20  E: Add the name
1a3a0 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  of the current t
1a3b0 65 73 74 2c 20 69 66 20 61 76 61 69 6c 61 62 6c  est, if availabl
1a3c0 65 2e 20 20 54 68 69 73 20 69 73 20 6f 6e 6c 79  e.  This is only
1a3d0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1a3e0 75 73 65 64 20 66 6f 72 20 64 65 62 75 67 67 69  used for debuggi
1a3f0 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ng...      #..
1a400 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
1a410 69 73 74 73 20 3a 3a 65 61 67 6c 65 5f 74 65 73  ists ::eagle_tes
1a420 74 73 28 43 75 72 72 65 6e 74 4e 61 6d 65 29 5d  ts(CurrentName)]
1a430 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a440 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74    append connect
1a450 69 6f 6e 20 7b 3b 54 65 73 74 4e 61 6d 65 3d 24  ion {;TestName=$1a460 7b 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28 43 {::eagle_tests(C 1a470 75 72 72 65 6e 74 4e 61 6d 65 29 7d 7d 0d 0a 20 urrentName)}}.. 1a480 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1a490 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1a4a0 20 46 6f 72 20 63 6c 61 72 69 74 79 2c 20 61 70 For clarity, ap 1a4b0 70 65 6e 64 20 61 20 66 69 6e 61 6c 20 73 65 6d pend a final sem 1a4c0 69 63 6f 6c 6f 6e 20 74 6f 20 74 68 65 20 63 6f icolon to the co 1a4d0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e nnection string. 1a4e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 1a4f0 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 append connecti 1a500 6f 6e 20 5c 3b 0d 0a 0d 0a 20 20 20 20 20 20 23 on \;.... # 1a510 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 1a520 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 Open the databas 1a530 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 77 e connection now 1a540 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 6f 70 , placing the op 1a550 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 6c 75 aque handle valu 1a560 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 1a570 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 61 62 into the variab 1a580 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 79 20 le specified by 1a590 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 1a5a0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set 1a5b0 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 db [sql open -ty 1a5c0 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 pe SQLite [subst 1a5d0 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a$connection]]..
1a5e0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1a5f0 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69 67 75   # NOTE: Configu
1a600 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79  re the temporary
1a610 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74   directory for t
1a620 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 20  he newly opened
1a630 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..
1a640 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  #       connecti
1a650 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75  on now unless ou
1a660 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73  r caller forbids
1a670 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20   it...      #..
1a680 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70 6f 72       if {$tempor 1a690 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 ary && ![info ex 1a6a0 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 65 6d ists ::no(setTem 1a6b0 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 79 29 poraryDirectory) 1a6c0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1a6d0 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 sql execute$
1a6e0 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  db [appendArgs \
1a6f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 50  ..            "P
1a700 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65  RAGMA temp_store
1a710 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c 22 22  _directory = \""
1a720 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 44 69   [getTemporaryDi
1a730 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d 0d 0a  rectory] \"\;]..
1a740 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1a750 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
1a760 3a 20 50 65 72 66 6f 72 6d 20 61 6e 79 20 65 78  : Perform any ex
1a770 74 72 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  tra per-connecti
1a780 6f 6e 20 73 65 74 75 70 20 66 6f 72 20 74 68 65  on setup for the
1a790 20 6e 65 77 6c 79 20 6f 70 65 6e 65 64 0d 0a 20   newly opened..
1a7a0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61 74       #       dat
1a7b0 61 62 61 73 65 20 6e 6f 77 20 75 6e 6c 65 73 73  abase now unless
1a7c0 20 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62   our caller forb
1a7d0 69 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23  ids it...      #
1a7e0 0d 0a 20 20 20 20 20 20 73 65 74 20 65 78 65 63  ..      set exec
1a7f0 75 74 65 4f 6e 53 65 74 75 70 20 5b 67 65 74 45  uteOnSetup [getE
1a800 78 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a  xecuteOnSetup]..
1a810 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
1a820 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 65 63  ing length $exec 1a830 75 74 65 4f 6e 53 65 74 75 70 5d 20 3e 20 30 20 uteOnSetup] > 0 1a840 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 1a850 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 1a860 6e 6f 28 65 78 65 63 75 74 65 4f 6e 53 65 74 75 no(executeOnSetu 1a870 70 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 p)]} then {.. 1a880 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1a890 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63 6f 6d # NOTE: This com 1a8a0 6d 61 6e 64 20 6d 61 79 20 72 61 69 73 65 20 61 mand may raise a 1a8b0 6e 20 65 72 72 6f 72 3b 20 69 66 20 73 6f 2c 20 n error; if so, 1a8c0 74 68 61 74 20 69 73 20 66 69 6e 65 2c 20 61 73 that is fine, as 1a8d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1a8e0 20 20 74 68 65 20 65 6e 63 6c 6f 73 69 6e 67 20 the enclosing 1a8f0 74 65 73 74 20 77 69 6c 6c 20 74 68 65 6e 20 66 test will then f 1a900 61 69 6c 2e 20 20 54 68 65 20 5b 73 75 62 73 74 ail. The [subst 1a910 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20 ] command is.. 1a920 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 # us 1a930 65 64 20 6f 6e 20 74 68 65 20 53 51 4c 20 69 6e ed on the SQL in 1a940 20 63 61 73 65 20 69 74 20 6e 65 65 64 73 20 74 case it needs t 1a950 6f 20 72 65 66 65 72 20 74 6f 20 73 74 61 74 65 o refer to state 1a960 20 69 6e 20 6f 75 72 0d 0a 20 20 20 20 20 20 20 in our.. 1a970 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 # context 1a980 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 1a990 20 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 sql execut 1a9a0 65 20 24 64 62 20 5b 73 75 62 73 74 20 24 65 78 e$db [subst $ex 1a9b0 65 63 75 74 65 4f 6e 53 65 74 75 70 5d 0d 0a 20 ecuteOnSetup].. 1a9c0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 1a9d0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 1a9e0 20 41 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 Always return t 1a9f0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 he connection ha 1aa00 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63 63 65 73 ndle upon succes 1aa10 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 s... #.. 1aa20 20 20 20 72 65 74 75 72 6e 20 24 64 62 0d 0a 20 return$db..
1aa30 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
1aa40 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f  c getDbConnectio
1aa50 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d  n { {varName db}
1aa60 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
1aa70 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66       # NOTE: Ref
1aa80 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  er to the specif
1aa90 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e  ied variable (e.
1aaa0 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20  g. "db") in the
1aab0 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d 0a  context of our..
1aac0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61        #       ca
1aad0 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64 6c  ller.  The handl
1aae0 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  e to the databas
1aaf0 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70 65  e previously ope
1ab00 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20 20  ned via the..
1ab10 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74 75     #       [setu
1ab20 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20 73  pDb] procedure s
1ab30 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64 20  hould be stored
1ab40 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d  there...      #.
1ab50 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24  .      upvar 1 $1ab60 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 varName db.... 1ab70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 1ab80 4f 54 45 3a 20 54 68 69 73 20 72 65 74 75 72 6e OTE: This return 1ab90 73 20 74 68 65 20 41 44 4f 2e 4e 45 54 20 49 44 s the ADO.NET ID 1aba0 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 bConnection obje 1abb0 63 74 20 69 6e 73 74 61 6e 63 65 20 66 6f 72 20 ct instance for 1abc0 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 1abd0 20 20 20 73 70 65 63 69 66 69 65 64 20 64 61 74 specified dat 1abe0 61 62 73 65 20 68 61 6e 64 6c 65 2e 20 20 53 69 abse handle. Si 1abf0 6e 63 65 20 67 65 74 74 69 6e 67 20 74 68 69 73 nce getting this 1ac00 20 6f 62 6a 65 63 74 20 72 65 6c 69 65 73 20 75 object relies u 1ac10 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 pon.. # 1ac20 20 20 20 45 61 67 6c 65 20 69 6e 74 65 72 6e 61 Eagle interna 1ac30 6c 73 2c 20 67 72 65 61 74 20 63 61 72 65 20 73 ls, great care s 1ac40 68 6f 75 6c 64 20 62 65 20 74 61 6b 65 6e 20 74 hould be taken t 1ac50 6f 20 61 76 6f 69 64 20 64 69 73 70 6f 73 69 6e o avoid disposin 1ac60 67 20 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 g of.. # 1ac70 20 20 20 20 74 68 69 73 20 6f 62 6a 65 63 74 20 this object 1ac80 6f 72 20 6f 74 68 65 72 77 69 73 65 20 70 75 74 or otherwise put 1ac90 74 69 6e 67 20 69 74 20 69 6e 74 6f 20 61 6e 20 ting it into an 1aca0 69 6e 76 61 6c 69 64 20 73 74 61 74 65 2e 0d 0a invalid state... 1acb0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 1acc0 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 1acd0 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 db]} then {.. 1ace0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch 1acf0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj 1ad00 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 1ad10 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 6f 62 s +NonPublic -ob 1ad20 6a 65 63 74 66 6c 61 67 73 20 2b 4e 6f 44 69 73 jectflags +NoDis 1ad30 70 6f 73 65 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 pose -alias \.. 1ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 Int 1ad50 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi 1ad60 76 65 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 49 ve.connections I 1ad70 74 65 6d 20 24 64 62 0d 0a 20 20 20 20 20 20 20 tem$db..
1ad80 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
1ad90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1ada0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1adb0 23 20 4e 4f 54 45 3a 20 53 75 63 63 65 73 73 2c  # NOTE: Success,
1adc0 20 72 65 74 75 72 6e 20 74 68 65 20 6f 70 61 71   return the opaq
1add0 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65  ue object handle
1ade0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1adf0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1ae00 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20   $result.. 1ae10 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1ae20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ae30 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 # NOTE: Failu 1ae40 72 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d re, report why.. 1ae50 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1ae60 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
1ae70 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
1ae80 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
1ae90 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
1aea0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
1aeb0 20 74 6f 20 67 65 74 20 63 6f 6e 6e 65 63 74 69   to get connecti
1aec0 6f 6e 20 68 61 6e 64 6c 65 20 66 6f 72 20 64 61  on handle for da
1aed0 74 61 62 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20  tabase \"" \..
1aee0 20 20 20 20 20 20 20 20 20 20 20 20 24 64 62 20              $db 1aef0 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e "\", error: " \n 1af00 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a \t$result \n]..
1af10 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1af20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
1af30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
1af40 6c 75 72 65 2c 20 72 65 74 75 72 6e 20 61 6e 20  lure, return an
1af50 6f 62 76 69 6f 75 73 6c 79 20 69 6e 76 61 6c 69  obviously invali
1af60 64 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20  d opaque object
1af70 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23  handle...      #
1af80 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22  ..      return "
1af90 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  "..    }.....
1afa0 20 70 72 6f 63 20 66 72 65 65 44 62 43 6f 6e 6e   proc freeDbConn
1afb0 65 63 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d  ection { {varNam
1afc0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 7d 20  e connection} }
1afd0 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
1afe0 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20    # NOTE: Refer
1aff0 74 6f 20 74 68 65 20 73 70 65 63 69 66 69 65 64  to the specified
1b000 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20   variable (e.g.
1b010 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 29 20 69 6e  "connection") in
1b020 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20   the..      #
1b030 20 20 20 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f      context of o
1b040 75 72 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20  ur caller.  The
1b050 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61  opaque object ha
1b060 6e 64 6c 65 20 66 6f 72 20 61 6e 20 41 44 4f 2e  ndle for an ADO.
1b070 4e 45 54 0d 0a 20 20 20 20 20 20 23 20 20 20 20  NET..      #
1b080 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72     connection pr
1b090 65 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65  eviously returne
1b0a0 64 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65  d by [getDbConne
1b0b0 63 74 69 6f 6e 5d 20 73 68 6f 75 6c 64 20 62 65  ction] should be
1b0c0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1b0d0 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20  stored there...
1b0e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
1b0f0 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63  var 1 $varName c 1b100 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 0d 0a 20 20 20 onnection.... 1b110 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1b120 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 72 TE: Attempt to r 1b130 65 6d 6f 76 65 20 74 68 65 20 6f 70 61 71 75 65 emove the opaque 1b140 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20 66 object handle f 1b150 72 6f 6d 20 74 68 65 20 69 6e 74 65 72 70 72 65 rom the interpre 1b160 74 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ter.. # 1b170 20 20 20 6e 6f 77 2e 20 20 54 68 69 73 20 5b 6f now. This [o 1b180 62 6a 65 63 74 20 64 69 73 70 6f 73 65 5d 20 63 bject dispose] c 1b190 61 6c 6c 20 77 69 6c 6c 20 6e 6f 74 20 61 63 74 all will not act 1b1a0 75 61 6c 6c 79 20 64 69 73 70 6f 73 65 20 6f 66 ually dispose of 1b1b0 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 1b1c0 20 20 20 20 75 6e 64 65 72 6c 79 69 6e 67 20 6f underlying o 1b1d0 62 6a 65 63 74 20 62 65 63 61 75 73 65 20 74 68 bject because th 1b1e0 65 20 2b 4e 6f 44 69 73 70 6f 73 65 20 66 6c 61 e +NoDispose fla 1b1f0 67 20 77 61 73 20 73 65 74 20 6f 6e 20 69 74 0d g was set on it. 1b200 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 1b210 75 72 69 6e 67 20 63 72 65 61 74 69 6f 6e 20 6f uring creation o 1b220 66 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a f the opaque obj 1b230 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 ect handle... 1b240 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 1b250 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6e [info exists con 1b260 6e 65 63 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 nection] && \.. 1b270 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68 20 [catch 1b280 7b 6f 62 6a 65 63 74 20 64 69 73 70 6f 73 65 20 {object dispose 1b290 24 63 6f 6e 6e 65 63 74 69 6f 6e 7d 20 65 72 72$connection} err
1b2a0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
1b2b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b2c0 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68  # NOTE: We someh
1b2d0 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 72 65 6d  ow failed to rem
1b2e0 6f 76 65 20 74 68 65 20 68 61 6e 64 6c 65 2c 20  ove the handle,
1b2f0 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
1b300 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b310 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1b320 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1b330 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 1b340 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 1b350 66 61 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 failed to remove 1b360 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 connection hand 1b370 6c 65 20 5c 22 22 20 24 63 6f 6e 6e 65 63 74 69 le \""$connecti
1b380 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  on \..
1b390 20 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20    "\", error: "
1b3a0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 1b3b0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 1b3c0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 61 64 64 .... proc add 1b3d0 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 63 DbConnection { c 1b3e0 6f 6e 6e 65 63 74 69 6f 6e 20 7b 76 61 72 4e 61 onnection {varNa 1b3f0 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 me db} } {.. 1b400 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1b410 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the 1b420 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab 1b430 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i 1b440 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of 1b450 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # 1b460 20 20 20 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 caller... 1b470 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 #.. upva 1b480 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d r 1$varName db.
1b490 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
1b4a0 20 20 23 20 4e 4f 54 45 3a 20 43 72 65 61 74 65    # NOTE: Create
1b4b0 20 61 20 63 6f 72 72 65 63 74 6c 79 20 66 6f 72   a correctly for
1b4c0 6d 61 74 74 65 64 20 6e 61 6d 65 20 66 6f 72 20  matted name for
1b4d0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
1b4e0 6e 65 63 74 69 6f 6e 20 74 6f 0d 0a 20 20 20 20  nection to..
1b4f0 20 20 23 20 20 20 20 20 20 20 62 65 20 61 64 64    #       be add
1b500 65 64 20 74 6f 20 74 68 65 20 6c 69 73 74 20 6d  ed to the list m
1b510 61 6e 61 67 65 64 20 62 79 20 74 68 65 20 45 61  anaged by the Ea
1b520 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  gle interpreter.
1b530 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1b540 20 73 65 74 20 64 62 20 5b 6f 62 6a 65 63 74 20   set db [object
1b550 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
1b560 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
1b570 20 20 20 20 20 20 45 61 67 6c 65 2e 5f 43 6f 6d        Eagle._Com
1b580 70 6f 6e 65 6e 74 73 2e 50 72 69 76 61 74 65 2e  ponents.Private.
1b590 46 6f 72 6d 61 74 4f 70 73 20 44 61 74 61 62 61  FormatOps Databa
1b5a0 73 65 4f 62 6a 65 63 74 4e 61 6d 65 20 24 63 6f  seObjectName $co 1b5b0 6e 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 nnection \.. 1b5c0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e SQLiteConn 1b5d0 65 63 74 69 6f 6e 20 5b 6f 62 6a 65 63 74 20 69 ection [object i 1b5e0 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 nvoke Interprete 1b5f0 72 2e 47 65 74 41 63 74 69 76 65 20 4e 65 78 74 r.GetActive Next 1b600 49 64 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d Id]].... #. 1b610 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 1b620 64 64 20 74 68 65 20 64 61 74 61 62 61 73 65 20 dd the database 1b630 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 76 69 connection provi 1b640 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 1b650 72 20 74 6f 20 74 68 65 20 6c 69 73 74 0d 0a 20 r to the list.. 1b660 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66 20 # of 1b670 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f 20 74 those known to t 1b680 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 he Eagle interpr 1b690 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eter... #.. 1b6a0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 1b6b0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 1b6c0 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 74 65 ublic Interprete 1b6d0 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f 6e 6e r.GetActive.conn 1b6e0 65 63 74 69 6f 6e 73 20 41 64 64 20 5c 0d 0a 20 ections Add \.. 1b6f0 20 20 20 20 20 20 20 20 20 24 64 62 20 24 63 6f$db $co 1b700 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 7d 0d nnection.. }. 1b710 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65 6d .... proc rem 1b720 6f 76 65 44 62 54 72 61 6e 73 61 63 74 69 6f 6e oveDbTransaction 1b730 20 7b 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 7d { transaction } 1b740 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 1b750 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 # NOTE: Remov 1b760 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74 e the database t 1b770 72 61 6e 73 61 63 74 69 6f 6e 20 70 72 6f 76 69 ransaction provi 1b780 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 1b790 72 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 r from the.. 1b7a0 20 20 23 20 20 20 20 20 20 20 6c 69 73 74 20 6f # list o 1b7b0 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e 20 74 6f f those known to 1b7c0 20 74 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 the Eagle inter 1b7d0 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 preter... # 1b7e0 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 .. object i 1b7f0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 1b800 6e 50 75 62 6c 69 63 20 49 6e 74 65 72 70 72 65 nPublic Interpre 1b810 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 74 72 ter.GetActive.tr 1b820 61 6e 73 61 63 74 69 6f 6e 73 20 5c 0d 0a 20 20 ansactions \.. 1b830 20 20 20 20 20 20 20 20 52 65 6d 6f 76 65 20 24 Remove$
1b840 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20  transaction..
1b850 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1b860 67 65 74 52 6f 77 73 46 72 6f 6d 44 61 74 61 54  getRowsFromDataT
1b870 61 62 6c 65 20 7b 20 64 61 74 61 54 61 62 6c 65  able { dataTable
1b880 20 7b 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20   {valueCallback
1b890 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ""} } {..      s
1b8a0 65 74 20 72 6f 77 73 20 5b 6c 69 73 74 5d 0d 0a  et rows [list]..
1b8b0 20 20 20 20 20 20 73 65 74 20 63 6f 75 6e 74 20        set count
1b8c0 5b 24 64 61 74 61 54 61 62 6c 65 20 43 6f 6c 75  [$dataTable Colu 1b8d0 6d 6e 73 2e 43 6f 75 6e 74 5d 0d 0a 0d 0a 20 20 mns.Count].... 1b8e0 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 for {set ind 1b8f0 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20 3c 20 ex 0} {$index <
1b900 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 69 6e  $count} {incr in 1b910 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 dex} {.. 1b920 73 65 74 20 64 61 74 61 43 6f 6c 75 6d 6e 20 5b set dataColumn [ 1b930 24 64 61 74 61 54 61 62 6c 65 20 2d 61 6c 69 61$dataTable -alia
1b940 73 20 43 6f 6c 75 6d 6e 73 2e 67 65 74 5f 49 74  s Columns.get_It
1b950 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 20 20 20 20  em $index].. 1b960 20 20 20 20 73 65 74 20 6e 61 6d 65 73 28 24 69 set names($i
1b970 6e 64 65 78 29 20 5b 24 64 61 74 61 43 6f 6c 75  ndex) [$dataColu 1b980 6d 6e 20 43 6f 6c 75 6d 6e 4e 61 6d 65 5d 0d 0a mn ColumnName].. 1b990 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1b9a0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1b9b0 3a 20 53 65 74 75 70 20 73 6f 6d 65 20 54 63 6c : Setup some Tcl 1b9c0 20 72 65 74 75 72 6e 20 63 6f 64 65 20 63 6f 6e return code con 1b9d0 73 74 61 6e 74 73 2e 0d 0a 20 20 20 20 20 20 23 stants... # 1b9e0 0d 0a 20 20 20 20 20 20 73 65 74 20 4f 6b 20 30 .. set Ok 0 1b9f0 3b 20 73 65 74 20 45 72 72 6f 72 20 31 3b 20 73 ; set Error 1; s 1ba00 65 74 20 52 65 74 75 72 6e 20 32 3b 20 73 65 74 et Return 2; set 1ba10 20 42 72 65 61 6b 20 33 3b 20 73 65 74 20 43 6f Break 3; set Co 1ba20 6e 74 69 6e 75 65 20 34 0d 0a 0d 0a 20 20 20 20 ntinue 4.... 1ba30 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 object foreach 1ba40 20 2d 61 6c 69 61 73 20 64 61 74 61 52 6f 77 20 -alias dataRow 1ba50 5b 73 65 74 20 64 61 74 61 52 6f 77 73 20 5b 24 [set dataRows [$
1ba60 64 61 74 61 54 61 62 6c 65 20 52 6f 77 73 5d 5d  dataTable Rows]]
1ba70 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
1ba80 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20  row [list]....
1ba90 20 20 20 20 20 20 66 6f 72 20 7b 73 65 74 20 69        for {set i
1baa0 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64 65 78 20  ndex 0} {$index 1bab0 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e 63 72 20 <$count} {incr
1bac0 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20  index} {..
1bad0 20 20 20 20 73 65 74 20 76 61 6c 75 65 20 5b 24      set value [$1bae0 64 61 74 61 52 6f 77 20 2d 63 72 65 61 74 65 20 dataRow -create 1baf0 2d 61 6c 69 61 73 20 67 65 74 5f 49 74 65 6d 20 -alias get_Item 1bb00 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20 20 20 20 20$index]....
1bb10 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
1bb20 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 43 61   length $valueCa 1bb30 6c 6c 62 61 63 6b 5d 20 3e 20 30 7d 20 74 68 65 llback] > 0} the 1bb40 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1bb50 20 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 set code [catch 1bb60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1bb70 20 20 24 76 61 6c 75 65 43 61 6c 6c 62 61 63 6b$valueCallback
1bb80 20 24 64 61 74 61 54 61 62 6c 65 20 24 64 61 74   $dataTable$dat
1bb90 61 52 6f 77 20 24 69 6e 64 65 78 20 24 76 61 6c  aRow $index$val
1bba0 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
1bbb0 7d 20 6e 65 77 56 61 6c 75 65 5d 0d 0a 0d 0a 20  } newValue]....
1bbc0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 24             if {$1bbd0 63 6f 64 65 20 3d 3d 20 24 4f 6b 7d 20 74 68 65 code ==$Ok} the
1bbe0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1bbf0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
1bc00 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
1bc10 74 68 65 20 73 70 65 63 69 66 69 65 64 20 28 6e  the specified (n
1bc20 65 77 3f 29 20 72 6f 77 20 76 61 6c 75 65 2e 0d  ew?) row value..
1bc30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
1bc40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1bc50 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73  lappend row [lis
1bc60 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29  t $names($index)
1bc70 20 24 6e 65 77 56 61 6c 75 65 5d 0d 0a 20 20 20   $newValue].. 1bc80 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 } elsei 1bc90 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 45 72 72 f {$code == $Err 1bca0 6f 72 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 or} then {.. 1bcb0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1bcc0 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1bcd0 45 3a 20 55 73 65 20 74 68 65 20 28 6e 65 77 3f E: Use the (new? 1bce0 29 20 4e 55 4c 4c 20 72 6f 77 20 76 61 6c 75 65 ) NULL row value 1bcf0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 1bd00 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1bd10 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c lappend row [l 1bd20 69 73 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 ist$names($inde 1bd30 78 29 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 x)].. 1bd40 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f 64 65 } elseif {$code
1bd50 20 3d 3d 20 24 52 65 74 75 72 6e 7d 20 74 68 65   == $Return} the 1bd60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 1bd70 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1bd80 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 1bd90 20 72 65 6d 61 69 6e 69 6e 67 20 76 61 6c 75 65 remaining value 1bda0 73 20 66 6f 72 20 74 68 69 73 20 72 6f 77 2e 0d s for this row.. 1bdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1bdc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bdd0 62 72 65 61 6b 0d 0a 20 20 20 20 20 20 20 20 20 break.. 1bde0 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 63 6f } elseif {$co
1bdf0 64 65 20 3d 3d 20 24 42 72 65 61 6b 7d 20 74 68  de == $Break} th 1be00 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1be10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1be20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 1be30 70 20 70 72 6f 63 65 73 73 69 6e 67 20 74 68 69 p processing thi 1be40 73 20 72 6f 77 20 76 61 6c 75 65 2e 0d 0a 20 20 s row value... 1be50 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1be60 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 1be70 65 69 66 20 7b 24 63 6f 64 65 20 3d 3d 20 24 43 eif {$code == $C 1be80 6f 6e 74 69 6e 75 65 7d 20 74 68 65 6e 20 7b 0d ontinue} then {. 1be90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1bea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1beb0 23 20 4e 4f 54 45 3a 20 55 73 65 20 64 65 66 61 # NOTE: Use defa 1bec0 75 6c 74 20 72 6f 77 20 76 61 6c 75 65 20 68 61 ult row value ha 1bed0 6e 64 6c 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 ndling... 1bee0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1bef0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1bf00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1bf10 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 set cod 1bf20 65 20 24 43 6f 6e 74 69 6e 75 65 0d 0a 20 20 20 e$Continue..
1bf30 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1bf40 20 20 20 20 20 20 69 66 20 7b 24 63 6f 64 65 20        if {$code 1bf50 3d 3d 20 24 43 6f 6e 74 69 6e 75 65 7d 20 74 68 ==$Continue} th
1bf60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1bf70 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
1bf80 6e 67 74 68 20 24 76 61 6c 75 65 5d 20 3e 20 30  ngth $value] > 0 1bf90 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1bfa0 20 20 20 20 20 20 20 21 5b 6f 62 6a 65 63 74 20 ![object 1bfb0 69 6e 76 6f 6b 65 20 43 6f 6e 76 65 72 74 20 49 invoke Convert I 1bfc0 73 44 42 4e 75 6c 6c 20 24 76 61 6c 75 65 5d 7d sDBNull$value]}
1bfd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1bfe0 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
1bff0 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d 65 73 28  ow [list $names( 1c000 24 69 6e 64 65 78 29 20 5b 24 76 61 6c 75 65 20$index) [$value 1c010 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20 20 20 20 ToString]].. 1c020 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 1c030 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c040 6c 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 lappend row [lis 1c050 74 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 t$names($index) 1c060 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 1c070 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1c080 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1c090 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73 lappend rows 1c0a0 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a$row..      }..
1c0b0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24  ..      return $1c0c0 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a rows.. }..... 1c0d0 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77 proc dumpRow 1c0e0 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b sFromDataTable { 1c0f0 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20 channel rows } 1c100 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 71 {.. set seq 1c110 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20 uence 1.... 1c120 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f foreach row$ro
1c130 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  ws {..        tp
1c140 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 1c150 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1c160 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24 [expr {$
1c170 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22  sequence > 1 ? "
1c180 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d  \n" : ""}] "----
1c190 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63   ROW #" $sequenc 1c1a0 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 e :\n].... 1c1b0 20 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 24 foreach pair$
1c1c0 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  row {..
1c1d0 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70   if {[llength $p 1c1e0 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20 air] >= 2} then 1c1f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 1c200 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
1c210 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a  ppendArgs \t \..
1c220 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c230 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70  [list [lindex $p 1c240 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69 air 0]] ": " [li 1c250 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72 st [lindex$pair
1c260 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20   1]] \n]..
1c270 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c      } elseif {[l
1c280 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d  length $pair] == 1c290 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 1} then {.. 1c2a0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
1c2b0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1c2c0 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20  gs \t \..
1c2d0 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b           [list [
1c2e0 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d  lindex $pair 0]] 1c2f0 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a ": <null>\n"].. 1c300 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 1c310 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c320 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c tputs$channel \
1c330 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f  t<empty>\n; # NO
1c340 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20  TE: No data?..
1c350 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1c360 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1c370 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20  incr sequence..
1c380 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1c390 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e  ..    proc clean
1c3a0 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20  upDb { fileName
1c3b0 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f  {varName db} {co
1c3c0 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61  llect true} {qua
1c3d0 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20  lify true}..
1c3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1c3f0 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d   {delete true} }
1c400 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
1c410 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
1c420 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20  pt to force all
1c430 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65  pending "garbage
1c440 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20  " objects to be
1c450 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20  collected,..
1c460 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64    #       includ
1c470 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65  ing SQLite state
1c480 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70  ments and backup
1c490 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73   objects; this s
1c4a0 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20  hould allow..
1c4b0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75     #       the u
1c4c0 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61  nderlying databa
1c4d0 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65  se file to be de
1c4e0 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d  leted...      #.
1c4f0 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c  .      if {$coll 1c500 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ect} then {.. 1c510 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 collectGarb 1c520 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e age$::test_chan
1c530 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  nel..      }....
1c540 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1c550 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20   NOTE: Refer to
1c560 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61  the specified va
1c570 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62  riable (e.g. "db
1c580 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78  ") in the contex
1c590 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20  t of our..
1c5a0 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20  #       caller.
1c5b0 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74   The handle to t
1c5c0 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76  he database prev
1c5d0 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69  iously opened vi
1c5e0 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  a the..      #
1c5f0 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70       [setupDb] p
1c600 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20  rocedure should
1c610 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  be stored there.
1c620 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1c630 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam 1c640 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. 1c650 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C 1c660 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 lose the connect 1c670 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62 ion to the datab 1c680 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73 ase now. This s 1c690 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a hould allow us.. 1c6a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f # to 1c6b0 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65 delete the unde 1c6c0 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20 rlying database 1c6d0 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a file... #.. 1c6e0 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 1c6f0 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63 exists db] && [c 1c700 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 atch {sql close 1c710 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65$db} error]} the
1c720 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
1c730 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1c740 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
1c750 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64  d to close the d
1c760 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20  atabase, report
1c770 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  why...        #.
1c780 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $1c790 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1c7a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1c7b0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 1c7c0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 1c7d0 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73 to close databas 1c7e0 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65 e \""$db "\", e
1c7f0 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20  rror: " \..
1c800 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72         \n\t $err 1c810 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d or \n].. }. 1c820 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 1c830 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 1c840 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c see if our call 1c850 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64 er has requested 1c860 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 an in-memory da 1c870 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 tabase... # 1c880 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65 .. set isMe 1c890 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 mory [isMemoryDb 1c8a0 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20$fileName]....
1c8b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
1c8c0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
1c8d0 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65  full path to the
1c8e0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e   database file n
1c8f0 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61  ame.  For now, a
1c900 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23  ll test..      #
1c910 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20         database
1c920 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
1c930 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72   in the temporar
1c940 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...
1c950 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
1c960 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24  {!$isMemory &&$
1c970 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d  qualify} then {.
1c980 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c  .        set fil
1c990 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  eName [file join
1c9a0 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72   [getDatabaseDir
1c9b0 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61  ectory] [file ta
1c9c0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a  il $fileName]].. 1c9d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1c9e0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1c9f0 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66 : Check if the f 1ca00 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73 ile still exists 1ca10 3b 20 69 6e 69 74 69 61 6c 6c 79 2c 20 61 73 73 ; initially, ass 1ca20 75 6d 65 20 61 6c 6c 20 66 69 6c 65 73 20 77 69 ume all files wi 1ca30 6c 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ll.. # 1ca40 20 20 62 65 20 64 65 6c 65 74 65 64 20 73 75 63 be deleted suc 1ca50 63 65 73 73 66 75 6c 6c 79 2c 20 69 66 20 6e 65 cessfully, if ne 1ca60 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 cessary... 1ca70 23 0d 0a 20 20 20 20 20 20 73 65 74 20 73 75 63 #.. set suc 1ca80 63 65 73 73 20 74 72 75 65 0d 0a 0d 0a 20 20 20 cess true.... 1ca90 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 if {!$isMemor
1caa0 79 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20  y && $delete && 1cab0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 [file exists$fi
1cac0 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d  leName]} then {.
1cad0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1cae0 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
1caf0 20 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61   deleting databa
1cb00 73 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65  se files if some
1cb10 62 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c  body sets the gl
1cb20 6f 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20  obal..        #
1cb30 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74        variable t
1cb40 6f 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20  o prevent it...
1cb50 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1cb60 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1cb70 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70  sts ::no(cleanup
1cb80 44 62 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  DbFiles)]} then
1cb90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
1cba0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
1cbb0 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c  : Attempt to del
1cbc0 65 74 65 20 74 68 65 20 74 65 73 74 20 57 41 4c  ete the test WAL
1cbd0 20 66 69 6c 65 2c 20 69 66 20 61 6e 79 2c 20 6e   file, if any, n
1cbe0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ow...          #
1cbf0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
1cc00 77 61 6c 46 69 6c 65 4e 61 6d 65 20 5b 61 70 70  walFileName [app
1cc10 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e 61 6d  endArgs $fileNam 1cc20 65 20 2d 77 61 6c 5d 0d 0a 0d 0a 20 20 20 20 20 e -wal].... 1cc30 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 1cc40 78 69 73 74 73 20 24 77 61 6c 46 69 6c 65 4e 61 xists$walFileNa
1cc50 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
1cc60 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1cc70 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1cc80 49 66 20 74 68 65 72 65 20 69 73 20 61 20 57 41  If there is a WA
1cc90 4c 20 66 69 6c 65 2c 20 69 74 20 73 68 6f 75 6c  L file, it shoul
1cca0 64 20 62 65 20 7a 65 72 6f 20 62 79 74 65 73 20  d be zero bytes
1ccb0 61 74 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20  at this..
1ccc0 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6f 69       #       poi
1ccd0 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt...
1cce0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1ccf0 69 66 20 7b 5b 73 65 74 20 73 69 7a 65 20 5b 66  if {[set size [f
1cd00 69 6c 65 20 73 69 7a 65 20 24 77 61 6c 46 69 6c  ile size $walFil 1cd10 65 4e 61 6d 65 5d 5d 20 3d 3d 20 30 7d 20 74 68 eName]] == 0} th 1cd20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1cd30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1cd40 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We 1cd50 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t 1cd60 6f 20 64 65 6c 65 74 65 20 74 68 65 20 57 41 4c o delete the WAL 1cd70 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 file, report wh 1cd80 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 y... 1cd90 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1cda0 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 if {[catch {f 1cdb0 69 6c 65 20 64 65 6c 65 74 65 20 24 77 61 6c 46 ile delete$walF
1cdc0 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d  ileName} error]}
1cdd0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1cde0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1cdf0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1ce00 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1ce20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 1ce30 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 failed to delet 1ce40 65 20 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 24 e WAL file \""$
1ce50 77 61 6c 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  walFileName \..
1ce60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ce70 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
1ce80 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20  eanup, error: "
1ce90 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 1cea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 1ceb0 20 20 20 73 65 74 20 73 75 63 63 65 73 73 20 66 set success f 1cec0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 alse.. 1ced0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1cee0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 1cef0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1cf00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1cf10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
1cf20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1cf30 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
1cf40 20 57 41 4c 20 66 69 6c 65 20 5c 22 22 20 24 77   WAL file \"" $w 1cf50 61 6c 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 69 alFileName "\" i 1cf60 73 20 22 20 24 73 69 7a 65 20 5c 0d 0a 20 20 20 s "$size \..
1cf70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1cf80 20 62 79 74 65 73 20 69 6e 20 73 69 7a 65 2c 20   bytes in size,
1cf90 73 6b 69 70 70 69 6e 67 20 61 6c 6c 20 66 69 6c  skipping all fil
1cfa0 65 20 64 65 6c 65 74 69 6f 6e 73 2e 2e 2e 5c 6e  e deletions...\n
1cfb0 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  "]....
1cfc0 20 20 20 20 72 65 74 75 72 6e 20 31 3b 20 23 20      return 1; #
1cfd0 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 20  error..
1cfe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
1cff0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
1d000 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
1d010 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64  TE: Attempt to d
1d020 65 6c 65 74 65 20 74 68 65 20 74 65 73 74 20 53  elete the test S
1d030 48 4d 20 66 69 6c 65 2c 20 69 66 20 61 6e 79 2c  HM file, if any,
1d040 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20   now...
1d050 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
1d060 74 20 73 68 6d 46 69 6c 65 4e 61 6d 65 20 5b 61  t shmFileName [a
1d070 70 70 65 6e 64 41 72 67 73 20 24 66 69 6c 65 4e  ppendArgs $fileN 1d080 61 6d 65 20 2d 73 68 6d 5d 0d 0a 0d 0a 20 20 20 ame -shm].... 1d090 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 if {[file 1d0a0 20 65 78 69 73 74 73 20 24 73 68 6d 46 69 6c 65 exists$shmFile
1d0b0 4e 61 6d 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20  Name] && \..
1d0c0 20 20 20 20 20 20 20 20 20 20 5b 63 61 74 63 68            [catch
1d0d0 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 73   {file delete $s 1d0e0 68 6d 46 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f hmFileName} erro 1d0f0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 1d100 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1d110 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 # NOTE: W 1d120 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 e somehow failed 1d130 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 53 to delete the S 1d140 48 4d 20 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 HM file, report 1d150 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 why... 1d160 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 1d170 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1d180 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1d190 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
1d1a0 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
1d1b0 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 64  ING: failed to d
1d1c0 65 6c 65 74 65 20 53 48 4d 20 66 69 6c 65 20 5c  elete SHM file \
1d1d0 22 22 20 24 73 68 6d 46 69 6c 65 4e 61 6d 65 20  "" $shmFileName 1d1e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d1f0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 1d200 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 eanup, error: " 1d210 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
1d220 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ...            s
1d230 65 74 20 73 75 63 63 65 73 73 20 66 61 6c 73 65  et success false
1d240 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
1d250 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
1d260 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
1d270 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74  Attempt to delet
1d280 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62  e the test datab
1d290 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20  ase file now...
1d2a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1d2b0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
1d2c0 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66   {file delete $f 1d2d0 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 7d ileName} error]} 1d2e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d2f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1d300 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 # NOTE: We s 1d310 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f omehow failed to 1d320 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 delete the file 1d330 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 , report why... 1d340 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1d350 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1d360 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1d370 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1d380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d390 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
1d3a0 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64  iled to delete d
1d3b0 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22  atabase file \""
1d3c0 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20   $fileName \.. 1d3d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 1d3e0 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 " during cleanup 1d3f0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 , error: " \n\t 1d400 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 0d 0a 20 20$error \n]....
1d410 20 20 20 20 20 20 20 20 20 20 73 65 74 20 73 75            set su
1d420 63 63 65 73 73 20 66 61 6c 73 65 0d 0a 20 20 20  ccess false..
1d430 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1d440 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
1d450 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1d460 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20     # NOTE: Show
1d470 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20  that we skipped
1d480 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c  deleting the fil
1d490 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d  e...          #.
1d4a0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
1d4b0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 1d4c0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 1d4d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 1d4e0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73 6b 69 === WARNING: ski 1d4f0 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20 64 61 pped deleting da 1d500 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 tabase file \"" 1d510 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20$fileName \..
1d520 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
1d530 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22  uring cleanup\n"
1d540 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ]..        }..
1d550 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72      }....      r
1d560 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 73 75  eturn [expr {$su 1d570 63 63 65 73 73 20 3f 20 30 20 3a 20 31 7d 5d 0d ccess ? 0 : 1}]. 1d580 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1d590 72 6f 63 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d roc saveEnvironm 1d5a0 65 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e entVariables { n 1d5b0 61 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 ames {varName "" 1d5c0 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 1d5d0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f # NOTE: Fo 1d5e0 72 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 r each name, doe 1d5f0 73 20 74 68 65 20 6c 69 76 65 20 65 6e 76 69 72 s the live envir 1d600 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 onment variable 1d610 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 exist? If.. 1d620 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 73 61 # so, sa 1d630 76 65 20 74 68 65 20 76 61 6c 75 65 20 66 6f 72 ve the value for 1d640 20 6c 61 74 65 72 3b 20 6f 74 68 65 72 77 69 73 later; otherwis 1d650 65 2c 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 e, make sure the 1d660 20 73 61 76 65 64 0d 0a 20 20 20 20 20 20 23 20 saved.. # 1d670 20 20 20 20 20 20 76 61 6c 75 65 20 64 6f 65 73 value does 1d680 20 6e 6f 74 20 65 78 69 73 74 20 65 69 74 68 65 not exist eithe 1d690 72 2e 20 20 54 68 65 20 6c 69 76 65 20 65 6e 76 r. The live env 1d6a0 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c ironment variabl 1d6b0 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # 1d6c0 20 20 41 52 45 20 4e 4f 54 20 63 68 61 6e 67 65 ARE NOT change 1d6d0 64 20 62 79 20 74 68 69 73 20 70 72 6f 63 65 64 d by this proced 1d6e0 75 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ure... #.. 1d6f0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 1d700 20 6c 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 length$varName
1d710 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1d720 20 20 20 20 20 20 20 20 73 65 74 20 76 61 72 4e          set varN
1d730 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 20 20  ame savedEnv..
1d740 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 75      }....      u
1d750 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 1d760 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 savedEnv.... 1d770 20 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 foreach name$
1d780 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  names {..
1d790 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
1d7a0 73 20 3a 3a 65 6e 76 28 24 6e 61 6d 65 29 5d 7d  s ::env($name)]} 1d7b0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1d7c0 20 20 20 73 65 74 20 73 61 76 65 64 45 6e 76 28 set savedEnv( 1d7d0 24 6e 61 6d 65 29 20 24 3a 3a 65 6e 76 28 24 6e$name) $::env($n
1d7e0 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 20  ame)..        }
1d7f0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
1d800 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c    unset -nocompl
1d810 61 69 6e 20 73 61 76 65 64 45 6e 76 28 24 6e 61  ain savedEnv($na 1d820 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a me).. }.. 1d830 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1d840 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1d850 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d 63 : This is self-c 1d860 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f 20 leaning. If no 1d870 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e saved environmen 1d880 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77 0d t variables now. 1d890 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 . # e 1d8a0 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68 65 xist, remove the 1d8b0 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20 23 array... # 1d8c0 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72 72 .. if {[arr 1d8d0 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e 76 ay size savedEnv 1d8e0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 1d8f0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 1d900 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 ocomplain savedE 1d910 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 nv.. }.. 1d920 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 1d930 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 restoreEnvironme 1d940 6e 74 56 61 72 69 61 62 6c 65 73 20 7b 20 6e 61 ntVariables { na 1d950 6d 65 73 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d mes {varName ""} 1d960 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 1d970 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 # NOTE: For 1d980 20 65 61 63 68 20 6e 61 6d 65 2c 20 64 6f 65 73 each name, does 1d990 20 74 68 65 20 73 61 76 65 64 20 65 6e 76 69 72 the saved envir 1d9a0 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20 onment variable 1d9b0 65 78 69 73 74 3f 20 20 49 66 0d 0a 20 20 20 20 exist? If.. 1d9c0 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 72 65 # so, re 1d9d0 73 74 6f 72 65 20 74 68 65 20 73 61 76 65 64 20 store the saved 1d9e0 76 61 6c 75 65 20 61 6e 64 20 75 6e 73 65 74 20 value and unset 1d9f0 69 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 6d it; otherwise, m 1da00 61 6b 65 20 73 75 72 65 0d 0a 20 20 20 20 20 20 ake sure.. 1da10 23 20 20 20 20 20 20 20 74 68 65 20 6c 69 76 65 # the live 1da20 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var 1da30 69 61 62 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 iable does not e 1da40 78 69 73 74 20 65 69 74 68 65 72 20 28 69 2e 65 xist either (i.e 1da50 2e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20 . it.. # 1da60 20 20 20 20 77 61 73 20 6e 6f 74 20 73 65 74 20 was not set 1da70 74 6f 20 62 65 67 69 6e 20 77 69 74 68 29 2e 20 to begin with). 1da80 20 42 6f 74 68 20 73 61 76 65 64 20 61 6e 64 20 Both saved and 1da90 6c 69 76 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 live environment 1daa0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1dab0 76 61 72 69 61 62 6c 65 73 20 41 52 45 20 63 68 variables ARE ch 1dac0 61 6e 67 65 64 20 62 79 20 74 68 69 73 20 70 72 anged by this pr 1dad0 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20 20 20 20 ocedure... 1dae0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 #.. if {[st 1daf0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
1db00 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  Name] == 0} then
1db10 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
1db20 76 61 72 4e 61 6d 65 20 73 61 76 65 64 45 6e 76  varName savedEnv
1db30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
1db40 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 1db50 61 6d 65 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a ame savedEnv.... 1db60 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 foreach na 1db70 6d 65 20 24 6e 61 6d 65 73 20 7b 0d 0a 20 20 20 me$names {..
1db80 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1db90 78 69 73 74 73 20 73 61 76 65 64 45 6e 76 28 24  xists savedEnv($1dba0 6e 61 6d 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a name)]} then {.. 1dbb0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 1dbc0 65 6e 76 28 24 6e 61 6d 65 29 20 24 73 61 76 65 env($name) $save 1dbd0 64 45 6e 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 dEnv($name)..
1dbe0 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f         unset -no
1dbf0 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64 45 6e  complain savedEn
1dc00 76 28 24 6e 61 6d 65 29 0d 0a 20 20 20 20 20 20  v($name).. 1dc10 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1dc20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 1dc30 6f 6d 70 6c 61 69 6e 20 3a 3a 65 6e 76 28 24 6e omplain ::env($n
1dc40 61 6d 65 29 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ame)..        }.
1dc50 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....
1dc60 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
1dc70 45 3a 20 54 68 69 73 20 69 73 20 73 65 6c 66 2d  E: This is self-
1dc80 63 6c 65 61 6e 69 6e 67 2e 20 20 49 66 20 6e 6f  cleaning.  If no
1dc90 20 73 61 76 65 64 20 65 6e 76 69 72 6f 6e 6d 65   saved environme
1dca0 6e 74 20 76 61 72 69 61 62 6c 65 73 20 6e 6f 77  nt variables now
1dcb0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1dcc0 65 78 69 73 74 2c 20 72 65 6d 6f 76 65 20 74 68  exist, remove th
1dcd0 65 20 61 72 72 61 79 2e 0d 0a 20 20 20 20 20 20  e array...
1dce0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 61 72  #..      if {[ar
1dcf0 72 61 79 20 73 69 7a 65 20 73 61 76 65 64 45 6e  ray size savedEn
1dd00 76 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  v] == 0} then {.
1dd10 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d  .        unset -
1dd20 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64  nocomplain saved
1dd30 45 6e 76 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  Env..      }..
1dd40 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1dd50 20 73 61 76 65 45 61 67 6c 65 53 68 65 6c 6c 45   saveEagleShellE
1dd60 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d  nvironment {} {.
1dd70 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 73  .      upvar 1 s
1dd80 61 76 65 64 45 6e 76 20 73 61 76 65 64 45 6e 76  avedEnv savedEnv
1dd90 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76 65 45 6e  ....      saveEn
1dda0 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c  vironmentVariabl
1ddb0 65 73 20 5b 6c 69 73 74 20 4e 6f 4d 75 74 65 78  es [list NoMutex
1ddc0 65 73 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20  es] savedEnv..
1ddd0 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
1dde0 20 72 65 73 74 6f 72 65 45 61 67 6c 65 53 68 65   restoreEagleShe
1ddf0 6c 6c 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d  llEnvironment {}
1de00 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   {..      upvar
1de10 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64  1 savedEnv saved
1de20 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72 65 73  Env....      res
1de30 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56  toreEnvironmentV
1de40 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 4e  ariables [list N
1de50 6f 4d 75 74 65 78 65 73 5d 20 73 61 76 65 64 45  oMutexes] savedE
1de60 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  nv..    }.....
1de70 20 20 70 72 6f 63 20 73 61 76 65 4d 64 61 43 6f    proc saveMdaCo
1de80 6e 66 69 67 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  nfigEnvironment
1de90 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
1dea0 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
1deb0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73  edEnv....      s
1dec0 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61  aveEnvironmentVa
1ded0 72 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 43 4f  riables [list CO
1dee0 4d 50 4c 55 53 5f 4d 44 41 5d 20 73 61 76 65 64  MPLUS_MDA] saved
1def0 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  Env..    }.....
1df00 20 20 20 70 72 6f 63 20 72 65 73 74 6f 72 65 4d     proc restoreM
1df10 64 61 43 6f 6e 66 69 67 45 6e 76 69 72 6f 6e 6d  daConfigEnvironm
1df20 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ent {} {..
1df30 75 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76  upvar 1 savedEnv
1df40 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20   savedEnv....
1df50 20 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f     restoreEnviro
1df60 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5b  nmentVariables [
1df70 6c 69 73 74 20 43 4f 4d 50 4c 55 53 5f 4d 44 41  list COMPLUS_MDA
1df80 5d 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20  ] savedEnv..
1df90 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
1dfa0 61 76 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c  aveGetSettingVal
1dfb0 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20 7b 7d  ueEnvironment {}
1dfc0 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20   {..      upvar
1dfd0 31 20 73 61 76 65 64 45 6e 76 20 73 61 76 65 64  1 savedEnv saved
1dfe0 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 73 61 76  Env....      sav
1dff0 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69  eEnvironmentVari
1e000 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20  ables [list \..
1e010 20 20 20 20 20 20 20 20 20 4e 6f 5f 45 78 70 61           No_Expa
1e020 6e 64 20 4e 6f 5f 53 51 4c 69 74 65 47 65 74 53  nd No_SQLiteGetS
1e030 65 74 74 69 6e 67 56 61 6c 75 65 20 4e 6f 5f 53  ettingValue No_S
1e040 51 4c 69 74 65 58 6d 6c 43 6f 6e 66 69 67 46 69  QLiteXmlConfigFi
1e050 6c 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  le] \..
1e060 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d   savedEnv..    }
1e070 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 72 65  .....    proc re
1e080 73 74 6f 72 65 47 65 74 53 65 74 74 69 6e 67 56  storeGetSettingV
1e090 61 6c 75 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  alueEnvironment
1e0a0 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
1e0b0 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
1e0c0 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72  edEnv....      r
1e0d0 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e  estoreEnvironmen
1e0e0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1e0f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 4e 6f   \..          No
1e100 5f 45 78 70 61 6e 64 20 4e 6f 5f 53 51 4c 69 74  _Expand No_SQLit
1e110 65 47 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65  eGetSettingValue
1e120 20 4e 6f 5f 53 51 4c 69 74 65 58 6d 6c 43 6f 6e   No_SQLiteXmlCon
1e130 66 69 67 46 69 6c 65 5d 20 5c 0d 0a 20 20 20 20  figFile] \..
1e140 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d 0a        savedEnv..
1e150 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
1e160 6f 63 20 73 61 76 65 53 51 4c 69 74 65 43 6f 6e  oc saveSQLiteCon
1e170 6e 65 63 74 69 6f 6e 45 6e 76 69 72 6f 6e 6d 65  nectionEnvironme
1e180 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75  nt {} {..      u
1e190 70 76 61 72 20 31 20 73 61 76 65 64 45 6e 76 20  pvar 1 savedEnv
1e1a0 73 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20  savedEnv....
1e1b0 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e    saveEnvironmen
1e1c0 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1e1d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 44 65   \..          De
1e1e0 66 61 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74  faultFlags_SQLit
1e1f0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 4e 6f 5f 53  eConnection No_S
1e200 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e  QLiteConnectionN
1e210 65 77 50 61 72 73 65 72 5d 20 5c 0d 0a 20 20 20  ewParser] \..
1e220 20 20 20 20 20 20 20 73 61 76 65 64 45 6e 76 0d         savedEnv.
1e230 0a 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  ...      upvar 1
1e240 20 73 61 76 65 64 43 6f 6e 6e 65 63 74 69 6f 6e   savedConnection
1e250 46 6c 61 67 73 20 73 61 76 65 64 43 6f 6e 6e 65  Flags savedConne
1e260 63 74 69 6f 6e 46 6c 61 67 73 0d 0a 0d 0a 20 20  ctionFlags....
1e270 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
1e280 69 73 74 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f  ists ::connectio
1e290 6e 5f 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b  n_flags]} then {
1e2a0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 61  ..        set sa
1e2b0 76 65 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  vedConnectionFla
1e2c0 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e  gs $::connection 1e2d0 5f 66 6c 61 67 73 0d 0a 20 20 20 20 20 20 7d 20 _flags.. } 1e2e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1e2f0 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 1e300 6e 20 73 61 76 65 64 43 6f 6e 6e 65 63 74 69 6f n savedConnectio 1e310 6e 46 6c 61 67 73 0d 0a 20 20 20 20 20 20 7d 0d nFlags.. }. 1e320 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 1e330 72 6f 63 20 72 65 73 74 6f 72 65 53 51 4c 69 74 roc restoreSQLit 1e340 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 6e 76 69 72 eConnectionEnvir 1e350 6f 6e 6d 65 6e 74 20 7b 7d 20 7b 0d 0a 20 20 20 onment {} {.. 1e360 20 20 20 75 70 76 61 72 20 31 20 73 61 76 65 64 upvar 1 saved 1e370 45 6e 76 20 73 61 76 65 64 45 6e 76 0d 0a 0d 0a Env savedEnv.... 1e380 20 20 20 20 20 20 72 65 73 74 6f 72 65 45 6e 76 restoreEnv 1e390 69 72 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 ironmentVariable 1e3a0 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 s [list \.. 1e3b0 20 20 20 20 20 44 65 66 61 75 6c 74 46 6c 61 67 DefaultFlag 1e3c0 73 5f 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 s_SQLiteConnecti 1e3d0 6f 6e 20 4e 6f 5f 53 51 4c 69 74 65 43 6f 6e 6e on No_SQLiteConn 1e3e0 65 63 74 69 6f 6e 4e 65 77 50 61 72 73 65 72 5d ectionNewParser] 1e3f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61 \.. sa 1e400 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 vedEnv.... 1e410 75 70 76 61 72 20 31 20 73 61 76 65 64 43 6f 6e upvar 1 savedCon 1e420 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 73 61 76 nectionFlags sav 1e430 65 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 edConnectionFlag 1e440 73 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b s.... if {[ 1e450 69 6e 66 6f 20 65 78 69 73 74 73 20 73 61 76 65 info exists save 1e460 64 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 dConnectionFlags 1e470 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1e480 20 20 20 73 65 74 20 3a 3a 63 6f 6e 6e 65 63 74 set ::connect 1e490 69 6f 6e 5f 66 6c 61 67 73 20 24 73 61 76 65 64 ion_flags$saved
1e4a0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 0d  ConnectionFlags.
1e4b0 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d  .        unset -
1e4c0 6e 6f 63 6f 6d 70 6c 61 69 6e 20 73 61 76 65 64  nocomplain saved
1e4d0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 0d  ConnectionFlags.
1e4e0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
1e4f0 0a 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d  .        unset -
1e500 6e 6f 63 6f 6d 70 6c 61 69 6e 20 3a 3a 63 6f 6e  nocomplain ::con
1e510 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 0d 0a 20  nection_flags..
1e520 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
1e530 0d 0a 20 20 20 20 70 72 6f 63 20 73 61 76 65 53  ..    proc saveS
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 73 61 76 65 45 6e 76 69 72  .      saveEnvir
1e590 6f 6e 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20  onmentVariables
1e5a0 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20  [list \..
1e5b0 20 20 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e     Use_SQLiteCon
1e5c0 76 65 72 74 5f 44 65 66 61 75 6c 74 44 62 54 79  vert_DefaultDbTy
1e5d0 70 65 20 55 73 65 5f 53 51 4c 69 74 65 43 6f 6e  pe Use_SQLiteCon
1e5e0 76 65 72 74 5f 44 65 66 61 75 6c 74 54 79 70 65  vert_DefaultType
1e5f0 4e 61 6d 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20  Name] \..
1e600 20 20 20 73 61 76 65 64 45 6e 76 0d 0a 20 20 20     savedEnv..
1e610 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
1e620 72 65 73 74 6f 72 65 53 51 4c 69 74 65 43 6f 6e  restoreSQLiteCon
1e630 76 65 72 74 45 6e 76 69 72 6f 6e 6d 65 6e 74 20  vertEnvironment
1e640 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 76 61  {} {..      upva
1e650 72 20 31 20 73 61 76 65 64 45 6e 76 20 73 61 76  r 1 savedEnv sav
1e660 65 64 45 6e 76 0d 0a 0d 0a 20 20 20 20 20 20 72  edEnv....      r
1e670 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e 6d 65 6e  estoreEnvironmen
1e680 74 56 61 72 69 61 62 6c 65 73 20 5b 6c 69 73 74  tVariables [list
1e690 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 55 73   \..          Us
1e6a0 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f  e_SQLiteConvert_
1e6b0 44 65 66 61 75 6c 74 44 62 54 79 70 65 20 55 73  DefaultDbType Us
1e6c0 65 5f 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 5f  e_SQLiteConvert_
1e6d0 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 5d  DefaultTypeName]
1e6e0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 73 61   \..          sa
1e6f0 76 65 64 45 6e 76 0d 0a 20 20 20 20 7d 0d 0a 0c  vedEnv..    }...
1e700 0d 0a 20 20 20 20 70 72 6f 63 20 73 65 74 75 70  ..    proc setup
1e710 44 62 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62  DbInterruptCallb
1e720 61 63 6b 20 7b 20 63 68 61 6e 6e 65 6c 20 6c 6f  ack { channel lo
1e730 67 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75  g } {..      tpu
1e740 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d  ts $channel "--- 1e750 2d 20 73 65 74 74 69 6e 67 20 75 70 20 64 65 62 - setting up deb 1e760 75 67 67 65 72 20 69 6e 74 65 72 72 75 70 74 20 ugger interrupt 1e770 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 22 0d 0a 0d callback... "... 1e780 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc 1e790 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 61 76 h {.. sav 1e7a0 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72 69 eEnvironmentVari 1e7b0 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 ables [list \.. 1e7c0 20 20 20 20 20 20 20 20 20 20 20 71 75 69 65 74 quiet 1e7d0 46 69 6e 64 49 6e 74 65 72 70 72 65 74 65 72 54 FindInterpreterT 1e7e0 65 73 74 50 61 74 68 20 71 75 69 65 74 53 65 74 estPath quietSet 1e7f0 75 70 49 6e 74 65 72 70 72 65 74 65 72 54 65 73 upInterpreterTes 1e800 74 50 61 74 68 5d 0d 0a 0d 0a 20 20 20 20 20 20 tPath].... 1e810 20 20 74 72 79 20 7b 0d 0a 20 20 20 20 20 20 20 try {.. 1e820 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1e830 23 20 4e 4f 54 45 3a 20 50 72 65 76 65 6e 74 20 # NOTE: Prevent 1e840 74 68 65 20 76 65 6e 64 6f 72 20 73 63 72 69 70 the vendor scrip 1e850 74 20 66 72 6f 6d 20 62 65 69 6e 67 20 6e 6f 69 t from being noi 1e860 73 79 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67 sy when creating 1e870 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 1e880 20 20 20 20 74 68 65 20 69 73 6f 6c 61 74 65 64 the isolated 1e890 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 1e8a0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1e8b0 20 20 20 20 20 20 73 65 74 20 3a 3a 65 6e 76 28 set ::env( 1e8c0 71 75 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 quietFindInterpr 1e8d0 65 74 65 72 54 65 73 74 50 61 74 68 29 20 31 0d eterTestPath) 1. 1e8e0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a . set : 1e8f0 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 49 :env(quietSetupI 1e900 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61 nterpreterTestPa 1e910 74 68 29 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 th) 1.... 1e920 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1e930 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 # NOTE: Make sur 1e940 65 20 74 68 65 20 73 63 72 69 70 74 20 64 65 62 e the script deb 1e950 75 67 67 65 72 20 61 6e 64 20 74 68 65 20 69 73 ugger and the is 1e960 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 1e970 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 er.. # 1e980 20 20 20 20 20 20 61 72 65 20 73 65 74 75 70 20 are setup 1e990 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 and ready for us 1e9a0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d e... #. 1e9b0 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 1e9c0 20 73 65 74 75 70 20 74 72 75 65 20 74 72 75 65 setup true true 1e9d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d .... #. 1e9e0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1e9f0 45 3a 20 4c 6f 61 64 20 74 68 65 20 6e 65 63 65 E: Load the nece 1ea00 73 73 61 72 79 20 70 61 63 6b 61 67 65 73 20 69 ssary packages i 1ea10 6e 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 nto the isolated 1ea20 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 interpreter... 1ea30 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1ea40 20 20 20 20 20 20 64 65 62 75 67 20 65 76 61 6c debug eval 1ea50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1ea60 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 package require 1ea70 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 Eagle.. 1ea80 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 package requi 1ea90 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72 79 re Eagle.Library 1eaa0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 70 61 .. pa 1eab0 63 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 ckage require Ea 1eac0 67 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 gle.Test.. 1ead0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1eae0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1eaf0 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65 # NOTE: Copy the 1eb00 20 6e 65 63 65 73 73 61 72 79 20 76 61 72 69 61 necessary varia 1eb10 62 6c 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 bles into the is 1eb20 6f 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 olated interpret 1eb30 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # 1eb40 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 .. debu 1eb50 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a g invoke 0 set : 1eb60 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 63 :test_channel$c
1eb70 68 61 6e 6e 65 6c 3b 20 23 20 4e 4f 54 45 3a 20  hannel; # NOTE:
1eb80 46 6f 72 20 5b 74 70 75 74 73 5d 2e 0d 0a 20 20  For [tputs]...
1eb90 20 20 20 20 20 20 20 20 64 65 62 75 67 20 69 6e          debug in
1eba0 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a 74 65 73  voke 0 set ::tes
1ebb0 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 20 4e 4f  t_log $log; # NO 1ebc0 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67 5d 2e 0d TE: For [tlog].. 1ebd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1ebe0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1ebf0 3a 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 : Install the ca 1ec00 6c 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f llback script to 1ec10 20 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e be evaluated in 1ec20 20 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 the isolated.. 1ec30 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1ec40 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 68 65 interpreter whe 1ec50 6e 20 74 68 69 73 20 69 6e 74 65 72 70 72 65 74 n this interpret 1ec60 65 72 20 69 73 20 69 6e 74 65 72 72 75 70 74 65 er is interrupte 1ec70 64 20 62 79 20 73 63 72 69 70 74 0d 0a 20 20 20 d by script.. 1ec80 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 1ec90 61 6e 63 65 6c 6c 61 74 69 6f 6e 2c 20 65 74 63 ancellation, etc 1eca0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 1ecb0 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 20 debug 1ecc0 63 61 6c 6c 62 61 63 6b 20 61 70 70 6c 79 20 7b callback apply { 1ecd0 7b 73 65 6e 64 65 72 20 65 7d 20 7b 0d 0a 20 20 {sender e} {.. 1ece0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1ecf0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1ed00 20 43 68 65 63 6b 20 69 66 20 74 68 69 73 20 64 Check if this d 1ed10 65 62 75 67 67 65 72 20 63 61 6c 6c 62 61 63 6b ebugger callback 1ed20 20 69 73 20 6f 6e 65 20 74 68 61 74 20 77 65 20 is one that we 1ed30 63 61 72 65 20 61 62 6f 75 74 2e 0d 0a 20 20 20 care about... 1ed40 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1ed50 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 74 65 set inte 1ed60 72 72 75 70 74 54 79 70 65 73 20 5b 73 70 6c 69 rruptTypes [spli 1ed70 74 20 5b 24 65 20 49 6e 74 65 72 72 75 70 74 54 t [$e InterruptT
1ed80 79 70 65 5d 20 22 2c 20 22 5d 0d 0a 0d 0a 20 20  ype] ", "]....
1ed90 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 22 43            if {"C
1eda0 61 6e 63 65 6c 65 64 22 20 69 6e 20 24 69 6e 74  anceled" in $int 1edb0 65 72 72 75 70 74 54 79 70 65 73 20 7c 7c 20 5c erruptTypes || \ 1edc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1edd0 20 20 22 55 6e 77 6f 75 6e 64 22 20 69 6e 20 24 "Unwound" in$
1ede0 69 6e 74 65 72 72 75 70 74 54 79 70 65 73 7d 20  interruptTypes}
1edf0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
1ee00 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1ee10 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
1ee20 61 6b 65 20 73 75 72 65 20 74 68 65 20 5b 6f 62  ake sure the [ob
1ee30 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73  ject] command is
1ee40 20 61 76 61 69 6c 61 62 6c 65 2e 20 20 53 69 6e   available.  Sin
1ee50 63 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ce..
1ee60 20 20 23 20 20 20 20 20 20 20 74 68 69 73 20 69    #       this i
1ee70 73 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 69 6e  s an isolated in
1ee80 74 65 72 70 72 65 74 65 72 2c 20 63 68 65 63 6b  terpreter, check
1ee90 20 66 6f 72 20 69 74 20 74 68 65 20 68 61 72 64   for it the hard
1eea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1eeb0 23 20 20 20 20 20 20 20 77 61 79 2e 0d 0a 20 20  #       way...
1eec0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
1eed0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
1eee0 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20  {[llength [info
1eef0 63 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d  commands object]
1ef00 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1ef10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23                 #
1ef20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1ef30 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 61 74    # NOTE: Iterat
1ef40 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 64 61  e through all da
1ef50 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
1ef60 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 0d  ns known to the.
1ef70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1ef80 20 23 20 20 20 20 20 20 20 70 61 72 65 6e 74 20   #       parent
1ef90 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
1efa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
1efb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1efc0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
1efd0 2d 61 6c 69 61 73 20 70 61 69 72 20 5b 6f 62 6a  -alias pair [obj
1efe0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67  ect invoke -flag
1eff0 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a  s +NonPublic \..
1f000 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f010 20 20 20 20 24 65 20 49 6e 74 65 72 70 72 65 74      $e Interpret 1f020 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d 20 er.connections] 1f030 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1f040 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f050 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 1f060 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 63 61 6e : Attempt to can 1f070 63 65 6c 20 61 6e 79 20 53 51 4c 20 71 75 65 72 cel any SQL quer 1f080 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73 73 20 ies in progress 1f090 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 1f0a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 1f0b0 69 73 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e is database conn 1f0c0 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 ection... 1f0d0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 1f0e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f0f0 69 66 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 if {[catch {$pai
1f100 72 20 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20  r Value.Cancel}
1f110 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a  error]} then {..
1f120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f130 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 1f140 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 1f150 64 41 72 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 dArgs \n \.. 1f160 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1f170 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e "==== WARNIN 1f180 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 61 6e G: failed to can 1f190 63 65 6c 20 71 75 65 72 79 20 66 6f 72 20 22 20 cel query for " 1f1a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1f1b0 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e "conn 1f1c0 65 63 74 69 6f 6e 20 5c 22 22 20 5b 24 70 61 69 ection \"" [$pai
1f1d0 72 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f  r Key] "\", erro
1f1e0 72 3a 20 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20  r: " \n\t \..
1f1f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f200 20 20 20 20 20 24 65 72 72 6f 72 20 5c 6e 5d 0d       $error \n]. 1f210 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f220 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 1f230 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 1f240 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 1f250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1f260 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
1f270 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
1f280 67 73 20 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20  gs \n \..
1f290 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d               "==
1f2a0 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 63 61 6e 6e  == WARNING: cann
1f2b0 6f 74 20 63 61 6e 63 65 6c 20 61 6e 79 20 71 75  ot cancel any qu
1f2c0 65 72 69 65 73 3a 20 22 20 5c 0d 0a 20 20 20 20  eries: " \..
1f2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1f2e0 22 74 68 65 20 5c 22 6f 62 6a 65 63 74 5c 22 20  "the \"object\"
1f2f0 63 6f 6d 6d 61 6e 64 20 69 73 20 6e 6f 74 20 61  command is not a
1f300 76 61 69 6c 61 62 6c 65 5c 6e 22 5d 0d 0a 20 20  vailable\n"]..
1f310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1f320 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1f330 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20 20 20          }}..
1f340 20 20 20 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d      } finally {.
1f350 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 74 6f  .          resto
1f360 72 65 45 6e 76 69 72 6f 6e 6d 65 6e 74 56 61 72  reEnvironmentVar
1f370 69 61 62 6c 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  iables [list \..
1f380 20 20 20 20 20 20 20 20 20 20 20 20 20 20 71 75                qu
1f390 69 65 74 46 69 6e 64 49 6e 74 65 72 70 72 65 74  ietFindInterpret
1f3a0 65 72 54 65 73 74 50 61 74 68 20 71 75 69 65 74  erTestPath quiet
1f3b0 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72  SetupInterpreter
1f3c0 54 65 73 74 50 61 74 68 5d 0d 0a 20 20 20 20 20  TestPath]..
1f3d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 72     }..      } er
1f3e0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ror] == 0} then
1f3f0 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f  {..        addCo
1f400 6e 73 74 72 61 69 6e 74 20 69 6e 74 65 72 72 75  nstraint interru
1f410 70 74 43 61 6c 6c 62 61 63 6b 2e 73 71 6c 69 74  ptCallback.sqlit
1f420 65 33 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70  e3....        tp
1f430 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73  uts $channel yes 1f440 5c 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 \n.. } else 1f450 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 1f460 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
1f470 6e 64 41 72 67 73 20 22 6e 6f 2c 20 65 72 72 6f  ndArgs "no, erro
1f480 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 1f490 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 \n].. }.. 1f4a0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 1f4b0 63 20 63 6c 65 61 6e 75 70 46 69 6c 65 20 7b 20 c cleanupFile { 1f4c0 66 69 6c 65 4e 61 6d 65 20 7b 63 6f 6c 6c 65 63 fileName {collec 1f4d0 74 20 74 72 75 65 7d 20 7b 66 6f 72 63 65 20 66 t true} {force f 1f4e0 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 alse} } {.. 1f4f0 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 1f500 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 : Attempt to for 1f510 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22 ce all pending " 1f520 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73 garbage" objects 1f530 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64 to be collected 1f540 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 ,.. # 1f550 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74 including SQLit 1f560 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64 e statements and 1f570 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b backup objects; 1f580 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c this should all 1f590 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ow.. # 1f5a0 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 the underlying 1f5b0 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74 database file t 1f5c0 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20 o be deleted... 1f5d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1f5e0 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e {$collect} then
1f5f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c   {..        coll
1f600 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65  ectGarbage $::te 1f610 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 st_channel.. 1f620 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 1f630 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 # NOTE: Ch 1f640 65 63 6b 20 69 66 20 74 68 65 20 66 69 6c 65 20 eck if the file 1f650 73 74 69 6c 6c 20 65 78 69 73 74 73 2e 0d 0a 20 still exists... 1f660 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 1f670 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
1f680 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20  fileName]} then
1f690 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1f6a0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
1f6b0 69 70 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74  ip deleting test
1f6c0 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 6f   files if somebo
1f6d0 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f 62  dy sets the glob
1f6e0 61 6c 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20  al variable..
1f6f0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20       #       to
1f700 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 20  prevent it...
1f710 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1f720 69 66 20 7b 24 66 6f 72 63 65 20 7c 7c 20 21 5b  if {$force || ![ 1f730 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 1f740 28 63 6c 65 61 6e 75 70 46 69 6c 65 29 5d 7d 20 (cleanupFile)]} 1f750 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1f760 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 1f770 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 NOTE: Attempt t 1f780 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73 o delete the tes 1f790 74 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 20 20 t file now... 1f7a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1f7b0 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 6f 64 if {[set cod 1f7c0 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 e [catch {file d 1f7d0 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
1f7e0 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e 20 7b   error]]} then {
1f7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d  ..            #.
1f800 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e  .            # N
1f810 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20  OTE: We somehow
1f820 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
1f830 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70 6f 72   the file, repor
1f840 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
1f850 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1f860 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 1f870 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 1f880 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 1f890 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 1f8a0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 1f8b0 20 64 65 6c 65 74 65 20 74 65 73 74 20 66 69 6c delete test fil 1f8c0 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 e \""$fileName
1f8d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
1f8e0 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c     "\" during cl
1f8f0 65 61 6e 75 70 2c 20 65 72 72 6f 72 3a 20 22 20  eanup, error: "
1f900 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 1f910 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 1f920 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1f930 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1f940 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 1f950 68 6f 77 20 74 68 61 74 20 77 65 20 73 6b 69 70 how that we skip 1f960 70 65 64 20 64 65 6c 65 74 69 6e 67 20 74 68 65 ped deleting the 1f970 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 file... 1f980 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s 1f990 65 74 20 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 et code 0.... 1f9a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
1f9b0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
1f9c0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
1f9d0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
1f9e0 57 41 52 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64  WARNING: skipped
1f9f0 20 64 65 6c 65 74 69 6e 67 20 74 65 73 74 20 66   deleting test f
1fa00 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d  ile \"" $fileNam 1fa10 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 1fa20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63 6c "\" during cl 1fa30 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20 20 eanup\n"].. 1fa40 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 1fa50 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 1fa60 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 1fa70 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20 6e The file does n 1fa80 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65 73 ot exist, succes 1fa90 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s!.. #.. 1faa0 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 set code 1fab0 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 0.. }.... 1fac0 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64 65 return$code
1fad0 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
1fae0 70 72 6f 63 20 63 6c 65 61 6e 75 70 4d 65 6d 6f  proc cleanupMemo
1faf0 72 79 20 7b 20 76 61 72 4e 61 6d 65 20 7b 71 75  ry { varName {qu
1fb00 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
1fb10 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
1fb20 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
1fb30 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  nd] && \..
1fb40 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
1fb50 74 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30  th $varName] > 0 1fb60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1fb70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 1fb80 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 OTE: Refer to th 1fb90 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69 e specified vari 1fba0 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e able (e.g. "conn 1fbb0 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d ection") in the. 1fbc0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 1fbd0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our 1fbe0 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 caller. The opa 1fbf0 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c que object handl 1fc00 65 20 66 6f 72 20 61 6e 0d 0a 20 20 20 20 20 20 e for an.. 1fc10 20 20 23 20 20 20 20 20 20 20 41 44 4f 2e 4e 45 # ADO.NE 1fc20 54 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 T connection pre 1fc30 76 69 6f 75 73 6c 79 20 72 65 74 75 72 6e 65 64 viously returned 1fc40 20 62 79 20 5b 67 65 74 44 62 43 6f 6e 6e 65 63 by [getDbConnec 1fc50 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 23 tion].. # 1fc60 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 should be 1fc70 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a stored there... 1fc80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1fc90 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
1fca0 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ame connection..
1fcb0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
1fcc0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1fcd0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
1fce0 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 52 65 6c 65  $connection Rele 1fcf0 61 73 65 4d 65 6d 6f 72 79 0d 0a 20 20 20 20 20 aseMemory.. 1fd00 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 68 } result]} th 1fd10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 1fd20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
1fd30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1fd40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1fd50 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1fd60 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1fd70 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 1fd80 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 ING: failed to r 1fd90 65 6c 65 61 73 65 20 64 61 74 61 62 61 73 65 20 elease database 1fda0 6d 65 6d 6f 72 79 2c 20 65 72 72 6f 72 3a 20 22 memory, error: " 1fdb0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1fdc0 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
1fdd0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1fde0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
1fdf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69      }....      i
1fe00 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66  f {[llength [inf
1fe10 6f 20 63 6f 6d 6d 61 6e 64 73 20 64 65 62 75 67  o commands debug
1fe20 5d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ]] > 0} then {..
1fe30 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
1fe40 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
1fe50 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20  uplevel 1 [list
1fe60 64 65 62 75 67 20 70 75 72 67 65 5d 0d 0a 20 20  debug purge]..
1fe70 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d        } result]}
1fe80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
1fe90 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 1fea0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1feb0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1fec0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1fed0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
1fee0 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
1fef0 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
1ff00 6f 20 70 75 72 67 65 20 63 61 6c 6c 20 66 72 61  o purge call fra
1ff10 6d 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a  me, error: " \..
1ff20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1ff30 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d  \n\t $result \n] 1ff40 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1ff60 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 1ff70 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 .. uple 1ff80 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62 75 vel 1 [list debu 1ff90 67 20 63 6c 65 61 6e 75 70 5d 0d 0a 20 20 20 20 g cleanup].. 1ffa0 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20 74 } result]} t 1ffb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1ffc0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
1ffd0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1ffe0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1fff0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20000 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20010 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 20020 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 20030 63 6c 65 61 6e 75 70 20 69 6e 74 65 72 70 72 65 cleanup interpre 20040 74 65 72 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d ter, error: " \. 20050 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 20060 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
20070 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
20080 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
20090 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
200a0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 6c  {..          upl
200b0 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 64 65 62  evel 1 [list deb
200c0 75 67 20 63 6f 6c 6c 65 63 74 5d 0d 0a 20 20 20  ug collect]..
200d0 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 7d 20       } result]}
200e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
200f0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 20100 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 20110 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
20120 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
20130 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
20140 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41          "==== WA
20150 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f  RNING: failed to
20160 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65   collect garbage
20170 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  , error: " \..
20180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
20190 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 201a0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 201b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 201c0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 201d0 72 6f 63 20 73 65 74 75 70 4d 65 6d 6f 72 79 43 roc setupMemoryC 201e0 6f 75 6e 74 65 72 73 20 7b 20 76 61 72 4e 61 6d ounters { varNam 201f0 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 e } {.. if 20200 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 20210 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 20220 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 61 {.. upva 20230 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f 75 r 1$varName cou
20240 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nter....
20250 73 65 74 20 63 6f 75 6e 74 65 72 28 31 29 20 5b  set counter(1) [
20260 6f 62 6a 65 63 74 20 63 72 65 61 74 65 20 2d 61  object create -a
20270 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  lias \..
20280 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e      System.Diagn
20290 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 6d 61 6e  ostics.Performan
202a0 63 65 43 6f 75 6e 74 65 72 20 50 72 6f 63 65 73  ceCounter Proces
202b0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
202c0 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 22 20 5b   "Working Set" [
202d0 66 69 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66  file rootname [f
202e0 69 6c 65 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f  ile tail $::bin_ 202f0 66 69 6c 65 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 file]]].... 20300 20 20 20 73 65 74 20 63 6f 75 6e 74 65 72 28 32 set counter(2 20310 29 20 5b 6f 62 6a 65 63 74 20 63 72 65 61 74 65 ) [object create 20320 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 -alias \.. 20330 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 System.Di 20340 61 67 6e 6f 73 74 69 63 73 2e 50 65 72 66 6f 72 agnostics.Perfor 20350 6d 61 6e 63 65 43 6f 75 6e 74 65 72 20 50 72 6f manceCounter Pro 20360 63 65 73 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 cess \.. 20370 20 20 20 20 22 57 6f 72 6b 69 6e 67 20 53 65 74 "Working Set 20380 20 50 65 61 6b 22 20 5b 66 69 6c 65 20 72 6f 6f Peak" [file roo 20390 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c tname [file tail 203a0 20 24 3a 3a 62 69 6e 5f 66 69 6c 65 5d 5d 5d 0d$::bin_file]]].
203b0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
203c0 6f 75 6e 74 65 72 28 33 29 20 5b 6f 62 6a 65 63  ounter(3) [objec
203d0 74 20 63 72 65 61 74 65 20 2d 61 6c 69 61 73 20  t create -alias
203e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
203f0 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69 63  ystem.Diagnostic
20400 73 2e 50 65 72 66 6f 72 6d 61 6e 63 65 43 6f 75  s.PerformanceCou
20410 6e 74 65 72 20 50 72 6f 63 65 73 73 20 5c 0d 0a  nter Process \..
20420 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 69              "Pri
20430 76 61 74 65 20 42 79 74 65 73 22 20 5b 66 69 6c  vate Bytes" [fil
20440 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65  e rootname [file
20450 20 74 61 69 6c 20 24 3a 3a 62 69 6e 5f 66 69 6c   tail $::bin_fil 20460 65 5d 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d e]]].. }... 20470 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 . return "" 20480 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... 20490 70 72 6f 63 20 72 65 70 6f 72 74 4d 65 6d 6f 72 proc reportMemor 204a0 79 43 6f 75 6e 74 65 72 73 20 7b 20 63 68 61 6e yCounters { chan 204b0 6e 65 6c 20 76 61 72 4e 61 6d 65 20 70 72 65 66 nel varName pref 204c0 69 78 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 ix } {.. if 204d0 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a {[haveSQLiteObj 204e0 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the 204f0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 70 76 n {.. upv 20500 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 63 6f ar 1$varName co
20510 75 6e 74 65 72 0d 0a 0d 0a 20 20 20 20 20 20 20  unter....
20520 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 20530 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 20540 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 20550 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f 75 "$prefix " cou
20560 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20 20  nter \"" \..
20570 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object
20580 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72 28  invoke $counter( 20590 31 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d 20 1) CounterName] 205a0 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 5c "\" value is " \ 205b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6f .. [o 205c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 6f bject invoke$co
205d0 75 6e 74 65 72 28 31 29 20 52 61 77 56 61 6c 75  unter(1) RawValu
205e0 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  e] \n]....
205f0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 20600 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 20610 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 20620 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 6f - "$prefix " co
20630 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20 20  unter \"" \..
20640 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74           [object
20650 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65 72   invoke $counter 20660 28 32 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 5d (2) CounterName] 20670 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 20 "\" value is " 20680 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 20690 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 63 object invoke$c
206a0 6f 75 6e 74 65 72 28 32 29 20 52 61 77 56 61 6c  ounter(2) RawVal
206b0 75 65 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20  ue] \n]....
206c0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 206d0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 206e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 206f0 2d 2d 20 22 20 24 70 72 65 66 69 78 20 22 20 63 -- "$prefix " c
20700 6f 75 6e 74 65 72 20 5c 22 22 20 5c 0d 0a 20 20  ounter \"" \..
20710 20 20 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63            [objec
20720 74 20 69 6e 76 6f 6b 65 20 24 63 6f 75 6e 74 65  t invoke $counte 20730 72 28 33 29 20 43 6f 75 6e 74 65 72 4e 61 6d 65 r(3) CounterName 20740 5d 20 22 5c 22 20 76 61 6c 75 65 20 69 73 20 22 ] "\" value is " 20750 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20760 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 24 [object invoke$
20770 63 6f 75 6e 74 65 72 28 33 29 20 52 61 77 56 61  counter(3) RawVa
20780 6c 75 65 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  lue] \n]..
20790 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
207a0 20 70 72 6f 63 20 63 6f 6c 6c 65 63 74 47 61 72   proc collectGar
207b0 62 61 67 65 20 7b 20 63 68 61 6e 6e 65 6c 20 7b  bage { channel {
207c0 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 31 30 30  milliseconds 100
207d0 30 7d 20 7b 71 75 69 65 74 20 74 72 75 65 7d 20  0} {quiet true}
207e0 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  } {..      if {[
207f0 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
20800 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b  Command]} then {
20810 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63  ..        if {[c
20820 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
20830 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
20840 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
20850 79 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  y false..
20860 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
20870 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
20880 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 20890 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 208a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
208b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
208c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
208d0 20 20 22 2d 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69    "---- memory i
208e0 6e 20 75 73 65 20 62 79 20 74 68 65 20 43 4c 52  n use by the CLR
208f0 20 62 65 66 6f 72 65 20 63 6f 6c 6c 65 63 74 69   before collecti
20900 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20  on... " \..
20910 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73 75             $resu 20920 6c 74 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a lt " bytes\n"].. 20930 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 20940 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 20950 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
20960 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
20970 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
20980 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 20990 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 209a0 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 "==== WA 209b0 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f RNING: failed to 209c0 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 get CLR memory 209d0 75 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 usage, error: " 209e0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 209f0 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 \n\t$result
20a00 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
20a10 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
20a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23     }....      ##
20a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20a70 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20  #######....
20a80 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
20a90 3a 20 52 65 70 65 61 74 65 64 6c 79 20 61 74 74  : Repeatedly att
20aa0 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 20  empt to collect
20ab0 67 61 72 62 61 67 65 20 75 6e 74 69 6c 20 74 68  garbage until th
20ac0 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 6d 62 65  e allotted numbe
20ad0 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  r..      #
20ae0 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
20af0 20 68 61 73 20 65 6c 61 70 73 65 64 2e 20 20 41   has elapsed.  A
20b00 6c 77 61 79 73 20 61 74 74 65 6d 70 74 20 74 6f  lways attempt to
20b10 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65   collect garbage
20b20 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
20b30 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 2e 0d 0a  at least once...
20b40 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
20b50 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62  f {[haveSQLiteOb
20b60 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68  jectCommand]} th
20b70 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65  en {..        se
20b80 74 20 73 74 61 72 74 20 5b 63 6c 6f 63 6b 20 73  t start [clock s
20b90 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 20  econds]..
20ba0 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 72 20   set stop [expr
20bb0 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 6c 6c  {$start + ($mill
20bc0 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 30 29  iseconds / 1000)
20bd0 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 64 6f  }]....        do
20be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
20bf0 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
20c00 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f  E: Attempt to fo
20c10 72 63 65 20 61 20 66 75 6c 6c 20 67 61 72 62 61  rce a full garba
20c20 67 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f  ge collection no
20c30 77 2e 20 20 52 65 70 6f 72 74 20 61 6e 79 0d 0a  w.  Report any..
20c40 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
20c50 20 20 65 72 72 6f 72 20 74 68 61 74 20 69 73 20    error that is
20c60 65 6e 63 6f 75 6e 74 65 72 65 64 20 69 66 20 77  encountered if w
20c70 65 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20  e fail...
20c80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
20c90 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
20ca0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
20cb0 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f   invoke GC GetTo
20cc0 74 61 6c 4d 65 6d 6f 72 79 20 74 72 75 65 0d 0a  talMemory true..
20cd0 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f            } erro
20ce0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
20cf0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 20d00 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 20d10 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 20d20 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
20d30 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
20d40 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
20d50 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
20d60 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 6f   full garbage co
20d70 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72 6f 72 3a  llection, error:
20d80 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
20d90 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72          \n\t $er 20da0 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. 20db0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 20dc0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 20dd0 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 set now [clock 20de0 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 20 20 seconds].. 20df0 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 61 72 } while {$star
20e00 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24 6e 6f  t <= $now &&$no
20e10 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20 20 20  w < $stop}.. 20e20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 23 }.... ### 20e30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20e40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20e50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20e60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 20e70 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 20e80 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f if {[haveSQLiteO 20e90 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 bjectCommand]} t 20ea0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 20eb0 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 20ec0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 20ed0 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 61 6c voke GC GetTotal 20ee0 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a 20 20 Memory false.. 20ef0 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 20f00 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 20f10 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
20f20 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
20f30 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $20f40 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 20f50 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 20f60 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d 65 6d "---- mem 20f70 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 74 68 ory in use by th 20f80 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f 6c 6c e CLR after coll 20f90 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d 0a 20 ection... " \.. 20fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
20fb0 72 65 73 75 6c 74 20 22 20 62 79 74 65 73 5c 6e  result " bytes\n
20fc0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
20fd0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
20fe0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
20ff0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 21000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 21010 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
21020 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
21030 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
21040 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
21050 64 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d  d to get CLR mem
21060 6f 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72  ory usage, error
21070 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  : " \..
21080 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65 73         \n\t $res 21090 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 210a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 210b0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 210c0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 210d0 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e SQLiteHandleCoun 210e0 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 ts { channel {qu 210f0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 21100 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 21110 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 [list].... 21120 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 if {[haveSQLite 21130 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26 ObjectCommand] & 21140 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 21150 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e 65 haveSQLiteDefine 21160 43 6f 6e 73 74 61 6e 74 20 43 4f 55 4e 54 5f 48 Constant COUNT_H 21170 41 4e 44 4c 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a ANDLE]} then {.. 21180 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 21190 20 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 65 # NOTE: Add e 211a0 61 63 68 20 63 72 69 74 69 63 61 6c 20 68 61 6e ach critical han 211b0 64 6c 65 20 63 6f 75 6e 74 20 74 6f 20 74 68 65 dle count to the 211c0 20 72 65 73 75 6c 74 69 6e 67 20 6c 69 73 74 2e resulting list. 211d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 211e0 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 6d foreach nam 211f0 65 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 e [list \.. 21200 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f connectio 21210 6e 43 6f 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 nCount statement 21220 43 6f 75 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e Count backupCoun 21230 74 20 62 6c 6f 62 43 6f 75 6e 74 5d 20 7b 0d 0a t blobCount] {.. 21240 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 21250 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 atch {.. 21260 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 21270 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 21280 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 21290 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 212a0 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 ta.SQLite.DebugD 212b0 61 74 61 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 ata$name..
212c0 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d       } value] ==
212d0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
212e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 212f0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 21300 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 21310 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
21320 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
21330 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
21340 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
21350 20 63 6f 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65   count \"" $name 21360 20 22 5c 22 20 69 73 20 22 20 24 76 61 6c 75 65 "\" is "$value
21370 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
21380 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
21390 20 20 20 6c 61 70 70 65 6e 64 20 72 65 73 75 6c     lappend resul
213a0 74 20 24 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  t $value.. 213b0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 213c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
213d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
213e0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
213f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 21400 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 21410 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== 21420 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail 21430 65 64 20 74 6f 20 67 65 74 20 63 72 69 74 69 63 ed to get critic 21440 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 al handle count 21450 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 \"" \.. 21460 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 20 22$name "
21470 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  \", error: " \n\
21480 74 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20  t $value \n].. 21490 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 214a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 214b0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 214c0 65 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 eif {!$quiet} th
214d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
214e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
214f0 20 54 68 65 20 61 63 74 75 61 6c 20 68 61 6e 64   The actual hand
21500 6c 65 20 63 6f 75 6e 74 73 20 61 72 65 20 6e 6f  le counts are no
21510 74 20 61 76 61 69 6c 61 62 6c 65 3b 20 74 68 65  t available; the
21520 72 65 66 6f 72 65 2c 20 6a 75 73 74 0d 0a 20 20  refore, just..
21530 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65        #       re
21540 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 6c 69  turn an empty li
21550 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  st...        #..
21560 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 21570 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 72 69 hannel "---- cri 21580 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 tical handle cou 21590 6e 74 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 5c nts unavailable\ 215a0 6e 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 n".. }.... 215b0 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 return$res
215c0 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ult..    }.....
215d0 20 20 20 70 72 6f 63 20 73 68 75 74 64 6f 77 6e     proc shutdown
215e0 53 51 4c 69 74 65 20 7b 20 63 68 61 6e 6e 65 6c  SQLite { channel
215f0 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7b   {force false} {
21600 71 75 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b  quiet false} } {
21610 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
21620 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75   # NOTE: Make su
21630 72 65 20 74 68 61 74 20 53 51 4c 69 74 65 20 63  re that SQLite c
21640 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 63  ore library is c
21650 6f 6d 70 6c 65 74 65 6c 79 20 73 68 75 74 64 6f  ompletely shutdo
21660 77 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 20  wn.  This..
21670 20 23 20 20 20 20 20 20 20 69 73 20 75 73 65 64   #       is used
21680 20 62 79 20 74 65 73 74 73 20 74 68 61 74 20 63   by tests that c
21690 68 61 6e 67 65 20 63 6f 6e 66 69 67 75 72 61 74  hange configurat
216a0 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 61 6e 64 2f  ion options and/
216b0 6f 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20  or those..
216c0 23 20 20 20 20 20 20 20 74 68 61 74 20 6e 65 65  #       that nee
216d0 64 20 74 6f 20 6d 61 6b 65 20 73 75 72 65 20 6c  d to make sure l
216e0 6f 67 67 69 6e 67 20 69 73 20 69 6e 69 74 69 61  ogging is initia
216f0 6c 69 7a 65 64 20 28 69 2e 65 2e 20 6a 75 73 74  lized (i.e. just
21700 20 69 6e 20 63 61 73 65 0d 0a 20 20 20 20 20 20   in case..
21710 23 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69  #       the SQLi
21720 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library
21730 77 61 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  was initialized
21740 69 6e 20 74 68 65 20 70 72 6f 63 65 73 73 20 70  in the process p
21750 72 69 6f 72 20 74 6f 0d 0a 20 20 20 20 20 20 23  rior to..      #
21760 20 20 20 20 20 20 20 74 68 65 20 53 51 4c 69 74         the SQLit
21770 65 4c 6f 67 20 63 6c 61 73 73 20 62 65 69 6e 67  eLog class being
21780 20 61 62 6c 65 20 74 6f 20 73 65 74 75 70 20 69   able to setup i
21790 74 73 20 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62  ts logging callb
217a0 61 63 6b 29 2e 0d 0a 20 20 20 20 20 20 23 20 20  ack)...      #
217b0 20 20 20 20 20 4e 6f 72 6d 61 6c 6c 79 2c 20 74       Normally, t
217c0 68 69 73 20 73 68 6f 75 6c 64 20 6f 6e 6c 79 20  his should only
217d0 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
217e0 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
217f0 20 61 6e 64 0d 0a 20 20 20 20 20 20 23 20 20 20   and..      #
21800 20 20 20 20 72 65 61 64 79 20 66 6f 72 20 75 73      ready for us
21810 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75  e by the test su
21820 69 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ite...      #..
21830 20 20 20 20 20 69 66 20 7b 24 66 6f 72 63 65 20       if {$force 21840 7c 7c 20 5b 69 73 53 51 4c 69 74 65 52 65 61 64 || [isSQLiteRead 21850 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 21860 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 21870 20 42 55 47 46 49 58 3a 20 4d 61 6b 65 20 73 75 BUGFIX: Make su 21880 72 65 20 74 68 61 74 20 61 6e 79 20 22 6c 65 61 re that any "lea 21890 6b 65 64 22 20 74 72 61 6e 73 61 63 74 69 6f 6e ked" transaction 218a0 73 20 61 6e 64 2f 6f 72 20 63 6f 6e 6e 65 63 74 s and/or connect 218b0 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20 20 23 20 ions.. # 218c0 20 20 20 20 20 20 20 20 61 72 65 20 63 6c 65 61 are clea 218d0 6e 65 64 20 75 70 20 62 65 66 6f 72 65 20 63 61 ned up before ca 218e0 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 lling the native 218f0 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 74 69 shutdown functi 21900 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a on... #.. 21910 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 21920 74 72 61 6e 73 61 63 74 69 6f 6e 20 5b 69 6e 66 transaction [inf 21930 6f 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 5d 20 o transactions] 21940 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 {.. if 21950 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 5c {[string match \ 21960 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21970 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c 69 System#Data#SQLi 21980 74 65 23 53 51 4c 69 74 65 54 72 61 6e 73 61 63 te#SQLiteTransac 21990 74 69 6f 6e 23 2a 20 24 74 72 61 6e 73 61 63 74 tion#*$transact
219a0 69 6f 6e 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ion]} then {..
219b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
219c0 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
219d0 20 20 20 20 20 20 73 71 6c 20 74 72 61 6e 73 61        sql transa
219e0 63 74 69 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 24  ction rollback $219f0 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a 20 20 20 transaction.. 21a00 20 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 } error 21a10 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 21a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 21a30 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
21a40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
21a50 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 21a60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 21a70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 21a80 20 20 20 20 20 22 2d 2d 2d 2d 20 72 6f 6c 6c 65 "---- rolle 21a90 64 20 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72 d back leaked tr 21aa0 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d ansaction \"" \. 21ab0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 21ac0 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f$transactio
21ad0 6e 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  n \"\n]..
21ae0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
21af0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
21b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
21b10 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 21b20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21b30 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
21b40 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
21b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21b60 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
21b70 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 6f  NG: failed to ro
21b80 6c 6c 62 61 63 6b 20 6c 65 61 6b 65 64 20 74 72  llback leaked tr
21b90 61 6e 73 61 63 74 69 6f 6e 20 5c 22 22 20 5c 0d  ansaction \"" \.
21ba0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
21bb0 20 20 20 20 20 24 74 72 61 6e 73 61 63 74 69 6f       $transactio 21bc0 6e 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 n "\", error: " 21bd0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
21be0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
21bf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
21c00 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
21c10 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
21c20 20 20 20 66 6f 72 65 61 63 68 20 64 62 20 5b 69     foreach db [i
21c30 6e 66 6f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 5d  nfo connections]
21c40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
21c50 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match
21c60 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
21c70 20 53 79 73 74 65 6d 23 44 61 74 61 23 53 51 4c   System#Data#SQL
21c80 69 74 65 23 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ite#SQLiteConnec
21c90 74 69 6f 6e 23 2a 20 24 64 62 5d 7d 20 74 68 65  tion#* $db]} the 21ca0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 21cb0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 71 6c if {[catch {sql 21cc0 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f close$db} erro
21cd0 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  r] == 0} then {.
21ce0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69  .              i
21cf0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 21d00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 21d10 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
21d20 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
21d30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
21d40 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6c 6f 73        "---- clos
21d50 65 64 20 6c 65 61 6b 65 64 20 64 61 74 61 62 61  ed leaked databa
21d60 73 65 20 5c 22 22 20 24 64 62 20 5c 22 5c 6e 5d  se \"" $db \"\n] 21d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 21d80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 21d90 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 21da0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
21db0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
21dc0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
21dd0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 21de0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 21df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d "= 21e00 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 === WARNING: fai 21e10 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 6c 65 61 led to close lea 21e20 6b 65 64 20 64 61 74 61 62 61 73 65 20 5c 22 22 ked database \"" 21e30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 21e40 20 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c$db "\",
21e50 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24   error: " \n\t $21e60 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 error \n].. 21e70 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 21e80 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 21e90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 21ea0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a }.... #.. 21eb0 20 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 # BUGFIX 21ec0 3a 20 42 65 66 6f 72 65 20 63 61 6c 6c 69 6e 67 : Before calling 21ed0 20 74 68 65 20 6e 61 74 69 76 65 20 73 68 75 74 the native shut 21ee0 64 6f 77 6e 20 66 75 6e 63 74 69 6f 6e 2c 20 6d down function, m 21ef0 61 6b 65 20 73 75 72 65 20 62 6f 74 68 0d 0a 20 ake sure both.. 21f00 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 21f10 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 72 of the PRAGMA r 21f20 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 79 elated directory 21f30 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 64 names are freed 21f40 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 21f50 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 21f60 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 20 LiteDirectories 21f70 24 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d$channel true...
21f80 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
21f90 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
21fa0 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
21fb0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
21fc0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
21fd0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
21fe0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76  Lite.UnsafeNativ
21ff0 65 4d 65 74 68 6f 64 73 20 73 71 6c 69 74 65 33  eMethods sqlite3
22000 5f 73 68 75 74 64 6f 77 6e 0d 0a 20 20 20 20 20  _shutdown..
22010 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20     } result] ==
22020 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
22030 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 22040 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22050 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
22060 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
22070 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
22080 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73      "---- call s
22090 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 28  qlite3_shutdown(
220a0 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75  )... ok: " $resu 220b0 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 lt \n].. 220c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 220d0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 220e0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
220f0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
22100 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 22110 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 22120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22130 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 "---- call sqlit 22140 65 33 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e e3_shutdown()... 22150 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
22160 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
22170 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
22180 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20   }..      }..
22190 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
221a0 67 65 74 53 65 74 74 69 6e 67 52 65 61 64 43 6f  getSettingReadCo
221b0 75 6e 74 20 7b 20 6e 61 6d 65 20 7b 76 69 61 46  unt { name {viaF
221c0 69 6c 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  ile false} } {..
221d0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43        if {[haveC
221e0 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43  onstraint buildC
221f0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62  onfiguration.Deb
22200 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d  ug] && [catch {.
22210 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
22220 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
22230 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20  onPublic -alias
22240 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
22250 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
22260 65 2e 44 65 62 75 67 44 61 74 61 20 47 65 74 53  e.DebugData GetS
22270 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73  ettingReadCounts
22280 20 24 76 69 61 46 69 6c 65 0d 0a 20 20 20 20 20   $viaFile.. 22290 20 7d 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f } settingReadCo 222a0 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e unts] == 0} then 222b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 222c0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
222d0 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  name] > 0} then
222e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
222f0 7b 5b 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f  {[$settingReadCo 22300 75 6e 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 unts TryGetValue 22310 20 24 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74$name value]} t
22320 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
22330 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 22340 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 22350 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 22360 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 "---- se 22370 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d 65 20 tting \""$name
22380 22 5c 22 20 77 61 73 20 72 65 61 64 20 22 20 24  "\" was read " $22390 76 61 6c 75 65 20 22 20 74 69 6d 65 73 22 20 5c value " times" \ 223a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 223b0 20 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c [expr {$viaFil
223c0 65 20 3f 20 22 20 66 72 6f 6d 20 74 68 65 20 63  e ? " from the c
223d0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
223e0 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 0d  e" : ""}] \n]...
223f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
22400 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20 20  urn $value.. 22410 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 22420 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 22430 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f 75 set nameCou 22440 6e 74 20 5b 24 73 65 74 74 69 6e 67 52 65 61 64 nt [$settingRead
22450 43 6f 75 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20  Counts Count]..
22460 20 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c           set val
22470 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20  ueCount 0....
22480 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f         object fo
22490 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69  reach -alias pai
224a0 72 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 6f  r $settingReadCo 224b0 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 unts {.. 224c0 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f incr valueCo 224d0 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 unt [$pair Value
224e0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ]....
224f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 22500 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 22510 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 22520 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 "---- sett 22530 69 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b ing \"" [$pair K
22540 65 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64  ey] "\" was read
22550 20 22 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d   " [$pair Value] 22560 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22570 20 20 20 20 22 20 74 69 6d 65 73 22 20 5b 65 78 " times" [ex 22580 70 72 20 7b 24 76 69 61 46 69 6c 65 20 3f 20 22 pr {$viaFile ? "
22590 20 66 72 6f 6d 20 74 68 65 20 63 6f 6e 66 69 67   from the config
225a0 75 72 61 74 69 6f 6e 20 66 69 6c 65 22 20 3a 20  uration file" :
225b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
225c0 20 20 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20     ""}] \n]..
225d0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
225e0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69        return [li
225f0 73 74 20 24 6e 61 6d 65 43 6f 75 6e 74 20 24 76  st $nameCount$v
22600 61 6c 75 65 43 6f 75 6e 74 5d 0d 0a 20 20 20 20  alueCount]..
22610 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
22620 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
22630 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 6d 65  ing length $name 22640 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 22650 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
22660 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
22670 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
22680 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65          "---- se
22690 74 74 69 6e 67 20 5c 22 22 20 24 6e 61 6d 65 20  tting \"" $name 226a0 22 5c 22 20 77 61 73 20 6e 6f 74 20 72 65 61 64 "\" was not read 226b0 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46 69 6c " [expr {$viaFil
226c0 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  e ? \..
226d0 20 20 20 22 20 66 72 6f 6d 20 74 68 65 20 63 6f     " from the co
226e0 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
226f0 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a 20 20  " : ""}] \n]..
22700 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
22710 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22720 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 22730 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 22740 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6e 6f 20 "---- no 22750 73 65 74 74 69 6e 67 73 20 77 65 72 65 20 72 65 settings were re 22760 61 64 22 20 5b 65 78 70 72 20 7b 24 76 69 61 46 ad" [expr {$viaF
22770 69 6c 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20  ile ? \..
22780 20 20 20 20 20 22 20 66 72 6f 6d 20 74 68 65 20       " from the
22790 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69  configuration fi
227a0 6c 65 22 20 3a 20 22 22 7d 5d 20 5c 6e 5d 0d 0a  le" : ""}] \n]..
227b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
227c0 20 72 65 74 75 72 6e 20 2d 31 0d 0a 20 20 20 20   return -1..
227d0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67  }.....    proc g
227e0 65 74 4f 74 68 65 72 43 6f 75 6e 74 20 7b 20 6e  etOtherCount { n
227f0 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69  ame } {..      i
22800 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69  f {[haveConstrai
22810 6e 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72  nt buildConfigur
22820 61 74 69 6f 6e 2e 44 65 62 75 67 5d 20 26 26 20  ation.Debug] &&
22830 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
22840 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
22850 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
22860 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20  c -alias \..
22870 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
22880 61 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67  ata.SQLite.Debug
22890 44 61 74 61 20 47 65 74 4f 74 68 65 72 43 6f 75  Data GetOtherCou
228a0 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 6f 74 68  nts..      } oth
228b0 65 72 43 6f 75 6e 74 73 5d 20 3d 3d 20 30 7d 20  erCounts] == 0}
228c0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
228d0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
228e0 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74  th $name] > 0} t 228f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 22900 20 69 66 20 7b 5b 24 6f 74 68 65 72 43 6f 75 6e if {[$otherCoun
22910 74 73 20 54 72 79 47 65 74 56 61 6c 75 65 20 24  ts TryGetValue $22920 6e 61 6d 65 20 76 61 6c 75 65 5d 7d 20 74 68 65 name value]} the 22930 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 22940 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
22950 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
22960 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
22970 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6f 74 68 65        "---- othe
22980 72 20 63 6f 75 6e 74 65 72 20 5c 22 22 20 24 6e  r counter \"" $n 22990 61 6d 65 20 22 5c 22 20 68 61 73 20 76 61 6c 75 ame "\" has valu 229a0 65 20 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a e "$value \n]..
229b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
229c0 74 75 72 6e 20 24 76 61 6c 75 65 0d 0a 20 20 20  turn $value.. 229d0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 229e0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 229f0 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 43 6f set nameCo 22a00 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 6e 74 unt [$otherCount
22a10 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 20 20  s Count]..
22a20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 6f 75      set valueCou
22a30 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nt 0....
22a40 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68    object foreach
22a50 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 6f 74   -alias pair $ot 22a60 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 herCounts {.. 22a70 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 61 incr va 22a80 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 20 lueCount [$pair
22a90 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  Value]....
22aa0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 22ab0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 22ac0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 22ad0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 22ae0 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c other counter \ 22af0 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 "" [$pair Key] "
22b00 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c  \" has value " \
22b10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
22b20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d 20    [$pair Value] 22b30 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 22b40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 .... re 22b50 74 75 72 6e 20 5b 6c 69 73 74 20 24 6e 61 6d 65 turn [list$name
22b60 43 6f 75 6e 74 20 24 76 61 6c 75 65 43 6f 75 6e  Count $valueCoun 22b70 74 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 t].. }.. 22b80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 22b90 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 if {[string leng 22ba0 74 68 20 24 6e 61 6d 65 5d 20 3e 20 30 7d 20 74 th$name] > 0} t
22bb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
22bc0 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 22bd0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 22be0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 22bf0 22 2d 2d 2d 2d 20 6f 74 68 65 72 20 63 6f 75 6e "---- other coun 22c00 74 65 72 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c ter \""$name "\
22c10 22 20 68 61 73 20 6e 6f 20 76 61 6c 75 65 5c 6e  " has no value\n
22c20 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  "]..      } else
22c30 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
22c40 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 22c50 6c 20 22 2d 2d 2d 2d 20 74 68 65 72 65 20 61 72 l "---- there ar 22c60 65 20 6e 6f 20 6f 74 68 65 72 20 63 6f 75 6e 74 e no other count 22c70 65 72 73 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d ers\n".. }. 22c80 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 ... return 22c90 2d 31 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 -1.. }..... 22ca0 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c proc reportSQL 22cb0 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a iteResources {.. 22cc0 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e chan 22cd0 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65 nel {quiet false 22ce0 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b } {reset true} { 22cf0 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20 collect true} } 22d00 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 22d10 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 70 6f 73 # NOTE: If pos 22d20 73 69 62 6c 65 2c 20 61 6c 77 61 79 73 20 72 65 sible, always re 22d30 73 65 74 20 74 68 65 20 63 61 63 68 65 64 20 61 set the cached a 22d40 73 73 65 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 ssembly director 22d50 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 22d60 20 61 6e 64 20 74 68 65 20 63 61 63 68 65 64 20 and the cached 22d70 58 4d 4c 20 63 6f 6e 66 69 67 75 72 61 74 69 6f XML configuratio 22d80 6e 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 n file name... 22d90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 22da0 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 {[haveSQLiteObje 22db0 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e ctCommand]} then 22dc0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 22dd0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 22de0 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 22df0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 22e00 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 lic \.. 22e10 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 22e20 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 22e30 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 tiveMethods \.. 22e40 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65 73 Res 22e50 65 74 43 61 63 68 65 64 41 73 73 65 6d 62 6c 79 etCachedAssembly 22e60 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 Directory.. 22e70 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 } error] == 0 22e80 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 22e90 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
22ea0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
22eb0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 22ec0 6e 65 6c 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 nel "---- reset 22ed0 63 61 63 68 65 64 20 61 73 73 65 6d 62 6c 79 20 cached assembly 22ee0 64 69 72 65 63 74 6f 72 79 5c 6e 22 0d 0a 20 20 directory\n".. 22ef0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 22f00 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 22f10 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
22f20 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
22f30 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 22f40 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 22f50 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 22f60 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e "==== WARN 22f70 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 ING: failed to r 22f80 65 73 65 74 20 63 61 63 68 65 64 20 61 73 73 65 eset cached asse 22f90 6d 62 6c 79 20 64 69 72 65 63 74 6f 72 79 2c 20 mbly directory, 22fa0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 22fb0 20 20 20 20 20 22 65 72 72 6f 72 3a 20 22 20 5c "error: " \ 22fc0 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a n\t$error \n]..
22fd0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
22fe0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
22ff0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
23000 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
23010 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
23020 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
23030 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
23040 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
23050 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
23060 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
23070 20 20 20 52 65 73 65 74 43 61 63 68 65 64 58 6d     ResetCachedXm
23080 6c 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 0d  lConfigFileName.
23090 0a 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72  .        } error
230a0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
230b0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$230c0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 230d0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 230e0 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20$channel "----
230f0 72 65 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c  reset cached XML
23100 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66   configuration f
23110 69 6c 65 20 6e 61 6d 65 5c 6e 22 0d 0a 20 20 20  ile name\n"..
23120 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
23130 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20    } else {..
23140 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 23150 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 23160 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
23170 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
23180 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
23190 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
231a0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65  NG: failed to re
231b0 73 65 74 20 63 61 63 68 65 64 20 58 4d 4c 20 63  set cached XML c
231c0 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 20 5c  onfiguration " \
231d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
231e0 20 20 22 66 69 6c 65 20 6e 61 6d 65 2c 20 65 72    "file name, er
231f0 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72  ror: " \n\t $err 23200 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 23210 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 23220 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 23230 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 23240 3a 20 49 66 20 61 76 61 69 6c 61 62 6c 65 2c 20 : If available, 23250 72 65 70 6f 72 74 20 6f 6e 20 28 61 6e 64 20 70 report on (and p 23260 6f 73 73 69 62 6c 79 20 72 65 73 65 74 29 20 74 ossibly reset) t 23270 68 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20 he runtime.. 23280 20 20 23 20 20 20 20 20 20 20 63 6f 6e 66 69 67 # config 23290 75 72 61 74 69 6f 6e 20 73 74 61 74 69 73 74 69 uration statisti 232a0 63 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 cs... #.. 232b0 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c if {[haveSQL 232c0 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 iteObjectCommand 232d0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 232e0 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e [haveConstrain 232f0 74 20 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 t buildConfigura 23300 74 69 6f 6e 2e 44 65 62 75 67 5d 7d 20 74 68 65 tion.Debug]} the 23310 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 n {.. if 23320 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 23330 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 23340 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 23350 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 blic -alias \.. 23360 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 23370 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 23380 44 65 62 75 67 44 61 74 61 20 47 65 74 53 65 74 DebugData GetSet 23390 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 66 tingReadCounts f 233a0 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 alse.. } 233b0 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 settingReadCount 233c0 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 233d0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e . set n 233e0 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 ameCount [$setti
233f0 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75  ngReadCounts Cou
23400 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 73  nt]..          s
23410 65 74 20 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d  et valueCount 0.
23420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  ...          obj
23430 65 63 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69  ect foreach -ali
23440 61 73 20 70 61 69 72 20 24 73 65 74 74 69 6e 67  as pair $setting 23450 52 65 61 64 43 6f 75 6e 74 73 20 7b 0d 0a 20 20 ReadCounts {.. 23460 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 76 incr v 23470 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 72 alueCount [$pair
23480 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20 20   Value]....
23490 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 234a0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 234b0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 234c0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
234d0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
234e0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
234f0 73 65 74 74 69 6e 67 20 5c 22 22 20 5b 24 70 61  setting \"" [$pa 23500 69 72 20 4b 65 79 5d 20 22 5c 22 20 77 61 73 20 ir Key] "\" was 23510 72 65 61 64 20 22 20 5c 0d 0a 20 20 20 20 20 20 read " \.. 23520 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 [$pa
23530 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d 65  ir Value] " time
23540 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
23550 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
23560 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
23570 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20  f {$reset} then 23580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 23590 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 235a0 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 235b0 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 235c0 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 235d0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 235e0 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 235f0 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 ta.SQLite.DebugD 23600 61 74 61 20 43 6c 65 61 72 53 65 74 74 69 6e 67 ata ClearSetting 23610 52 65 61 64 43 6f 75 6e 74 73 20 66 61 6c 73 65 ReadCounts false 23620 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 .. } 23630 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 error] == 0} the 23640 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 23650 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
23660 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
23670 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 23680 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 23690 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 236a0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 236b0 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 reset setting st 236c0 61 74 69 73 74 69 63 73 20 66 6f 72 20 74 68 65 atistics for the 236d0 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 previous " \.. 236e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 236f0 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20$nameCount "
23700 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c  names and " $val 23710 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 ueCount " values 23720 20 72 65 61 64 5c 6e 22 5d 0d 0a 20 20 20 20 20 read\n"].. 23730 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 23740 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 23750 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23760 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
23770 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
23780 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 23790 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 237a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 237b0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR 237c0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 NING: failed to 237d0 72 65 73 65 74 20 73 65 74 74 69 6e 67 20 73 74 reset setting st 237e0 61 74 69 73 74 69 63 73 20 66 6f 72 20 22 20 5c atistics for " \ 237f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 23800 20 20 20 20 20 20 22 74 68 65 20 70 72 65 76 69 "the previ 23810 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f 75 6e 74 ous "$nameCount
23820 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 22 20 24   " names and " $23830 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 valueCount \.. 23840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23850 20 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 2c " values read, 23860 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
23870 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20  error \n]..
23880 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
23890 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
238a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
238b0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
238c0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
238d0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
238e0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
238f0 62 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20  blic -alias \..
23900 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
23910 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
23920 44 65 62 75 67 44 61 74 61 20 47 65 74 53 65 74  DebugData GetSet
23930 74 69 6e 67 52 65 61 64 43 6f 75 6e 74 73 20 74  tingReadCounts t
23940 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 73  rue..        } s
23950 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f  ettingFileReadCo
23960 75 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  unts] == 0} then
23970 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   {..          se
23980 74 20 6e 61 6d 65 43 6f 75 6e 74 20 5b 24 73 65  t nameCount [$se 23990 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43 6f 75 ttingFileReadCou 239a0 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20 nts Count].. 239b0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43 set valueC 239c0 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20 ount 0.... 239d0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 object forea 239e0 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24 ch -alias pair$
239f0 73 65 74 74 69 6e 67 46 69 6c 65 52 65 61 64 43  settingFileReadC
23a00 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20  ounts {..
23a10 20 20 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43       incr valueC
23a20 6f 75 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75  ount [$pair Valu 23a30 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 e].... 23a40 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
23a50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
23a60 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 23a70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 23a80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 23a90 20 20 20 20 20 22 2d 2d 2d 2d 20 73 65 74 74 69 "---- setti 23aa0 6e 67 20 5c 22 22 20 5b 24 70 61 69 72 20 4b 65 ng \"" [$pair Ke
23ab0 79 5d 20 22 5c 22 20 77 61 73 20 72 65 61 64 20  y] "\" was read
23ac0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
23ad0 20 20 20 20 20 20 20 5b 24 70 61 69 72 20 56 61         [$pair Va 23ae0 6c 75 65 5d 20 22 20 74 69 6d 65 73 20 66 72 6f lue] " times fro 23af0 6d 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 m the configurat 23b00 69 6f 6e 20 66 69 6c 65 5c 6e 22 5d 0d 0a 20 20 ion file\n"].. 23b10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 23b20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 23b30 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 if {$reset
23b40 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
23b50 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
23b60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
23b70 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20    object invoke
23b80 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69  -flags +NonPubli
23b90 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20  c -alias \..
23ba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79                Sy
23bb0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
23bc0 2e 44 65 62 75 67 44 61 74 61 20 43 6c 65 61 72  .DebugData Clear
23bd0 53 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e 74  SettingReadCount
23be0 73 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20  s true..
23bf0 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20      } error] ==
23c00 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
23c10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71           if {!$q 23c20 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 uiet} then {.. 23c30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 23c40 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
23c50 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
23c60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23c70 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 74 74  "---- reset sett
23c80 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20 66  ing statistics f
23c90 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 73 20  or the previous
23ca0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
23cb0 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f           $nameCo 23cc0 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 unt " names and 23cd0 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20 "$valueCount "
23ce0 76 61 6c 75 65 73 20 72 65 61 64 20 22 20 5c 0d  values read " \.
23cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
23d00 20 20 20 20 20 22 66 72 6f 6d 20 74 68 65 20 63       "from the c
23d10 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c  onfiguration fil
23d20 65 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  e\n"]..
23d30 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
23d40 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
23d50 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
23d60 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 23d70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 23d80 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
23d90 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
23da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23db0 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47     "==== WARNING
23dc0 3a 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65  : failed to rese
23dd0 74 20 73 65 74 74 69 6e 67 20 73 74 61 74 69 73  t setting statis
23de0 74 69 63 73 20 66 6f 72 20 22 20 5c 0d 0a 20 20  tics for " \..
23df0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
23e00 20 20 22 74 68 65 20 70 72 65 76 69 6f 75 73 20    "the previous
23e10 22 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20 6e  " $nameCount " n 23e20 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c 75 ames and "$valu
23e30 65 43 6f 75 6e 74 20 5c 0d 0a 20 20 20 20 20 20  eCount \..
23e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20                "
23e50 76 61 6c 75 65 73 20 72 65 61 64 20 66 72 6f 6d  values read from
23e60 20 74 68 65 20 63 6f 6e 66 69 67 75 72 61 74 69   the configurati
23e70 6f 6e 20 66 69 6c 65 2c 20 65 72 72 6f 72 3a 20  on file, error:
23e80 22 20 5c 6e 5c 74 20 5c 0d 0a 20 20 20 20 20 20  " \n\t \..
23e90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 65                $e 23ea0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 23eb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 23ec0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 23ed0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 23ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 23ef0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 [catch {.. 23f00 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok 23f10 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub 23f20 6c 69 63 20 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 lic -alias \.. 23f30 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 23f40 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 44 em.Data.SQLite.D 23f50 65 62 75 67 44 61 74 61 20 47 65 74 4f 74 68 65 ebugData GetOthe 23f60 72 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 rCounts.. 23f70 20 7d 20 6f 74 68 65 72 43 6f 75 6e 74 73 5d 20 } otherCounts] 23f80 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 23f90 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d 65 set name 23fa0 43 6f 75 6e 74 20 5b 24 6f 74 68 65 72 43 6f 75 Count [$otherCou
23fb0 6e 74 73 20 43 6f 75 6e 74 5d 0d 0a 20 20 20 20  nts Count]..
23fc0 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 65 43        set valueC
23fd0 6f 75 6e 74 20 30 0d 0a 0d 0a 20 20 20 20 20 20  ount 0....
23fe0 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
23ff0 63 68 20 2d 61 6c 69 61 73 20 70 61 69 72 20 24  ch -alias pair $24000 6f 74 68 65 72 43 6f 75 6e 74 73 20 7b 0d 0a 20 otherCounts {.. 24010 20 20 20 20 20 20 20 20 20 20 20 69 6e 63 72 20 incr 24020 76 61 6c 75 65 43 6f 75 6e 74 20 5b 24 70 61 69 valueCount [$pai
24030 72 20 56 61 6c 75 65 5d 0d 0a 0d 0a 20 20 20 20  r Value]....
24040 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 24050 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 24060 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 24070 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
24080 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
24090 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
240a0 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 20 5c   other counter \
240b0 22 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22  "" [$pair Key] " 240c0 5c 22 20 68 61 73 20 76 61 6c 75 65 20 22 20 5c \" has value " \ 240d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 240e0 20 20 20 20 5b 24 70 61 69 72 20 56 61 6c 75 65 [$pair Value
240f0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
24100 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
24110 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
24120 66 20 7b 24 72 65 73 65 74 7d 20 74 68 65 6e 20  f {$reset} then 24130 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 24140 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. 24150 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 objec 24160 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags 24170 2b 4e 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 +NonPublic -alia 24180 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 24190 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 241a0 74 61 2e 53 51 4c 69 74 65 2e 44 65 62 75 67 44 ta.SQLite.DebugD 241b0 61 74 61 20 43 6c 65 61 72 4f 74 68 65 72 43 6f ata ClearOtherCo 241c0 75 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 unts.. 241d0 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d } error] == 0} 241e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 241f0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
24200 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
24210 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
24220 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 24230 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 24240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 24250 2d 2d 2d 20 72 65 73 65 74 20 6f 74 68 65 72 20 --- reset other 24260 63 6f 75 6e 74 65 72 73 20 66 6f 72 20 74 68 65 counters for the 24270 20 70 72 65 76 69 6f 75 73 20 22 20 5c 0d 0a 20 previous " \.. 24280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24290 20 20 20 24 6e 61 6d 65 43 6f 75 6e 74 20 22 20$nameCount "
242a0 6e 61 6d 65 73 20 61 6e 64 20 22 20 24 76 61 6c  names and " $val 242b0 75 65 43 6f 75 6e 74 20 22 20 76 61 6c 75 65 73 ueCount " values 242c0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 242d0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 242e0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 242f0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 24300 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a$quiet} then {..
24310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
24320 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 24330 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 24340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24350 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a "==== WARNING: 24360 20 66 61 69 6c 65 64 20 74 6f 20 72 65 73 65 74 failed to reset 24370 20 6f 74 68 65 72 20 63 6f 75 6e 74 65 72 73 20 other counters 24380 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 for " \.. 24390 20 20 20 20 20 20 20 20 20 20 20 20 20 22 74 68 "th 243a0 65 20 70 72 65 76 69 6f 75 73 20 22 20 24 6e 61 e previous "$na
243b0 6d 65 43 6f 75 6e 74 20 22 20 6e 61 6d 65 73 20  meCount " names
243c0 61 6e 64 20 22 20 24 76 61 6c 75 65 43 6f 75 6e  and " $valueCoun 243d0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 t \.. 243e0 20 20 20 20 20 20 20 20 20 22 20 76 61 6c 75 65 " value 243f0 73 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 s, error: " \n\t 24400 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20$error \n]..
24410 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
24420 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
24430 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
24440 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
24450 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53        if {[haveS
24460 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61  QLiteObjectComma
24470 6e 64 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20  nd] && \..
24480 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65 44      [haveSQLiteD
24490 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 49 4e  efineConstant IN
244a0 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
244b0 42 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  BLE] && \..
244c0 20 20 20 20 20 5b 68 61 76 65 53 51 4c 69 74 65       [haveSQLite
244d0 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 54  DefineConstant T
244e0 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 45  RACK_MEMORY_BYTE
244f0 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  S]} then {..
24500 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 24510 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 24520 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
24530 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e 74 20  l "---- current
24540 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79  memory in use by
24550 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e   SQLiteMemory...
24560 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d   "..        }...
24570 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
24580 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
24590 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
245a0 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
245b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
245c0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
245d0 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72  Lite.SQLiteMemor
245e0 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 64  y bytesAllocated
245f0 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f  ..        } memo
24600 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ry] == 0} then {
24610 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
24620 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 24630 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 24640 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
24650 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 24660 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 " bytes\n"].. 24670 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 24680 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 24690 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 set memory 246a0 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 unknown.... 246b0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
246c0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
246d0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 246e0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 246f0 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 s$memory \n]..
24700 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
24710 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
24720 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 24730 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 24740 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 tputs$channel "
24750 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d  ---- maximum mem
24760 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51  ory in use by SQ
24770 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 22 0d  LiteMemory... ".
24780 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
24790 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
247a0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62   {..          ob
247b0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61  ject invoke -fla
247c0 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d  gs +NonPublic \.
247d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
247e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
247f0 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 6d  e.SQLiteMemory m
24800 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63  aximumBytesAlloc
24810 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20  ated..        }
24820 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68  memory] == 0} th
24830 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
24840 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 24850 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 24860 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
24870 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 24880 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d ory " bytes\n"]. 24890 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 248a0 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 248b0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 248c0 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a mory unknown.... 248d0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
248e0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
248f0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
24900 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 24910 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e dArgs$memory \n
24920 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
24930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
24940 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
24950 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 24960 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
24970 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75  channel "---- cu
24980 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20  rrent memory in
24990 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e 2e 2e  use by SQLite...
249a0 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   "..      }....
249b0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
249c0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
249d0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
249e0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
249f0 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
24a00 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
24a10 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
24a20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
24a30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
24a40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
24a50 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f  ods sqlite3_memo
24a60 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 20 20  ry_used..
24a70 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d   } memory] == 0}
24a80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
24a90 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 24aa0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 24ab0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
24ac0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24  el [appendArgs $24ad0 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e memory " bytes\n 24ae0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d "].. }. 24af0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 . } else 24b00 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 24b10 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 24b20 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 : Maybe the SQLi 24b30 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 24b40 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d is unavailable?. 24b50 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 24b60 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 24b70 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 ry unknown.... 24b80 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
24b90 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
24ba0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $24bb0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 24bc0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
24bd0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
24be0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
24bf0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
24c00 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76   set memory unav
24c10 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20  ailable....
24c20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 24c30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 24c40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
24c50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65   [appendArgs $me 24c60 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 mory \n].. 24c70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 24c80 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74 set result 24c90 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f 54 45$memory; # NOTE
24ca0 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 79 20  : Return memory
24cb0 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 63 61  in-use to our ca
24cc0 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 20 69  ller.....      i
24cd0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 24ce0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 24cf0 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
24d00 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 79 20   maximum memory
24d10 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65  in use by SQLite
24d20 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a  ... "..      }..
24d30 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76  ..      if {[hav
24d40 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d  eSQLiteObjectCom
24d50 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  mand]} then {..
24d60 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63         if {[catc
24d70 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f  h {..          o
24d80 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
24d90 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
24da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
24db0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
24dc0 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  te.UnsafeNativeM
24dd0 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 20 20  ethods \..
24de0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
24df0 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65 72  memory_highwater
24e00 20 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65   0..        } me
24e10 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  mory] == 0} then
24e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
24e30 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 24e40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 24e50 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
24e60 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72  ppendArgs $memor 24e70 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 y " bytes\n"].. 24e80 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 24e90 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 24ea0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24eb0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 79 # NOTE: May 24ec0 62 65 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f be the SQLite co 24ed0 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 75 6e re library is un 24ee0 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20 20 20 available?.. 24ef0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 24f00 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 24f10 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... 24f20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
24f30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
24f40 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 24f50 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
24f60 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
24f70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
24f80 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65   }..      } else
24f90 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   {..        set
24fa0 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62  memory unavailab
24fb0 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  le....        if
24fc0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 24fd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 24fe0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
24ff0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 25000 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 25010 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 25020 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 if {$collect} t
25030 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 63  hen {..        c
25040 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 24 63  ollectGarbage $c 25050 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d hannel.. }. 25060 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 ... if {!$q
25070 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
25080 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 25090 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 nnel "---- curre 250a0 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 nt memory in use 250b0 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e 20 22 by the CLR... " 250c0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 250d0 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 250e0 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 250f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 25100 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 25110 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 object 25120 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f invoke GC GetTo 25130 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d talMemory false. 25140 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d 6f 72 . } memor 25150 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d y] == 0} then {. 25160 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 25170 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65 67 65 string is intege 25180 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d 6f 72 r -strict$memor
25190 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  y]} then {..
251a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 251b0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 251c0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 251d0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
251e0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 251f0 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 25200 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 25210 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 25220 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 set me 25230 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a 0d 0a mory invalid.... 25240 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 25250 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
25260 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
25270 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 25280 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
25290 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  y \n]..
252a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
252b0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
252c0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  e {..          s
252d0 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77  et memory unknow
252e0 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n....          i
252f0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e  f {!$quiet} then 25300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 25310 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
25320 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f  appendArgs $memo 25330 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ry \n].. 25340 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 25350 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 25360 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f set memo 25370 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65 0d 0a ry unavailable.. 25380 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 .. if {!$
25390 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
253a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $253b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 253c0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d rgs$memory \n].
253d0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
253e0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74    }....      ret
253f0 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20  urn $result.. 25400 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 25410 72 65 73 65 74 53 51 4c 69 74 65 44 69 72 65 63 resetSQLiteDirec 25420 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e 65 6c tories { channel 25430 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20 native } {.. 25440 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 25450 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 75 TE: Attempt to u 25460 73 65 20 74 68 65 20 6e 61 74 69 76 65 20 41 50 se the native AP 25470 49 20 28 76 69 61 20 74 68 65 20 6d 61 6e 61 67 I (via the manag 25480 65 64 20 61 73 73 65 6d 62 6c 79 29 3f 0d 0a 20 ed assembly)?.. 25490 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 254a0 20 7b 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 {$native} then
254b0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
254c0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f        # NOTE: No
254d0 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20  w make sure the
254e0 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d  database and tem
254f0 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69  porary directori
25500 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20  es are..
25510 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74 68  #       reset th
25520 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c 75  eir default valu
25530 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c 64  es, which should
25540 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f 74   be null for bot
25550 68 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  h...        #
25560 20 20 20 20 53 69 6e 63 65 20 74 68 65 20 73 71      Since the sq
25570 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
25580 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69  directory functi
25590 6f 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c  on is available,
255a0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
255b0 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20    use it...
255c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f     #..        fo
255d0 72 20 7b 73 65 74 20 69 6e 64 65 78 20 31 7d 20  r {set index 1}
255e0 7b 24 69 6e 64 65 78 20 3c 20 33 7d 20 7b 69 6e  {$index < 3} {in 255f0 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20 cr index} {.. 25600 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 25610 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 25620 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 25630 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 25640 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25650 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 25660 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 25670 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 25680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 sq 25690 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 256a0 64 69 72 65 63 74 6f 72 79 20 24 69 6e 64 65 78 directory$index
256b0 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..
256c0 20 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d   } result] == 0}
256d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
256e0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 256f0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 25700 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 25710 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq 25720 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 25730 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64 directory("$ind
25740 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ex \..
25750 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e        ", null)..
25760 2e 20 6f 6b 3a 20 22 20 24 72 65 73 75 6c 74 20  . ok: " $result 25770 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 25780 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 25790 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
257a0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
257b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
257c0 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71     "---- call sq
257d0 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f  lite3_win32_set_
257e0 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e 64  directory(" $ind 257f0 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ex \.. 25800 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e ", null).. 25810 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 . error: " \n\t 25820 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20$result \n]..
25830 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
25840 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
25850 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  e {..        #..
25860 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
25870 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68  Now make sure th
25880 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  e database and t
25890 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
258a0 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20  ries are..
258b0 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20    #       reset
258c0 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61  their default va
258d0 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75  lues, which shou
258e0 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62  ld be null for b
258f0 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 23 20  oth...        #
25900 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65 20        Since the
25910 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65  sqlite3_win32_se
25920 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63  t_directory func
25930 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20  tion does not..
25940 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
25950 70 70 65 61 72 20 74 6f 20 62 65 20 61 76 61 69  ppear to be avai
25960 6c 61 62 6c 65 2c 20 75 73 65 20 74 68 65 20 61  lable, use the a
25970 73 73 6f 63 69 61 74 65 64 20 50 52 41 47 4d 41  ssociated PRAGMA
25980 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20 20 20 20   commands..
25990 20 20 20 23 20 20 20 20 20 20 20 69 6e 73 74 65     #       inste
259a0 61 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ad...        #..
259b0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
259c0 64 69 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20  directory [list
259d0 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
259e0 74 6f 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f  tory temp_store_
259f0 64 69 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20  directory] {..
25a00 20 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20          set sql
25a10 5b 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41  [appendArgs "PRA
25a20 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79  GMA " $directory 25a30 20 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a " = \"\";"].... 25a40 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 if {[c 25a50 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c atch {executeSql 25a60 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d$sql} result] =
25a70 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
25a80 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $25a90 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 25aa0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 25ab0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 "---- exe 25ac0 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 cute PRAGMA "$d
25ad0 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f 6b  irectory "... ok
25ae0 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  : \"" \..
25af0 20 20 20 20 20 20 20 20 20 24 72 65 73 75 6c 74           $result 25b00 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 \"\n].. 25b10 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 25b20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
25b30 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
25b40 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
25b50 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63        "---- exec
25b60 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 64 69  ute PRAGMA " $di 25b70 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 rectory "... err 25b80 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 or: " \.. 25b90 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 \n\t$r
25ba0 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
25bb0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
25bc0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..
25bd0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
25be0 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72  heckForSQLiteDir
25bf0 65 63 74 6f 72 69 65 73 20 7b 20 63 68 61 6e 6e  ectories { chann
25c00 65 6c 20 7b 72 65 73 65 74 20 66 61 6c 73 65 7d  el {reset false}
25c10 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20   } {..      #..
25c20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
25c30 63 6b 20 69 66 20 74 68 65 20 73 71 6c 69 74 65  ck if the sqlite
25c40 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65  3_win32_set_dire
25c50 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 69  ctory function i
25c60 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  s available...
25c70 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75      #..      tpu
25c80 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  ts $channel \.. 25c90 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 25ca0 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 75 6e 63 hecking for func 25cb0 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f 77 69 6e tion sqlite3_win 25cc0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 25cd0 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 23 ... ".... # 25ce0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 25cf0 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 74 68 65 This call to the 25d00 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 sqlite3_win32_s 25d10 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e et_directory fun 25d20 63 74 69 6f 6e 20 75 73 65 73 20 74 68 65 0d 0a ction uses the.. 25d30 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e # in 25d40 76 61 6c 69 64 20 76 61 6c 75 65 20 30 20 66 6f valid value 0 fo 25d50 72 20 74 68 65 20 66 69 72 73 74 20 61 72 67 75 r the first argu 25d60 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 6f 64 65 ment. This code 25d70 20 69 73 20 64 65 73 69 67 6e 65 64 0d 0a 20 20 is designed.. 25d80 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 63 # to c 25d90 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 6e 67 20 heck if calling 25da0 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77 69 6c the function wil 25db0 6c 20 72 61 69 73 65 20 61 6e 20 65 78 63 65 70 l raise an excep 25dc0 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20 tion (i.e... 25dd0 20 20 23 20 20 20 20 20 20 20 74 68 65 20 61 63 # the ac 25de0 74 75 61 6c 20 72 65 73 75 6c 74 20 6f 66 20 74 tual result of t 25df0 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 he function does 25e00 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 73 20 6c not matter as l 25e10 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 20 20 20 ong as no.. 25e20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f # directo 25e30 72 79 20 69 73 20 63 68 61 6e 67 65 64 29 2e 0d ry is changed).. 25e40 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 25e50 69 66 20 7b 5b 69 73 57 69 6e 64 6f 77 73 5d 20 if {[isWindows] 25e60 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 && [catch {.. 25e70 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 25e80 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 25e90 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 25ea0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 25eb0 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 SQLite.UnsafeNat 25ec0 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 iveMethods \.. 25ed0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 25ee0 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 3_win32_set_dire 25ef0 63 74 6f 72 79 20 30 20 6e 75 6c 6c 0d 0a 20 20 ctory 0 null.. 25f00 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 }] == 0} the 25f10 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 25f20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 25f30 43 61 6c 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 Calling the sqli 25f40 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 te3_win32_set_di 25f50 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e rectory function 25f60 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 does not.. 25f70 20 20 20 23 20 20 20 20 20 20 20 63 61 75 73 65 # cause 25f80 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 an exception; t 25f90 68 65 72 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 herefore, it mus 25fa0 74 20 62 65 20 61 76 61 69 6c 61 62 6c 65 20 28 t be available ( 25fb0 69 2e 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 i.e... # 25fc0 20 20 20 20 20 20 65 76 65 6e 20 74 68 6f 75 67 even thoug 25fd0 68 20 69 74 20 73 68 6f 75 6c 64 20 72 65 74 75 h it should retu 25fe0 72 6e 20 61 20 66 61 69 6c 75 72 65 20 72 65 74 rn a failure ret 25ff0 75 72 6e 20 63 6f 64 65 20 69 6e 20 74 68 69 73 urn code in this 26000 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 26010 20 20 63 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 case)... 26020 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 #.. add 26030 43 6f 6e 73 74 72 61 69 6e 74 20 73 71 6c 69 74 Constraint sqlit 26040 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 e3_win32_set_dir 26050 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 ectory.... 26060 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
26070 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20   yes\n....
26080 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
26090 4f 54 45 3a 20 44 6f 65 73 20 6f 75 72 20 63 61  OTE: Does our ca
260a0 6c 6c 65 72 20 77 61 6e 74 20 74 6f 20 72 65 73  ller want to res
260b0 65 74 20 74 68 65 20 64 69 72 65 63 74 6f 72 69  et the directori
260c0 65 73 3f 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  es?..        #..
260d0 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73          if {$res 260e0 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 260f0 20 20 20 20 20 20 72 65 73 65 74 53 51 4c 69 74 resetSQLit 26100 65 44 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 eDirectories$ch
26110 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 20 20 20 20  annel true..
26120 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
26130 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  lse {..        t
26140 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f  puts $channel no 26150 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d \n.... #. 26160 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 26170 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72 Does our caller 26180 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74 want to reset t 26190 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20 he directories? 261a0 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a This can only.. 261b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 261c0 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20 be performed if 261d0 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64 SQLite is loaded 261e0 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75 and ready for u 261f0 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a se by the test.. 26200 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 26210 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 26220 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 #.. if {$
26230 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69  reset && [isSQLi
26240 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b  teReady]} then {
26250 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 73 65  ..          rese
26260 74 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69  tSQLiteDirectori
26270 65 73 20 24 63 68 61 6e 6e 65 6c 20 66 61 6c 73  es $channel fals 26280 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 e.. }.. 26290 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 262a0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 262b0 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68 Finally, show th 262c0 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 e current value 262d0 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 of the database 262e0 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 and temporary.. 262f0 20 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 # dir 26300 65 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20 ectories. This 26310 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 can only be perf 26320 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 ormed if SQLite 26330 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 is loaded.. 26340 20 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 # and rea 26350 64 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 dy for use by th 26360 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 26370 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 26380 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 {[isSQLiteReady 26390 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 263a0 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 foreach direc 263b0 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f tory [list data_ 263c0 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 store_directory 263d0 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 temp_store_direc 263e0 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 tory] {.. 263f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
26400 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d  l [appendArgs "-
26410 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24  --- checking " $26420 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22 directory "... " 26430 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 ].... s 26440 65 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 et sql [appendAr 26450 67 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 gs "PRAGMA "$di
26460 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20  rectory \;]....
26470 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
26480 74 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20  tch {executeSql
26490 24 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73  $sql scalar} res 264a0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ult] == 0} then 264b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 {.. t 264c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
264d0 70 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c  ppendArgs "ok: \
264e0 22 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d  "" $result \"\n] 264f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c .. } el 26500 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 26510 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
26520 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 72   [appendArgs "er
26530 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73  ror: " \n\t $res 26540 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ult \n].. 26550 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 26560 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 26570 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61 .... proc loa 26580 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 dSQLiteTestSetti 26590 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 ngs { channel {s 265a0 75 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74 uffix ""} {quiet 265b0 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 false} } {.. 265c0 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 265d0 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67 TE: Skip loading 265e0 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 66 the settings if 265f0 20 74 68 65 69 72 20 75 73 61 67 65 20 68 61 73 their usage has 26600 20 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d been disabled.. 26610 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 26620 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 26630 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73 s ::no(sqliteTes 26640 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65 tSettings)]} the 26650 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 26660 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 26670 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d Load custom per- 26680 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d user and/or per- 26690 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e host test settin 266a0 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 gs now... 266b0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 266c0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 [info exists ::t 266d0 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 cl_platform(user 266e0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 266f0 20 20 20 20 20 20 73 65 74 20 75 73 65 72 53 65 set userSe 26700 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b ttingsFileName [ 26710 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f file join [getCo 26720 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c mmonDirectory] \ 26730 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 26740 5b 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 [appendArgs sett 26750 69 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 ings$suffix . $26760 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 ::tcl_platform(u 26770 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d ser) .eagle]]... 26780 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 26790 66 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 65 file exists$use
267a0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  rSettingsFileNam
267b0 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
267c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 267d0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 267e0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 267f0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
26800 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
26810 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
26820 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65   loading per-use
26830 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20  r test settings
26840 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20  file \"" \..
26850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75                $u 26860 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e serSettingsFileN 26870 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 ame \"...\n].. 26880 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 26890 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b if {[ 268a0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 268b0 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31 uplevel 1 268c0 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75 [list source$u
268d0 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e  serSettingsFileN
268e0 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  ame]..
268f0 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e    } error]} then
26900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
26910 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t 26920 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 26930 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
26940 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
26950 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
26960 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57           "==== W
26970 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74  ARNING: failed t
26980 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73 65 72 20  o load per-user
26990 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
269a0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
269b0 20 20 20 20 20 20 20 20 20 24 75 73 65 72 53 65           $userSe 269c0 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 22 ttingsFileName " 269d0 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c \", error: " \n\ 269e0 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
269f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
26a00 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
26a10 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
26a20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26a30 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 26a40 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26a50 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
26a60 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
26a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26a80 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 6c   "---- skipped l
26a90 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 20  oading per-user
26aa0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69  test settings fi
26ab0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  le \"" \..
26ac0 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65              $use 26ad0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 26ae0 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e e "\", it does n 26af0 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 ot exist\n"].. 26b00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 26b10 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 26b20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 }.... # 26b30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26b40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26b50 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26b60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 26b70 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 20 ######.... 26b80 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 26b90 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor 26ba0 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 6e 20 7b m(host)]} then { 26bb0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set 26bc0 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 26bd0 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 Name [file join 26be0 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 [getCommonDirect 26bf0 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ory] \.. 26c00 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67 [appendArg 26c10 73 20 73 65 74 74 69 6e 67 73 20 24 73 75 66 66 s settings$suff
26c20 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74  ix . $::tcl_plat 26c30 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 61 67 6c form(host) .eagl 26c40 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 e]].... 26c50 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 if {[file exist 26c60 73 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 s$hostSettingsF
26c70 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b  ileName]} then {
26c80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
26c90 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 26ca0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 26cb0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
26cc0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
26cd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26ce0 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70   "---- loading p
26cf0 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74  er-host test set
26d00 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c  tings file \"" \
26d10 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
26d20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67      $hostSetting 26d30 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c sFileName \"...\ 26d40 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 n].. 26d50 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 26d60 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 26d70 20 20 20 20 20 20 20 20 20 20 20 20 20 75 70 6c upl 26d80 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 evel 1 [list sou 26d90 72 63 65 20 24 68 6f 73 74 53 65 74 74 69 6e 67 rce$hostSetting
26da0 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20  sFileName]..
26db0 20 20 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d          } error]
26dc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
26dd0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 26de0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 26df0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 tpu 26e00 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
26e10 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
26e20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
26e30 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
26e40 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 72  iled to load per
26e50 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 66  -host settings f
26e60 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20  ile \"" \..
26e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $26e80 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c 65 hostSettingsFile 26e90 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a Name "\", error: 26ea0 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c " \n\t$error \
26eb0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n]..
26ec0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
26ed0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20   }..          }
26ee0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
26ef0 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 26f00 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 26f10 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
26f20 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
26f30 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
26f40 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69         "---- ski
26f50 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 72  pped loading per
26f60 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 69  -host test setti
26f70 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a  ngs file \"" \..
26f80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
26f90 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46    $hostSettingsF 26fa0 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 ileName "\", it 26fb0 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e does not exist\n 26fc0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 "].. 26fd0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 26fe0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 26ff0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 }.. }..... 27000 20 20 70 72 6f 63 20 63 6f 70 79 53 61 6d 70 6c proc copySampl 27010 65 44 61 74 61 62 61 73 65 46 69 6c 65 73 20 7b eDatabaseFiles { 27020 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 } {.. uplev 27030 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 el 1 {.. 27040 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 27050 45 3a 20 43 6f 70 79 20 28 6f 72 20 72 65 2d 63 E: Copy (or re-c 27060 6f 70 79 29 20 74 68 65 20 72 65 66 65 72 65 6e opy) the referen 27070 63 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 ce database file 27080 20 75 73 65 64 20 66 6f 72 20 74 68 69 73 0d 0a used for this.. 27090 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 270a0 75 6e 69 74 20 74 65 73 74 20 74 6f 20 74 68 65 unit test to the 270b0 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 build directory 270c0 20 69 6e 20 63 61 73 65 20 69 74 20 68 61 73 20 in case it has 270d0 62 65 65 6e 20 63 68 61 6e 67 65 64 0d 0a 20 20 been changed.. 270e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79 # by 270f0 20 61 20 70 72 65 76 69 6f 75 73 20 74 65 73 74 a previous test 27100 20 72 75 6e 2e 0d 0a 20 20 20 20 20 20 20 20 23 run... # 27110 0d 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 .. file c 27120 6f 70 79 20 2d 66 6f 72 63 65 20 24 6e 6f 72 74 opy -force$nort
27130 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5c 0d  hwindEfDbFile \.
27140 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65  .          [file
27150 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44   join [getBuildD
27160 69 72 65 63 74 6f 72 79 20 74 72 75 65 5d 20 5b  irectory true] [
27170 66 69 6c 65 20 74 61 69 6c 20 24 6e 6f 72 74 68  file tail $north 27180 77 69 6e 64 45 66 44 62 46 69 6c 65 5d 5d 0d 0a windEfDbFile]].. 27190 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a }.. }.. 271a0 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6d 6f 76 65 ... proc move 271b0 54 65 73 74 4c 6f 67 46 69 6c 65 20 7b 20 70 61 TestLogFile { pa 271c0 74 68 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 th } {.. if 271d0 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 271e0 3a 74 65 73 74 5f 6c 6f 67 5d 20 26 26 20 5b 66 :test_log] && [f 271f0 69 6c 65 20 65 78 69 73 74 73 20 24 3a 3a 74 65 ile exists$::te
27200 73 74 5f 6c 6f 67 5d 7d 20 74 68 65 6e 20 7b 0d  st_log]} then {.
27210 0a 20 20 20 20 20 20 20 20 73 65 74 20 6f 6c 64  .        set old
27220 5f 74 65 73 74 5f 6c 6f 67 20 24 3a 3a 74 65 73  _test_log $::tes 27230 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20 20 73 t_log.. s 27240 65 74 20 6e 65 77 5f 74 65 73 74 5f 6c 6f 67 20 et new_test_log 27250 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 [file join$path
27260 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 6f 6c 64   [file tail $old 27270 5f 74 65 73 74 5f 6c 6f 67 5d 5d 0d 0a 0d 0a 20 _test_log]].... 27280 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 file copy 27290 20 24 6f 6c 64 5f 74 65 73 74 5f 6c 6f 67 20 24$old_test_log $272a0 6e 65 77 5f 74 65 73 74 5f 6c 6f 67 3b 20 66 69 new_test_log; fi 272b0 6c 65 20 64 65 6c 65 74 65 20 24 6f 6c 64 5f 74 le delete$old_t
272c0 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20  est_log..
272d0 20 73 65 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 20   set ::test_log
272e0 24 6e 65 77 5f 74 65 73 74 5f 6c 6f 67 0d 0a 0d  $new_test_log... 272f0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e . if {[in 27300 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 27310 5f 6c 6f 67 5f 70 61 74 68 5d 7d 20 74 68 65 6e _log_path]} then 27320 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se 27330 74 20 3a 3a 74 65 73 74 5f 6c 6f 67 5f 70 61 74 t ::test_log_pat 27340 68 20 24 70 61 74 68 0d 0a 20 20 20 20 20 20 20 h$path..
27350 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70   }....        tp
27360 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 27370 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 27380 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 27390 2d 2d 2d 2d 20 6d 6f 76 65 64 20 74 65 73 74 20 ---- moved test 273a0 6c 6f 67 20 66 72 6f 6d 20 5c 22 22 20 24 6f 6c log from \""$ol
273b0 64 5f 74 65 73 74 5f 6c 6f 67 20 22 5c 22 20 74  d_test_log "\" t
273c0 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..
273d0 20 20 20 20 20 24 6e 65 77 5f 74 65 73 74 5f 6c       $new_test_l 273e0 6f 67 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 og \"\n].. 273f0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 27400 20 70 72 6f 63 20 73 68 6f 77 53 51 4c 69 74 65 proc showSQLite 27410 42 75 69 6c 64 50 61 72 61 6d 65 74 65 72 73 20 BuildParameters 27420 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 { channel } {.. 27430 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 27440 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 27450 68 65 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 he native build 27460 66 6c 61 67 20 68 61 73 20 62 65 65 6e 20 66 6f flag has been fo 27470 72 63 69 62 6c 79 20 73 65 74 2e 0d 0a 20 20 20 rcibly set... 27480 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 #.. tput 27490 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 s$channel \..
274a0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
274b0 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
274c0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75  m.Data.SQLite bu
274d0 69 6c 64 20 6e 61 74 69 76 65 20 6f 76 65 72 72  ild native overr
274e0 69 64 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ide... "....
274f0 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 67 65    set native [ge
27500 74 42 75 69 6c 64 4e 61 74 69 76 65 5d 0d 0a 0d  tBuildNative]...
27510 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
27520 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 74 69 76  ng length $nativ 27530 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 27540 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 27550 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 27560 73 20 62 75 69 6c 64 4e 61 74 69 76 65 2e 20 24 s buildNative.$
27570 6e 61 74 69 76 65 5d 0d 0a 20 20 20 20 20 20 20  native]..
27580 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 27590 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 [appendArgs \"$
275a0 6e 61 74 69 76 65 20 5c 22 5c 6e 5d 0d 0a 20 20  native \"\n]..
275b0 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
275c0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
275d0 69 6e 74 20 62 75 69 6c 64 4e 61 74 69 76 65 2e  int buildNative.
275e0 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70  none..        tp
275f0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f  uts $channel <no 27600 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a ne>\n.. }.. 27610 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 27620 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 # NOTE: Check t 27630 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 he current build 27640 20 79 65 61 72 2e 20 20 42 61 73 69 63 61 6c 6c year. Basicall 27650 79 2c 20 74 68 69 73 20 69 6e 64 69 63 61 74 65 y, this indicate 27660 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # 27670 20 77 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f which version o 27680 66 20 4d 53 42 75 69 6c 64 20 61 6e 64 2f 6f 72 f MSBuild and/or 27690 20 56 69 73 75 61 6c 20 53 74 75 64 69 6f 20 77 Visual Studio w 276a0 61 73 20 75 73 65 64 20 74 6f 0d 0a 20 20 20 20 as used to.. 276b0 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 69 6c # compil 276c0 65 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62 e the assembly b 276d0 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 inaries under te 276e0 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 st... #.. 276f0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
27700 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  el \..
27710 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
27720 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
27730 51 4c 69 74 65 20 62 75 69 6c 64 20 79 65 61 72  QLite build year
27740 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 73  ... "....      s
27750 65 74 20 79 65 61 72 20 5b 67 65 74 42 75 69 6c  et year [getBuil
27760 64 59 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  dYear]....
27770 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
27780 74 68 20 24 79 65 61 72 5d 20 3e 20 30 7d 20 74  th $year] > 0} t 27790 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 277a0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 277b0 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 59 65 pendArgs buildYe 277c0 61 72 2e 20 24 79 65 61 72 5d 0d 0a 20 20 20 20 ar.$year]..
277d0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 277e0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 277f0 22 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 20 "$year \"\n]..
27800 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
27810 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
27820 61 69 6e 74 20 62 75 69 6c 64 59 65 61 72 2e 6e  aint buildYear.n
27830 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 75  one..        tpu
27840 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e  ts $channel <non 27850 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d e>\n.. }... 27860 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
27870 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
27880 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
27890 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  g for System.Dat
278a0 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 6e  a.SQLite build n
278b0 61 74 69 76 65 20 79 65 61 72 2e 2e 2e 20 22 0d  ative year... ".
278c0 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 79 65 61  ...      set yea
278d0 72 20 5b 67 65 74 42 75 69 6c 64 4e 61 74 69 76  r [getBuildNativ
278e0 65 59 65 61 72 5d 0d 0a 0d 0a 20 20 20 20 20 20  eYear]....
278f0 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
27900 74 68 20 24 79 65 61 72 5d 20 3e 20 30 7d 20 74  th $year] > 0} t 27910 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a 27920 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 ddConstraint [ap 27930 70 65 6e 64 41 72 67 73 20 62 75 69 6c 64 4e 61 pendArgs buildNa 27940 74 69 76 65 59 65 61 72 2e 20 24 79 65 61 72 5d tiveYear.$year]
27950 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
27960 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 27970 41 72 67 73 20 5c 22 20 24 79 65 61 72 20 5c 22 Args \"$year \"
27980 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73  \n]..      } els
27990 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64  e {..        add
279a0 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64  Constraint build
279b0 4e 61 74 69 76 65 59 65 61 72 2e 6e 6f 6e 65 0d  NativeYear.none.
279c0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $279d0 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e channel <none>\n 279e0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 279f0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
27a00 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22  l \..          "
27a10 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f  ---- checking fo
27a20 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  r System.Data.SQ
27a30 4c 69 74 65 20 62 75 69 6c 64 20 70 6c 61 74 66  Lite build platf
27a40 6f 72 6d 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  orm... "....
27a50 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b    set platform [
27a60 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d  getBuildPlatform
27a70 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....
27a80 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
27a90 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20  th $platform] > 27aa0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 27ab0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 27ac0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69 [appendArgs bui 27ad0 6c 64 50 6c 61 74 66 6f 72 6d 2e 20 24 70 6c 61 ldPlatform.$pla
27ae0 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 20 20  tform]..
27af0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 27b00 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 70 appendArgs \"$p
27b10 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e 5d 0d 0a 20  latform \"\n]..
27b20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
27b30 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
27b40 61 69 6e 74 20 62 75 69 6c 64 50 6c 61 74 66 6f  aint buildPlatfo
27b50 72 6d 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20  rm.none..
27b60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 27b70 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 <none>\n.. 27b80 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 61 }.... set a 27b90 72 63 68 69 74 65 63 74 75 72 65 20 5b 61 72 63 rchitecture [arc 27ba0 68 69 74 65 63 74 75 72 65 46 6f 72 50 6c 61 74 hitectureForPlat 27bb0 66 6f 72 6d 20 24 70 6c 61 74 66 6f 72 6d 5d 0d form$platform].
27bc0 0a 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24  ...      tputs $27bd0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 27be0 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b "---- check 27bf0 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 ing for System.D 27c00 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 ata.SQLite build 27c10 20 61 72 63 68 69 74 65 63 74 75 72 65 2e 2e 2e architecture... 27c20 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b ".... if { 27c30 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
27c40 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e 20  architecture] >
27c50 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
27c60 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
27c70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 62 75 69   [appendArgs bui
27c80 6c 64 41 72 63 68 69 74 65 63 74 75 72 65 2e 20  ldArchitecture.
27c90 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 0d 0a  $architecture].. 27ca0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
27cb0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
27cc0 67 73 20 5c 22 20 24 61 72 63 68 69 74 65 63 74  gs \" $architect 27cd0 75 72 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ure \"\n].. 27ce0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 27cf0 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint 27d00 20 62 75 69 6c 64 41 72 63 68 69 74 65 63 74 75 buildArchitectu 27d10 72 65 2e 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 re.none.. 27d20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
27d30 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20  <none>\n..
27d40 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
27d50 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
27d60 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75  k the current bu
27d70 69 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  ild .NET Framewo
27d80 72 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20  rk.  Basically,
27d90 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  this..      #
27da0 20 20 20 20 69 6e 64 69 63 61 74 65 73 20 77 68      indicates wh
27db0 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  ich version of t
27dc0 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72  he .NET Framewor
27dd0 6b 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 20  k is being..
27de0 20 20 23 20 20 20 20 20 20 20 75 73 65 64 20 62    #       used b
27df0 79 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20 62  y the assembly b
27e00 69 6e 61 72 69 65 73 20 75 6e 64 65 72 20 74 65  inaries under te
27e10 73 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  st...      #..
27e20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 27e30 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 el \.. 27e40 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 "---- checking f 27e50 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 or System.Data.S 27e60 51 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e 45 54 QLite build .NET 27e70 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d Framework... ". 27e80 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 6e 65 74 ... set net 27e90 46 78 20 5b 67 65 74 42 75 69 6c 64 4e 65 74 46 Fx [getBuildNetF 27ea0 78 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b x].... if { 27eb0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
27ec0 6e 65 74 46 78 5d 20 3e 20 30 7d 20 74 68 65 6e  netFx] > 0} then
27ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
27ee0 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
27ef0 64 41 72 67 73 20 62 75 69 6c 64 46 72 61 6d 65  dArgs buildFrame
27f00 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d 0d 0a 20  work. $netFx].. 27f10 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
27f20 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
27f30 73 20 5c 22 20 24 6e 65 74 46 78 20 5c 22 5c 6e  s \" $netFx \"\n 27f40 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else 27f50 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f {.. addCo 27f60 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 46 72 nstraint buildFr 27f70 61 6d 65 77 6f 72 6b 2e 6e 6f 6e 65 0d 0a 20 20 amework.none.. 27f80 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
27f90 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20  nnel <none>\n..
27fa0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
27fb0 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
27fc0 20 43 68 65 63 6b 20 74 68 65 20 63 75 72 72 65   Check the curre
27fd0 6e 74 20 62 75 69 6c 64 20 63 6f 6e 66 69 67 75  nt build configu
27fe0 72 61 74 69 6f 6e 2e 20 20 54 68 69 73 20 73 68  ration.  This sh
27ff0 6f 75 6c 64 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20  ould normally..
28000 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20       #       be
28010 65 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f  either "Debug" o
28020 72 20 22 52 65 6c 65 61 73 65 22 2e 0d 0a 20 20  r "Release"...
28030 20 20 20 20 23 0d 0a 20 20 20 20 20 20 74 70 75      #..      tpu
28040 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  ts $channel \.. 28050 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 "---- c 28060 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 hecking for Syst 28070 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 em.Data.SQLite b 28080 75 69 6c 64 20 63 6f 6e 66 69 67 75 72 61 74 69 uild configurati 28090 6f 6e 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 on... ".... 280a0 20 73 65 74 20 63 6f 6e 66 69 67 75 72 61 74 69 set configurati 280b0 6f 6e 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 on [getBuildConf 280c0 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a 20 20 iguration].... 280d0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 280e0 6c 65 6e 67 74 68 20 24 63 6f 6e 66 69 67 75 72 length$configur
280f0 61 74 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e  ation] > 0} then
28100 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43   {..        addC
28110 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e  onstraint [appen
28120 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66 69  dArgs buildConfi
28130 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66 69  guration. $confi 28140 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 20 guration].. 28150 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
28160 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
28170 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20   $configuration 28180 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 28190 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 lse {.. a 281a0 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 ddConstraint bui 281b0 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e ldConfiguration. 281c0 6e 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 74 70 none.. tp 281d0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f uts$channel <no
281e0 6e 65 3e 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a  ne>\n..      }..
281f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
28200 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74   # NOTE: Check t
28210 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64  he current build
28220 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73   configuration s
28230 75 66 66 69 78 2e 20 20 54 68 69 73 20 77 69 6c  uffix.  This wil
28240 6c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  l..      #
28250 20 6e 6f 72 6d 61 6c 6c 79 20 62 65 20 65 69 74   normally be eit
28260 68 65 72 20 22 4e 65 74 53 74 61 6e 64 61 72 64  her "NetStandard
28270 32 30 22 20 6f 72 20 61 6e 20 65 6d 70 74 79 20  20" or an empty
28280 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23  string...      #
28290 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63  ..      tputs $c 282a0 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 hannel \.. 282b0 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 "---- checki 282c0 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 ng for System.Da 282d0 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 ta.SQLite build 282e0 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 73 75 configuration su 282f0 66 66 69 78 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 ffix... ".... 28300 20 20 20 73 65 74 20 73 75 66 66 69 78 20 5b 67 set suffix [g 28310 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 etBuildConfigura 28320 74 69 6f 6e 53 75 66 66 69 78 5d 0d 0a 0d 0a 20 tionSuffix].... 28330 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string 28340 20 6c 65 6e 67 74 68 20 24 73 75 66 66 69 78 5d length$suffix]
28350 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
28360 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
28370 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
28380 62 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  buildConfigurati
28390 6f 6e 53 75 66 66 69 78 2e 20 24 73 75 66 66 69  onSuffix. $suffi 283a0 78 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 x].. tput 283b0 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
283c0 6e 64 41 72 67 73 20 5c 22 20 24 73 75 66 66 69  ndArgs \" $suffi 283d0 78 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d x \"\n].. } 283e0 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 283f0 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 62 addConstraint b 28400 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f uildConfiguratio 28410 6e 53 75 66 66 69 78 2e 6e 6f 6e 65 0d 0a 20 20 nSuffix.none.. 28420 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
28430 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20  nnel <none>\n..
28440 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
28450 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 28460 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 28470 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 "---- ch 28480 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 ecking for Syste 28490 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 m.Data.SQLite bu 284a0 69 6c 64 20 6e 61 74 69 76 65 20 63 6f 6e 66 69 ild native confi 284b0 67 75 72 61 74 69 6f 6e 20 22 20 5c 0d 0a 20 20 guration " \.. 284c0 20 20 20 20 20 20 20 20 22 73 75 66 66 69 78 2e "suffix. 284d0 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 73 .. "].... s 284e0 65 74 20 73 75 66 66 69 78 20 5b 67 65 74 42 75 et suffix [getBu 284f0 69 6c 64 4e 61 74 69 76 65 43 6f 6e 66 69 67 75 ildNativeConfigu 28500 72 61 74 69 6f 6e 53 75 66 66 69 78 5d 0d 0a 0d rationSuffix]... 28510 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri 28520 6e 67 20 6c 65 6e 67 74 68 20 24 73 75 66 66 69 ng length$suffi
28530 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  x] > 0} then {..
28540 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74          addConst
28550 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67  raint [appendArg
28560 73 20 62 75 69 6c 64 4e 61 74 69 76 65 43 6f 6e  s buildNativeCon
28570 66 69 67 75 72 61 74 69 6f 6e 53 75 66 66 69 78  figurationSuffix
28580 2e 20 24 73 75 66 66 69 78 5d 0d 0a 20 20 20 20  . $suffix].. 28590 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
285a0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
285b0 22 20 24 73 75 66 66 69 78 20 5c 22 5c 6e 5d 0d  " $suffix \"\n]. 285c0 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 285d0 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons 285e0 74 72 61 69 6e 74 20 62 75 69 6c 64 4e 61 74 69 traint buildNati 285f0 76 65 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 53 veConfigurationS 28600 75 66 66 69 78 2e 6e 6f 6e 65 0d 0a 20 20 20 20 uffix.none.. 28610 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
28620 65 6c 20 3c 6e 6f 6e 65 3e 5c 6e 0d 0a 20 20 20  el <none>\n..
28630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
28640 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
28650 68 65 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74  heck the current
28660 20 62 75 69 6c 64 20 65 78 74 72 61 20 64 69 72   build extra dir
28670 65 63 74 6f 72 79 2e 20 20 54 68 69 73 20 77 69  ectory.  This wi
28680 6c 6c 20 6e 6f 72 6d 61 6c 6c 79 0d 0a 20 20 20  ll normally..
28690 20 20 20 23 20 20 20 20 20 20 20 62 65 20 65 69     #       be ei
286a0 74 68 65 72 20 22 6e 65 74 73 74 61 6e 64 61 72  ther "netstandar
286b0 64 32 2e 30 22 20 6f 72 20 61 6e 20 65 6d 70 74  d2.0" or an empt
286c0 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20  y string...
286d0 20 23 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   #..      tputs
286e0 24 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  $channel \.. 286f0 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 "---- chec 28700 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e king for System. 28710 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c Data.SQLite buil 28720 64 20 65 78 74 72 61 2e 2e 2e 20 22 0d 0a 0d 0a d extra... ".... 28730 20 20 20 20 20 20 73 65 74 20 65 78 74 72 61 20 set extra 28740 5b 67 65 74 42 75 69 6c 64 45 78 74 72 61 5d 0d [getBuildExtra]. 28750 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 ... if {[st 28760 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 65 78 74 ring length$ext
28770 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ra] > 0} then {.
28780 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73  .        addCons
28790 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
287a0 67 73 20 62 75 69 6c 64 45 78 74 72 61 2e 20 24  gs buildExtra. $287b0 65 78 74 72 61 5d 0d 0a 20 20 20 20 20 20 20 20 extra].. 287c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
287d0 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 65  appendArgs \" $e 287e0 78 74 72 61 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 xtra \"\n].. 287f0 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 28800 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e addConstrain 28810 74 20 62 75 69 6c 64 45 78 74 72 61 2e 6e 6f 6e t buildExtra.non 28820 65 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 e.. tputs 28830 20 24 63 68 61 6e 6e 65 6c 20 3c 6e 6f 6e 65 3e$channel <none>
28840 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  \n..      }..
28850 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
28860 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50 72 6f  runSQLiteTestPro
28870 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 20 20  logue {} {..
28880 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
28890 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20  E: Skip running
288a0 6f 75 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f  our custom prolo
288b0 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20  gue if the main
288c0 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 20  one has been..
288d0 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70      #       skip
288e0 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ped...      #..
288f0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
28900 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f 6c  exists ::no(prol
28910 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 68  ogue.eagle)]} th
28920 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
28930 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28940 20 53 61 76 65 20 74 68 65 20 65 6e 76 69 72 6f   Save the enviro
28950 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 73 20  nment variables
28960 74 68 61 74 20 77 65 20 69 6e 74 65 6e 64 20 74  that we intend t
28970 6f 20 63 68 61 6e 67 65 20 66 6f 72 0d 0a 20 20  o change for..
28980 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
28990 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
289a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
289b0 20 20 73 61 76 65 45 6e 76 69 72 6f 6e 6d 65 6e    saveEnvironmen
289c0 74 56 61 72 69 61 62 6c 65 73 20 5c 0d 0a 20 20  tVariables \..
289d0 20 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20            [list
289e0 49 6e 69 74 69 61 6c 69 7a 65 5f 53 51 4c 69 74  Initialize_SQLit
289f0 65 4c 6f 67 5d 20 3a 3a 74 65 73 74 53 75 69 74  eLog] ::testSuit
28a00 65 53 61 76 65 64 45 6e 76 0d 0a 0d 0a 20 20 20  eSavedEnv....
28a10 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
28a20 23 20 4e 4f 54 45 3a 20 46 6f 72 63 65 20 74 68  # NOTE: Force th
28a30 65 20 6d 61 6e 61 67 65 64 20 6c 6f 67 67 69 6e  e managed loggin
28a40 67 20 73 75 62 73 79 73 74 65 6d 20 74 6f 20 61  g subsystem to a
28a50 74 74 65 6d 70 74 20 74 6f 20 69 6e 69 74 69 61  ttempt to initia
28a60 6c 69 7a 65 0d 0a 20 20 20 20 20 20 20 20 23 20  lize..        #
28a70 20 20 20 20 20 20 69 74 73 65 6c 66 20 6d 6f 72        itself mor
28a80 65 20 74 68 61 6e 20 6f 6e 63 65 2e 0d 0a 20 20  e than once...
28a90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
28aa0 20 73 65 74 20 3a 3a 65 6e 76 28 49 6e 69 74 69   set ::env(Initi
28ab0 61 6c 69 7a 65 5f 53 51 4c 69 74 65 4c 6f 67 29  alize_SQLiteLog)
28ac0 20 31 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   1....        #.
28ad0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
28ae0 20 4c 6f 61 64 20 74 68 65 20 22 62 65 66 6f 72   Load the "befor
28af0 65 2d 63 6f 6e 73 74 72 61 69 6e 74 73 22 20 63  e-constraints" c
28b00 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20 61  ustom per-user a
28b10 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 0d 0a  nd/or per-host..
28b20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
28b30 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 6e 6f  test settings no
28b40 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  w...        #..
28b50 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20 31         uplevel 1
28b60 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69 74   [list loadSQLit
28b70 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24 3a  eTestSettings $: 28b80 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e 62 :test_channel .b 28b90 65 66 6f 72 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 efore].... 28ba0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 28bb0 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 6c OTE: Show (and l 28bc0 6f 67 29 20 74 68 65 20 67 6c 6f 62 61 6c 20 70 og) the global p 28bd0 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 63 arameters that c 28be0 6f 6e 74 72 6f 6c 20 77 68 65 72 65 20 74 68 65 ontrol where the 28bf0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 28c00 20 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 build director 28c10 79 20 73 68 6f 75 6c 64 20 62 65 2e 0d 0a 20 20 y should be... 28c20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 28c30 20 73 68 6f 77 53 51 4c 69 74 65 42 75 69 6c 64 showSQLiteBuild 28c40 50 61 72 61 6d 65 74 65 72 73 20 24 3a 3a 74 65 Parameters$::te
28c50 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
28c60 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
28c70 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
28c80 66 20 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63  f the [object] c
28c90 6f 6d 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61  ommand is availa
28ca0 62 6c 65 3b 20 69 66 20 6e 6f 74 2c 20 61 64 64  ble; if not, add
28cb0 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 23   some..        #
28cc0 20 20 20 20 20 20 20 73 68 69 6d 73 20 74 6f 20         shims to
28cd0 6d 61 6b 65 20 74 68 65 20 74 65 73 74 20 73 75  make the test su
28ce0 69 74 65 20 72 75 6e 20 73 6d 6f 6f 74 68 65 72  ite run smoother
28cf0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
28d00 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
28d10 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
28d20 64 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  d $::test_channe 28d30 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a l.... #.. 28d40 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 28d50 44 65 74 65 72 6d 69 6e 65 20 74 68 65 20 6e 61 Determine the na 28d60 6d 65 73 20 6f 66 20 74 68 65 20 6e 61 74 69 76 mes of the nativ 28d70 65 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 e platform and a 28d80 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20 rchitecture... 28d90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 28da0 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 set platform [g 28db0 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 etBuildPlatform 28dc0 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 73 true].. s 28dd0 65 74 20 61 72 63 68 69 74 65 63 74 75 72 65 20 et architecture 28de0 5b 61 72 63 68 69 74 65 63 74 75 72 65 46 6f 72 [architectureFor 28df0 50 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f Platform$platfo
28e00 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  rm]....        #
28e10 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
28e20 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f  : Build a list o
28e30 66 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  f configuration
28e40 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
28e50 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
28e60 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
28e70 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c  nfigFileNames [l
28e80 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ist \..
28e90 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53     System.Data.S
28ea0 51 4c 69 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67  QLite.dll.config
28eb0 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
28ec0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
28ed0 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f 66 20  Build a list of
28ee0 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61 67 65  auxiliary Manage
28ef0 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69  d Debugging Assi
28f00 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a 20 20  stants (MDA)..
28f10 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
28f20 6e 66 69 67 75 72 61 74 69 6f 6e 20 66 69 6c 65  nfiguration file
28f30 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
28f40 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
28f50 20 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e        set mdaCon
28f60 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  figFileNames [li
28f70 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
28f80 20 20 45 61 67 6c 65 53 68 65 6c 6c 33 32 2e 65    EagleShell32.e
28f90 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 49 6e  xe.mda.config In
28fa0 73 74 61 6c 6c 65 72 2e 65 78 65 2e 6d 64 61 2e  staller.exe.mda.
28fb0 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20 20 20  config \..
28fc0 20 20 20 20 20 20 74 65 73 74 2e 65 78 65 2e 6d        test.exe.m
28fd0 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74 6c 69  da.config testli
28fe0 6e 71 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69  nq.exe.mda.confi
28ff0 67 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  g \..
29000 20 74 65 73 74 65 66 36 2e 65 78 65 2e 6d 64 61   testef6.exe.mda
29010 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20  .config]....
29020 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
29030 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65   NOTE: Build the
29040 20 6c 69 73 74 20 6f 66 20 65 78 74 65 72 6e 61   list of externa
29050 6c 20 66 69 6c 65 73 20 74 68 61 74 20 77 65 20  l files that we
29060 68 61 6e 64 6c 65 2e 20 20 53 6f 6d 65 20 6f 66  handle.  Some of
29070 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
29080 20 20 74 68 65 73 65 20 66 69 6c 65 73 20 6d 61    these files ma
29090 79 20 62 65 20 6e 61 74 69 76 65 20 61 6e 64 2f  y be native and/
290a0 6f 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  or managed assem
290b0 62 6c 69 65 73 20 74 68 61 74 20 61 72 65 0d 0a  blies that are..
290c0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
290d0 72 65 71 75 69 72 65 64 20 74 6f 20 70 65 72 66  required to perf
290e0 6f 72 6d 20 76 61 72 69 6f 75 73 20 74 65 73 74  orm various test
290f0 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
29100 20 20 20 20 20 20 20 73 65 74 20 65 78 74 65 72         set exter
29110 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69  nalFileNames [li
29120 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  st \..
29130 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 45 6e 74    [file join Ent
29140 69 74 79 46 72 61 6d 65 77 6f 72 6b 20 6c 69 62  ityFramework lib
29150 20 5b 73 74 72 69 6e 67 20 6d 61 70 20 5b 6c 69   [string map [li
29160 73 74 20 46 78 20 22 22 5d 20 5c 0d 0a 20 20 20  st Fx ""] \..
29170 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
29180 20 6d 61 70 20 5b 6c 69 73 74 20 6e 65 74 46 78   map [list netFx
29190 34 35 31 20 6e 65 74 46 78 34 35 20 6e 65 74 46  451 netFx45 netF
291a0 78 34 35 32 20 6e 65 74 46 78 34 35 20 6e 65 74  x452 netFx45 net
291b0 46 78 34 36 20 5c 0d 0a 20 20 20 20 20 20 20 20  Fx46 \..
291c0 20 20 20 20 6e 65 74 46 78 34 35 20 6e 65 74 46      netFx45 netF
291d0 78 34 36 31 20 6e 65 74 46 78 34 35 20 6e 65 74  x461 netFx45 net
291e0 46 78 34 36 32 20 6e 65 74 46 78 34 35 20 6e 65  Fx462 netFx45 ne
291f0 74 46 78 34 37 20 6e 65 74 46 78 34 35 20 5c 0d  tFx47 netFx45 \.
29200 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 65 74  .            net
29210 46 78 34 37 31 20 6e 65 74 46 78 34 35 20 6e 65  Fx471 netFx45 ne
29220 74 46 78 34 37 32 20 6e 65 74 46 78 34 35 20 6e  tFx472 netFx45 n
29230 65 74 53 74 61 6e 64 61 72 64 32 30 20 6e 65 74  etStandard20 net
29240 46 78 34 35 5d 20 5c 0d 0a 20 20 20 20 20 20 20  Fx45] \..
29250 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 4e 65       [getBuildNe
29260 74 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61  tFx]]] EntityFra
29270 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  mework.dll]]....
29280 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
29290 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64     # NOTE: Build
292a0 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74   the list of nat
292b0 69 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  ive assembly fil
292c0 65 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c  es that we handl
292d0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
292e0 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
292f0 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  eFileNames [list
29300 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 76 61  ]....        eva
29310 6c 20 6c 61 70 70 65 6e 64 20 6e 61 74 69 76 65  l lappend native
29320 46 69 6c 65 4e 61 6d 65 73 20 5b 67 65 74 4e 61  FileNames [getNa
29330 74 69 76 65 4c 69 62 72 61 72 79 46 69 6c 65 4e  tiveLibraryFileN
29340 61 6d 65 73 4f 6e 6c 79 5d 0d 0a 20 20 20 20 20  amesOnly]..
29350 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64 20     eval lappend
29360 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20  nativeFileNames
29370 5b 67 65 74 49 6e 74 65 72 6f 70 41 73 73 65 6d  [getInteropAssem
29380 62 6c 79 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79  blyFileNamesOnly
29390 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ]....        #..
293a0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
293b0 42 75 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f  Build the list o
293c0 66 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73  f mixed-mode ass
293d0 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
293e0 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20   we handle...
293f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
29400 73 65 74 20 6d 69 78 65 64 46 69 6c 65 4e 61 6d  set mixedFileNam
29410 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  es [list]....
29420 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e       if {[hasRun
29430 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76  timeOption nativ
29440 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  e]} then {..
29450 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 6d 69        lappend mi
29460 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 53 79 73  xedFileNames Sys
29470 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
29480 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dll..        }..
29490 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
294a0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
294b0 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20 6d  ld the list of m
294c0 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 20  anaged assembly
294d0 66 69 6c 65 73 20 74 68 61 74 20 77 65 20 68 61  files that we ha
294e0 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  ndle...        #
294f0 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 61  ..        set ma
29500 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 5b  nagedFileNames [
29510 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20 20 20 20  list \..
29520 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
29530 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20  SQLite.Linq.dll
29540 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
29550 74 65 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20  te.EF6.dll]....
29560 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 73         if {![has
29570 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61  RuntimeOption na
29580 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tive]} then {..
29590 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64           lappend
295a0 20 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65   managedFileName
295b0 73 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  s System.Data.SQ
295c0 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  Lite.dll..
295d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
295e0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
295f0 3a 20 53 68 6f 77 20 74 68 65 20 76 61 72 69 6f  : Show the vario
29600 75 73 20 6c 69 73 74 73 20 6f 66 20 66 69 6c 65  us lists of file
29610 20 6e 61 6d 65 73 20 74 68 61 74 20 61 72 65 20   names that are
29620 68 61 6e 64 6c 65 64 20 62 79 20 74 68 69 73 0d  handled by this.
29630 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
29640 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20 20   procedure...
29650 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
29660 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 29670 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 29680 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 29690 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20 5c "---- list of \ 296a0 22 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5c 22 "configuration\" 296b0 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 file names is: 296c0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 296d0 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 [expr {[llength 296e0 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65$configFileName
296f0 73 5d 20 3e 20 30 20 3f 20 24 63 6f 6e 66 69 67  s] > 0 ? $config 29700 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 FileNames : \.. 29710 20 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e "<non 29720 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 e>"}] \n].... 29730 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
29740 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
29750 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
29760 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74        "---- list
29770 20 6f 66 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67   of \"MDA config
29780 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 20 6e  uration\" file n
29790 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a 20 20  ames is: " \..
297a0 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20            [expr
297b0 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 64 61 43 6f  {[llength $mdaCo 297c0 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 5d 20 3e nfigFileNames] > 297d0 20 30 20 3f 20 24 6d 64 61 43 6f 6e 66 69 67 46 0 ?$mdaConfigF
297e0 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20  ileNames : \..
297f0 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65            "<none
29800 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  >"}] \n]....
29810 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 29820 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 29830 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 29840 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 "---- list 29850 6f 66 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 of \"external\" 29860 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 file names is: " 29870 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 29880 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 [expr {[llength 29890 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d$externalFileNam
298a0 65 73 5d 20 3e 20 30 20 3f 20 24 65 78 74 65 72  es] > 0 ? $exter 298b0 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c nalFileNames : \ 298c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 3c .. "< 298d0 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a none>"}] \n].... 298e0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
298f0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
29900 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
29910 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c           "---- l
29920 69 73 74 20 6f 66 20 5c 22 6e 61 74 69 76 65 5c  ist of \"native\
29930 22 20 66 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a  " file names is:
29940 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
29950 20 20 5b 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74    [expr {[llengt
29960 68 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d  h $nativeFileNam 29970 65 73 5d 20 3e 20 30 20 3f 20 24 6e 61 74 69 76 es] > 0 ?$nativ
29980 65 46 69 6c 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a  eFileNames : \..
29990 20 20 20 20 20 20 20 20 20 20 20 20 22 3c 6e 6f              "<no
299a0 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20  ne>"}] \n]....
299b0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 299c0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 299d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 299e0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 69 73 "---- lis 299f0 74 20 6f 66 20 5c 22 6d 69 78 65 64 5c 22 20 66 t of \"mixed\" f 29a00 69 6c 65 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 ile names is: " 29a10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 29a20 65 78 70 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 expr {[llength$
29a30 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 5d 20  mixedFileNames]
29a40 3e 20 30 20 3f 20 24 6d 69 78 65 64 46 69 6c 65  > 0 ? $mixedFile 29a50 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20 20 20 Names : \.. 29a60 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e 22 7d "<none>"} 29a70 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ] \n].... 29a80 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
29a90 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
29aa0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
29ab0 20 20 22 2d 2d 2d 2d 20 6c 69 73 74 20 6f 66 20    "---- list of
29ac0 5c 22 6d 61 6e 61 67 65 64 5c 22 20 66 69 6c 65  \"managed\" file
29ad0 20 6e 61 6d 65 73 20 69 73 3a 20 22 20 5c 0d 0a   names is: " \..
29ae0 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70              [exp
29af0 72 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 6d 61 6e  r {[llength $man 29b00 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 5d 20 3e agedFileNames] > 29b10 20 30 20 3f 20 24 6d 61 6e 61 67 65 64 46 69 6c 0 ?$managedFil
29b20 65 4e 61 6d 65 73 20 3a 20 5c 0d 0a 20 20 20 20  eNames : \..
29b30 20 20 20 20 20 20 20 20 22 3c 6e 6f 6e 65 3e 22          "<none>"
29b40 7d 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  }] \n]....
29b50 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
29b60 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61 6e 79 20  OTE: Remove any
29b70 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
29b80 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
29b90 68 65 20 6e 61 74 69 76 65 20 61 6e 64 2f 6f 72  he native and/or
29ba0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
29bb0 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62    managed assemb
29bc0 6c 79 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  ly files that we
29bd0 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73 73 20 66   handle unless f
29be0 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d 0d 0a 20  orbidden from..
29bf0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64         #       d
29c00 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20 20 20 20  oing so...
29c10 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
29c20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
29c30 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d 6f 76 65  :no(sqliteRemove
29c40 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74  Constraints)]} t
29c50 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
29c60 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d   foreach fileNam
29c70 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d  e $configFileNam 29c80 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 29c90 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 removeConstrai 29ca0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 29cb0 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d ile_$fileName].
29cc0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
29cd0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
29ce0 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43  h fileName $mdaC 29cf0 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b onfigFileNames { 29d00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 29d10 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 29d20 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 29d30 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
29d40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29d50 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
29d60 6c 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c  leName $external 29d70 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 29d80 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 65 43 removeC 29d90 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e onstraint [appen 29da0 64 41 72 67 73 20 66 69 6c 65 5f 20 5b 66 69 6c dArgs file_ [fil 29db0 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 e tail$fileName
29dc0 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  ]]..          }.
29dd0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
29de0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 29df0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 29e00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 29e10 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b moveConstraint [ 29e20 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 29e30 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20$fileName]..
29e40 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
29e50 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
29e60 6c 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c  leName $mixedFil 29e70 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 29e80 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 29e90 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 29ea0 67 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 gs file_$fileNa
29eb0 6d 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  me]..          }
29ec0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f  ....          fo
29ed0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $29ee0 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 29ef0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 29f00 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 removeConstraint 29f10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 29f20 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 e_$fileName]..
29f30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
29f40 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
29f50 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
29f60 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 74 68  TE: Check for th
29f70 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 20 72  e "autoSelect" r
29f80 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e 20 20  untime option.
29f90 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 20 20  If present,..
29fa0 20 20 20 20 20 23 20 20 20 20 20 20 20 61 74 74       #       att
29fb0 65 6d 70 74 20 74 6f 20 61 75 74 6f 6d 61 74 69  empt to automati
29fc0 63 61 6c 6c 79 20 73 65 6c 65 63 74 20 74 68 65  cally select the
29fd0 20 66 69 72 73 74 20 61 76 61 69 6c 61 62 6c 65   first available
29fe0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
29ff0 20 20 62 75 69 6c 64 20 28 6f 72 20 22 72 65 6c    build (or "rel
2a000 65 61 73 65 22 29 20 6f 66 20 53 51 4c 69 74 65  ease") of SQLite
2a010 20 61 6e 64 20 53 79 73 74 65 6d 2e 44 61 74 61   and System.Data
2a020 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20  .SQLite..
2a030 20 23 20 20 20 20 20 20 20 66 6f 72 20 75 73 65   #       for use
2a040 20 77 69 74 68 20 74 68 65 20 74 65 73 74 20 73   with the test s
2a050 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  uite...        #
2a060 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68  ..        if {[h
2a070 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20  asRuntimeOption
2a080 61 75 74 6f 53 65 6c 65 63 74 5d 7d 20 74 68 65  autoSelect]} the
2a090 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69  n {..          i
2a0a0 66 20 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c  f {![checkForSQL
2a0b0 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 2a0c0 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d t_channel true]} 2a0d0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a0e0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 2a0f0 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 iteReleases$::t
2a100 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
2a110 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
2a120 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
2a130 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
2a140 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20 74  Show (and log) t
2a150 68 65 20 67 6c 6f 62 61 6c 20 70 61 72 61 6d 65  he global parame
2a160 74 65 72 73 20 74 68 61 74 20 63 6f 6e 74 72 6f  ters that contro
2a170 6c 20 77 68 65 72 65 0d 0a 20 20 20 20 20 20 20  l where..
2a180 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 62     #       the b
2a190 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 73  uild directory s
2a1a0 68 6f 75 6c 64 20 62 65 2e 20 20 54 68 65 20 61  hould be.  The a
2a1b0 75 74 6f 2d 73 65 6c 65 63 74 69 6f 6e 20 6d 61  uto-selection ma
2a1c0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20  y..          #
2a1d0 20 20 20 20 20 68 61 76 65 20 6d 6f 64 69 66 69       have modifi
2a1e0 65 64 20 73 6f 6d 65 20 6f 66 20 74 68 65 73 65  ed some of these
2a1f0 20 70 61 72 61 6d 65 74 65 72 73 2e 0d 0a 20 20   parameters...
2a200 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2a210 20 20 20 20 20 73 68 6f 77 53 51 4c 69 74 65 42       showSQLiteB
2a220 75 69 6c 64 50 61 72 61 6d 65 74 65 72 73 20 24  uildParameters $2a230 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a ::test_channel.. 2a240 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2a250 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2a260 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 61 6c 6c # NOTE: Skip all 2a270 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 2a280 69 74 65 20 72 65 6c 61 74 65 64 20 66 69 6c 65 ite related file 2a290 20 68 61 6e 64 6c 69 6e 67 20 28 64 65 6c 65 74 handling (delet 2a2a0 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ing,.. # 2a2b0 20 20 20 20 20 20 63 6f 70 79 69 6e 67 2c 20 61 copying, a 2a2c0 6e 64 20 6c 6f 61 64 69 6e 67 29 20 69 66 20 69 nd loading) if i 2a2d0 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 2a2e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 2a2f0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2a300 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 ::no(sqliteFile 2a310 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 2a320 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2a330 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 2a340 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74 trying to delet 2a350 65 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 69 e any files if i 2a360 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 nstructed... 2a370 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2a380 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 2a390 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 2a3a0 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 SqliteFiles)]} t 2a3b0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2a3c0 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 2a3d0 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 ists ::no(delete 2a3e0 53 71 6c 69 74 65 43 6f 6e 66 69 67 46 69 6c 65 SqliteConfigFile 2a3f0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. 2a400 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 2a410 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e ch fileName$con
2a420 66 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  figFileNames {..
2a430 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2a440 74 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46  tryDeleteBinaryF
2a450 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20  ile $fileName.. 2a460 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 2a470 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d }... 2a480 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 2a490 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 2a4a0 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 :no(deleteSqlite 2a4b0 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d ExternalFiles)]} 2a4c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a4d0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 2a4e0 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 ileName$mdaConf
2a4f0 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
2a500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a510 72 79 44 65 6c 65 74 65 42 75 69 6c 64 46 69 6c  ryDeleteBuildFil
2a520 65 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65  e $fileName true 2a530 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a540 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2a550 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 2a560 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46 69 6c ame$externalFil
2a570 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
2a580 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c            tryDel
2a590 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 66  eteBinaryFile $f 2a5a0 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 ileName.. 2a5b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2a5c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2a5d0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2a5e0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 2a5f0 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69 76 65 leteSqliteNative 2a600 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 2a610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 2a620 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2a630 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 2a640 74 65 49 6d 70 6c 69 63 69 74 4e 61 74 69 76 65 teImplicitNative 2a650 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 2a660 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2a670 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 2a680 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d e$nativeFileNam
2a690 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
2a6a0 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74          tryDelet
2a6b0 65 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e  eAssembly $fileN 2a6c0 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ame.. 2a6d0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2a6e0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 2a6f0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 2a700 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 2a710 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 deleteSqliteNonI 2a720 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 2a730 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2a740 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2a750 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 2a760 65 6c 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 eleteSqlitePlatf 2a770 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d ormFiles)] && \. 2a780 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2a790 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 2a7a0 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e gth$platform] >
2a7b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2a7c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2a7d0 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $2a7e0 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 2a7f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2a800 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 2a810 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 Assembly$fileNa
2a820 6d 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  me $platform.. 2a830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2a840 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2a850 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2a860 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2a870 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 fo exists ::no(d 2a880 65 6c 65 74 65 53 71 6c 69 74 65 41 72 63 68 69 eleteSqliteArchi 2a890 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 tectureFiles)] & 2a8a0 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 & \.. 2a8b0 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2a8c0 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 length$archite
2a8d0 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e  cture] > 0} then
2a8e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2a8f0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69        foreach fi
2a900 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69  leName $nativeFi 2a910 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 2a920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 2a930 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c 79 ryDeleteAssembly 2a940 20 24 66 69 6c 65 4e 61 6d 65 20 24 61 72 63 68$fileName $arch 2a950 69 74 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 itecture.. 2a960 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2a970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 2a980 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2a990 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 2a9a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 2a9b0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 2a9c0 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c s ::no(deleteSql 2a9d0 69 74 65 4d 69 78 65 64 46 69 6c 65 73 29 5d 7d iteMixedFiles)]} 2a9e0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2a9f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2aa00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2aa10 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 If the "native" 2aa20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 69 runtime option i 2aa30 73 20 73 65 74 2c 20 64 65 6c 65 74 65 20 69 6d s set, delete im 2aa40 70 6c 69 63 69 74 0d 0a 20 20 20 20 20 20 20 20 plicit.. 2aa50 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 # mi 2aa60 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 2aa70 79 20 66 69 6c 65 73 20 61 73 20 77 65 6c 6c 2e y files as well. 2aa80 20 20 54 68 69 73 20 72 75 6e 74 69 6d 65 20 6f This runtime o 2aa90 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 ption.. 2aaa0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 68 65 # che 2aab0 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 20 77 68 ck is handled wh 2aac0 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 68 65 20 en building the 2aad0 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 2d 6d 6f list of mixed-mo 2aae0 64 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 de.. 2aaf0 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62 # assemb 2ab00 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 2e 0d 0a ly file names... 2ab10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 2ab20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 2ab30 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 2ab40 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 ::no(deleteSqli 2ab50 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 46 teImplicitMixedF 2ab60 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a iles)]} then {.. 2ab70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2ab80 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 2ab90 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73$mixedFileNames
2aba0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2abb0 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41        tryDeleteA
2abc0 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 2abd0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 2abe0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 2abf0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2ac00 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 2ac10 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 2ac20 6c 65 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 leteSqliteNonImp 2ac30 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 licitFiles)]} th 2ac40 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2ac50 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 2ac60 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c exists ::no(del 2ac70 65 74 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 eteSqlitePlatfor 2ac80 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 mFiles)] && \.. 2ac90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2aca0 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 2acb0 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 h$platform] > 0
2acc0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2acd0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
2ace0 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69  ach fileName $mi 2acf0 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a xedFileNames {.. 2ad00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2ad10 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 2ad20 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 embly$fileName
2ad30 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20  $platform.. 2ad40 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 2ad50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2ad60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2ad70 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2ad80 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 exists ::no(dele 2ad90 74 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 teSqliteArchitec 2ada0 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 2adb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2adc0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 2add0 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
2ade0 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
2adf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2ae00 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
2ae10 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61  ame $mixedFileNa 2ae20 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 2ae30 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 2ae40 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 leteAssembly$fi
2ae50 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63  leName $architec 2ae60 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 ture.. 2ae70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2ae80 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 2ae90 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 2aea0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 2aeb0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2aec0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a ![info exists :: 2aed0 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d no(deleteSqliteM 2aee0 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 anagedFiles)]} t 2aef0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2af00 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 2af10 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 eName$managedFi
2af20 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
2af30 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
2af40 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 2af50 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 leName.. 2af60 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2af70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 2af80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 2af90 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 2afa0 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 20 NOTE: Show (and 2afb0 6c 6f 67 29 20 74 68 65 20 67 6c 6f 62 61 6c 20 log) the global 2afc0 70 61 72 61 6d 65 74 65 72 73 20 74 68 61 74 20 parameters that 2afd0 63 6f 6e 74 72 6f 6c 20 77 68 65 72 65 0d 0a 20 control where.. 2afe0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2aff0 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 2b000 74 6f 72 79 20 73 68 6f 75 6c 64 20 62 65 2e 0d tory should be.. 2b010 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 2b020 20 20 20 20 20 20 20 20 73 68 6f 77 53 51 4c 69 showSQLi 2b030 74 65 42 75 69 6c 64 50 61 72 61 6d 65 74 65 72 teBuildParameter 2b040 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
2b050 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  l....          #
2b060 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
2b070 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20  TE: Skip trying
2b080 74 6f 20 76 65 72 69 66 79 20 74 68 65 20 62 75  to verify the bu
2b090 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 69 66  ild directory if
2b0a0 20 69 6e 73 74 72 75 63 74 65 64 3b 0d 0a 20 20   instructed;..
2b0b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2b0c0 6f 74 68 65 72 77 69 73 65 2c 20 6d 61 6b 65 20  otherwise, make
2b0d0 73 75 72 65 20 69 74 20 61 63 74 75 61 6c 6c 79  sure it actually
2b0e0 20 65 78 69 73 74 73 20 6f 72 20 68 61 6c 74 20   exists or halt
2b0f0 74 68 65 20 65 6e 74 69 72 65 0d 0a 20 20 20 20  the entire..
2b100 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 65        #       te
2b110 73 74 69 6e 67 20 70 72 6f 63 65 73 73 20 69 66  sting process if
2b120 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69   it does not exi
2b130 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  st...          #
2b140 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
2b150 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2b160 6e 6f 28 76 65 72 69 66 79 42 75 69 6c 64 44 69  no(verifyBuildDi
2b170 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 65 6e 20  rectory)]} then
2b180 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  {..            #
2b190 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
2b1a0 4e 4f 54 45 3a 20 41 74 20 74 68 69 73 20 70 6f  NOTE: At this po
2b1b0 69 6e 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64  int, the build d
2b1c0 69 72 65 63 74 6f 72 69 65 73 20 4d 55 53 54 20  irectories MUST
2b1d0 65 78 69 73 74 20 66 6f 72 0d 0a 20 20 20 20 20  exist for..
2b1e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
2b1f0 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65  he testing proce
2b200 73 73 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d  ss to continue..
2b210 0a 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 73 65 74 20              set
2b230 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75  directory [getBu
2b240 69 6c 64 44 69 72 65 63 74 6f 72 79 20 66 61 6c  ildDirectory fal
2b250 73 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  se]....
2b260 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
2b270 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 5d  ists $directory] 2b280 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 || \.. 2b290 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69 73 ![file is 2b2a0 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 directory$direc
2b2b0 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  tory]} then {..
2b2c0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
2b2d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
2b2e0 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f 72  NOTE: Just prior
2b2f0 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 6c   to actually hal
2b300 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e 67  ting the testing
2b310 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 20   process,..
2b320 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
2b330 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 6f   add an error to
2b340 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 69   the test log fi
2b350 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le...
2b360 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2b370 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes 2b380 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen 2b390 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 2b3a0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2b3b0 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69 66 could not verif 2b3c0 79 20 6e 61 74 69 76 65 20 62 75 69 6c 64 20 64 y native build d 2b3d0 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c 0d 0a irectory \"" \.. 2b3e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2b3f0 20 20 24 64 69 72 65 63 74 6f 72 79 20 22 5c 22$directory "\"
2b400 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68 61  , all testing ha
2b410 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20  lted\n"]....
2b420 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2b430 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54             # NOT
2b440 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63 72  E: Raising a scr
2b450 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20 74  ipt error from t
2b460 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c 64  his point should
2b470 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20 20   halt..
2b480 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65       #       the
2b490 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
2b4a0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
2b4b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
2b4c0 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64 41    error [appendA
2b4d0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2b4e0 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64 20           "could
2b4f0 6e 6f 74 20 76 65 72 69 66 79 20 6e 61 74 69 76  not verify nativ
2b500 65 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72  e build director
2b510 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  y \"" \..
2b520 20 20 20 20 20 20 20 20 20 20 20 24 64 69 72 65             $dire 2b530 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c 6c 20 74 ctory "\", all t 2b540 65 73 74 69 6e 67 20 68 61 6c 74 65 64 22 5d 0d esting halted"]. 2b550 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2b560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 2b570 74 20 64 69 72 65 63 74 6f 72 79 20 5b 67 65 74 t directory [get 2b580 42 75 69 6c 64 44 69 72 65 63 74 6f 72 79 20 74 BuildDirectory t 2b590 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 rue].... 2b5a0 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 2b5b0 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 79 xists$directory
2b5c0 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] || \..
2b5d0 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20 69          ![file i
2b5e0 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72 65  sdirectory $dire 2b5f0 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a ctory]} then {.. 2b600 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 2b610 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 2b620 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 6f NOTE: Just prio 2b630 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 61 r to actually ha 2b640 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 6e lting the testin 2b650 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 20 g process,.. 2b660 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 2b670 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 74 add an error t 2b680 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 66 o the test log f 2b690 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ile... 2b6a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2b6b0 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
2b6c0 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
2b6d0 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
2b6e0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2b6f0 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72 69  - could not veri
2b700 66 79 20 6d 61 6e 61 67 65 64 20 62 75 69 6c 64  fy managed build
2b710 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 5c   directory \"" \
2b720 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2b730 20 20 20 20 24 64 69 72 65 63 74 6f 72 79 20 22      $directory " 2b740 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 \", all testing 2b750 68 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 halted\n"].... 2b760 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 2b770 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e # N 2b780 4f 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 OTE: Raising a s 2b790 63 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d cript error from 2b7a0 20 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 this point shou 2b7b0 6c 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 ld halt.. 2b7c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 2b7d0 68 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 he testing proce 2b7e0 73 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ss... 2b7f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 2b800 20 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e error [appen 2b810 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 2b820 20 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c "coul 2b830 64 20 6e 6f 74 20 76 65 72 69 66 79 20 6d 61 6e d not verify man 2b840 61 67 65 64 20 62 75 69 6c 64 20 64 69 72 65 63 aged build direc 2b850 74 6f 72 79 20 5c 22 22 20 5c 0d 0a 20 20 20 20 tory \"" \.. 2b860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 64$d
2b870 69 72 65 63 74 6f 72 79 20 22 5c 22 2c 20 61 6c  irectory "\", al
2b880 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64  l testing halted
2b890 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  "]..
2b8a0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....
2b8b0 20 73 65 74 20 6c 6f 67 44 69 72 65 63 74 6f 72   set logDirector
2b8c0 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 20 20  y $directory.. 2b8d0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 2b8e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 .. se 2b8f0 74 20 6c 6f 67 44 69 72 65 63 74 6f 72 79 20 5b t logDirectory [ 2b900 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72 getBuildDirector 2b910 79 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 y true].. 2b920 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 2b930 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 2b940 20 4e 4f 54 45 3a 20 57 65 27 72 65 20 67 6f 69 NOTE: We're goi 2b950 6e 67 20 74 6f 20 6d 6f 76 65 20 74 68 65 20 74 ng to move the t 2b960 65 73 74 20 6c 6f 67 20 66 69 6c 65 20 74 6f 20 est log file to 2b970 74 68 65 20 64 69 72 65 63 74 6f 72 79 0d 0a 20 the directory.. 2b980 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2b990 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 containing the 2b9a0 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 managed assembli 2b9b0 65 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 2e es being tested. 2b9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 2b9d0 20 20 20 20 20 20 20 20 20 6d 6f 76 65 54 65 73 moveTes 2b9e0 74 4c 6f 67 46 69 6c 65 20 24 6c 6f 67 44 69 72 tLogFile$logDir
2b9f0 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20  ectory....
2ba00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
2ba10 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72   # NOTE: Skip tr
2ba20 79 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79  ying to copy any
2ba30 20 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75   files if instru
2ba40 63 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20  cted...
2ba50 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
2ba60 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20   {![info exists
2ba70 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46  ::no(copySqliteF
2ba80 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
2ba90 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2baa0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2bab0 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e  no(copySqliteCon
2bac0 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  figFiles)]} then
2bad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2bae0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2baf0 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 2bb00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 2bb10 2d 2d 20 63 6f 70 79 69 6e 67 20 5c 22 63 6f 6e -- copying \"con 2bb20 66 69 67 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c figuration\" fil 2bb30 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 es...\n".... 2bb40 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 2bb50 68 20 66 69 6c 65 4e 61 6d 65 20 24 63 6f 6e 66 h fileName$conf
2bb60 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  igFileNames {..
2bb70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2bb80 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
2bb90 24 66 69 6c 65 4e 61 6d 65 20 74 72 75 65 0d 0a  $fileName true.. 2bba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d }. 2bbb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 2bbc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2bbd0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 2bbe0 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 45 ::no(copySqliteE 2bbf0 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d 7d 20 xternalFiles)]} 2bc00 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2bc10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2bc20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 # NOTE: C 2bc30 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 opy the Managed 2bc40 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 Debugging Assist 2bc50 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 ants (MDA) confi 2bc60 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 guration.. 2bc70 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2bc80 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 61 67 file for the Eag 2bc90 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 le shell to the 2bca0 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 69 72 build output dir 2bcb0 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 ectory,.. 2bcc0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77 # w 2bcd0 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63 68 20 hile using each 2bce0 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 of the names of 2bcf0 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65 67 61 the various lega 2bd00 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 cy test.. 2bd10 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 # e 2bd20 78 65 63 75 74 61 62 6c 65 73 2e 20 20 54 68 69 xecutables. Thi 2bd30 73 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f 20 6d s will help to m 2bd40 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 6c ake sure that al 2bd50 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 l the.. 2bd60 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 65 67 # leg 2bd70 61 63 79 20 74 65 73 74 73 20 72 75 6e 20 77 69 acy tests run wi 2bd80 74 68 20 65 78 61 63 74 6c 79 20 74 68 65 20 73 th exactly the s 2bd90 61 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e 61 67 ame set of Manag 2bda0 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ed.. 2bdb0 20 20 23 20 20 20 20 20 20 20 44 65 62 75 67 67 # Debugg 2bdc0 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 63 ing Assistants c 2bdd0 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 20 20 onfigured... 2bde0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 2bdf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 2be00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2be10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2be20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79        "---- copy
2be30 69 6e 67 20 5c 22 4d 44 41 20 63 6f 6e 66 69 67  ing \"MDA config
2be40 75 72 61 74 69 6f 6e 5c 22 20 66 69 6c 65 73 2e  uration\" files.
2be50 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ..\n"....
2be60 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
2be70 69 6c 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66  ileName $mdaConf 2be80 69 67 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 igFileNames {.. 2be90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t 2bea0 72 79 43 6f 70 79 42 69 6e 61 72 79 46 69 6c 65 ryCopyBinaryFile 2beb0 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 2e EagleShell.exe. 2bec0 6d 64 61 2e 63 6f 6e 66 69 67 20 74 72 75 65 20 mda.config true 2bed0 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 ""$fileName..
2bee0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2bef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
2bf00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2bf10 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 65  # NOTE: Copy the
2bf20 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 69   external binari
2bf30 65 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 74  es, if any, to t
2bf40 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 61  he directory tha
2bf50 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t..
2bf60 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
2bf70 73 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c  s the Eagle shel
2bf80 6c 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 69  l.  This is typi
2bf90 63 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d 61  cally used to ma
2bfa0 6b 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ke..
2bfb0 20 20 23 20 20 20 20 20 20 20 73 75 72 65 20 61    #       sure a
2bfc0 73 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 65  ssemblies refere
2bfd0 6e 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 73  nced by the ones
2bfe0 20 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 72   being tested ar
2bff0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
2c000 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 62   #       availab
2c010 6c 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 65  le during the te
2c020 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a  sting process...
2c030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
2c040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
2c050 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2c060 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 nnel "---- copyi 2c070 6e 67 20 5c 22 65 78 74 65 72 6e 61 6c 5c 22 20 ng \"external\" 2c080 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 files...\n".... 2c090 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 2c0a0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 65 each fileName$e
2c0b0 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 73  xternalFileNames
2c0c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
2c0d0 20 20 20 20 74 72 79 43 6f 70 79 45 78 74 65 72      tryCopyExter
2c0e0 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d  nalFile $fileNam 2c0f0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 2c100 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2c110 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 2c120 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 2c130 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 ts ::no(copySqli 2c140 74 65 4e 61 74 69 76 65 46 69 6c 65 73 29 5d 7d teNativeFiles)]} 2c150 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2c160 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 2c170 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2c180 49 66 20 74 68 65 20 74 65 73 74 20 70 6c 61 74 If the test plat 2c190 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c 79 20 74 form is likely t 2c1a0 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 he default for t 2c1b0 68 69 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 his.. 2c1c0 20 20 20 23 20 20 20 20 20 20 20 6d 61 63 68 69 # machi 2c1d0 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20 74 6f 20 ne, also try to 2c1e0 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 65 20 copy the native 2c1f0 66 69 6c 65 73 20 74 6f 20 74 68 65 0d 0a 20 20 files to the.. 2c200 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 2c210 20 20 20 20 62 69 6e 61 72 79 20 6c 6f 63 61 74 binary locat 2c220 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ion... 2c230 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2c240 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 2c250 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 exists ::no(copy 2c260 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 4e 61 SqliteImplicitNa 2c270 74 69 76 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tiveFiles)] && \ 2c280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c290 20 20 20 20 5b 69 73 44 65 66 61 75 6c 74 42 75 [isDefaultBu 2c2a0 69 6c 64 50 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 ildPlatform]} th 2c2b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2c2c0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2c2d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
2c2e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c2f0 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67     "---- copying
2c300 20 69 6d 70 6c 69 63 69 74 20 5c 22 6e 61 74 69   implicit \"nati
2c310 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22  ve\" files...\n"
2c320 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2c330 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
2c340 4e 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65  Name $nativeFile 2c350 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 2c360 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 2c370 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 pyAssembly$file
2c380 4e 61 6d 65 20 66 61 6c 73 65 0d 0a 20 20 20 20  Name false..
2c390 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
2c3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2c3b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2c3c0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2c3d0 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74  s ::no(copySqlit
2c3e0 65 4e 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65  eNonImplicitFile
2c3f0 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
2c400 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
2c410 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
2c420 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c  :no(copySqlitePl
2c430 61 74 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26  atformFiles)] &&
2c440 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2c450 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
2c460 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d  length $platform 2c470 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 2c480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2c490 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2c4a0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2c4b0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2c4c0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2c4d0 2d 20 63 6f 70 79 69 6e 67 20 5c 22 6e 61 74 69  - copying \"nati
2c4e0 76 65 5c 22 20 66 69 6c 65 73 20 66 6f 72 20 70  ve\" files for p
2c4f0 6c 61 74 66 6f 72 6d 20 5c 22 22 20 5c 0d 0a 20  latform \"" \..
2c500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c510 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c       $platform \ 2c520 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 "...\n].... 2c530 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 2c540 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e each fileName$n
2c550 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b  ativeFileNames {
2c560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2c570 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
2c580 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20  embly $fileName 2c590 66 61 6c 73 65 20 24 70 6c 61 74 66 6f 72 6d 0d false$platform.
2c5a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
2c5b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2c5c0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2c5d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
2c5e0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e  [info exists ::n
2c5f0 6f 28 63 6f 70 79 53 71 6c 69 74 65 41 72 63 68  o(copySqliteArch
2c600 69 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20  itectureFiles)]
2c610 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
2c620 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
2c630 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74  g length $archit 2c640 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 ecture] > 0} the 2c650 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 2c660 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
2c670 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
2c680 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
2c690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c6a0 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69 6e 67 20    "---- copying
2c6b0 5c 22 6e 61 74 69 76 65 5c 22 20 66 69 6c 65 73  \"native\" files
2c6c0 20 66 6f 72 20 61 72 63 68 69 74 65 63 74 75 72   for architectur
2c6d0 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
2c6e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $2c6f0 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 22 2e architecture \". 2c700 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 ..\n].... 2c710 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 2c720 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 ch fileName$nat
2c730 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
2c740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c750 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
2c760 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61  bly $fileName fa 2c770 6c 73 65 20 24 61 72 63 68 69 74 65 63 74 75 72 lse$architectur
2c780 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..
2c790 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2c7a0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2c7b0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if
2c7c0 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
2c7d0 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 6f  :no(copySqliteFo
2c7e0 72 63 65 64 4e 61 74 69 76 65 46 69 6c 65 73 29  rcedNativeFiles)
2c7f0 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
2c800 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74              [get
2c810 42 75 69 6c 64 4e 61 74 69 76 65 5d 7d 20 74 68  BuildNative]} th
2c820 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2c830 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 2c840 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d :test_channel \. 2c850 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2c860 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 "---- cop 2c870 79 69 6e 67 20 66 6f 72 63 65 64 20 5c 22 6e 61 ying forced \"na 2c880 74 69 76 65 5c 22 20 66 69 6c 65 73 2e 2e 2e 5c tive\" files...\ 2c890 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 n".... 2c8a0 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 2c8b0 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
2c8c0 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
2c8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2c8e0 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79   tryCopyAssembly
2c8f0 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c 73 65   $fileName false 2c900 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2c910 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 2c920 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2c930 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 2c940 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 2c950 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 2c960 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 2c970 6f 70 79 53 71 6c 69 74 65 4d 69 78 65 64 46 69 opySqliteMixedFi 2c980 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 2c990 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a #.. 2c9a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # 2c9b0 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e 61 NOTE: If the "na 2c9c0 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 tive" runtime op 2c9d0 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 63 6f 70 tion is set, cop 2c9e0 79 20 69 6d 70 6c 69 63 69 74 0d 0a 20 20 20 20 y implicit.. 2c9f0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 2ca00 20 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 mixed-mode ass 2ca10 65 6d 62 6c 79 20 66 69 6c 65 73 20 61 73 20 77 embly files as w 2ca20 65 6c 6c 2e 20 20 54 68 65 20 72 75 6e 74 69 6d ell. The runtim 2ca30 65 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 e option.. 2ca40 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2ca50 63 68 65 63 6b 20 69 73 20 68 61 6e 64 6c 65 64 check is handled 2ca60 20 77 68 65 6e 20 62 75 69 6c 64 69 6e 67 20 74 when building t 2ca70 68 65 20 6c 69 73 74 20 6f 66 20 6d 69 78 65 64 he list of mixed 2ca80 2d 6d 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 20 -mode.. 2ca90 20 20 20 20 20 23 20 20 20 20 20 20 20 61 73 73 # ass 2caa0 65 6d 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 73 embly file names 2cab0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2cac0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 2cad0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 if {![info exi 2cae0 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c sts ::no(copySql 2caf0 69 74 65 49 6d 70 6c 69 63 69 74 4d 69 78 65 64 iteImplicitMixed 2cb00 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d Files)]} then {. 2cb10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 2cb20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2cb30 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20  hannel \..
2cb40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2cb50 2d 2d 2d 20 63 6f 70 79 69 6e 67 20 69 6d 70 6c  --- copying impl
2cb60 69 63 69 74 20 5c 22 6d 69 78 65 64 5c 22 20 66  icit \"mixed\" f
2cb70 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20  iles...\n"....
2cb80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2cb90 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $2cba0 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b mixedFileNames { 2cbb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2cbc0 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 2cbd0 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 bly$fileName fa
2cbe0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..
2cbf0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2cc00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
2cc10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
2cc20 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
2cc30 63 6f 70 79 53 71 6c 69 74 65 4e 6f 6e 49 6d 70  copySqliteNonImp
2cc40 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68  licitFiles)]} th
2cc50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2cc60 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
2cc70 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70   exists ::no(cop
2cc80 79 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  ySqlitePlatformF
2cc90 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
2cca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ccb0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
2ccc0 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 2ccd0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 2cce0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 2ccf0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
2cd00 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
2cd10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cd20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 70 79 69       "---- copyi
2cd30 6e 67 20 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c  ng \"mixed\" fil
2cd40 65 73 20 66 6f 72 20 70 6c 61 74 66 6f 72 6d 20  es for platform
2cd50 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  \"" \..
2cd60 20 20 20 20 20 20 20 20 20 20 20 20 20 24 70 6c               $pl 2cd70 61 74 66 6f 72 6d 20 5c 22 2e 2e 2e 5c 6e 5d 0d atform \"...\n]. 2cd80 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 2cd90 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c foreach fil 2cda0 65 4e 61 6d 65 20 24 6d 69 78 65 64 46 69 6c 65 eName$mixedFile
2cdb0 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
2cdc0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
2cdd0 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69  CopyAssembly $fi 2cde0 6c 65 4e 61 6d 65 20 66 61 6c 73 65 20 24 70 6c leName false$pl
2cdf0 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20  atform..
2ce00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2ce10 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2ce20 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2ce30 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2ce40 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
2ce50 69 74 65 41 72 63 68 69 74 65 63 74 75 72 65 46  iteArchitectureF
2ce60 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
2ce70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ce80 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
2ce90 24 61 72 63 68 69 74 65 63 74 75 72 65 5d 20 3e  $architecture] > 2cea0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2ceb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 2cec0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
2ced0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
2cee0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
2cef0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63           "---- c
2cf00 6f 70 79 69 6e 67 20 5c 22 6d 69 78 65 64 5c 22  opying \"mixed\"
2cf10 20 66 69 6c 65 73 20 66 6f 72 20 61 72 63 68 69   files for archi
2cf20 74 65 63 74 75 72 65 20 5c 22 22 20 5c 0d 0a 20  tecture \"" \..
2cf30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cf40 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74 75       $architectu 2cf50 72 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 0d 0a 20 re \"...\n].... 2cf60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2cf70 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 2cf80 65 20 24 6d 69 78 65 64 46 69 6c 65 4e 61 6d 65 e$mixedFileName
2cf90 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
2cfa0 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79           tryCopy
2cfb0 41 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61  Assembly $fileNa 2cfc0 6d 65 20 66 61 6c 73 65 20 24 61 72 63 68 69 74 me false$archit
2cfd0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
2cfe0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2cff0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2d010 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2d020 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c  sts ::no(copySql
2d030 69 74 65 46 6f 72 63 65 64 4d 69 78 65 64 46 69  iteForcedMixedFi
2d040 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20  les)] && \..
2d050 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d060 5b 67 65 74 42 75 69 6c 64 4e 61 74 69 76 65 5d  [getBuildNative]
2d070 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
2d080 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
2d090 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 2d0a0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 l \.. 2d0b0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 2d0c0 20 63 6f 70 79 69 6e 67 20 66 6f 72 63 65 64 20 copying forced 2d0d0 5c 22 6d 69 78 65 64 5c 22 20 66 69 6c 65 73 2e \"mixed\" files. 2d0e0 2e 2e 5c 6e 22 0d 0a 0d 0a 20 20 20 20 20 20 20 ..\n".... 2d0f0 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 forea 2d100 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d 69 78 ch fileName$mix
2d110 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  edFileNames {..
2d120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d130 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
2d140 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 66 61 6c  ly $fileName fal 2d150 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 se.. 2d160 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 2d170 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 2d180 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2d190 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 2d1a0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 2d1b0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f info exists ::no 2d1c0 28 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 67 (copySqliteManag 2d1d0 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 edFiles)]} then 2d1e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d1f0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d200 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 6f 70  hannel "---- cop
2d210 79 69 6e 67 20 5c 22 6d 61 6e 61 67 65 64 5c 22  ying \"managed\"
2d220 20 66 69 6c 65 73 2e 2e 2e 5c 6e 22 0d 0a 0d 0a   files...\n"....
2d230 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
2d240 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $2d250 6d 61 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 managedFileNames 2d260 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2d270 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d tryCopyAssem 2d280 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 74 72 bly$fileName tr
2d290 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ue..
2d2a0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..
2d2b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2d2c0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
2d2d0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2d2e0 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f  : Skip trying to
2d2f0 20 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20   load any files
2d300 69 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a  if instructed...
2d310 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2d320 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
2d330 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
2d340 61 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d  adSqliteFiles)]}
2d350 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d360 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
2d370 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64  exists ::no(load
2d380 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69  SqliteImplicitFi
2d390 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
2d3a0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79               try
2d3b0 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73  LoadAssembly Sys
2d3c0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2d3d0 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dll..
2d3e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
2d3f0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
2d400 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c  sts ::no(loadSql
2d410 69 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20  iteLinqFiles)]}
2d420 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
2d430 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
2d440 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
2d450 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c  a.SQLite.Linq.dl
2d460 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  l..            }
2d470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
2d480 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2d490 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74  s ::no(loadSqlit
2d4a0 65 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65  eEf6Files)]} the
2d4b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
2d4c0 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62     tryLoadAssemb
2d4d0 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ly System.Data.S
2d4e0 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20  QLite.EF6.dll..
2d4f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
2d500 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
2d510 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
2d520 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e  no(loadSqliteNon
2d530 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d  ImplicitFiles)]}
2d540 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
2d550 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
2d560 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f  o exists ::no(lo
2d570 61 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d  adSqlitePlatform
2d580 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Files)] && \..
2d590 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d5a0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $2d5b0 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 platform] > 0} t 2d5c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2d5d0 20 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 tryLoadAs 2d5e0 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 sembly System.Da 2d5f0 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 ta.SQLite.dll$p
2d600 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..
2d610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2d620 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
2d630 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
2d640 28 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69  (loadSqliteArchi
2d650 74 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26  tectureFiles)] &
2d660 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
2d670 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c         [string l
2d680 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74  ength $architect 2d690 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ure] > 0} then { 2d6a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2d6b0 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 2d6c0 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 2d6d0 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 Lite.dll$archit
2d6e0 65 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20  ecture..
2d6f0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2d700 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
2d710 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
2d720 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
2d730 68 20 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24  h fileNameOnly $2d740 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 nativeFileNames 2d750 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 {.. cat 2d760 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 2d770 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2d780 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2d790 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2d7a0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
2d7b0 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
2d7c0 20 6e 61 74 69 76 65 2f 20 24 66 69 6c 65 4e 61   native/ $fileNa 2d7d0 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 meOnly \.. 2d7e0 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... 2d7f0 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 2d800 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 2d810 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 2d820 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
2d830 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a  meOnly]] \"\n]..
2d840 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2d850 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2d860 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
2d870 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 6c  meOnly $mixedFil 2d880 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 eNames {.. 2d890 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 2d8a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
2d8b0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
2d8c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
2d8d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
2d8e0 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
2d8f0 20 6f 66 20 5c 22 22 20 6d 69 78 65 64 2f 20 24   of \"" mixed/ $2d900 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a fileNameOnly \.. 2d910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2d920 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 "\"... \"" [file 2d930 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e version [getBin 2d940 61 72 79 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 aryFileName \.. 2d950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
2d960 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 5d 20 5c  fileNameOnly]] \
2d970 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  "\n]..
2d980 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
2d990 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
2d9a0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 61  fileNameOnly $ma 2d9b0 6e 61 67 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b nagedFileNames { 2d9c0 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 .. catc 2d9d0 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 h {.. 2d9e0 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2d9f0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2da00 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
2da10 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65        "---- file
2da20 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20   version of \""
2da30 6d 61 6e 61 67 65 64 2f 20 24 66 69 6c 65 4e 61  managed/ $fileNa 2da40 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 20 20 meOnly \.. 2da50 20 20 20 20 20 20 20 20 20 20 22 5c 22 2e 2e 2e "\"... 2da60 20 5c 22 22 20 5b 66 69 6c 65 20 76 65 72 73 69 \"" [file versi 2da70 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c on [getBinaryFil 2da80 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 eName \.. 2da90 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61$fileNa
2daa0 6d 65 4f 6e 6c 79 5d 5d 20 5c 22 5c 6e 5d 0d 0a  meOnly]] \"\n]..
2dab0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
2dac0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
2dad0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
2dae0 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 2daf0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 2db00 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 foreach f 2db10 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6e 61 74 ileNameOnly$nat
2db20 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a  iveFileNames {..
2db30 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
2db40 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
2db50 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 2db60 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 2db70 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 2db80 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 2db90 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 2dba0 5c 22 22 20 6e 61 74 69 76 65 2f 70 6c 61 74 66 \"" native/platf 2dbb0 6f 72 6d 2f 20 5c 0d 0a 20 20 20 20 20 20 20 20 orm/ \.. 2dbc0 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74 66$platf
2dbd0 6f 72 6d 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f  orm / $fileNameO 2dbe0 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b nly "\"... \"" [ 2dbf0 66 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 file \.. 2dc00 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f versio 2dc10 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 n [getBinaryFile 2dc20 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e Name$fileNameOn
2dc30 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ly \..
2dc40 20 20 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72          $platfor 2dc50 6d 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 m]] \"\n].. 2dc60 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 2dc70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 2dc80 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e foreach fileN 2dc90 61 6d 65 4f 6e 6c 79 20 24 6d 69 78 65 64 46 69 ameOnly$mixedFi
2dca0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20  leNames {..
2dcb0 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
2dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
2dcd0 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 2dce0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 2dcf0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 2dd00 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 2dd10 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6d version of \"" m 2dd20 69 78 65 64 2f 70 6c 61 74 66 6f 72 6d 2f 20 5c ixed/platform/ \ 2dd30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2dd40 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 2f 20$platform /
2dd50 24 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c  $fileNameOnly "\ 2dd60 22 2e 2e 2e 20 5c 22 22 20 5b 66 69 6c 65 20 5c "... \"" [file \ 2dd70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 2dd80 20 20 20 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 version [get 2dd90 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 BinaryFileName$
2dda0 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a  fileNameOnly \..
2ddb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2ddc0 20 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 22    $platform]] \" 2ddd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 2dde0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 2ddf0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 2de00 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 2de10 67 20 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 g length$archit
2de20 65 63 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65  ecture] > 0} the
2de30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66  n {..          f
2de40 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 4f  oreach fileNameO
2de50 6e 6c 79 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  nly $nativeFileN 2de60 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 2de70 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 2de80 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 2de90 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
2dea0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
2deb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2dec0 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
2ded0 73 69 6f 6e 20 6f 66 20 5c 22 22 20 6e 61 74 69  sion of \"" nati
2dee0 76 65 2f 61 72 63 68 69 74 65 63 74 75 72 65 2f  ve/architecture/
2def0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
2df00 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63 74        $architect 2df10 75 72 65 20 2f 20 24 66 69 6c 65 4e 61 6d 65 4f ure /$fileNameO
2df20 6e 6c 79 20 22 5c 22 2e 2e 2e 20 5c 22 22 20 5b  nly "\"... \"" [
2df30 66 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  file \..
2df40 20 20 20 20 20 20 20 20 20 20 76 65 72 73 69 6f            versio
2df50 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  n [getBinaryFile
2df60 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 4f 6e  Name $fileNameOn 2df70 6c 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ly \.. 2df80 20 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65$archite
2df90 63 74 75 72 65 5d 5d 20 5c 22 5c 6e 5d 0d 0a 20  cture]] \"\n]..
2dfa0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
2dfb0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
2dfc0 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 66         foreach f
2dfd0 69 6c 65 4e 61 6d 65 4f 6e 6c 79 20 24 6d 69 78  ileNameOnly $mix 2dfe0 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 2dff0 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 catch 2e000 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e010 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2e020 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2e030 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
2e040 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
2e050 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c  ile version of \
2e060 22 22 20 6d 69 78 65 64 2f 61 72 63 68 69 74 65  "" mixed/archite
2e070 63 74 75 72 65 2f 20 5c 0d 0a 20 20 20 20 20 20  cture/ \..
2e080 20 20 20 20 20 20 20 20 20 20 20 20 24 61 72 63              $arc 2e090 68 69 74 65 63 74 75 72 65 20 2f 20 24 66 69 6c hitecture /$fil
2e0a0 65 4e 61 6d 65 4f 6e 6c 79 20 22 5c 22 2e 2e 2e  eNameOnly "\"...
2e0b0 20 5c 22 22 20 5b 66 69 6c 65 20 5c 0d 0a 20 20   \"" [file \..
2e0c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2e0d0 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
2e0e0 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file 2e0f0 4e 61 6d 65 4f 6e 6c 79 20 5c 0d 0a 20 20 20 20 NameOnly \.. 2e100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24 61$a
2e110 72 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 22  rchitecture]] \"
2e120 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
2e130 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
2e140 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
2e150 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2e160 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68   # NOTE: Grab th
2e170 65 20 6c 69 73 74 20 6f 66 20 6d 61 6e 61 67 65  e list of manage
2e180 64 20 61 73 73 65 6d 62 6c 69 65 73 20 66 6f 72  d assemblies for
2e190 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
2e1a0 63 65 73 73 0d 0a 20 20 20 20 20 20 20 20 23 20  cess..        #
2e1b0 20 20 20 20 20 20 61 6e 64 20 72 65 70 6f 72 74        and report
2e1c0 20 6f 6e 20 74 68 65 20 53 79 73 74 65 6d 2e 44   on the System.D
2e1d0 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
2e1e0 65 64 20 6f 6e 65 73 2e 0d 0a 20 20 20 20 20 20  ed ones...
2e1f0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20    #..        if
2e200 7b 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65  {[haveSQLiteObje
2e210 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
2e220 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
2e230 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
2e240 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
2e250 6e 76 6f 6b 65 20 55 74 69 6c 69 74 79 20 47 65  nvoke Utility Ge
2e260 74 41 73 73 65 6d 62 6c 69 65 73 0d 0a 20 20 20  tAssemblies..
2e270 20 20 20 20 20 20 20 7d 20 61 73 73 65 6d 62 6c         } assembl
2e280 69 65 73 5d 20 3d 3d 20 30 20 7c 7c 20 5b 63 61  ies] == 0 || [ca
2e290 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
2e2a0 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65     object invoke
2e2b0 20 41 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65   AppDomain.Curre
2e2c0 6e 74 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65  ntDomain GetAsse
2e2d0 6d 62 6c 69 65 73 0d 0a 20 20 20 20 20 20 20 20  mblies..
2e2e0 20 20 7d 20 61 73 73 65 6d 62 6c 69 65 73 5d 20    } assemblies]
2e2f0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
2e300 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
2e310 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d 62 6c   foreach assembl
2e320 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20 7b 0d  y $assemblies {. 2e330 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 . i 2e340 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 f {[string match 2e350 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \{System.Data.S 2e360 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 QLite*$assembly
2e370 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
2e380 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
2e390 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 2e3a0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 2e3b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2e3c0 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 "---- found 2e3d0 6c 6f 61 64 65 64 20 61 73 73 65 6d 62 6c 79 3a loaded assembly: 2e3e0 20 22 20 24 61 73 73 65 6d 62 6c 79 20 5c 6e 5d "$assembly \n]
2e3f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e400 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
2e410 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2e420 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2e430 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
2e440 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 2e450 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a test_channel \.. 2e460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 2e470 2d 2d 2d 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 --- define const 2e480 61 6e 74 73 20 66 6f 72 20 5c 22 53 79 73 74 65 ants for \"Syste 2e490 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c 22 2e m.Data.SQLite\". 2e4a0 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 .. ".... 2e4b0 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. 2e4c0 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 obje 2e4d0 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 ct invoke -flags 2e4e0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 +NonPublic \.. 2e4f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 S 2e500 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 2e510 65 2e 53 51 4c 69 74 65 33 20 44 65 66 69 6e 65 e.SQLite3 Define 2e520 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 Constants.. 2e530 20 20 20 20 20 7d 20 64 65 66 69 6e 65 43 6f 6e } defineCon 2e540 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 68 stants] == 0} th 2e550 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 2e560 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
2e570 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
2e580 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20  rgs [formatList
2e590 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20  [lsort \..
2e5a0 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69 6e            $defin 2e5b0 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f 6e eConstants] <non 2e5c0 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 e>] \n].. 2e5d0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 2e5e0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
2e5f0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75  ::test_channel u
2e600 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20  nknown\n..
2e610 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
2e620 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63  ....        catc
2e630 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  h {..          t
2e640 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 2e650 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 nnel \.. 2e660 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 72 "---- sour 2e670 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 ce version of \" 2e680 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2e690 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d te.dll\"... "... 2e6a0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b . if {[ 2e6b0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 2e6c0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 2e6d0 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu 2e6e0 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. 2e6f0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 2e700 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 ata.SQLite.SQLit 2e710 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 50 72 6f 76 eConnection Prov 2e720 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20 20 iderVersion.. 2e730 20 20 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e } version 2e740 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 2e750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 2e760 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
2e770 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74  version] == 0} t
2e780 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2e790 20 20 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e       set version
2e7a0 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20   null..
2e7b0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2e7c0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2e7d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2e7e0 72 67 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d rgs$version \n]
2e7f0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c  ..          } el
2e800 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
2e810 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2e820 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c channel unknown\ 2e830 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a n.. }.. 2e840 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 2e850 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 2e860 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
2e870 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d  :test_channel \.
2e880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
2e890 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63  ---- source chec
2e8a0 6b 6f 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d  kout of \"System
2e8b0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
2e8c0 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20  \"... "....
2e8d0 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
2e8e0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  {..            o
2e8f0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
2e900 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
2e910 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
2e920 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51    System.Data.SQ
2e930 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e 65  Lite.SQLiteConne
2e940 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 53 6f  ction ProviderSo
2e950 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20  urceId..
2e960 20 20 7d 20 73 6f 75 72 63 65 49 64 5d 20 3d 3d    } sourceId] ==
2e970 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2e980 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
2e990 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72  ing length $sour 2e9a0 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then 2e9b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 2e9c0 20 20 73 65 74 20 73 6f 75 72 63 65 49 64 20 6e set sourceId n 2e9d0 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ull.. 2e9e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 2e9f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
2ea00 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
2ea10 73 20 24 73 6f 75 72 63 65 49 64 20 5c 6e 5d 0d  s $sourceId \n]. 2ea20 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 . } els 2ea30 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 2ea40 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
2ea50 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e  hannel unknown\n
2ea60 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2ea70 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2ea80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2ea90 20 4e 4f 54 45 3a 20 52 65 73 65 74 20 63 61 63   NOTE: Reset cac
2eaa0 68 65 64 20 22 62 72 65 61 6b 20 69 6e 74 6f 20  hed "break into
2eab0 64 65 62 75 67 67 65 72 22 20 73 65 74 74 69 6e  debugger" settin
2eac0 67 20 73 6f 20 74 68 61 74 20 69 74 20 63 61 6e  g so that it can
2ead0 20 62 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20   be..        #
2eae0 20 20 20 20 20 75 73 65 64 20 64 75 72 69 6e 67       used during
2eaf0 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 2c 20   the test file,
2eb00 69 66 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20  if needed...
2eb10 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
2eb20 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
2eb30 20 3a 3a 6e 6f 28 72 65 73 65 74 42 72 65 61 6b   ::no(resetBreak
2eb40 49 6e 74 6f 44 65 62 75 67 67 65 72 29 5d 20 26  IntoDebugger)] &
2eb50 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  & \..
2eb60 20 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65   [haveSQLiteObje
2eb70 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e  ctCommand]} then
2eb80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
2eb90 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20   {[catch {..
2eba0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
2ebb0 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
2ebc0 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
2ebd0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
2ebe0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 48 65  m.Data.SQLite.He
2ebf0 6c 70 65 72 4d 65 74 68 6f 64 73 20 52 65 73 65  lperMethods Rese
2ec00 74 42 72 65 61 6b 49 6e 74 6f 44 65 62 75 67 67  tBreakIntoDebugg
2ec10 65 72 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20  er..          }
2ec20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68  result] == 0} th
2ec30 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
2ec40 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 2ec50 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 2ec60 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 2ec70 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 2ec80 6c 20 52 65 73 65 74 42 72 65 61 6b 49 6e 74 6f l ResetBreakInto 2ec90 44 65 62 75 67 67 65 72 28 29 2e 2e 2e 20 6f 6b Debugger()... ok 2eca0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 2ecb0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 2ecc0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
2ecd0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
2ece0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
2ecf0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
2ed00 20 63 61 6c 6c 20 52 65 73 65 74 42 72 65 61 6b   call ResetBreak
2ed10 49 6e 74 6f 44 65 62 75 67 67 65 72 28 29 2e 2e  IntoDebugger()..
2ed20 2e 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20  . error: " \..
2ed30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e                \n
2ed40 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 2ed50 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 2ed60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 2ed70 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 2ed80 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 61 OTE: Check the a 2ed90 76 61 69 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 vailable builds 2eda0 28 61 6e 64 20 22 72 65 6c 65 61 73 65 73 22 29 (and "releases") 2edb0 20 6f 66 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a of SQLite and.. 2edc0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2edd0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 2ede0 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a te... #.. 2edf0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 2ee00 53 51 4c 69 74 65 42 75 69 6c 64 73 20 24 3a 3a SQLiteBuilds$::
2ee10 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20  test_channel..
2ee20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
2ee30 4c 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a  LiteReleases $:: 2ee40 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 2ee50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2ee60 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 # NOTE: Now, 2ee70 77 65 20 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 we need to know 2ee80 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f if the SQLite co 2ee90 72 65 20 6c 69 62 72 61 72 79 20 69 73 20 61 76 re library is av 2eea0 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 ailable.. 2eeb0 20 23 20 20 20 20 20 20 20 28 69 2e 65 2e 20 62 # (i.e. b 2eec0 65 63 61 75 73 65 20 74 68 65 20 6d 61 6e 61 67 ecause the manag 2eed0 65 64 2d 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 ed-only System.D 2eee0 61 74 61 2e 53 51 4c 69 74 65 20 61 73 73 65 6d ata.SQLite assem 2eef0 62 6c 79 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 bly can.. 2ef00 20 23 20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 # load wi 2ef10 74 68 6f 75 74 20 69 74 3b 20 68 6f 77 65 76 65 thout it; howeve 2ef20 72 2c 20 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 r, it cannot do 2ef30 61 6e 79 74 68 69 6e 67 20 75 73 65 66 75 6c 20 anything useful 2ef40 77 69 74 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 without.. 2ef50 20 23 20 20 20 20 20 20 20 69 74 29 2e 20 20 49 # it). I 2ef60 66 20 77 65 20 61 72 65 20 75 73 69 6e 67 20 74 f we are using t 2ef70 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 he mixed-mode as 2ef80 73 65 6d 62 6c 79 20 61 6e 64 20 77 65 20 61 6c sembly and we al 2ef90 72 65 61 64 79 0d 0a 20 20 20 20 20 20 20 20 23 ready.. # 2efa0 20 20 20 20 20 20 20 66 6f 75 6e 64 20 69 74 20 found it 2efb0 28 61 62 6f 76 65 29 2c 20 74 68 69 73 20 73 68 (above), this sh 2efc0 6f 75 6c 64 20 61 6c 77 61 79 73 20 73 75 63 63 ould always succ 2efd0 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d eed... #. 2efe0 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f . checkFo 2eff0 72 53 51 4c 69 74 65 4c 69 62 72 61 72 79 20 24 rSQLiteLibrary$
2f000 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a  ::test_channel..
2f010 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2f020 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65       # NOTE: Che
2f030 63 6b 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ck if the SQLite
2f040 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c   interop assembl
2f050 79 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  y is available..
2f060 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2f070 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69      checkForSQLi
2f080 74 65 49 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73  teInterop $::tes 2f090 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 2f0a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2f0b0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 # NOTE: Check th 2f0c0 65 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73 e SQLite databas 2f0d0 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 e and temporary 2f0e0 64 69 72 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 directories... 2f0f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2f100 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 checkForSQLiteD 2f110 69 72 65 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 irectories$::te
2f120 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20  st_channel....
2f130 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2f140 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
2f150 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69 66   to determine if
2f160 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65   various compile
2f170 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65  -time options ne
2f180 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20 20 20  eded for..
2f190 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 63    #       test c
2f1a0 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72 65 20  onstraints were
2f1b0 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20  enabled for the
2f1c0 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
2f1d0 2e 20 20 54 68 65 72 65 0d 0a 20 20 20 20 20 20  .  There..
2f1e0 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 6f    #       are so
2f1f0 6d 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  me compile-time
2f200 6f 70 74 69 6f 6e 73 20 74 68 61 74 20 6d 75 73  options that mus
2f210 74 20 61 6c 73 6f 20 68 61 76 65 20 62 65 65 6e  t also have been
2f220 20 65 6e 61 62 6c 65 64 0d 0a 20 20 20 20 20 20   enabled..
2f230 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68    #       for th
2f240 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
2f250 6c 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 62  ly in order to b
2f260 65 20 65 66 66 65 63 74 69 76 65 2e 20 20 46 6f  e effective.  Fo
2f270 72 20 74 68 6f 73 65 0d 0a 20 20 20 20 20 20 20  r those..
2f280 20 23 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 73   #       options
2f290 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 61 73 73  , it will be ass
2f2a0 75 6d 65 64 20 74 68 61 74 20 69 74 20 77 61 73  umed that it was
2f2b0 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68 65   enabled for the
2f2c0 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 20 20   interop..
2f2d0 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62    #       assemb
2f2e0 6c 79 20 69 66 20 69 74 20 77 61 73 20 65 6e 61  ly if it was ena
2f2f0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e  bled for the man
2f300 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  aged assembly...
2f310 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2f320 20 20 20 66 6f 72 65 61 63 68 20 64 65 66 69 6e     foreach defin
2f330 65 43 6f 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20  eConstant [list
2f340 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  \..            C
2f350 48 45 43 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54  HECK_STATE COUNT
2f360 5f 48 41 4e 44 4c 45 20 44 45 42 55 47 20 49 4e  _HANDLE DEBUG IN
2f370 54 45 52 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45  TEROP_CODEC INTE
2f380 52 4f 50 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20  ROP_DEBUG \..
2f390 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50           INTEROP
2f3a0 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54  _EXTENSION_FUNCT
2f3b0 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 46 54 53  IONS INTEROP_FTS
2f3c0 35 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20  5_EXTENSION \..
2f3d0 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
2f3e0 4f 50 5f 49 4e 43 4c 55 44 45 5f 43 45 52 4f 44  OP_INCLUDE_CEROD
2f3f0 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45   INTEROP_INCLUDE
2f400 5f 45 58 54 52 41 20 49 4e 54 45 52 4f 50 5f 49  _EXTRA INTEROP_I
2f410 4e 43 4c 55 44 45 5f 53 45 45 20 5c 0d 0a 20 20  NCLUDE_SEE \..
2f420 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f            INTERO
2f430 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53  P_INCLUDE_ZIPVFS
2f440 20 49 4e 54 45 52 4f 50 5f 4a 53 4f 4e 31 5f 45   INTEROP_JSON1_E
2f450 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20  XTENSION \..
2f460 20 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f          INTEROP_
2f470 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54  LEGACY_CLOSE INT
2f480 45 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50  EROP_LOG INTEROP
2f490 5f 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45  _PERCENTILE_EXTE
2f4a0 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20  NSION \..
2f4b0 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 52 45 47       INTEROP_REG
2f4c0 45 58 50 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e  EXP_EXTENSION IN
2f4d0 54 45 52 4f 50 5f 53 45 53 53 49 4f 4e 5f 45 58  TEROP_SESSION_EX
2f4e0 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20  TENSION \..
2f4f0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 53         INTEROP_S
2f500 48 41 31 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e  HA1_EXTENSION IN
2f510 54 45 52 4f 50 5f 54 45 53 54 5f 45 58 54 45 4e  TEROP_TEST_EXTEN
2f520 53 49 4f 4e 20 5c 0d 0a 20 20 20 20 20 20 20 20  SION \..
2f530 20 20 20 20 49 4e 54 45 52 4f 50 5f 54 4f 54 59      INTEROP_TOTY
2f540 50 45 5f 45 58 54 45 4e 53 49 4f 4e 20 49 4e 54  PE_EXTENSION INT
2f550 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
2f560 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  LE \..
2f570 20 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 35 20    NET_20 NET_35
2f580 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 4e 45  NET_40 NET_45 NE
2f590 54 5f 34 35 31 20 4e 45 54 5f 34 35 32 20 4e 45  T_451 NET_452 NE
2f5a0 54 5f 34 36 20 4e 45 54 5f 34 36 31 20 5c 0d 0a  T_46 NET_461 \..
2f5b0 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f              NET_
2f5c0 34 36 32 20 4e 45 54 5f 34 37 20 4e 45 54 5f 34  462 NET_47 NET_4
2f5d0 37 31 20 4e 45 54 5f 34 37 32 20 4e 45 54 5f 43  71 NET_472 NET_C
2f5e0 4f 4d 50 41 43 54 5f 32 30 20 4e 45 54 5f 53 54  OMPACT_20 NET_ST
2f5f0 41 4e 44 41 52 44 5f 32 30 20 5c 0d 0a 20 20 20  ANDARD_20 \..
2f600 20 20 20 20 20 20 20 20 20 50 4c 41 54 46 4f 52           PLATFOR
2f610 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
2f620 52 4b 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56  RK PRELOAD_NATIV
2f630 45 5f 4c 49 42 52 41 52 59 20 52 45 54 41 52 47  E_LIBRARY RETARG
2f640 45 54 41 42 4c 45 20 5c 0d 0a 20 20 20 20 20 20  ETABLE \..
2f650 20 20 20 20 20 20 53 51 4c 49 54 45 5f 53 54 41        SQLITE_STA
2f660 4e 44 41 52 44 20 54 48 52 4f 57 5f 4f 4e 5f 44  NDARD THROW_ON_D
2f670 49 53 50 4f 53 45 44 20 54 52 41 43 45 20 54 52  ISPOSED TRACE TR
2f680 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 20 5c  ACE_CONNECTION \
2f690 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 52  ..            TR
2f6a0 41 43 45 5f 44 45 54 45 43 54 49 4f 4e 20 54 52  ACE_DETECTION TR
2f6b0 41 43 45 5f 48 41 4e 44 4c 45 20 54 52 41 43 45  ACE_HANDLE TRACE
2f6c0 5f 50 52 45 4c 4f 41 44 20 54 52 41 43 45 5f 53  _PRELOAD TRACE_S
2f6d0 48 41 52 45 44 20 5c 0d 0a 20 20 20 20 20 20 20  HARED \..
2f6e0 20 20 20 20 20 54 52 41 43 45 5f 53 54 41 54 45       TRACE_STATE
2f6f0 4d 45 4e 54 20 54 52 41 43 45 5f 57 41 52 4e 49  MENT TRACE_WARNI
2f700 4e 47 20 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f  NG TRACK_MEMORY_
2f710 42 59 54 45 53 20 5c 0d 0a 20 20 20 20 20 20 20  BYTES \..
2f720 20 20 20 20 20 55 53 45 5f 45 4e 54 49 54 59 5f       USE_ENTITY_
2f730 46 52 41 4d 45 57 4f 52 4b 5f 36 20 55 53 45 5f  FRAMEWORK_6 USE_
2f740 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f  INTEROP_DLL USE_
2f750 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 4f  PREPARE_V2 WINDO
2f760 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  WS] {..
2f770 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
2f780 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74  NOTE: Check if t
2f790 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time
2f7a0 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 64  option is listed
2f7b0 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 0d   in the list of.
2f7c0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20  .          #
2f7d0 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 74     "define const
2f7e0 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 6b  ants" kept track
2f7f0 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 67   of by the manag
2f800 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20  ed assembly...
2f810 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2f820 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
2f830 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e  iteDefineConstan
2f840 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  t $::test_channe 2f850 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e l$defineConstan
2f860 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  t..        }....
2f870 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2f880 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
2f890 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20  pt to determine
2f8a0 69 66 20 76 61 72 69 6f 75 73 20 63 6f 6d 70 69  if various compi
2f8b0 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20  le-time options
2f8c0 6e 65 65 64 65 64 20 66 6f 72 0d 0a 20 20 20 20  needed for..
2f8d0 20 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74      #       test
2f8e0 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 77 65 72   constraints wer
2f8f0 65 20 65 6e 61 62 6c 65 64 20 66 6f 72 20 74 68  e enabled for th
2f900 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  e interop assemb
2f910 6c 79 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 20  ly and/or..
2f920 20 20 20 23 20 20 20 20 20 20 20 66 6f 72 20 74     #       for t
2f930 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
2f940 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 20 20 20  ibrary...
2f950 20 23 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65   #..        fore
2f960 61 63 68 20 63 6f 6d 70 69 6c 65 4f 70 74 69 6f  ach compileOptio
2f970 6e 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20 20 20  n [list \..
2f980 20 20 20 20 20 20 20 43 4f 44 45 43 20 45 58 54         CODEC EXT
2f990 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e 53  ENSION_FUNCTIONS
2f9a0 20 48 41 53 5f 43 4f 44 45 43 20 49 4e 43 4c 55   HAS_CODEC INCLU
2f9b0 44 45 5f 43 45 52 4f 44 20 49 4e 43 4c 55 44 45  DE_CEROD INCLUDE
2f9c0 5f 45 58 54 52 41 20 5c 0d 0a 20 20 20 20 20 20  _EXTRA \..
2f9d0 20 20 20 20 20 20 49 4e 43 4c 55 44 45 5f 53 45        INCLUDE_SE
2f9e0 45 20 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46 53  E INCLUDE_ZIPVFS
2f9f0 20 4a 53 4f 4e 31 5f 45 58 54 45 4e 53 49 4f 4e   JSON1_EXTENSION
2fa00 20 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 4c 4f   LEGACY_CLOSE LO
2fa10 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  G \..
2fa20 20 50 45 52 43 45 4e 54 49 4c 45 5f 45 58 54 45   PERCENTILE_EXTE
2fa30 4e 53 49 4f 4e 20 52 45 47 45 58 50 5f 45 58 54  NSION REGEXP_EXT
2fa40 45 4e 53 49 4f 4e 20 53 45 53 53 49 4f 4e 5f 45  ENSION SESSION_E
2fa50 58 54 45 4e 53 49 4f 4e 20 5c 0d 0a 20 20 20 20  XTENSION \..
2fa60 20 20 20 20 20 20 20 20 53 48 41 31 5f 45 58 54          SHA1_EXT
2fa70 45 4e 53 49 4f 4e 20 54 45 53 54 5f 45 58 54 45  ENSION TEST_EXTE
2fa80 4e 53 49 4f 4e 20 54 4f 54 59 50 45 5f 45 58 54  NSION TOTYPE_EXT
2fa90 45 4e 53 49 4f 4e 20 56 49 52 54 55 41 4c 5f 54  ENSION VIRTUAL_T
2faa0 41 42 4c 45 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ABLE] {..
2fab0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2fac0 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66  # NOTE: Check if
2fad0 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d   the compile-tim
2fae0 65 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74  e option is list
2faf0 65 64 20 69 6e 20 74 68 65 20 6c 69 73 74 0d 0a  ed in the list..
2fb00 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
2fb10 20 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 20    kept track of
2fb20 62 79 20 74 68 65 20 69 6e 74 65 72 6f 70 20 61  by the interop a
2fb30 73 73 65 6d 62 6c 79 20 61 6e 64 2f 6f 72 20 74  ssembly and/or t
2fb40 68 65 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 20  he SQLite..
2fb50 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 72       #       cor
2fb60 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20  e library...
2fb70 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2fb80 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74     checkForSQLit
2fb90 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 24  eCompileOption $2fba0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 ::test_channel$
2fbb0 63 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 0d 0a 20  compileOption..
2fbc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2fbd0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2fbe0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20   NOTE: Check if
2fbf0 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
2fc00 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72 20  SQLite provider
2fc10 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  was compiled wit
2fc20 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  h..        #
2fc30 20 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 61     support for a
2fc40 6e 79 20 65 6e 63 72 79 70 74 65 64 20 64 61 74  ny encrypted dat
2fc50 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 20  abases...
2fc60 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
2fc70 5b 68 61 76 65 53 51 4c 69 74 65 44 65 66 69 6e  [haveSQLiteDefin
2fc80 65 43 6f 6e 73 74 61 6e 74 20 49 4e 54 45 52 4f  eConstant INTERO
2fc90 50 5f 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20  P_CODEC] || \..
2fca0 20 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65             [have
2fcb0 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73  SQLiteDefineCons
2fcc0 74 61 6e 74 20 49 4e 54 45 52 4f 50 5f 49 4e 43  tant INTEROP_INC
2fcd0 4c 55 44 45 5f 53 45 45 5d 7d 20 74 68 65 6e 20  LUDE_SEE]} then
2fce0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
2fcf0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
2fd00 3a 20 4e 6f 77 20 63 68 65 63 6b 20 69 66 20 74  : Now check if t
2fd10 68 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d  he interop assem
2fd20 62 6c 79 20 77 61 73 20 61 6c 73 6f 20 63 6f 6d  bly was also com
2fd30 70 69 6c 65 64 20 77 69 74 68 0d 0a 20 20 20 20  piled with..
2fd40 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 75        #       su
2fd50 70 70 6f 72 74 20 66 6f 72 20 65 6e 63 72 79 70  pport for encryp
2fd60 74 65 64 20 64 61 74 61 62 61 73 65 73 2e 0d 0a  ted databases...
2fd70 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2fd80 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65         if {[have
2fd90 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74  SQLiteCompileOpt
2fda0 69 6f 6e 20 43 4f 44 45 43 5d 20 7c 7c 20 5c 0d  ion CODEC] || \.
2fdb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
2fdc0 68 61 76 65 53 51 4c 69 74 65 43 6f 6d 70 69 6c  haveSQLiteCompil
2fdd0 65 4f 70 74 69 6f 6e 20 49 4e 43 4c 55 44 45 5f  eOption INCLUDE_
2fde0 53 45 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  SEE]} then {..
2fdf0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
2fe00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
2fe10 20 46 69 6e 61 6c 6c 79 2c 20 63 68 65 63 6b 20   Finally, check
2fe20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  if the SQLite co
2fe30 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 63  re library was c
2fe40 6f 6d 70 69 6c 65 64 0d 0a 20 20 20 20 20 20 20  ompiled..
2fe50 20 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74       #       wit
2fe60 68 20 73 75 70 70 6f 72 74 20 66 6f 72 20 65 6e  h support for en
2fe70 63 72 79 70 74 65 64 20 64 61 74 61 62 61 73 65  crypted database
2fe80 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
2fe90 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  #..            i
2fea0 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65 43 6f  f {[haveSQLiteCo
2feb0 6d 70 69 6c 65 4f 70 74 69 6f 6e 20 48 41 53 5f  mpileOption HAS_
2fec0 43 4f 44 45 43 5d 7d 20 74 68 65 6e 20 7b 0d 0a  CODEC]} then {..
2fed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d                #.
2fee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23  .              #
2fef0 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64 64 20   NOTE: Yes, add
2ff00 63 6f 6e 73 74 72 61 69 6e 74 20 66 6f 72 20 75  constraint for u
2ff10 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 73  se by the test s
2ff20 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 20  uite...
2ff30 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
2ff40 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
2ff50 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  int System.Data.
2ff60 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 69 6f  SQLite.Encryptio
2ff70 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  n..            }
2ff80 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
2ff90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
2ffa0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2ffb0 20 4e 4f 54 45 3a 20 54 72 79 20 74 6f 20 73 65   NOTE: Try to se
2ffc0 74 75 70 20 61 6e 20 69 6e 74 65 72 72 75 70 74  tup an interrupt
2ffd0 20 63 61 6c 6c 62 61 63 6b 20 75 73 69 6e 67 20   callback using
2ffe0 74 68 65 20 73 63 72 69 70 74 20 64 65 62 75 67  the script debug
2fff0 67 65 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ger..        #
30000 20 20 20 20 20 74 68 61 74 20 77 69 6c 6c 20 63       that will c
30010 61 6e 63 65 6c 20 61 6c 6c 20 53 51 4c 20 71 75  ancel all SQL qu
30020 65 72 69 65 73 20 69 6e 20 70 72 6f 67 72 65 73  eries in progres
30030 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61  s for all databa
30040 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  se..        #
30050 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20      connections
30060 6b 6e 6f 77 6e 20 74 6f 20 74 68 69 73 20 69 6e  known to this in
30070 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
30080 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
30090 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
300a0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 49 6e 74 65   ::no(sqliteInte
300b0 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 29 5d 7d  rruptCallback)]}
300c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
300d0 20 20 20 73 65 74 75 70 44 62 49 6e 74 65 72 72     setupDbInterr
300e0 75 70 74 43 61 6c 6c 62 61 63 6b 20 24 3a 3a 74  uptCallback $::t 300f0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 3a 3a 74 est_channel$::t
30100 65 73 74 5f 6c 6f 67 0d 0a 20 20 20 20 20 20 20  est_log..
30110 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
30120 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
30130 20 43 68 65 63 6b 20 66 6f 72 20 74 68 65 20 6e   Check for the n
30140 61 74 69 76 65 20 72 75 6e 74 69 6d 65 20 6f 70  ative runtime op
30150 74 69 6f 6e 2c 20 77 68 69 63 68 20 77 6f 75 6c  tion, which woul
30160 64 20 6d 65 61 6e 20 77 65 20 61 72 65 0d 0a 20  d mean we are..
30170 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75         #       u
30180 73 69 6e 67 20 74 68 65 20 6d 69 78 65 64 2d 6d  sing the mixed-m
30190 6f 64 65 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20  ode assembly...
301a0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
301b0 20 20 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d    checkForRuntim
301c0 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f  eOption $::test_ 301d0 63 68 61 6e 6e 65 6c 20 6e 61 74 69 76 65 0d 0a channel native.. 301e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 301f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 30200 63 6b 20 69 66 20 74 68 65 20 74 65 73 74 20 73 ck if the test s 30210 75 69 74 65 20 73 68 6f 75 6c 64 20 63 6f 75 6e uite should coun 30220 74 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 t the number of 30230 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 connections.. 30240 20 20 20 20 20 23 20 20 20 20 20 20 20 22 6f 70 # "op 30250 65 6e 65 64 22 20 61 6e 64 20 22 63 6c 6f 73 65 ened" and "close 30260 64 22 20 66 72 6f 6d 20 74 68 65 20 70 6f 6f 6c d" from the pool 30270 20 77 68 65 6e 20 64 65 74 65 72 6d 69 6e 69 6e when determinin 30280 67 20 69 66 20 61 20 74 65 73 74 0d 0a 20 20 20 g if a test.. 30290 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61 73 # pas 302a0 73 65 64 2e 20 20 44 69 73 61 62 6c 69 6e 67 20 sed. Disabling 302b0 74 68 69 73 20 62 65 68 61 76 69 6f 72 20 69 73 this behavior is 302c0 20 73 6f 6d 65 74 69 6d 65 73 20 6e 65 63 65 73 sometimes neces 302d0 73 61 72 79 20 28 65 2e 67 2e 0d 0a 20 20 20 20 sary (e.g... 302e0 20 20 20 20 23 20 20 20 20 20 20 20 64 75 72 69 # duri 302f0 6e 67 20 74 68 65 20 72 65 6c 65 61 73 65 20 74 ng the release t 30300 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 29 20 esting process) 30310 62 65 63 61 75 73 65 20 74 68 65 72 65 20 61 72 because there ar 30320 65 20 73 65 76 65 72 61 6c 0d 0a 20 20 20 20 20 e several.. 30330 20 20 20 23 20 20 20 20 20 20 20 74 65 73 74 73 # tests 30340 20 74 68 61 74 20 72 65 6c 79 20 6f 6e 20 74 68 that rely on th 30350 65 20 22 6f 70 65 6e 65 64 20 66 72 6f 6d 20 70 e "opened from p 30360 6f 6f 6c 22 20 63 6f 75 6e 74 20 62 65 69 6e 67 ool" count being 30370 20 67 72 65 61 74 65 72 0d 0a 20 20 20 20 20 20 greater.. 30380 20 20 23 20 20 20 20 20 20 20 74 68 61 6e 20 7a # than z 30390 65 72 6f 2e 20 20 54 68 65 73 65 20 74 65 73 74 ero. These test 303a0 73 20 6d 61 79 20 66 61 69 6c 20 64 75 65 20 74 s may fail due t 303b0 6f 20 74 68 65 20 6e 6f 6e 2d 64 65 74 65 72 6d o the non-determ 303c0 69 6e 69 73 74 69 63 0d 0a 20 20 20 20 20 20 20 inistic.. 303d0 20 23 20 20 20 20 20 20 20 62 65 68 61 76 69 6f # behavio 303e0 72 20 6f 66 20 74 68 65 20 43 4c 52 20 47 43 2c r of the CLR GC, 303f0 20 65 76 65 6e 20 77 68 65 6e 20 74 68 65 72 65 even when there 30400 20 69 73 20 6e 6f 20 62 75 67 20 69 6e 20 74 68 is no bug in th 30410 65 20 63 6f 64 65 0d 0a 20 20 20 20 20 20 20 20 e code.. 30420 23 20 20 20 20 20 20 20 62 65 69 6e 67 20 74 65 # being te 30430 73 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 sted... # 30440 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 30450 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 orRuntimeOption 30460 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
30470 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 73 0d 0a 0d 0a  noPoolCounts....
30480 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
30490 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
304a0 20 69 66 20 74 68 65 20 74 65 73 74 20 73 75 69   if the test sui
304b0 74 65 20 73 68 6f 75 6c 64 20 75 73 65 20 73 68  te should use sh
304c0 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 2e  ared-cache mode.
304d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
304e0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 75 6e       checkForRun
304f0 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a 74 65  timeOption $::te 30500 73 74 5f 63 68 61 6e 6e 65 6c 20 73 68 61 72 65 st_channel share 30510 64 43 61 63 68 65 0d 0a 0d 0a 20 20 20 20 20 20 dCache.... 30520 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 30530 4f 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 OTE: Report the 30540 72 65 73 6f 75 72 63 65 20 75 73 61 67 65 20 70 resource usage p 30550 72 69 6f 72 20 74 6f 20 72 75 6e 6e 69 6e 67 20 rior to running 30560 61 6e 79 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 any tests... 30570 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 30580 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f 75 eportSQLiteResou 30590 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 rces$::test_cha
305a0 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 20  nnel....
305b0 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
305c0 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69 73 74  E: Grab the list
305d0 20 6f 66 20 6e 61 74 69 76 65 20 6d 6f 64 75 6c   of native modul
305e0 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  es for the curre
305f0 6e 74 20 70 72 6f 63 65 73 73 20 61 6e 64 0d 0a  nt process and..
30600 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
30610 72 65 70 6f 72 74 20 6f 6e 20 74 68 65 20 53 79  report on the Sy
30620 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
30630 20 72 65 6c 61 74 65 64 20 6f 6e 65 73 2e 0d 0a   related ones...
30640 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
30650 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69     if {[haveSQLi
30660 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d  teObjectCommand]
30670 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
30680 20 20 20 20 73 65 74 20 6d 6f 64 75 6c 65 73 20      set modules
30690 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 5c  [object invoke \
306a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
306b0 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f 73 74 69  System.Diagnosti
306c0 63 73 2e 50 72 6f 63 65 73 73 2e 47 65 74 43 75  cs.Process.GetCu
306d0 72 72 65 6e 74 50 72 6f 63 65 73 73 20 4d 6f 64  rrentProcess Mod
306e0 75 6c 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  ules]....
306f0 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
30700 68 20 2d 61 6c 69 61 73 20 6d 6f 64 75 6c 65 20  h -alias module
30710 24 6d 6f 64 75 6c 65 73 20 7b 0d 0a 20 20 20 20  $modules {.. 30720 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 30730 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 # NOTE: T 30740 68 65 20 6d 6f 64 75 6c 65 20 66 69 6c 65 20 6e he module file n 30750 61 6d 65 20 68 65 72 65 20 6d 75 73 74 20 62 65 ame here must be 30760 20 6e 6f 72 6d 61 6c 69 7a 65 64 2e 0d 0a 20 20 normalized... 30770 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 30780 20 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c set fil 30790 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 6f 72 6d eName [file norm 307a0 61 6c 69 7a 65 20 5b 24 6d 6f 64 75 6c 65 20 46 alize [$module F
307b0 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20  ileName]]..
307c0 20 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e         set fileN
307d0 61 6d 65 4f 6e 6c 79 20 5b 66 69 6c 65 20 74 61  ameOnly [file ta
307e0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  il $fileName]... 307f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 30800 7b 5b 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 {[lsearch -exact 30810 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 -nocase -- \.. 30820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 30830 67 65 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 getNativeLibrary 30840 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24 FileNamesOnly]$
30850 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d  fileNameOnly] !=
30860 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20   -1} then {..
30870 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
30880 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 30890 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 308a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 308b0 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f "---- found lo 308c0 61 64 65 64 20 53 51 4c 69 74 65 20 6e 61 74 69 aded SQLite nati 308d0 76 65 20 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c ve library modul 308e0 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 e: " \.. 308f0 20 20 20 20 20 20 20 20 20 20 24 66 69 6c 65 4e$fileN
30900 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  ame \n]..
30910 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b       } elseif {[
30920 6c 73 65 61 72 63 68 20 2d 65 78 61 63 74 20 2d  lsearch -exact -
30930 6e 6f 63 61 73 65 20 2d 2d 20 5c 0d 0a 20 20 20  nocase -- \..
30940 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
30950 74 49 6e 74 65 72 6f 70 41 73 73 65 6d 62 6c 79  tInteropAssembly
30960 46 69 6c 65 4e 61 6d 65 73 4f 6e 6c 79 5d 20 24  FileNamesOnly] $30970 66 69 6c 65 4e 61 6d 65 4f 6e 6c 79 5d 20 21 3d fileNameOnly] != 30980 20 2d 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 -1} then {.. 30990 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 309a0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
309b0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
309c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
309d0 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f    "---- found lo
309e0 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74 65  aded SQLite inte
309f0 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f 64  rop assembly mod
30a00 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ule: " \..
30a10 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69 6c              $fil 30a20 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 20 eName \n].. 30a30 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 30a40 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 30a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 .... catc 30a60 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 h {.. t 30a70 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
30a80 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
30a90 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70        "---- comp
30aa0 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
30ab0 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65   for SQLite core
30ac0 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d   library... "...
30ad0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
30ae0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
30af0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
30b00 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
30b10 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
30b20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
30b30 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
30b40 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65  e3 SQLiteCompile
30b50 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 20  Options..
30b60 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74 69     } compileOpti
30b70 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ons] == 0} then
30b80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
30b90 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 30ba0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 30bb0 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 [formatList [ls 30bc0 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ort \.. 30bd0 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65 4f$compileO
30be0 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d 20  ptions] <none>]
30bf0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  \n]..          }
30c00 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
30c10 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 30c20 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f st_channel unkno 30c30 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 wn\n.. 30c40 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 30c50 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d catch {. 30c60 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 30c70 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
30c80 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
30c90 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65 2d    "---- compile-
30ca0 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f 72  time options for
30cb0 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20   SQLite interop
30cc0 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a 0d  assembly... "...
30cd0 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b  .          if {[
30ce0 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..
30cf0 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f       object invo
30d00 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75  ke -flags +NonPu
30d10 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20  blic \..
30d20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
30d30 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74  ata.SQLite.SQLit
30d40 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c  e3 InteropCompil
30d50 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  eOptions..
30d60 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74      } compileOpt
30d70 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ions] == 0} then
30d80 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
30d90 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 30da0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 30db0 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 30dc0 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 30dd0 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65$compile
30de0 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d  Options] <none>]
30df0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
30e00 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
30e10 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 30e20 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 30e30 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 30e40 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 30e50 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 30e60 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 # NOTE: Show 30e70 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73 74 the active test 30e80 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a 20 constraints... 30e90 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 30ea0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
30eb0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
30ec0 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74 72  rgs "---- constr
30ed0 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20 20  aints: " \..
30ee0 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74 4c          [formatL
30ef0 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74 43  ist [lsort [getC
30f00 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e 6f  onstraints]] <no
30f10 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20  ne>] \n]....
30f20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
30f30 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65 20   NOTE: Save the
30f40 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73  test constraints
30f50 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72 65   for use by thre
30f60 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20 74  ads created in t
30f70 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20  his..        #
30f80 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f 6e       application
30f90 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20 69   domain.  This i
30fa0 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63 61  s necessary beca
30fb0 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67 6c  use all the Eagl
30fc0 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
30fd0 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78 74     "test context
30fe0 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69 73  " information is
30ff0 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20 20   per-thread...
31000 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
31010 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
31020 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72  ts ::test_constr
31030 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a  aints]} then {..
31040 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a            set ::
31050 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74 73  test_constraints
31060 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73 28   $::eagle_tests( 31070 43 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 20 Constraints).. 31080 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 31090 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 310a0 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 NOTE: Load the " 310b0 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e 74 after-constraint 310c0 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 s" custom per-us 310d0 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f er and/or per-ho 310e0 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 st.. # 310f0 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e 67 test setting 31100 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 s now... 31110 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 76 #.. uplev 31120 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 el 1 [list loadS 31130 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e 67 QLiteTestSetting 31140 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
31150 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20 20  l .after]....
31160 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
31170 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73  # NOTE: If neces
31180 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68 61  sary, enable sha
31190 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
311a0 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
311b0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
311c0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
311d0 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
311e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
311f0 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
31200 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 31210 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d true.. }. 31220 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 31230 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 # NOTE: Sh 31240 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 74 ow when our test 31250 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 6e s actually began 31260 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 (now)... 31270 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 31280 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
31290 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
312a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
312b0 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  -- System.Data.S
312c0 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67 61  QLite tests bega
312d0 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20 20  n at " \..
312e0 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72        [clock for
312f0 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e  mat [clock secon
31300 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ds]] \n]..
31310 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
31320 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54   proc runSQLiteT
31330 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75 65  estFilesPrologue
31340 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a   {} {..      #..
31350 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
31360 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63  ip running our c
31370 75 73 74 6f 6d 20 66 69 6c 65 73 20 70 72 6f 6c  ustom files prol
31380 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e  ogue if the main
31390 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20   one has been..
313a0 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69       #       ski
313b0 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  pped...      #..
313c0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
313d0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 70 72 6f   exists ::no(pro
313e0 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
313f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
31400 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20  plevel 1 {..
31410 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
31420 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74 75 70     # NOTE: Setup
31430 20 74 68 65 20 76 61 72 69 61 62 6c 65 73 20 74   the variables t
31440 68 61 74 20 72 65 66 65 72 20 74 6f 20 74 68 65  hat refer to the
31450 20 76 61 72 69 6f 75 73 20 6e 6f 6e 2d 64 61 74   various non-dat
31460 61 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20  a files..
31470 20 20 20 23 20 20 20 20 20 20 20 72 65 71 75 69     #       requi
31480 72 65 64 20 62 79 20 74 68 65 20 74 65 73 74 73  red by the tests
31490 20 69 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a   in this file...
314a0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
314b0 20 20 20 20 20 20 20 73 65 74 20 65 6e 74 69 74         set entit
314c0 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c  yFrameworkDllFil
314d0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
314e0 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
314f0 4e 61 6d 65 20 45 6e 74 69 74 79 46 72 61 6d 65  Name EntityFrame
31500 77 6f 72 6b 2e 64 6c 6c 20 74 72 75 65 5d 0d 0a  work.dll true]..
31510 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
31520 69 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65  installerExeFile
31530 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31540 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
31550 61 6d 65 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78  ame Installer.ex
31560 65 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20  e true]....
31570 20 20 20 20 20 73 65 74 20 73 71 6c 69 74 65 44       set sqliteD
31580 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 5c  esignerDllFile \
31590 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
315a0 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
315b0 65 20 53 51 4c 69 74 65 2e 44 65 73 69 67 6e 65  e SQLite.Designe
315c0 72 2e 64 6c 6c 20 74 72 75 65 5d 0d 0a 0d 0a 20  r.dll true]....
315d0 20 20 20 20 20 20 20 20 20 73 65 74 20 73 79 73           set sys
315e0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c  temDataSQLiteDll
315f0 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  File \..
31600 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46        [getBuildF
31610 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44  ileName System.D
31620 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 74  ata.SQLite.dll t
31630 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue]....
31640 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74 61    set systemData
31650 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c  SQLiteLinqDllFil
31660 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
31670 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65     [getBuildFile
31680 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61  Name System.Data
31690 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
316a0 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....
316b0 20 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61      set systemDa
316c0 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69  taSQLiteEf6DllFi
316d0 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
316e0 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c      [getBuildFil
316f0 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74  eName System.Dat
31700 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c 6c  a.SQLite.EF6.dll
31710 20 74 72 75 65 5d 0d 0a 0d 0a 20 20 20 20 20 20   true]....
31720 20 20 20 20 73 65 74 20 74 65 73 74 45 78 65 46      set testExeF
31730 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ile [getBuildFil
31740 65 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 20 74  eName test.exe t
31750 72 75 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  rue]..
31760 73 65 74 20 74 65 73 74 4c 69 6e 71 45 78 65 46  set testLinqExeF
31770 69 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c  ile [getBuildFil
31780 65 4e 61 6d 65 20 74 65 73 74 6c 69 6e 71 2e 65  eName testlinq.e
31790 78 65 20 74 72 75 65 5d 0d 0a 20 20 20 20 20 20  xe true]..
317a0 20 20 20 20 73 65 74 20 74 65 73 74 45 66 36 45      set testEf6E
317b0 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c 64  xeFile [getBuild
317c0 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 65 66 36  FileName testef6
317d0 2e 65 78 65 20 74 72 75 65 5d 0d 0a 0d 0a 20 20  .exe true]....
317e0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
317f0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 74       # NOTE: Set
31800 75 70 20 74 68 65 20 76 61 72 69 61 62 6c 65 73  up the variables
31810 20 74 68 61 74 20 72 65 66 65 72 20 74 6f 20 74   that refer to t
31820 68 65 20 76 61 72 69 6f 75 73 20 64 61 74 61 20  he various data
31830 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 20 20 20  files..
31840 20 23 20 20 20 20 20 20 20 72 65 71 75 69 72 65   #       require
31850 64 20 62 79 20 74 68 65 20 74 65 73 74 73 20 69  d by the tests i
31860 6e 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a 20 20  n this file...
31870 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
31880 20 20 20 20 20 73 65 74 20 74 65 73 74 4c 69 6e       set testLin
31890 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65 20 6e  qOutFile [file n
318a0 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
318b0 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
318c0 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
318d0 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65  TestDataPath] te
318e0 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a  stlinq.out]]....
318f0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f            set no
31900 72 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20  rthwindEfDbFile
31910 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
31920 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
31930 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69               [fi
31940 6c 65 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65  le dirname [file
31950 20 64 69 72 6e 61 6d 65 20 5b 67 65 74 53 51 4c   dirname [getSQL
31960 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
31970 5d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ]] \..
31980 20 20 20 20 74 65 73 74 6c 69 6e 71 20 6e 6f 72      testlinq nor
31990 74 68 77 69 6e 64 45 46 2e 64 62 5d 5d 0d 0a 0d  thwindEF.db]]...
319a0 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6e  .          set n
319b0 6f 6e 57 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c  onWalDbFile [fil
319c0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
319d0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
319e0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
319f0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
31a00 20 6e 6f 6e 57 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a   nonWal.db]]....
31a10 20 20 20 20 20 20 20 20 20 20 73 65 74 20 77 61            set wa
31a20 6c 44 62 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  lDbFile [file na
31a30 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
31a40 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
31a50 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
31a60 65 73 74 44 61 74 61 50 61 74 68 5d 20 77 61 6c  estDataPath] wal
31a70 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .db]]....
31a80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
31a90 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69  # NOTE: The vari
31aa0 6f 75 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e  ous install/unin
31ab0 73 74 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20  stall log files
31ac0 75 73 65 64 20 74 6f 20 74 65 73 74 20 74 68 65  used to test the
31ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
31ae0 20 20 20 20 64 65 73 69 67 6e 2d 74 69 6d 65 20      design-time
31af0 63 6f 6d 70 6f 6e 65 6e 74 20 69 6e 73 74 61 6c  component instal
31b00 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ler...
31b10 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
31b20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30   testInstallVs20
31b30 30 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20  05LogFile [file
31b40 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65  nativename [file
31b50 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20   join \..
31b60 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
31b70 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 49  eTestDataPath] I
31b80 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
31b90 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2005.log]]....
31ba0 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
31bb0 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67  InstallVs2008Log
31bc0 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
31bd0 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
31be0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
31bf0 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
31c00 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
31c10 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30 38 2e  ler_Test_Vs2008.
31c20 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
31c30 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
31c40 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20  llVs2010LogFile
31c50 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
31c60 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
31c70 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65               [ge
31c80 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
31c90 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
31ca0 65 73 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d  est_Vs2010.log]]
31cb0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
31cc0 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32  t testInstallVs2
31cd0 30 31 32 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65  012LogFile [file
31ce0 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
31cf0 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
31d00 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
31d10 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
31d20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  Installer_Test_V
31d30 73 32 30 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2012.log]]....
31d40 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
31d50 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f  tInstallVs2013Lo
31d60 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
31d70 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
31d80 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
31d90 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
31da0 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61  tDataPath] Insta
31db0 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 33  ller_Test_Vs2013
31dc0 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
31dd0 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74      set testInst
31de0 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
31df0 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d   [file nativenam
31e00 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a  e [file join \..
31e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67                [g
31e20 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
31e30 50 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f  Path] Installer_
31e40 54 65 73 74 5f 56 73 32 30 31 35 2e 6c 6f 67 5d  Test_Vs2015.log]
31e50 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ]....          s
31e60 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73  et testInstallVs
31e70 32 30 31 37 4c 6f 67 46 69 6c 65 20 5b 66 69 6c  2017LogFile [fil
31e80 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
31e90 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
31ea0 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
31eb0 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
31ec0 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f   Installer_Test_
31ed0 56 73 32 30 31 37 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2017.log]]....
31ee0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65            set te
31ef0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30  stUninstallVs200
31f00 35 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  5LogFile [file n
31f10 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
31f20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
31f30 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
31f40 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e  TestDataPath] Un
31f50 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56  installer_Test_V
31f60 73 32 30 30 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20  s2005.log]]....
31f70 20 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73           set tes
31f80 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 38  tUninstallVs2008
31f90 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
31fa0 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
31fb0 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
31fc0 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54       [getSQLiteT
31fd0 65 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69  estDataPath] Uni
31fe0 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73  nstaller_Test_Vs
31ff0 32 30 30 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20  2008.log]]....
32000 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
32010 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c  UninstallVs2010L
32020 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
32030 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
32040 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
32050 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
32060 73 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e  stDataPath] Unin
32070 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32  staller_Test_Vs2
32080 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20  010.log]]....
32090 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55         set testU
320a0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f  ninstallVs2012Lo
320b0 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69  gFile [file nati
320c0 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69  vename [file joi
320d0 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
320e0 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
320f0 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
32100 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
32110 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  12.log]]....
32120 20 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e        set testUn
32130 69 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67  installVs2013Log
32140 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76  File [file nativ
32150 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e  ename [file join
32160 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
32170 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
32180 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
32190 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31  aller_Test_Vs201
321a0 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  3.log]]....
321b0 20 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69       set testUni
321c0 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46  nstallVs2015LogF
321d0 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
321e0 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
321f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
32200 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44   [getSQLiteTestD
32210 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61  ataPath] Uninsta
32220 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 35  ller_Test_Vs2015
32230 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20  .log]]....
32240 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
32250 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69  stallVs2017LogFi
32260 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
32270 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
32280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
32290 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61  [getSQLiteTestDa
322a0 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c  taPath] Uninstal
322b0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 37 2e  ler_Test_Vs2017.
322c0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
322d0 20 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23     #############
322e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
322f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32300 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
32310 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20  ########....
32320 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
32330 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 68 65   exists ::no(che
32340 63 6b 46 6f 72 53 71 6c 69 74 65 46 69 6c 65 73  ckForSqliteFiles
32350 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  )]} then {..
32360 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
32370 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
32380 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
32390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
323a0 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 65 6e    [file tail $en 323b0 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 323c0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 323d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 . c 323e0 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
323f0 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74 69 74  t_channel $entit 32400 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c yFrameworkDllFil 32410 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 32420 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 32430 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 32440 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 32450 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 32460 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 32470 74 61 69 6c 20 24 69 6e 73 74 61 6c 6c 65 72 45 tail$installerE
32480 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20  xeFile]]]} then
32490 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
324a0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74   checkForFile $t 324b0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69 6e 73 est_channel$ins
324c0 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 49 6e  tallerExeFile In
324d0 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20 20 20  staller.exe..
324e0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
324f0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
32500 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
32510 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
32520 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
32530 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $32540 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c sqliteDesignerDl 32550 6c 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b lFile]]]} then { 32560 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 32570 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
32580 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71 6c 69  st_channel $sqli 32590 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c teDesignerDllFil 325a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 325b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 325c0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 325d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 325e0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 325f0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 32600 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61 tail$systemData
32610 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 5d 5d 5d  SQLiteDllFile]]]
32620 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
32630 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72          checkFor
32640 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e  File $test_chann 32650 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 el$systemDataSQ
32660 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20 20 20  LiteDllFile..
32670 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
32680 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
32690 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
326a0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
326b0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
326c0 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24      [file tail $326d0 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65 systemDataSQLite 326e0 4c 69 6e 71 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 LinqDllFile]]]} 326f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 32700 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 checkForFi 32710 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c le$test_channel
32720 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69   $systemDataSQLi 32730 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d 0a 20 teLinqDllFile.. 32740 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 32750 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 32760 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 32770 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 32780 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 32790 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 327a0 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69$systemDataSQLi
327b0 74 65 45 66 36 44 6c 6c 46 69 6c 65 5d 5d 5d 7d  teEf6DllFile]]]}
327c0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
327d0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
327e0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 327f0 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51 4c l$systemDataSQL
32800 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d 0a 20  iteEf6DllFile..
32810 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32820 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
32830 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
32840 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
32850 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
32860 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
32870 20 24 74 65 73 74 45 78 65 46 69 6c 65 5d 5d 5d   $testExeFile]]] 32880 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 32890 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 328a0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
328b0 65 6c 20 24 74 65 73 74 45 78 65 46 69 6c 65 20  el $testExeFile 328c0 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 20 20 test.exe.. 328d0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 328e0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 if {![hav 328f0 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 32900 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d endArgs file_ \. 32910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 32920 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 [file tail$tes
32930 74 4c 69 6e 71 45 78 65 46 69 6c 65 5d 5d 5d 7d  tLinqExeFile]]]}
32940 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
32950 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
32960 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 32970 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 l$testLinqExeFi
32980 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 0d  le testlinq.exe.
32990 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
329a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
329b0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
329c0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
329d0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
329e0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
329f0 69 6c 20 24 74 65 73 74 45 66 36 45 78 65 46 69  il $testEf6ExeFi 32a00 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 le]]]} then {.. 32a10 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65 che 32a20 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f ckForFile$test_
32a30 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45 66 36  channel $testEf6 32a40 45 78 65 46 69 6c 65 20 74 65 73 74 65 66 36 2e ExeFile testef6. 32a50 65 78 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 exe.. 32a60 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... 32a70 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 32a80 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 32a90 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 32aa0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 32ab0 65 20 74 61 69 6c 20 24 74 65 73 74 4c 69 6e 71 e tail$testLinq
32ac0 4f 75 74 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e  OutFile]]]} then
32ad0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
32ae0 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24    checkForFile $32af0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 test_channel$te
32b00 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d 0a 20  stLinqOutFile..
32b10 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
32b20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
32b30 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74  ![haveConstraint
32b40 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c   [appendArgs fil
32b50 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e_ \..
32b60 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c        [file tail
32b70 20 24 6e 6f 72 74 68 77 69 6e 64 45 66 44 62 46   $northwindEfDbF 32b80 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 32b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 ch 32ba0 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 eckForFile$test
32bb0 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74 68 77  _channel $northw 32bc0 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 20 20 indEfDbFile.. 32bd0 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 32be0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b if {![ 32bf0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 32c00 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 32c10 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 32c20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
32c30 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 5d 5d 5d 7d  nonWalDbFile]]]}
32c40 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
32c50 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
32c60 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 32c70 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c 65 0d l$nonWalDbFile.
32c80 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
32c90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
32ca0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69   {![haveConstrai
32cb0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66  nt [appendArgs f
32cc0 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20  ile_ \..
32cd0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
32ce0 69 6c 20 24 77 61 6c 44 62 46 69 6c 65 5d 5d 5d  il $walDbFile]]] 32cf0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 32d00 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 32d10 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
32d20 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d 0a 20  el $walDbFile.. 32d30 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 32d40 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 32d50 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 32d60 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 32d70 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 32d80 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 32d90 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
32da0 30 30 35 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  005LogFile]]]} t
32db0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
32dc0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
32dd0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 32de0 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
32df0 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  05LogFile..
32e00 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
32e10 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
32e20 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
32e30 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
32e40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
32e50 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 32e60 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c stInstallVs2008L 32e70 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 32e80 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 32e90 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
32ea0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 32eb0 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 4c 6f tInstallVs2008Lo 32ec0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 32ed0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 32ee0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 32ef0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 32f00 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 32f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 32f20 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
32f30 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69  stallVs2010LogFi
32f40 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
32f50 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
32f60 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 32f70 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 channel$testIns
32f80 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c  tallVs2010LogFil
32f90 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
32fa0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
32fb0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
32fc0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
32fd0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
32fe0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
32ff0 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c  tail $testInstal 33000 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d lVs2012LogFile]] 33010 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 33020 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f checkFo 33030 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e rFile$test_chan
33040 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c  nel $testInstall 33050 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 Vs2012LogFile.. 33060 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 33070 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { 33080 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 33090 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 330a0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 330b0 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c [file tail 330c0 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32$testInstallVs2
330d0 30 31 33 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74  013LogFile]]]} t
330e0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
330f0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
33100 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 33110 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30$testInstallVs20
33120 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20  13LogFile..
33130 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
33140 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
33150 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
33160 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
33170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
33180 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65    [file tail $te 33190 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c stInstallVs2015L 331a0 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 ogFile]]]} then 331b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 331c0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
331d0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73  est_channel $tes 331e0 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 35 4c 6f tInstallVs2015Lo 331f0 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 gFile.. 33200 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 33210 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 33220 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 33230 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 33240 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 [f 33250 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e ile tail$testIn
33260 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69  stallVs2017LogFi
33270 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
33280 20 20 20 20 20 20 20 20 20 20 20 20 20 63 68 65               che
33290 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f  ckForFile $test_ 332a0 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 channel$testIns
332b0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c  tallVs2017LogFil
332c0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
332d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
332e0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
332f0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
33300 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
33310 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
33320 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 33330 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 33340 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 33350 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 33360 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
33370 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 33380 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c tallVs2005LogFil 33390 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 333a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 333b0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 333c0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 333d0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 333e0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 333f0 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 tail$testUninst
33400 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65  allVs2008LogFile
33410 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
33420 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
33430 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 33440 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 annel$testUnins
33450 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c  tallVs2008LogFil
33460 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
33470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
33480 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
33490 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
334a0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
334b0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
334c0 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 334d0 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 334e0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 334f0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 33500 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
33510 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 33520 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 33530 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 33540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 33550 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 33560 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 33570 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 33580 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 33590 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 tail$testUninst
335a0 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65  allVs2012LogFile
335b0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
335c0 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
335d0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 335e0 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 annel$testUnins
335f0 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c  tallVs2012LogFil
33600 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
33610 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
33620 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
33630 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
33640 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
33650 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
33660 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 33670 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 allVs2013LogFile 33680 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 33690 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 336a0 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
336b0 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 336c0 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c tallVs2013LogFil 336d0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 336e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 336f0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 if {![haveConstr 33700 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs 33710 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 file_ \.. 33720 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 33730 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 tail$testUninst
33740 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65  allVs2015LogFile
33750 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
33760 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b             check
33770 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68  ForFile $test_ch 33780 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73 annel$testUnins
33790 74 61 6c 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c  tallVs2015LogFil
337a0 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  e..            }
337b0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
337c0 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72  if {![haveConstr
337d0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
337e0 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20   file_ \..
337f0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
33800 74 61 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74  tail $testUninst 33810 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c 65 allVs2017LogFile 33820 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ]]]} then {.. 33830 20 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b check 33840 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
33850 61 6e 6e 65 6c 20 24 74 65 73 74 55 6e 69 6e 73  annel $testUnins 33860 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c tallVs2017LogFil 33870 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d e.. } 33880 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 33890 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 338a0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 338b0 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 proc runSQLiteT 338c0 65 73 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 estFilesEpilogue 338d0 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a {} {.. #.. 338e0 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b # NOTE: Sk 338f0 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 ip running our c 33900 75 73 74 6f 6d 20 66 69 6c 65 73 20 65 70 69 6c ustom files epil 33910 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 6e ogue if the main 33920 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a 20 one has been.. 33930 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 # ski 33940 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a pped... #.. 33950 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 33960 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69 exists ::no(epi 33970 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74 logue.eagle)]} t 33980 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75 hen {.. u 33990 70 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 plevel 1 {.. 339a0 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 unset -noc 339b0 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 20 20 omplain \.. 339c0 20 20 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 testUni 339d0 6e 73 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 nstallVs2017LogF 339e0 69 6c 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c ile testUninstal 339f0 6c 56 73 32 30 31 35 4c 6f 67 46 69 6c 65 20 5c lVs2015LogFile \ 33a00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 33a10 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 testUninstallVs2 33a20 30 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 55 013LogFile testU 33a30 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f ninstallVs2012Lo 33a40 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 gFile \.. 33a50 20 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 testUnins 33a60 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c tallVs2010LogFil 33a70 65 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 e testUninstallV 33a80 73 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a s2008LogFile \.. 33a90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 65 te 33aa0 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 stUninstallVs200 33ab0 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 5LogFile testIns 33ac0 74 61 6c 6c 56 73 32 30 31 37 4c 6f 67 46 69 6c tallVs2017LogFil 33ad0 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 33ae0 20 20 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 testInstallVs 33af0 32 30 31 35 4c 6f 67 46 69 6c 65 20 74 65 73 74 2015LogFile test 33b00 49 6e 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 InstallVs2013Log 33b10 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 File \.. 33b20 20 20 20 20 20 20 74 65 73 74 49 6e 73 74 61 6c testInstal 33b30 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 20 74 lVs2012LogFile t 33b40 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 30 estInstallVs2010 33b50 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 LogFile \.. 33b60 20 20 20 20 20 20 20 20 20 74 65 73 74 49 6e 73 testIns 33b70 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c tallVs2008LogFil 33b80 65 20 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 e testInstallVs2 33b90 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 0d 0a 20 20 005LogFile.... 33ba0 20 20 20 20 20 20 20 20 75 6e 73 65 74 20 2d 6e unset -n 33bb0 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d 0a 20 20 20 ocomplain \.. 33bc0 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 74 68 north 33bd0 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 65 73 windEfDbFile tes 33be0 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c 0d 0a tLinqOutFile \.. 33bf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 61 wa 33c00 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 lDbFile nonWalDb 33c10 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 33c20 20 20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c unset -nocompl 33c30 61 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ain \.. 33c40 20 20 20 20 20 74 65 73 74 45 66 36 45 78 65 46 testEf6ExeF 33c50 69 6c 65 20 74 65 73 74 4c 69 6e 71 45 78 65 46 ile testLinqExeF 33c60 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ile \.. 33c70 20 20 20 20 20 74 65 73 74 45 78 65 46 69 6c 65 testExeFile 33c80 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 33c90 65 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 eEf6DllFile \.. 33ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 79 73 sys 33cb0 74 65 6d 44 61 74 61 53 51 4c 69 74 65 4c 69 6e temDataSQLiteLin 33cc0 71 44 6c 6c 46 69 6c 65 20 73 79 73 74 65 6d 44 qDllFile systemD 33cd0 61 74 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 ataSQLiteDllFile 33ce0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 33cf0 20 20 73 71 6c 69 74 65 44 65 73 69 67 6e 65 72 sqliteDesigner 33d00 44 6c 6c 46 69 6c 65 20 69 6e 73 74 61 6c 6c 65 DllFile installe 33d10 72 45 78 65 46 69 6c 65 20 5c 0d 0a 20 20 20 20 rExeFile \.. 33d20 20 20 20 20 20 20 20 20 20 20 65 6e 74 69 74 79 entity 33d30 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 69 6c 65 FrameworkDllFile 33d40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 33d50 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... 33d60 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 proc runSQLi 33d70 74 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b teTestEpilogue { 33d80 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 33d90 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 # NOTE: Skip 33da0 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 running our cus 33db0 74 6f 6d 20 65 70 69 6c 6f 67 75 65 20 69 66 20 tom epilogue if 33dc0 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 the main one has 33dd0 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 been.. # 33de0 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 skipped... 33df0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 33e00 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 33e10 3a 3a 6e 6f 28 65 70 69 6c 6f 67 75 65 2e 65 61 ::no(epilogue.ea 33e20 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 gle)]} then {.. 33e30 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 33e40 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 77 # NOTE: Show w 33e50 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 63 hen our tests ac 33e60 74 75 61 6c 6c 79 20 65 6e 64 65 64 20 28 6e 6f tually ended (no 33e70 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a w)... #.. 33e80 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
33e90 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
33ea0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
33eb0 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 53           "---- S
33ec0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
33ed0 65 20 74 65 73 74 73 20 65 6e 64 65 64 20 61 74  e tests ended at
33ee0 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
33ef0 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74 20    [clock format
33f00 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 5d  [clock seconds]]
33f10 20 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20   \n]....
33f20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
33f30 45 3a 20 4c 6f 61 64 20 74 68 65 20 22 65 70 69  E: Load the "epi
33f40 6c 6f 67 75 65 22 20 63 75 73 74 6f 6d 20 70 65  logue" custom pe
33f50 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
33f60 72 2d 68 6f 73 74 20 74 65 73 74 0d 0a 20 20 20  r-host test..
33f70 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74       #       set
33f80 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20  tings now...
33f90 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75      #..        u
33fa0 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c  plevel 1 [list l
33fb0 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
33fc0 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68  tings $::test_ch 33fd0 61 6e 6e 65 6c 20 2e 65 70 69 6c 6f 67 75 65 5d annel .epilogue] 33fe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 33ff0 20 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a # BUGFIX: 34000 20 42 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 Before checking 34010 20 74 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 the final resou 34020 72 63 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 rces in use by S 34030 51 4c 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 QLite, make.. 34040 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 73 # s 34050 75 72 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 ure both of the 34060 50 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 PRAGMA related d 34070 69 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 irectory names a 34080 72 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 re freed... 34090 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 #.. ch 340a0 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 eckForSQLiteDire 340b0 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f ctories$::test_
340c0 63 68 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a  channel true....
340d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
340e0 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20     # NOTE: Also
340f0 72 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75  report the resou
34100 72 63 65 20 75 73 61 67 65 20 61 66 74 65 72 20  rce usage after
34110 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74  running the test
34120 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  s...        #..
34130 20 20 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c         reportSQL
34140 69 74 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a  iteResources $:: 34150 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a test_channel.... 34160 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 34170 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 # NOTE: Repor 34180 74 20 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 t the critical h 34190 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 andle counts aft 341a0 65 72 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 er running the t 341b0 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ests... # 341c0 0d 0a 20 20 20 20 20 20 20 20 67 65 74 53 51 4c .. getSQL 341d0 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 iteHandleCounts 341e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d$::test_channel.
341f0 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
34200 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
34210 20 6e 65 63 65 73 73 61 72 79 2c 20 64 69 73 61   necessary, disa
34220 62 6c 65 20 73 68 61 72 65 64 2d 63 61 63 68 65  ble shared-cache
34230 20 6d 6f 64 65 20 6e 6f 77 2e 0d 0a 20 20 20 20   mode now...
34240 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69      #..        i
34250 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70  f {[hasRuntimeOp
34260 74 69 6f 6e 20 73 68 61 72 65 64 43 61 63 68 65  tion sharedCache
34270 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
34280 20 20 20 20 20 65 6e 61 62 6c 65 53 68 61 72 65       enableShare
34290 64 43 61 63 68 65 20 24 3a 3a 74 65 73 74 5f 63  dCache \$::test_c
342a0 68 61 6e 6e 65 6c 20 66 61 6c 73 65 0d 0a 20 20  hannel false..
342b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
342c0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
342d0 4e 4f 54 45 3a 20 52 65 73 74 6f 72 65 20 74 68  NOTE: Restore th
342e0 65 20 70 72 65 76 69 6f 75 73 6c 79 20 73 61 76  e previously sav
342f0 65 64 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  ed environment v
34300 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 77 65  ariables that we
34310 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
34320 20 20 63 68 61 6e 67 65 64 20 66 6f 72 20 74 68    changed for th
34330 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
34340 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
34350 20 20 72 65 73 74 6f 72 65 45 6e 76 69 72 6f 6e    restoreEnviron
34360 6d 65 6e 74 56 61 72 69 61 62 6c 65 73 20 5c 0d  mentVariables \.
34370 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 6c 69  .            [li
34380 73 74 20 49 6e 69 74 69 61 6c 69 7a 65 5f 53 51  st Initialize_SQ
34390 4c 69 74 65 4c 6f 67 5d 20 3a 3a 74 65 73 74 53  LiteLog] ::testS
343a0 75 69 74 65 53 61 76 65 64 45 6e 76 0d 0a 20 20  uiteSavedEnv..
343b0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
343c0 0a 20 20 20 20 23 23 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 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
34420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34430 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f 4e  ### END Eagle ON
34440 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23 23  LY #############
34450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34460 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
34470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34480 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
34490 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
344a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
344b0 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d 0a  ##..  }....  #..
344c0 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74    # NOTE: Save t
344d0 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64  he name of the d
344e0 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e  irectory contain
344f0 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d 0a  ing this file...
34500 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e 66    #..  if {![inf
34510 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e 5f  o exists common_
34520 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e  directory]} then
34530 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d   {..    set comm
34540 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66 69  on_directory [fi
34550 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66 6f  le dirname [info
34560 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d 0a   script]]..  }..
34570 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a  ..  #..  # NOTE:
34580 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79 73   Provide the Sys
34590 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20  tem.Data.SQLite
345a0 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f 20  test package to
345b0 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e  the interpreter.
345c0 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67 65  ..  #..  package
345d0 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d 2e   provide System.
345e0 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73 74  Data.SQLite.Test
345f0 20 31 2e 30 0d 0a 7d 0d 0a                        1.0..}..