System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 19d3380cac8688e0c3ceca16f4f7c3820a2c7e3c:

• File lib/System.Data.SQLite/common.eagle — part of check-in [8728586263] at 2015-06-05 22:04:42 on branch trunk — Refactor how the test suite infrastructure package is handled. (user: mistachkin size: 141773)

0000: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0010: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0020: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0030: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0040: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d  ###############.
0050: 0a 23 0d 0a 23 20 63 6f 6d 6d 6f 6e 2e 65 61 67  .#..# common.eag
0060: 6c 65 20 2d 2d 0d 0a 23 0d 0a 23 20 57 72 69 74  le --..#..# Writ
0070: 74 65 6e 20 62 79 20 4a 6f 65 20 4d 69 73 74 61  ten by Joe Mista
0080: 63 68 6b 69 6e 2e 0d 0a 23 20 52 65 6c 65 61 73  chkin...# Releas
0090: 65 64 20 74 6f 20 74 68 65 20 70 75 62 6c 69 63  ed to the public
00a0: 20 64 6f 6d 61 69 6e 2c 20 75 73 65 20 61 74 20   domain, use at
00b0: 79 6f 75 72 20 6f 77 6e 20 72 69 73 6b 21 0d 0a  your own risk!..
00c0: 23 0d 0a 23 23 23 23 23 23 23 23 23 23 23 23 23  #..#############
00d0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
00f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0100: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0110: 23 23 0d 0a 0d 0a 23 0d 0a 23 20 4e 4f 54 45 3a  ##....#..# NOTE:
0120: 20 55 73 65 20 6f 75 72 20 6f 77 6e 20 6e 61 6d   Use our own nam
0130: 65 73 70 61 63 65 20 68 65 72 65 20 62 65 63 61  espace here beca
0140: 75 73 65 20 65 76 65 6e 20 74 68 6f 75 67 68 20  use even though
0150: 77 65 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74  we do not direct
0160: 6c 79 0d 0a 23 20 20 20 20 20 20 20 73 75 70 70  ly..#       supp
0170: 6f 72 74 20 6e 61 6d 65 73 70 61 63 65 73 20 6f  ort namespaces o
0180: 75 72 73 65 6c 76 65 73 2c 20 77 65 20 64 6f 20  urselves, we do
0190: 6e 6f 74 20 77 61 6e 74 20 74 6f 20 70 6f 6c 6c  not want to poll
01a0: 75 74 65 20 74 68 65 20 67 6c 6f 62 61 6c 0d 0a  ute the global..
01b0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 70 61 63  #       namespac
01c0: 65 20 69 66 20 74 68 69 73 20 73 63 72 69 70 74  e if this script
01d0: 20 61 63 74 75 61 6c 6c 79 20 65 6e 64 73 20 75   actually ends u
01e0: 70 20 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65  p being evaluate
01f0: 64 20 69 6e 20 54 63 6c 2e 0d 0a 23 0d 0a 6e 61  d in Tcl...#..na
0200: 6d 65 73 70 61 63 65 20 65 76 61 6c 20 3a 3a 45  mespace eval ::E
0210: 61 67 6c 65 20 7b 0d 0a 20 20 69 66 20 7b 5b 69  agle {..  if {[i
0220: 73 45 61 67 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d  sEagle]} then {.
0230: 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23 23  .    ###########
0240: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0250: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0260: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0270: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0280: 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
0290: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02a0: 23 23 20 42 45 47 49 4e 20 45 61 67 6c 65 20 4f  ## BEGIN Eagle O
02b0: 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
02c0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02d0: 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
02e0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
02f0: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0300: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0310: 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
0320: 23 23 0d 0a 0d 0a 20 20 20 20 70 72 6f 63 20 67  ##....    proc g
0330: 65 74 42 75 69 6c 64 59 65 61 72 20 7b 7d 20 7b  etBuildYear {} {
0340: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0350: 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20   # NOTE: See if
0360: 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74 69  the "year" setti
0370: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
0380: 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75 73  ridden by the us
0390: 65 72 20 28 65 2e 67 2e 0d 0a 20 20 20 20 20 20  er (e.g...
03a0: 23 20 20 20 20 20 20 20 6f 6e 20 74 68 65 20 63  #       on the c
03b0: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
03c0: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
03d0: 6c 20 65 78 61 63 74 6c 79 20 77 68 69 63 68 20  l exactly which
03e0: 73 65 74 20 6f 66 0d 0a 20 20 20 20 20 20 23 20  set of..      #
03f0: 20 20 20 20 20 20 62 69 6e 61 72 69 65 73 20 77        binaries w
0400: 65 20 61 72 65 20 74 65 73 74 69 6e 67 2c 20 74  e are testing, t
0410: 68 6f 73 65 20 70 72 6f 64 75 63 65 64 20 75 73  hose produced us
0420: 69 6e 67 20 74 68 65 20 56 69 73 75 61 6c 20 53  ing the Visual S
0430: 74 75 64 69 6f 0d 0a 20 20 20 20 20 20 23 20 20  tudio..      #
0440: 20 20 20 20 20 32 30 30 35 2c 20 32 30 30 38 2c       2005, 2008,
0450: 20 32 30 31 30 2c 20 32 30 31 32 2c 20 6f 72 20   2010, 2012, or
0460: 32 30 31 33 20 62 75 69 6c 64 20 73 79 73 74 65  2013 build syste
0470: 6d 73 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65  ms.  To override
0480: 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20   this..      #
0490: 20 20 20 20 20 76 61 6c 75 65 20 76 69 61 20 74       value via t
04a0: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c  he command line,
04b0: 20 65 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64   enter a command
04c0: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
04d0: 6f 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  of..      #
04e0: 20 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20    the following
04f0: 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65  (all on one line
0500: 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ):..      #..
0510: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
0520: 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e  Shell.exe -anyIn
0530: 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65  itialize "set te
0540: 73 74 5f 79 65 61 72 20 32 30 30 35 22 0d 0a 20  st_year 2005"..
0550: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d       #         -
0560: 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61  file .\path\to\a
0570: 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20  ll.eagle..
0580: 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  #..      #
0590: 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 20   EagleShell.exe
05a0: 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65 20 22  -anyInitialize "
05b0: 73 65 74 20 74 65 73 74 5f 79 65 61 72 20 32 30  set test_year 20
05c0: 30 38 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20  08"..      #
05d0: 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74       -file .\pat
05e0: 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a  h\to\all.eagle..
05f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
0600: 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c         EagleShel
0610: 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61  l.exe -anyInitia
0620: 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79  lize "set test_y
0630: 65 61 72 20 32 30 31 30 22 0d 0a 20 20 20 20 20  ear 2010"..
0640: 20 23 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65   #         -file
0650: 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65   .\path\to\all.e
0660: 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20  agle..      #..
0670: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
0680: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 61 6e 79  leShell.exe -any
0690: 49 6e 69 74 69 61 6c 69 7a 65 20 22 73 65 74 20  Initialize "set
06a0: 74 65 73 74 5f 79 65 61 72 20 32 30 31 32 22 0d  test_year 2012".
06b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20  .      #
06c0: 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f   -file .\path\to
06d0: 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20  \all.eagle..
06e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20    #..      #
06f0: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78     EagleShell.ex
0700: 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c 69 7a 65  e -anyInitialize
0710: 20 22 73 65 74 20 74 65 73 74 5f 79 65 61 72 20   "set test_year
0720: 32 30 31 33 22 0d 0a 20 20 20 20 20 20 23 20 20  2013"..      #
0730: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0740: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0750: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
0760: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0770: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
0780: 69 61 6c 69 7a 65 20 22 75 6e 73 65 74 20 2d 6e  ialize "unset -n
0790: 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 73 74 5f 79  ocomplain test_y
07a0: 65 61 72 22 0d 0a 20 20 20 20 20 20 23 20 20 20  ear"..      #
07b0: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61        -file .\pa
07c0: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d  th\to\all.eagle.
07d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
07e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
07f0: 20 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 26 26   ::test_year] &&
0800: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0810: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5d 20 3e 20  $::test_year] > 0820: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 0830: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 0840: 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 NOTE: Use the sp 0850: 65 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 ecified test yea 0860: 72 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 r. If this vari 0870: 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c able is not set, 0880: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # 0890: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 76 61 default va 08a0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 08b0: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 08c0: 6e 6f 74 20 45 61 67 6c 65 20 68 61 73 20 62 65 not Eagle has be 08d0: 65 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 en.. # 08e0: 20 20 20 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 compiled aga 08f0: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 0900: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 0910: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0920: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
0930: 74 5f 79 65 61 72 0d 0a 20 20 20 20 20 20 7d 20  t_year..      }
0940: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0950: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
0960: 45 3a 20 49 66 20 45 61 67 6c 65 20 68 61 73 20  E: If Eagle has
0970: 62 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67  been compiled ag
0980: 61 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 34  ainst the CLR v4
0990: 2e 30 2c 20 75 73 65 20 22 32 30 31 30 22 20 62  .0, use "2010" b
09a0: 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  y..        #
09b0: 20 20 20 64 65 66 61 75 6c 74 20 28 77 65 20 63     default (we c
09c0: 6f 75 6c 64 20 75 73 65 20 22 32 30 31 32 22 20  ould use "2012"
09d0: 6f 72 20 22 32 30 31 33 22 20 69 6e 20 74 68 61  or "2013" in tha
09e0: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 20  t case as well)
09f0: 61 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  as..        #
0a00: 20 20 20 20 74 68 65 20 74 65 73 74 20 79 65 61      the test yea
0a10: 72 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 75 73  r; otherwise, us
0a20: 65 20 22 32 30 30 38 22 20 62 79 20 64 65 66 61  e "2008" by defa
0a30: 75 6c 74 20 28 77 65 20 63 6f 75 6c 64 20 75 73  ult (we could us
0a40: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  e..        #
0a50: 20 20 20 22 32 30 30 35 22 20 69 6e 20 74 68 61     "2005" in tha
0a60: 74 20 63 61 73 65 20 61 73 20 77 65 6c 6c 29 2e  t case as well).
0a70: 20 20 49 66 20 61 6e 6f 74 68 65 72 20 6d 61 6a    If another maj
0a80: 6f 72 20 5b 69 6e 63 6f 6d 70 61 74 69 62 6c 65  or [incompatible
0a90: 5d 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ]..        #
0aa0: 20 20 20 76 65 72 73 69 6f 6e 20 6f 66 20 74 68     version of th
0ab0: 65 20 43 4c 52 20 69 73 20 72 65 6c 65 61 73 65  e CLR is release
0ac0: 64 2c 20 74 68 69 73 20 63 68 65 63 6b 20 77 69  d, this check wi
0ad0: 6c 6c 20 68 61 76 65 20 74 6f 20 62 65 0d 0a 20  ll have to be..
0ae0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
0af0: 68 61 6e 67 65 64 2e 20 20 54 68 65 20 64 65 66  hanged.  The def
0b00: 61 75 6c 74 20 74 65 73 74 20 79 65 61 72 20 74  ault test year t
0b10: 6f 20 75 73 65 20 66 6f 72 20 61 20 70 61 72 74  o use for a part
0b20: 69 63 75 6c 61 72 20 43 4c 52 0d 0a 20 20 20 20  icular CLR..
0b30: 20 20 20 20 23 20 20 20 20 20 20 20 76 65 72 73      #       vers
0b40: 69 6f 6e 20 6d 61 79 20 62 65 20 6f 76 65 72 72  ion may be overr
0b50: 69 64 64 65 6e 20 62 79 20 73 65 74 74 69 6e 67  idden by setting
0b60: 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69   the global vari
0b70: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
0b80: 20 20 20 20 20 20 22 74 65 73 74 5f 79 65 61 72        "test_year
0b90: 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65 72 65  _clr_v$X", where 0ba0: 20 22 24 58 22 20 6d 61 79 20 5b 63 75 72 72 65 "$X" may [curre
0bb0: 6e 74 6c 79 5d 20 62 65 20 65 69 74 68 65 72 20  ntly] be either
0bc0: 22 32 22 0d 0a 20 20 20 20 20 20 20 20 23 20 20  "2"..        #
0bd0: 20 20 20 20 20 6f 72 20 22 34 22 2e 0d 0a 20 20       or "4"...
0be0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
0bf0: 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72   if {[haveConstr
0c00: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
0c10: 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  e40]} then {..
0c20: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66          if {[inf
0c30: 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f  o exists ::test_
0c40: 79 65 61 72 5f 63 6c 72 5f 76 34 5d 20 26 26 20  year_clr_v4] &&
0c50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
0c60: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
0c70: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72  $::test_year_clr 0c80: 5f 76 34 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _v4] > 0} then { 0c90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d .. #. 0ca0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e . # N 0cb0: 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 OTE: Use the spe 0cc0: 63 69 66 69 65 64 20 74 65 73 74 20 79 65 61 72 cified test year 0cd0: 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 34 2e for the CLR v4. 0ce0: 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 0... 0cf0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 #.. r 0d00: 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 eturn$::test_ye
0d10: 61 72 5f 63 6c 72 5f 76 34 0d 0a 20 20 20 20 20  ar_clr_v4..
0d20: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
0d30: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d40: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
0d50: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
0d60: 74 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20  t test year for
0d70: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20  the CLR v4.0...
0d80: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
0d90: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
0da0: 20 32 30 31 30 3b 20 23 20 54 4f 44 4f 3a 20 47   2010; # TODO: G
0db0: 6f 6f 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64  ood "fallback" d
0dc0: 65 66 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20  efault?..
0dd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20     }..        }
0de0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
0df0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
0e00: 74 73 20 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63  ts ::test_year_c
0e10: 6c 72 5f 76 32 5d 20 26 26 20 5c 0d 0a 20 20 20  lr_v2] && \..
0e20: 20 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69             [stri
0e30: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 0e40: 74 5f 79 65 61 72 5f 63 6c 72 5f 76 32 5d 20 3e t_year_clr_v2] > 0e50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 0e60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 0e70: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 # NOTE: U 0e80: 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 se the specified 0e90: 20 74 65 73 74 20 79 65 61 72 20 66 6f 72 20 74 test year for t 0ea0: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20 he CLR v2.0... 0eb0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 0ec0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 return 0ed0: 24 3a 3a 74 65 73 74 5f 79 65 61 72 5f 63 6c 72$::test_year_clr
0ee0: 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  _v2..          }
0ef0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
0f00: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f10: 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20      # NOTE: Use
0f20: 74 68 65 20 64 65 66 61 75 6c 74 20 74 65 73 74  the default test
0f30: 20 79 65 61 72 20 66 6f 72 20 74 68 65 20 43 4c   year for the CL
0f40: 52 20 76 32 2e 30 2e 0d 0a 20 20 20 20 20 20 20  R v2.0...
0f50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
0f60: 20 20 20 20 72 65 74 75 72 6e 20 32 30 30 38 3b      return 2008;
0f70: 20 23 20 54 4f 44 4f 3a 20 47 6f 6f 64 20 22 66   # TODO: Good "f
0f80: 61 6c 6c 62 61 63 6b 22 20 64 65 66 61 75 6c 74  allback" default
0f90: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ?..          }..
0fa0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
0fb0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
0fc0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
0fd0: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
0fe0: 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
0ff0: 6e 20 61 64 64 69 6e 67 20 73 68 69 6d 6d 65 64  n adding shimmed
1000: 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
1010: 73 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 70  s...    #..    p
1020: 72 6f 63 20 67 65 74 42 75 69 6c 64 43 6c 72 56  roc getBuildClrV
1030: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ersion {} {..
1040: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
1050: 73 74 73 20 3a 3a 74 65 73 74 5f 63 6c 72 5d 20  sts ::test_clr]
1060: 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  && [string lengt
1070: 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5d 20 3e  h $::test_clr] > 1080: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 1090: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 10a0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 10b0: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 76 65 pecified test ve 10c0: 72 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c rsion for the CL 10d0: 52 2e 20 20 49 66 20 74 68 69 73 20 76 61 72 69 R. If this vari 10e0: 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 able.. # 10f0: 20 20 20 20 20 20 69 73 20 6e 6f 74 20 73 65 74 is not set 1100: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 , the default va 1110: 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 lue will be base 1120: 64 20 6f 6e 20 77 68 65 74 68 65 72 20 6f 72 20 d on whether or 1130: 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 not.. # 1140: 20 20 20 20 20 45 61 67 6c 65 20 68 61 73 20 62 Eagle has b 1150: 65 65 6e 20 63 6f 6d 70 69 6c 65 64 20 61 67 61 een compiled aga 1160: 69 6e 73 74 20 74 68 65 20 43 4c 52 20 76 32 2e inst the CLR v2. 1170: 30 20 6f 72 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 0 or CLR v4.0... 1180: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1190: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 return$::tes
11a0: 74 5f 63 6c 72 0d 0a 20 20 20 20 20 20 7d 20 65  t_clr..      } e
11b0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
11c0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
11d0: 3a 20 43 68 65 63 6b 20 69 66 20 45 61 67 6c 65  : Check if Eagle
11e0: 20 68 61 73 20 62 65 65 6e 20 63 6f 6d 70 69 6c   has been compil
11f0: 65 64 20 61 67 61 69 6e 73 74 20 74 68 65 20 43  ed against the C
1200: 4c 52 20 76 34 2e 30 2e 20 20 49 66 20 73 6f 2c  LR v4.0.  If so,
1210: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1220: 20 20 6a 75 73 74 20 75 73 65 20 74 68 61 74 20    just use that
1230: 43 4c 52 20 76 65 72 73 69 6f 6e 2e 20 20 4f 74  CLR version.  Ot
1240: 68 65 72 77 69 73 65 2c 20 75 73 65 20 74 68 65  herwise, use the
1250: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74 68 65   version for the
1260: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1270: 20 20 43 4c 52 20 76 32 2e 30 2e 20 20 49 66 20    CLR v2.0.  If
1280: 61 6e 6f 74 68 65 72 20 6d 61 6a 6f 72 20 5b 69  another major [i
1290: 6e 63 6f 6d 70 61 74 69 62 6c 65 5d 20 76 65 72  ncompatible] ver
12a0: 73 69 6f 6e 20 6f 66 20 74 68 65 20 43 4c 52 0d  sion of the CLR.
12b0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
12c0: 20 69 73 20 72 65 6c 65 61 73 65 64 2c 20 74 68   is released, th
12d0: 69 73 20 63 68 65 63 6b 20 77 69 6c 6c 20 68 61  is check will ha
12e0: 76 65 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64  ve to be changed
12f0: 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74 0d 0a  .  The default..
1300: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1310: 76 65 72 73 69 6f 6e 20 76 61 6c 75 65 20 66 6f  version value fo
1320: 72 20 61 20 70 61 72 74 69 63 75 6c 61 72 20 43  r a particular C
1330: 4c 52 20 76 65 72 73 69 6f 6e 20 6d 61 79 20 62  LR version may b
1340: 65 20 6f 76 65 72 72 69 64 64 65 6e 0d 0a 20 20  e overridden..
1350: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 79        #       by
1360: 20 73 65 74 74 69 6e 67 20 74 68 65 20 67 6c 6f   setting the glo
1370: 62 61 6c 20 76 61 72 69 61 62 6c 65 20 22 74 65  bal variable "te
1380: 73 74 5f 63 6c 72 5f 76 24 58 22 2c 20 77 68 65  st_clr_v$X", whe 1390: 72 65 20 22 24 58 22 20 6d 61 79 0d 0a 20 20 20 re "$X" may..
13a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 63 75       #       [cu
13b0: 72 72 65 6e 74 6c 79 5d 20 62 65 20 65 69 74 68  rrently] be eith
13c0: 65 72 20 22 32 22 20 6f 72 20 22 34 22 2e 0d 0a  er "2" or "4"...
13d0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13e0: 20 20 20 69 66 20 7b 5b 68 61 76 65 43 6f 6e 73     if {[haveCons
13f0: 74 72 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74  traint imageRunt
1400: 69 6d 65 34 30 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ime40]} then {..
1410: 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69            if {[i
1420: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73  nfo exists ::tes
1430: 74 5f 63 6c 72 5f 76 34 5d 20 26 26 20 5c 0d 0a  t_clr_v4] && \..
1440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 73                [s
1450: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: 1460: 74 65 73 74 5f 63 6c 72 5f 76 34 5d 20 3e 20 30 test_clr_v4] > 0 1470: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1480: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1490: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 14a0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 14b0: 65 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 est version for 14c0: 74 68 65 20 43 4c 52 20 76 34 2e 30 2e 0d 0a 20 the CLR v4.0... 14d0: 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 #.. 14e0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e return 14f0: 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 34 0d$::test_clr_v4.
1500: 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
1510: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
1520: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   #..
1530: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1540: 64 65 66 61 75 6c 74 20 74 65 73 74 20 76 65 72  default test ver
1550: 73 69 6f 6e 20 66 6f 72 20 74 68 65 20 43 4c 52  sion for the CLR
1560: 20 76 34 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20   v4.0...
1570: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
1580: 20 20 20 72 65 74 75 72 6e 20 34 2e 30 2e 33 30     return 4.0.30
1590: 33 31 39 3b 20 23 20 54 4f 44 4f 3a 20 47 6f 6f  319; # TODO: Goo
15a0: 64 20 22 66 61 6c 6c 62 61 63 6b 22 20 64 65 66  d "fallback" def
15b0: 61 75 6c 74 3f 0d 0a 20 20 20 20 20 20 20 20 20  ault?..
15c0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
15d0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
15e0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
15f0: 20 3a 3a 74 65 73 74 5f 63 6c 72 5f 76 32 5d 20   ::test_clr_v2]
1600: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
1610: 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67      [string leng
1620: 74 68 20 24 3a 3a 74 65 73 74 5f 63 6c 72 5f 76  th $::test_clr_v 1630: 32 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 2] > 0} then {.. 1640: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1650: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1660: 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 69 E: Use the speci 1670: 66 69 65 64 20 74 65 73 74 20 76 65 72 73 69 6f fied test versio 1680: 6e 20 66 6f 72 20 74 68 65 20 43 4c 52 20 76 32 n for the CLR v2 1690: 2e 30 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 .0... 16a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. 16b0: 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 return$::test_c
16c0: 6c 72 5f 76 32 0d 0a 20 20 20 20 20 20 20 20 20  lr_v2..
16d0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
16e0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
16f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73        # NOTE: Us
1700: 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65  e the default te
1710: 73 74 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 74  st version for t
1720: 68 65 20 43 4c 52 20 76 32 2e 30 2e 0d 0a 20 20  he CLR v2.0...
1730: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1740: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
1750: 32 2e 30 2e 35 30 37 32 37 3b 20 23 20 54 4f 44  2.0.50727; # TOD
1760: 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 61 63  O: Good "fallbac
1770: 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 20 20  k" default?..
1780: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1790: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20    }..      }..
17a0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
17b0: 20 67 65 74 42 75 69 6c 64 59 65 61 72 73 20 7b   getBuildYears {
17c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
17d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20      # NOTE: See
17e0: 69 66 20 74 68 65 20 6c 69 73 74 20 6f 66 20 74  if the list of t
17f0: 65 73 74 20 79 65 61 72 73 20 68 61 73 20 62 65  est years has be
1800: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62 79  en overridden by
1810: 20 74 68 65 20 75 73 65 72 0d 0a 20 20 20 20 20   the user..
1820: 20 23 20 20 20 20 20 20 20 28 65 2e 67 2e 20 6f   #       (e.g. o
1830: 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69  n the command li
1840: 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne)...      #..
1850: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1860: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 79 65 61  xists ::test_yea
1870: 72 73 5d 20 26 26 20 5b 6c 6c 65 6e 67 74 68 20  rs] && [llength
1880: 24 3a 3a 74 65 73 74 5f 79 65 61 72 73 5d 20 3e  $::test_years] > 1890: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 18a0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 18b0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 18c0: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 pecified list of 18d0: 20 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 test years... 18e0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18f0: 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f return$::test_
1900: 79 65 61 72 73 0d 0a 20 20 20 20 20 20 7d 20 65  years..      } e
1910: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
1920: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1930: 3a 20 55 73 65 20 74 68 65 20 64 65 66 61 75 6c  : Use the defaul
1940: 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 79  t list of test y
1950: 65 61 72 73 20 28 69 2e 65 2e 20 61 6c 6c 29 2e  ears (i.e. all).
1960: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1970: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
1980: 74 20 32 30 30 35 20 32 30 30 38 20 32 30 31 30  t 2005 2008 2010
1990: 20 32 30 31 32 20 32 30 31 33 5d 0d 0a 20 20 20   2012 2013]..
19a0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
19b0: 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 6c      proc getBuil
19c0: 64 4e 65 74 46 78 20 7b 7d 20 7b 0d 0a 20 20 20  dNetFx {} {..
19d0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
19e0: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 74  TE: See if the t
19f0: 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f  est .NET Framewo
1a00: 72 6b 20 73 65 74 74 69 6e 67 20 68 61 73 20 62  rk setting has b
1a10: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62  een overridden b
1a20: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
1a30: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20   the user (e.g.
1a40: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
1a50: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ine)...      #..
1a60: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
1a70: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 6e 65  exists ::test_ne
1a80: 74 5f 66 78 5d 20 26 26 20 5c 0d 0a 20 20 20 20  t_fx] && \..
1a90: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
1aa0: 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6e 65 74  ngth $::test_net 1ab0: 5f 66 78 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b _fx] > 0} then { 1ac0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1ad0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 1ae0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 74 the specified t 1af0: 65 73 74 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f est .NET Framewo 1b00: 72 6b 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a rk... #.. 1b10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 return$
1b20: 3a 3a 74 65 73 74 5f 6e 65 74 5f 66 78 0d 0a 20  ::test_net_fx..
1b30: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
1b40: 20 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20         set year
1b50: 5b 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a  [getBuildYear]..
1b60: 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63 68  ..        switch
1b70: 20 2d 65 78 61 63 74 20 2d 2d 20 24 79 65 61 72   -exact -- $year 1b80: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 32 30 {.. 20 1b90: 30 35 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 05 {.. 1ba0: 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 32 30 return netFx20 1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 1bc0: 20 20 20 20 20 20 20 20 20 32 30 30 38 20 7b 0d 2008 {. 1bd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 1be0: 75 72 6e 20 6e 65 74 46 78 33 35 0d 0a 20 20 20 urn netFx35.. 1bf0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c00: 20 20 20 20 32 30 31 30 20 7b 0d 0a 20 20 20 20 2010 {.. 1c10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e return n 1c20: 65 74 46 78 34 30 0d 0a 20 20 20 20 20 20 20 20 etFx40.. 1c30: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 32 }.. 2 1c40: 30 31 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 012 {.. 1c50: 20 20 20 72 65 74 75 72 6e 20 6e 65 74 46 78 34 return netFx4 1c60: 35 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 5.. }.. 1c70: 20 20 20 20 20 20 20 20 20 20 32 30 31 33 20 7b 2013 { 1c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 .. re 1c90: 74 75 72 6e 20 6e 65 74 46 78 34 35 31 0d 0a 20 turn netFx451.. 1ca0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1cb0: 20 20 20 20 20 20 64 65 66 61 75 6c 74 20 7b 0d default {. 1cc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 . ret 1cd0: 75 72 6e 20 6e 65 74 46 78 33 35 3b 20 23 20 54 urn netFx35; # T 1ce0: 4f 44 4f 3a 20 47 6f 6f 64 20 22 66 61 6c 6c 62 ODO: Good "fallb 1cf0: 61 63 6b 22 20 64 65 66 61 75 6c 74 3f 0d 0a 20 ack" default?.. 1d00: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 1d10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 1d20: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 23 0d }..... #. 1d30: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 . # NOTE: Thi 1d40: 73 20 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 s procedure shou 1d50: 6c 64 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 ld return non-ze 1d60: 72 6f 20 69 66 20 74 68 65 20 63 6f 6e 66 69 67 ro if the config 1d70: 75 72 65 64 20 74 65 73 74 0d 0a 20 20 20 20 23 ured test.. # 1d80: 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 20 platform 1d90: 69 73 20 6d 6f 73 74 20 6c 69 6b 65 6c 79 20 74 is most likely t 1da0: 68 65 20 64 65 66 61 75 6c 74 20 66 6f 72 20 74 he default for t 1db0: 68 69 73 20 6d 61 63 68 69 6e 65 2e 0d 0a 20 20 his machine... 1dc0: 20 20 23 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 #.. proc is 1dd0: 44 65 66 61 75 6c 74 42 75 69 6c 64 50 6c 61 74 DefaultBuildPlat 1de0: 66 6f 72 6d 20 7b 20 7b 76 65 72 62 6f 73 65 20 form { {verbose 1df0: 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 false} } {.. 1e00: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1e10: 45 3a 20 52 75 6e 6e 69 6e 67 20 6f 6e 20 57 6f E: Running on Wo 1e20: 57 36 34 20 69 73 20 6e 65 76 65 72 20 74 68 65 W64 is never the 1e30: 20 64 65 66 61 75 6c 74 20 70 6c 61 74 66 6f 72 default platfor 1e40: 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 m... #.. 1e50: 20 20 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e if {[isRunnin 1e60: 67 57 6f 57 36 34 5d 7d 20 74 68 65 6e 20 7b 0d gWoW64]} then {. 1e70: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 . if {$ve
1e80: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
1e90: 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1ea0: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c ::test_channel \ 1eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1ec0: 22 2d 2d 2d 2d 20 64 65 74 65 63 74 65 64 20 6e "---- detected n 1ed0: 6f 6e 2d 64 65 66 61 75 6c 74 20 70 6c 61 74 66 on-default platf 1ee0: 6f 72 6d 20 28 57 6f 57 36 34 29 5c 6e 22 0d 0a orm (WoW64)\n".. 1ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f00: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d return false. 1f10: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 1f20: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 1f30: 45 3a 20 54 68 69 73 20 68 61 73 20 61 20 67 6f E: This has a go 1f40: 6f 64 20 63 68 61 6e 63 65 20 6f 66 20 62 65 69 od chance of bei 1f50: 6e 67 20 74 68 65 20 64 65 66 61 75 6c 74 20 70 ng the default p 1f60: 6c 61 74 66 6f 72 6d 2e 0d 0a 20 20 20 20 20 20 latform... 1f70: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 76 65 #.. if {$ve
1f80: 72 62 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20  rbose} then {..
1f90: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1fa0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 22 2d 2d test_channel "-- 1fb0: 2d 2d 20 64 65 74 65 63 74 65 64 20 64 65 66 61 -- detected defa 1fc0: 75 6c 74 20 70 6c 61 74 66 6f 72 6d 5c 6e 22 0d ult platform\n". 1fd0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 . }.. 1fe0: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 1ff0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 2000: 67 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d getBuildPlatform 2010: 20 7b 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 { native } {.. 2020: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 2030: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 70 6c 61 xists ::test_pla 2040: 74 66 6f 72 6d 5d 20 26 26 20 5c 0d 0a 20 20 20 tform] && \.. 2050: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 2060: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 70 6c ength$::test_pl
2070: 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65  atform] > 0} the
2080: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
2090: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
20a0: 55 73 65 20 74 68 65 20 73 70 65 63 69 66 69 65  Use the specifie
20b0: 64 20 74 65 73 74 20 70 6c 61 74 66 6f 72 6d 2e  d test platform.
20c0: 20 20 49 66 20 74 68 69 73 20 76 61 72 69 61 62    If this variab
20d0: 6c 65 20 69 73 20 6e 6f 74 20 73 65 74 2c 0d 0a  le is not set,..
20e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20f0: 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  the default valu
2100: 65 20 77 69 6c 6c 20 62 65 20 62 61 73 65 64 20  e will be based
2110: 6f 6e 20 74 68 65 20 6d 61 63 68 69 6e 65 20 61  on the machine a
2120: 72 63 68 69 74 65 63 74 75 72 65 2e 0d 0a 20 20  rchitecture...
2130: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2140: 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24   return [expr {$2150: 6e 61 74 69 76 65 20 3f 20 24 3a 3a 74 65 73 74 native ?$::test
2160: 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 22 22 7d 5d  _platform : ""}]
2170: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66  ..      } elseif
2180: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a   {[info exists :
2190: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 26  :test_machine] &
21a0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  & \..          [
21b0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a  string length $: 21c0: 3a 74 65 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3e :test_machine] > 21d0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 21e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 21f0: 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 61 74 69 76 NOTE: For nativ 2200: 65 20 62 75 69 6c 64 73 2c 20 72 65 74 75 72 6e e builds, return 2210: 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 the platform na 2220: 6d 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 me corresponding 2230: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20 to.. # 2240: 20 20 20 20 20 74 68 65 20 74 65 73 74 20 6d 61 the test ma 2250: 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 74 75 chine architectu 2260: 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 72 re; otherwise, r 2270: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 0d 0a eturn an empty.. 2280: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2290: 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 string... 22a0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 22b0: 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 rn [expr {.. 22c0: 20 20 20 20 20 20 24 6e 61 74 69 76 65 20 3f 20$native ?
22d0: 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f  [machineToPlatfo
22e0: 72 6d 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69  rm $::test_machi 22f0: 6e 65 5d 20 3a 20 22 22 0d 0a 20 20 20 20 20 20 ne] : "".. 2300: 20 20 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }].. } el 2310: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 2320: 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 ts ::tcl_platfor 2330: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 m(machine)]} the 2340: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 2350: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 2360: 46 6f 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 For native build 2370: 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c s, return the pl 2380: 61 74 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 atform name corr 2390: 65 73 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 esponding to.. 23a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 23b0: 65 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 e machine archit 23c0: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 ecture; otherwis 23d0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 e, return an emp 23e0: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 ty string... 23f0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 2400: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 eturn [expr {.. 2410: 20 20 20 20 20 20 20 20 20 24 6e 61 74 69 76 65$native
2420: 20 3f 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c 61   ? [machineToPla
2430: 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61  tform $::tcl_pla 2440: 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d 20 tform(machine)] 2450: 3a 20 22 22 0d 0a 20 20 20 20 20 20 20 20 7d 5d : "".. }] 2460: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b .. } else { 2470: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 2480: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 # NOTE: No 2490: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63 machine architec 24a0: 74 75 72 65 20 69 73 20 61 76 61 69 6c 61 62 6c ture is availabl 24b0: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 e, return an emp 24c0: 74 79 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 ty string... 24d0: 20 20 20 20 23 20 20 20 20 20 20 20 49 74 20 69 # It i 24e0: 73 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 s important to r 24f0: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 2500: 74 72 69 6e 67 20 68 65 72 65 20 62 65 63 61 75 tring here becau 2510: 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 se the.. 2520: 23 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 6f # result o 2530: 66 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 f this procedure 2540: 20 6d 61 79 20 62 65 20 75 73 65 64 20 77 69 74 may be used wit 2550: 68 20 5b 66 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a h [file join]... 2560: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2570: 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 return "".. 2580: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 2590: 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75 69 . proc getBui 25a0: 6c 64 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 ldConfiguration 25b0: 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 25c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 # NOTE: See 25d0: 20 69 66 20 74 68 65 20 22 63 6f 6e 66 69 67 75 if the "configu 25e0: 72 61 74 69 6f 6e 22 20 73 65 74 74 69 6e 67 20 ration" setting 25f0: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 has been overrid 2600: 64 65 6e 20 62 79 20 74 68 65 0d 0a 20 20 20 20 den by the.. 2610: 20 20 23 20 20 20 20 20 20 20 75 73 65 72 20 28 # user ( 2620: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d e.g. on the comm 2630: 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68 69 73 and line). This 2640: 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f 6c 20 65 helps control e 2650: 78 61 63 74 6c 79 0d 0a 20 20 20 20 20 20 23 20 xactly.. # 2660: 20 20 20 20 20 20 77 68 69 63 68 20 73 65 74 20 which set 2670: 6f 66 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 of binaries we a 2680: 72 65 20 74 65 73 74 69 6e 67 20 28 69 2e 65 2e re testing (i.e. 2690: 20 74 68 6f 73 65 20 62 75 69 6c 74 20 69 6e 20 those built in 26a0: 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 the.. # 26b0: 20 20 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 "Debug" or "R 26c0: 65 6c 65 61 73 65 22 20 62 75 69 6c 64 20 63 6f elease" build co 26d0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 29 2e 20 20 nfigurations). 26e0: 54 6f 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 To override this 26f0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 2700: 76 61 6c 75 65 20 76 69 61 20 74 68 65 20 63 6f value via the co 2710: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65 mmand line, ente 2720: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 r a command simi 2730: 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66 0d 0a 20 lar to one of.. 2740: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 2750: 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 following (all 2760: 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 on one line):.. 2770: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2780: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c EagleShell 2790: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c .exe -anyInitial 27a0: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f ize "set test_co 27b0: 6e 66 69 67 75 72 61 74 69 6f 6e 20 44 65 62 75 nfiguration Debu 27c0: 67 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 g".. # 27d0: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 27e0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 27f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 2800: 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c EagleShell 2810: 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74 69 61 6c .exe -anyInitial 2820: 69 7a 65 20 22 73 65 74 20 74 65 73 74 5f 63 6f ize "set test_co 2830: 6e 66 69 67 75 72 61 74 69 6f 6e 20 52 65 6c 65 nfiguration Rele 2840: 61 73 65 22 0d 0a 20 20 20 20 20 20 23 20 20 20 ase".. # 2850: 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 -file .\pa 2860: 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d th\to\all.eagle. 2870: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 2880: 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68 65 # EagleShe 2890: 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20 2e 5c 70 ll.exe -file .\p 28a0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 ath\to\all.eagle 28b0: 20 2d 70 72 65 54 65 73 74 0d 0a 20 20 20 20 20 -preTest.. 28c0: 20 23 20 20 20 20 20 20 20 20 20 22 75 6e 73 65 # "unse 28d0: 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 74 65 t -nocomplain te 28e0: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 28f0: 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ".. #.. 2900: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 if {[info exis 2910: 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 ts ::test_config 2920: 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c 0d 0a 20 uration] && \.. 2930: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 [string 2940: 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f length$::test_
2950: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 20 3e  configuration] >
2960: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
2970: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
2980: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73   NOTE: Use the s
2990: 70 65 63 69 66 69 65 64 20 74 65 73 74 20 63 6f  pecified test co
29a0: 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 20 54 68  nfiguration.  Th
29b0: 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20  e default value
29c0: 75 73 65 64 0d 0a 20 20 20 20 20 20 20 20 23 20  used..        #
29d0: 20 20 20 20 20 20 66 6f 72 20 74 68 69 73 20 76        for this v
29e0: 61 72 69 61 62 6c 65 20 69 73 20 74 79 70 69 63  ariable is typic
29f0: 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 22 2c 20  ally "Release",
2a00: 61 73 20 73 65 74 20 62 79 20 74 68 65 20 74 65  as set by the te
2a10: 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  st..        #
2a20: 20 20 20 20 73 75 69 74 65 20 69 74 73 65 6c 66      suite itself
2a30: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
2a40: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a        return $:: 2a50: 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 test_configurati 2a60: 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 on.. } else 2a70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 2a80: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 2a90: 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77 69 6c 6c ormally, we will 2aa0: 20 6e 65 76 65 72 20 68 69 74 20 74 68 69 73 20 never hit this 2ab0: 63 61 73 65 20 62 65 63 61 75 73 65 20 74 68 65 case because the 2ac0: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 value of the.. 2ad0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 2ae0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 2af0: 6e 20 76 61 72 69 61 62 6c 65 20 69 73 20 61 6c n variable is al 2b00: 77 61 79 73 20 73 65 74 20 62 79 20 74 68 65 20 ways set by the 2b10: 74 65 73 74 20 73 75 69 74 65 0d 0a 20 20 20 20 test suite.. 2b20: 20 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 # itse 2b30: 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20 69 74 20 lf; however, it 2b40: 63 61 6e 20 62 65 20 6f 76 65 72 72 69 64 64 65 can be overridde 2b50: 6e 20 75 73 69 6e 67 20 74 68 65 20 75 6e 73 65 n using the unse 2b60: 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20 20 20 20 t command.. 2b70: 20 20 20 23 20 20 20 20 20 20 20 66 72 6f 6d 20 # from 2b80: 74 68 65 20 2d 70 72 65 54 65 73 74 20 6f 70 74 the -preTest opt 2b90: 69 6f 6e 20 74 6f 20 74 68 65 20 74 65 73 74 20 ion to the test 2ba0: 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20 suite... 2bb0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 2bc0: 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c 61 74 66 n$::eagle_platf
2bd0: 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 74 69 6f  orm(configuratio
2be0: 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n)..      }..
2bf0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
2c00: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
2c10: 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a 20 20 20  ations {} {..
2c20: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
2c30: 54 45 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c  TE: See if the l
2c40: 69 73 74 20 6f 66 20 74 65 73 74 20 63 6f 6e 66  ist of test conf
2c50: 69 67 75 72 61 74 69 6f 6e 73 20 68 61 73 20 62  igurations has b
2c60: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 20 62  een overridden b
2c70: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  y..      #
2c80: 20 74 68 65 20 75 73 65 72 20 28 65 2e 67 2e 20   the user (e.g.
2c90: 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c  on the command l
2ca0: 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ine)...      #..
2cb0: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
2cc0: 65 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f  exists ::test_co
2cd0: 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 26 26  nfigurations] &&
2ce0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c   \..          [l
2cf0: 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 63  length $::test_c 2d00: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d 20 3e onfigurations] > 2d10: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 2d20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2d30: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 73 NOTE: Use the s 2d40: 70 65 63 69 66 69 65 64 20 6c 69 73 74 20 6f 66 pecified list of 2d50: 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 test configurat 2d60: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 ions... # 2d70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 2d80: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75$::test_configu
2d90: 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20 7d  rations..      }
2da0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
2db0: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
2dc0: 54 45 3a 20 55 73 65 20 74 68 65 20 64 65 66 61  TE: Use the defa
2dd0: 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 65 73 74  ult list of test
2de0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 2e   configurations.
2df0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
2e00: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 6c 69 73       return [lis
2e10: 74 20 44 65 62 75 67 20 52 65 6c 65 61 73 65 5d  t Debug Release]
2e20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
2e30: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
2e40: 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 74  tBuildBaseDirect
2e50: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
2e60: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
2e70: 20 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20   Figure out the
2e80: 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 77  base directory w
2e90: 68 65 72 65 20 61 6c 6c 20 74 68 65 20 62 75 69  here all the bui
2ea0: 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20  lds should be..
2eb0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 6f 63       #       loc
2ec0: 61 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c  ated.  This will
2ed0: 20 62 65 20 74 68 65 20 64 69 72 65 63 74 6f 72   be the director
2ee0: 79 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20  y that contains
2ef0: 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 20 20 20  the actual..
2f00: 20 20 23 20 20 20 20 20 20 20 62 75 69 6c 64 20    #       build
2f10: 6f 75 74 70 75 74 20 64 69 72 65 63 74 6f 72 79  output directory
2f20: 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 20 6f 66   (e.g. parent of
2f30: 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 20 20 20   "bin")...
2f40: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
2f50: 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c  fo exists ::buil
2f60: 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79  d_base_directory
2f70: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
2f80: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
2f90: 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 65 5f 64   $::build_base_d 2fa0: 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 irectory] > 0} t 2fb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 2fc0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 2fd0: 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f : The location o 2fe0: 66 20 74 68 65 20 62 75 69 6c 64 20 62 61 73 65 f the build base 2ff0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 directory has b 3000: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d een overridden;. 3010: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 3020: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 3030: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 it verbatim... 3040: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 3050: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64 return$::build
3060: 5f 62 61 73 65 5f 64 69 72 65 63 74 6f 72 79 0d  _base_directory.
3070: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20  .      } elseif
3080: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
3090: 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
30a0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  ] && \..
30b0: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68    [string length
30c0: 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63   $::common_direc 30d0: 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 tory] > 0} then 30e0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 30f0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 65 # NOTE: Ne 3100: 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 xt, fallback to 3110: 74 68 65 20 67 72 61 6e 64 70 61 72 65 6e 74 20 the grandparent 3120: 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 directory of the 3130: 20 6f 6e 65 0d 0a 20 20 20 20 20 20 20 20 23 20 one.. # 3140: 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 69 6e 67 containing 3150: 20 74 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e this file (i.e. 3160: 20 22 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 "common.eagle") 3170: 2c 20 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d , if available.. 3180: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 3190: 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 return [file 31a0: 20 64 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 dirname [file d 31b0: 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e irname$::common
31c0: 5f 64 69 72 65 63 74 6f 72 79 5d 5d 0d 0a 20 20  _directory]]..
31d0: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69      } elseif {[i
31e0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74  nfo exists ::pat
31f0: 68 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20  h] && \..
3200: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74     [string lengt
3210: 68 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20  h $::path] > 0} 3220: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 3230: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 3240: 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c E: Finally, fall 3250: 62 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 back to the pare 3260: 6e 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 nt directory of 3270: 74 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 the EagleTest.. 3280: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 # p 3290: 61 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 ath. The EagleT 32a0: 65 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 est package guar 32b0: 61 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73 antees that this 32c0: 20 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 variable.. 32d0: 20 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 # will 32e0: 62 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 be set to the di 32f0: 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 rectory containi 3300: 6e 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c ng the first fil 3310: 65 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 e to.. # 3320: 20 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68 execute th 3330: 65 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 e [runTestProlog 3340: 75 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 ue] script libra 3350: 72 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 ry procedure... 3360: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 3370: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 return [file d 3380: 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d irname$::path].
3390: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  .      } else {.
33a0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
33b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70      # NOTE: No p
33c0: 61 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65  ath is available
33d0: 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74  , return an empt
33e0: 79 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20  y string.  This
33f0: 70 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23  point..        #
3400: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f         should no
3410: 74 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20  t be reached...
3420: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3430: 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20    return ""..
3440: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
3450: 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c 69      proc getSQLi
3460: 74 65 54 65 73 74 44 61 74 61 50 61 74 68 20 7b  teTestDataPath {
3470: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
3480: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75      # NOTE: Figu
3490: 72 65 20 6f 75 74 20 74 68 65 20 64 69 72 65 63  re out the direc
34a0: 74 6f 72 79 20 77 68 65 72 65 20 61 6c 6c 20 74  tory where all t
34b0: 68 65 20 74 65 73 74 20 64 61 74 61 20 66 69 6c  he test data fil
34c0: 65 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20  es should..
34d0: 20 23 20 20 20 20 20 20 20 62 65 20 6c 6f 63 61   #       be loca
34e0: 74 65 64 2e 20 20 54 68 69 73 20 73 68 6f 75 6c  ted.  This shoul
34f0: 64 20 62 65 20 74 68 65 20 22 64 61 74 61 22 20  d be the "data"
3500: 64 69 72 65 63 74 6f 72 79 20 62 65 6e 65 61 74  directory beneat
3510: 68 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  h the..      #
3520: 20 20 20 20 20 64 69 72 65 63 74 6f 72 79 20 63       directory c
3530: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 61 63  ontaining the ac
3540: 74 75 61 6c 20 74 65 73 74 20 73 63 72 69 70 74  tual test script
3550: 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  s...      #..
3560: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20     return [file
3570: 6a 6f 69 6e 20 24 3a 3a 70 61 74 68 20 64 61 74  join $::path dat 3580: 61 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 a].. }..... 3590: 20 20 70 72 6f 63 20 69 73 52 75 6e 6e 69 6e 67 proc isRunning 35a0: 57 6f 57 36 34 20 7b 7d 20 7b 0d 0a 20 20 20 20 WoW64 {} {.. 35b0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 35c0: 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 6a 75 73 74 E: For now, just 35d0: 20 75 73 65 20 74 68 65 20 65 78 69 73 74 69 6e use the existin 35e0: 67 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e g test constrain 35f0: 74 20 66 6f 72 20 64 65 74 65 63 74 69 6e 67 0d t for detecting. 3600: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 3610: 20 57 6f 57 36 34 20 70 72 6f 63 65 73 73 2e 0d WoW64 process.. 3620: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 3630: 72 65 74 75 72 6e 20 5b 68 61 76 65 43 6f 6e 73 return [haveCons 3640: 74 72 61 69 6e 74 20 77 6f 77 36 34 5d 0d 0a 20 traint wow64].. 3650: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 3660: 63 20 69 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 c isMixedModeAss 3670: 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d 65 embly { fileName 3680: 20 7b 76 61 72 4e 61 6d 65 20 22 22 7d 20 7d 20 {varName ""} } 3690: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 36a0: 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c # NOTE: First, 36b0: 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 74 make sure the t 36c0: 65 73 74 20 73 75 69 74 65 20 69 6e 66 72 61 73 est suite infras 36d0: 74 72 75 63 74 75 72 65 20 69 73 20 61 6c 6c 6f tructure is allo 36e0: 77 65 64 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 wed to.. # 36f0: 20 20 20 20 20 20 75 73 65 20 74 68 65 20 5b 65 use the [e 3700: 78 65 63 5d 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 xec] command... 3710: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 3720: 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 3730: 3a 3a 6e 6f 28 65 78 65 63 29 5d 20 26 26 20 21 ::no(exec)] && ! 3740: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 3750: 6f 28 63 6f 72 46 6c 61 67 73 29 5d 7d 20 74 68 o(corFlags)]} th 3760: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 3770: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 3780: 20 49 66 20 74 68 65 20 6c 6f 63 61 74 69 6f 6e If the location 3790: 20 6f 66 20 43 6f 72 46 6c 61 67 73 20 69 73 20 of CorFlags is 37a0: 70 72 65 73 65 6e 74 20 69 6e 20 74 68 65 20 65 present in the e 37b0: 6e 76 69 72 6f 6e 6d 65 6e 74 2c 0d 0a 20 20 20 nvironment,.. 37c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 37d0: 20 69 74 3b 20 6f 74 68 65 72 77 69 73 65 20 61 it; otherwise a 37e0: 73 73 75 6d 65 20 69 74 20 69 73 20 69 6e 20 74 ssume it is in t 37f0: 68 65 20 50 41 54 48 2e 0d 0a 20 20 20 20 20 20 he PATH... 3800: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 #.. set 3810: 20 63 6f 72 46 6c 61 67 73 20 5b 65 78 70 72 20 corFlags [expr 3820: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 69 6e {.. [in 3830: 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 28 fo exists ::env( 3840: 43 6f 72 46 6c 61 67 73 29 5d 20 3f 20 24 3a 3a CorFlags)] ?$::
3850: 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 20 3a 20  env(CorFlags) :
3860: 22 43 6f 72 46 6c 61 67 73 22 0d 0a 20 20 20 20  "CorFlags"..
3870: 20 20 20 20 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20      }]....
3880: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
3890: 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20  OTE: Attempt to
38a0: 65 78 65 63 75 74 65 20 43 6f 72 46 6c 61 67 73  execute CorFlags
38b0: 20 6f 6e 20 74 68 65 20 73 70 65 63 69 66 69 65   on the specifie
38c0: 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  d file...
38d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
38e0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
38f0: 20 20 20 20 65 78 65 63 20 2d 2d 20 24 63 6f 72      exec -- $cor 3900: 46 6c 61 67 73 20 5b 66 69 6c 65 20 6e 61 74 69 Flags [file nati 3910: 76 65 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 vename$fileName
3920: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 78 65  ]..        } exe
3930: 63 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  c] == 0} then {.
3940: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
3950: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
3960: 49 66 20 72 65 71 75 65 73 74 65 64 20 62 79 20  If requested by
3970: 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 74 74 65  our caller, atte
3980: 6d 70 74 20 74 6f 20 64 65 74 65 72 6d 69 6e 65  mpt to determine
3990: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
39a0: 23 20 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d  #       platform
39b0: 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66 69   for the specifi
39c0: 65 64 20 66 69 6c 65 20 61 73 20 77 65 6c 6c 2e  ed file as well.
39d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20  ..          #..
39e0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
39f0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72  ring length $var 3a00: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Name] > 0} then 3a10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 3a20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 3a30: 4e 4f 54 45 3a 20 53 74 6f 72 65 20 74 68 65 20 NOTE: Store the 3a40: 70 6c 61 74 66 6f 72 6d 20 69 6e 20 74 68 65 20 platform in the 3a50: 6e 61 6d 65 64 20 76 61 72 69 61 62 6c 65 20 69 named variable i 3a60: 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 n the.. 3a70: 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 # conte 3a80: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 xt of our caller 3a90: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 3aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 75 70 .. up 3ab0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 70 var 1$varName p
3ac0: 6c 61 74 66 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20  latform....
3ad0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
3ae0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
3af0: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74  tempt to extract
3b00: 20 74 68 65 20 50 45 20 6c 69 6e 65 20 66 72 6f   the PE line fro
3b10: 6d 20 74 68 65 20 63 61 70 74 75 72 65 64 0d 0a  m the captured..
3b20: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
3b30: 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49 66 20      output.  If
3b40: 74 68 69 73 20 76 61 6c 75 65 20 69 73 20 22 50  this value is "P
3b50: 45 33 32 22 20 6f 72 20 22 50 45 33 32 2b 22 2c  E32" or "PE32+",
3b60: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20 20   the..
3b70: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62    #       assemb
3b80: 6c 79 20 66 69 6c 65 20 69 73 20 33 32 2d 62 69  ly file is 32-bi
3b90: 74 20 6f 72 20 36 34 2d 62 69 74 2c 20 72 65 73  t or 64-bit, res
3ba0: 70 65 63 74 69 76 65 6c 79 3b 0d 0a 20 20 20 20  pectively;..
3bb0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
3bc0: 6f 74 68 65 72 77 69 73 65 2c 20 69 74 73 20 74  otherwise, its t
3bd0: 79 70 65 20 69 73 20 75 6e 6b 6e 6f 77 6e 2e 0d  ype is unknown..
3be0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
3bf0: 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
3c00: 70 61 74 74 65 72 6e 20 7b 5e 50 45 20 20 20 20  pattern {^PE
3c10: 20 20 20 20 3a 20 28 50 45 33 32 7c 50 45 33 32      : (PE32|PE32
3c20: 5c 2b 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20 20 20  \+)\s+$}.... 3c30: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 72 65 67 if {[reg 3c40: 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 61 exp -line --$pa
3c50: 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d 6d  ttern $exec dumm 3c60: 79 20 70 65 33 32 5d 7d 20 74 68 65 6e 20 7b 0d y pe32]} then {. 3c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 3c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 3c90: 23 20 48 41 43 4b 3a 20 54 68 69 73 20 5b 73 77 # HACK: This [sw 3ca0: 69 74 63 68 5d 20 61 73 73 75 6d 65 73 20 74 68 itch] assumes th 3cb0: 61 74 20 33 32 2d 62 69 74 20 65 78 65 63 75 74 at 32-bit execut 3cc0: 61 62 6c 65 73 20 61 72 65 0d 0a 20 20 20 20 20 ables are.. 3cd0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 3ce0: 20 61 6c 77 61 79 73 20 78 38 36 20 61 6e 64 20 always x86 and 3cf0: 74 68 61 74 20 36 34 2d 62 69 74 20 65 78 65 63 that 64-bit exec 3d00: 75 74 61 62 6c 65 73 20 61 72 65 20 61 6c 77 61 utables are alwa 3d10: 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ys.. 3d20: 20 20 23 20 20 20 20 20 20 20 78 36 34 2e 0d 0a # x64... 3d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d #. 3d40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 . s 3d50: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 witch -exact -- 3d60: 24 70 65 33 32 20 7b 0d 0a 20 20 20 20 20 20 20$pe32 {..
3d70: 20 20 20 20 20 20 20 20 20 50 45 33 32 20 7b 0d           PE32 {.
3d80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
3d90: 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20     set platform
3da0: 57 69 6e 33 32 0d 0a 20 20 20 20 20 20 20 20 20  Win32..
3db0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
3dc0: 20 20 20 20 20 20 20 20 20 20 50 45 33 32 2b 20            PE32+
3dd0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
3de0: 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f 72       set platfor
3df0: 6d 20 78 36 34 0d 0a 20 20 20 20 20 20 20 20 20  m x64..
3e00: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
3e10: 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75 6c            defaul
3e20: 74 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t {..
3e30: 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66         set platf
3e40: 6f 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20  orm ""..
3e50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
3e60: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
3e70: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
3e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
3e90: 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d  set platform "".
3ea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
3eb0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
3ec0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
3ed0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74        # NOTE: At
3ee0: 74 65 6d 70 74 20 74 6f 20 65 78 74 72 61 63 74  tempt to extract
3ef0: 20 74 68 65 20 49 4c 4f 4e 4c 59 20 6c 69 6e 65   the ILONLY line
3f00: 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74 75 72   from the captur
3f10: 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20  ed..          #
3f20: 20 20 20 20 20 20 6f 75 74 70 75 74 2e 20 20 49        output.  I
3f30: 66 20 74 68 69 73 20 76 61 6c 75 65 20 69 73 20  f this value is
3f40: 7a 65 72 6f 2c 20 74 68 65 20 73 70 65 63 69 66  zero, the specif
3f50: 69 65 64 20 66 69 6c 65 20 6d 75 73 74 0d 0a 20  ied file must..
3f60: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
3f70: 20 62 65 20 61 20 6d 69 78 65 64 2d 6d 6f 64 65   be a mixed-mode
3f80: 20 61 73 73 65 6d 62 6c 79 3b 20 6f 74 68 65 72   assembly; other
3f90: 77 69 73 65 2c 20 69 74 20 63 6f 6e 74 61 69 6e  wise, it contain
3fa0: 73 20 6f 6e 6c 79 0d 0a 20 20 20 20 20 20 20 20  s only..
3fb0: 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67 65    #       manage
3fc0: 64 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 0d 0a 20  d components...
3fd0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
3fe0: 20 20 20 20 20 20 73 65 74 20 70 61 74 74 65 72        set patter
3ff0: 6e 20 7b 5e 49 4c 4f 4e 4c 59 20 20 20 20 3a 20  n {^ILONLY    :
4000: 28 30 7c 31 29 5c 73 2b 24 7d 0d 0a 0d 0a 20 20  (0|1)\s+$}.... 4010: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 72 65 if {![re 4020: 67 65 78 70 20 2d 6c 69 6e 65 20 2d 2d 20 24 70 gexp -line --$p
4030: 61 74 74 65 72 6e 20 24 65 78 65 63 20 64 75 6d  attern $exec dum 4040: 6d 79 20 69 6c 4f 6e 6c 79 5d 7d 20 74 68 65 6e my ilOnly]} then 4050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 4060: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. 4070: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 4080: 20 20 20 20 20 20 20 69 66 20 7b 21 24 69 6c 4f if {!$ilO
4090: 6e 6c 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  nly} then {..
40a0: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return
40b0: 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20  true..
40c0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
40d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
40e0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
40f0: 49 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  If the test suit
4100: 65 20 63 61 6e 6e 6f 74 20 75 73 65 20 5b 65 78  e cannot use [ex
4110: 65 63 5d 20 6f 72 20 65 78 65 63 75 74 69 6f 6e  ec] or execution
4120: 20 6f 66 20 43 6f 72 46 6c 61 67 73 0d 0a 20 20   of CorFlags..
4130: 20 20 20 20 23 20 20 20 20 20 20 20 66 61 69 6c      #       fail
4140: 65 64 2c 20 72 65 74 75 72 6e 20 66 61 6c 73 65  ed, return false
4150: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
4160: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
4170: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
4180: 6f 63 20 69 73 42 75 69 6c 64 41 76 61 69 6c 61  oc isBuildAvaila
4190: 62 6c 65 20 7b 20 6e 61 74 69 76 65 20 64 69 72  ble { native dir
41a0: 65 63 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20  ectory {varName
41b0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  ""} } {..      #
41c0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
41d0: 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20  Build the fully
41e0: 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e  qualified file n
41f0: 61 6d 65 20 66 6f 72 20 74 68 65 20 70 72 69 6d  ame for the prim
4200: 61 72 79 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20  ary assembly..
4210: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74      #       cont
4220: 61 69 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65  aining the Syste
4230: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61  m.Data.SQLite ma
4240: 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e 74 73  naged components
4250: 2e 20 20 49 74 0d 0a 20 20 20 20 20 20 23 20 20  .  It..      #
4260: 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6e       should be n
4270: 6f 74 65 64 20 74 68 61 74 20 74 68 69 73 20 61  oted that this a
4280: 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6d 61 79  ssembly file may
4290: 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 20 74 68   also contain th
42a0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  e..      #
42b0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e   native componen
42c0: 74 73 2c 20 69 66 20 61 20 6e 61 74 69 76 65 20  ts, if a native
42d0: 62 75 69 6c 64 20 69 73 20 69 6e 20 75 73 65 2e  build is in use.
42e0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
42f0: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
4300: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
4310: 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63  file join $direc 4320: 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 tory \.. 4330: 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 4340: 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 Lite.dll]].... 4350: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 if {![file e 4360: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
4370: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
4380: 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a    return false..
4390: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
43a0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
43b0: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 61 75 74  : Attempt to aut
43c0: 6f 6d 61 74 69 63 61 6c 6c 79 20 64 65 74 65 63  omatically detec
43d0: 74 20 69 66 20 74 68 65 20 70 72 69 6d 61 72 79  t if the primary
43e0: 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 20   assembly..
43f0: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e   #       contain
4400: 73 20 61 6e 79 20 6e 61 74 69 76 65 20 63 6f 6d  s any native com
4410: 70 6f 6e 65 6e 74 73 2c 20 69 66 20 6e 65 63 65  ponents, if nece
4420: 73 73 61 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d  ssary...      #.
4430: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
4440: 6e 67 20 6c 65 6e 67 74 68 20 24 6e 61 74 69 76  ng length $nativ 4450: 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d e] == 0} then {. 4460: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st 4470: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 72 ring length$var
4480: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20  Name] > 0} then
4490: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 75 70 76  {..          upv
44a0: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 24 76  ar 1 $varName$v
44b0: 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  arName..
44c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74  }....        set
44d0: 20 6e 61 74 69 76 65 20 5b 69 73 4d 69 78 65 64   native [isMixed
44e0: 4d 6f 64 65 41 73 73 65 6d 62 6c 79 20 24 66 69  ModeAssembly $fi 44f0: 6c 65 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 5d leName$varName]
4500: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
4510: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4520: 54 45 3a 20 49 66 20 74 68 65 20 70 72 69 6d 61  TE: If the prima
4530: 72 79 20 61 73 73 65 6d 62 6c 79 20 61 6c 73 6f  ry assembly also
4540: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 6e 61   contains the na
4550: 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c  tive components,
4560: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4570: 77 65 20 68 61 76 65 20 65 76 65 72 79 74 68 69  we have everythi
4580: 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20  ng we need...
4590: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
45a0: 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d  $native} then {. 45b0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 45c0: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d true.. }... 45d0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 45e0: 23 20 4e 4f 54 45 3a 20 57 68 61 74 20 69 73 20 # NOTE: What is 45f0: 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 the platform for 4600: 20 74 68 69 73 20 6d 61 63 68 69 6e 65 3f 0d 0a this machine?.. 4610: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 4620: 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 6d 61 63 et platform [mac 4630: 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d 20 24 hineToPlatform$
4640: 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 6d  ::tcl_platform(m
4650: 61 63 68 69 6e 65 29 5d 0d 0a 0d 0a 20 20 20 20  achine)]....
4660: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
4670: 45 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c  E: Build the ful
4680: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c  ly qualified fil
4690: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 69  e name for the i
46a0: 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 0d  nterop assembly.
46b0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
46c0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 79  ontaining the Sy
46d0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
46e0: 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e   native componen
46f0: 74 73 2e 20 20 49 66 20 74 68 69 73 0d 0a 20 20  ts.  If this..
4700: 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c 65      #       file
4710: 20 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75   exists, we shou
4720: 6c 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69  ld have everythi
4730: 6e 67 20 77 65 20 6e 65 65 64 2e 0d 0a 20 20 20  ng we need...
4740: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
4750: 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e  fileName [file n
4760: 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
4770: 6a 6f 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20  join $directory 4780: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 70 6c \..$pl
4790: 61 74 66 6f 72 6d 20 53 51 4c 69 74 65 2e 49 6e  atform SQLite.In
47a0: 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  terop.dll]]....
47b0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65       if {[file e
47c0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d  xists $fileName] 47d0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 47e0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 return true.. 47f0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 4800: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 set fileName [fi 4810: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 le nativename [f 4820: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74 ile join$direct
4830: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ory \..
4840: 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e   SQLite.Interop.
4850: 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  dll]]....      i
4860: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
4870: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 4880: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 4890: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d rn true.. } 48a0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 48b0: 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 # NOTE: Build 48c0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 the fully quali 48d0: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 66 fied file name f 48e0: 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f or the SQLite co 48f0: 72 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 re.. # 4900: 20 20 6c 69 62 72 61 72 79 2e 20 20 49 66 20 74 library. If t 4910: 68 69 73 20 66 69 6c 65 20 65 78 69 73 74 73 2c his file exists, 4920: 20 77 65 20 73 68 6f 75 6c 64 20 68 61 76 65 20 we should have 4930: 65 76 65 72 79 74 68 69 6e 67 20 77 65 0d 0a 20 everything we.. 4940: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 # nee 4950: 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 4960: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 set fileName 4970: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 4980: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 [file join$dir
4990: 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20  ectory \..
49a0: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 73 71      $platform sq 49b0: 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 lite3.dll]].... 49c0: 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 if {[file e 49d0: 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d xists$fileName]
49e0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
49f0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
4a00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
4a10: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
4a20: 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
4a30: 69 6c 65 20 6a 6f 69 6e 20 24 64 69 72 65 63 74  ile join $direct 4a40: 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ory \.. 4a50: 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 0d 0a sqlite3.dll]].. 4a60: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c .. if {[fil 4a70: 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 e exists$fileNa
4a80: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  me]} then {..
4a90: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
4aa0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
4ab0: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
4ac0: 54 45 3a 20 4f 6e 65 20 6f 72 20 6d 6f 72 65 20  TE: One or more
4ad0: 6e 61 74 69 76 65 20 63 6f 6d 70 6f 6e 65 6e 74  native component
4ae0: 73 20 6e 65 65 64 65 64 20 62 79 20 53 79 73 74  s needed by Syst
4af0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a  em.Data.SQLite..
4b00: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 72        #       ar
4b10: 65 20 6d 69 73 73 69 6e 67 2e 0d 0a 20 20 20 20  e missing...
4b20: 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72    #..      retur
4b30: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
4b40: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 52 65  ...    proc isRe
4b50: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 7b  leaseAvailable {
4b60: 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61 72 4e   directory {varN
4b70: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
4b80: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
4b90: 65 6e 67 74 68 20 24 76 61 72 4e 61 6d 65 5d 20  ength $varName] 4ba0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 4bb0: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
4bc0: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a  rName $varName.. 4bd0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 4be0: 20 72 65 74 75 72 6e 20 5b 69 73 42 75 69 6c 64 return [isBuild 4bf0: 41 76 61 69 6c 61 62 6c 65 20 22 22 20 24 64 69 Available ""$di
4c00: 72 65 63 74 6f 72 79 20 24 76 61 72 4e 61 6d 65  rectory $varName 4c10: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 4c20: 20 70 72 6f 63 20 6a 6f 69 6e 42 75 69 6c 64 44 proc joinBuildD 4c30: 69 72 65 63 74 6f 72 79 20 7b 20 6e 61 74 69 76 irectory { nativ 4c40: 65 20 70 61 74 68 20 79 65 61 72 20 70 6c 61 74 e path year plat 4c50: 66 6f 72 6d 20 63 6f 6e 66 69 67 75 72 61 74 69 form configurati 4c60: 6f 6e 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d on } {.. #. 4c70: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 . # NOTE: F 4c80: 69 67 75 72 65 20 6f 75 74 20 61 6e 64 20 74 68 igure out and th 4c90: 65 6e 20 72 65 74 75 72 6e 20 74 68 65 20 66 75 en return the fu 4ca0: 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 lly qualified pa 4cb0: 74 68 20 74 6f 20 74 68 65 20 62 75 69 6c 64 0d th to the build. 4cc0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 . # d 4cd0: 69 72 65 63 74 6f 72 79 20 62 61 73 65 64 20 6f irectory based o 4ce0: 6e 20 61 6c 6c 20 74 68 65 20 61 72 67 75 6d 65 n all the argume 4cf0: 6e 74 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 nts provided by 4d00: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... 4d10: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 4d20: 24 6e 61 74 69 76 65 7d 20 74 68 65 6e 20 7b 0d$native} then {.
4d30: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return
4d40: 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68  [file join $path 4d50: 20 62 69 6e 20 24 79 65 61 72 20 24 70 6c 61 74 bin$year $plat 4d60: 66 6f 72 6d 20 24 63 6f 6e 66 69 67 75 72 61 74 form$configurat
4d70: 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c  ion]..      } el
4d80: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65  se {..        re
4d90: 74 75 72 6e 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  turn [file join
4da0: 24 70 61 74 68 20 62 69 6e 20 24 79 65 61 72 20  $path bin$year
4db0: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62  $configuration b 4dc0: 69 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 in].. }.. 4dd0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 4de0: 20 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f getBuildDirecto 4df0: 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ry {} {.. # 4e00: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 4e10: 53 65 65 20 69 66 20 74 68 65 20 22 6e 61 74 69 See if the "nati 4e20: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 ve" runtime opti 4e30: 6f 6e 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e on has been set. 4e40: 20 20 49 66 20 73 6f 2c 20 75 73 65 20 74 68 65 If so, use the 4e50: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4e60: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 directory for th 4e70: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 4e80: 65 6d 62 6c 79 20 28 61 2e 6b 2e 61 2e 20 74 68 embly (a.k.a. th 4e90: 65 20 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 e native interop 4ea0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 4eb0: 61 73 73 65 6d 62 6c 79 29 2e 20 20 54 6f 20 65 assembly). To e 4ec0: 6e 61 62 6c 65 20 74 68 69 73 20 6f 70 74 69 6f nable this optio 4ed0: 6e 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e n via the comman 4ee0: 64 20 6c 69 6e 65 2c 20 65 6e 74 65 72 20 61 0d d line, enter a. 4ef0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 4f00: 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 ommand similar t 4f10: 6f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6f 6c o one of the fol 4f20: 6c 6f 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 20 6f lowing (all on o 4f30: 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 20 ne line):.. 4f40: 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 #.. # 4f50: 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 65 EagleShell.exe 4f60: 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 72 75 -initialize -ru 4f70: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 ntimeOption nati 4f80: 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ve.. # 4f90: 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 -file .\path 4fa0: 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 \to\all.eagle.. 4fb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 4fc0: 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65 20 To enable 4fd0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20 this option via 4fe0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 the command line 4ff0: 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22 62 prior to the "b 5000: 65 74 61 20 31 36 22 0d 0a 20 20 20 20 20 20 23 eta 16".. # 5010: 20 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f release o 5020: 66 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c f Eagle, the fol 5030: 6c 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d lowing command m 5040: 75 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 ust be used inst 5050: 65 61 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ead.. # 5060: 20 20 20 28 61 6c 73 6f 20 61 6c 6c 20 6f 6e 20 (also all on 5070: 6f 6e 65 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 one line):.. 5080: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 20 20 20 #.. # 5090: 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e 65 78 EagleShell.ex 50a0: 65 20 2d 69 6e 69 74 69 61 6c 69 7a 65 20 2d 70 e -initialize -p 50b0: 6f 73 74 49 6e 69 74 69 61 6c 69 7a 65 0d 0a 20 ostInitialize.. 50c0: 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 # " 50d0: 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e object invoke In 50e0: 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 terpreter.GetAct 50f0: 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f 70 ive AddRuntimeOp 5100: 74 69 6f 6e 20 6e 61 74 69 76 65 22 0d 0a 20 20 tion native".. 5110: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66 # -f 5120: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c ile .\path\to\al 5130: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 l.eagle.. # 5140: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 .. if {[inf 5150: 6f 20 65 78 69 73 74 73 20 3a 3a 62 75 69 6c 64 o exists ::build 5160: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 5170: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 5180: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 75 ing length$::bu
5190: 69 6c 64 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e  ild_directory] >
51a0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
51b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
51c0: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74   NOTE: The locat
51d0: 69 6f 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64  ion of the build
51e0: 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62   directory has b
51f0: 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d  een overridden;.
5200: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
5210: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20   therefore, use
5220: 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20  it verbatim...
5230: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
5240: 20 72 65 74 75 72 6e 20 24 3a 3a 62 75 69 6c 64   return $::build 5250: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 _directory.. 5260: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 5270: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 5280: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 22 6e NOTE: If the "n 5290: 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 20 6f ative" runtime o 52a0: 70 74 69 6f 6e 20 69 73 20 73 65 74 2c 20 74 68 ption is set, th 52b0: 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 e mixed-mode ass 52c0: 65 6d 62 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 embly.. # 52d0: 20 20 20 20 20 20 20 69 73 20 62 65 69 6e 67 20 is being 52e0: 74 65 73 74 65 64 2e 20 20 49 6e 20 74 68 61 74 tested. In that 52f0: 20 63 61 73 65 2c 20 74 68 65 20 70 61 74 68 20 case, the path 5300: 74 6f 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 to the build dir 5310: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 ectory.. 5320: 23 20 20 20 20 20 20 20 77 69 6c 6c 20 63 6f 6e # will con 5330: 74 61 69 6e 20 74 68 65 20 70 6c 61 74 66 6f 72 tain the platfor 5340: 6d 20 6e 61 6d 65 20 61 6e 64 20 61 6c 6c 20 74 m name and all t 5350: 68 65 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 he binaries unde 5360: 72 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 r test.. 5370: 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 # should b 5380: 65 20 70 72 65 73 65 6e 74 20 69 6e 20 74 68 61 e present in tha 5390: 74 20 64 69 72 65 63 74 6f 72 79 2e 20 20 49 66 t directory. If 53a0: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75 the "native" ru 53b0: 6e 74 69 6d 65 0d 0a 20 20 20 20 20 20 20 20 23 ntime.. # 53c0: 20 20 20 20 20 20 20 6f 70 74 69 6f 6e 20 69 73 option is 53d0: 20 6e 6f 74 20 73 65 74 2c 20 74 68 65 20 62 75 not set, the bu 53e0: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 77 69 ild directory wi 53f0: 6c 6c 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64 ll be considered 5400: 20 74 6f 20 62 65 0d 0a 20 20 20 20 20 20 20 20 to be.. 5410: 23 20 20 20 20 20 20 20 22 70 6c 61 74 66 6f 72 # "platfor 5420: 6d 2d 6e 65 75 74 72 61 6c 22 2c 20 77 69 74 68 m-neutral", with 5430: 20 74 68 65 20 6e 6f 74 61 62 6c 65 20 65 78 63 the notable exc 5440: 65 70 74 69 6f 6e 20 6f 66 20 61 6e 79 20 6e 61 eption of any na 5450: 74 69 76 65 0d 0a 20 20 20 20 20 20 20 20 23 20 tive.. # 5460: 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 28 assembly ( 5470: 65 2e 67 2e 20 22 53 51 4c 69 74 65 2e 49 6e 74 e.g. "SQLite.Int 5480: 65 72 6f 70 2e 64 6c 6c 22 29 20 63 6f 70 69 65 erop.dll") copie 5490: 64 20 74 68 65 72 65 20 64 75 72 69 6e 67 20 74 d there during t 54a0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 54b0: 20 20 20 20 62 75 69 6c 64 20 70 72 6f 63 65 73 build proces 54c0: 73 20 69 74 73 65 6c 66 2e 20 20 49 66 20 74 68 s itself. If th 54d0: 65 20 62 75 69 6c 64 20 70 72 6f 63 65 73 73 20 e build process 54e0: 73 6f 6d 65 68 6f 77 20 64 6f 65 73 20 6e 6f 74 somehow does not 54f0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5500: 20 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 76 copy the nativ 5510: 65 20 61 73 73 65 6d 62 6c 79 20 66 6f 72 20 74 e assembly for t 5520: 68 69 73 20 70 6c 61 74 66 6f 72 6d 2c 20 6d 6f his platform, mo 5530: 73 74 20 6f 66 20 74 68 65 20 74 65 73 74 73 0d st of the tests. 5540: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5550: 20 69 6e 20 74 68 65 20 73 75 69 74 65 20 77 69 in the suite wi 5560: 6c 6c 20 73 69 6d 70 6c 79 20 62 65 20 73 6b 69 ll simply be ski 5570: 70 70 65 64 2e 20 20 47 65 6e 65 72 61 6c 6c 79 pped. Generally 5580: 20 73 70 65 61 6b 69 6e 67 2c 20 74 68 65 72 65 speaking, there 5590: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 55a0: 20 20 61 72 65 20 74 77 6f 20 77 61 79 73 20 74 are two ways t 55b0: 6f 20 62 75 69 6c 64 20 74 68 65 20 62 69 6e 61 o build the bina 55c0: 72 69 65 73 20 77 68 65 6e 20 70 72 65 70 61 72 ries when prepar 55d0: 69 6e 67 20 74 6f 20 72 75 6e 20 74 68 65 0d 0a ing to run the.. 55e0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 55f0: 74 65 73 74 20 73 75 69 74 65 3a 0d 0a 20 20 20 test suite:.. 5600: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5610: 23 20 20 20 20 20 20 20 31 2e 20 42 75 69 6c 64 # 1. Build 5620: 20 74 68 65 20 73 65 70 61 72 61 74 65 20 6d 61 the separate ma 5630: 6e 61 67 65 64 20 61 6e 64 20 6e 61 74 69 76 65 naged and native 5640: 20 61 73 73 65 6d 62 6c 69 65 73 20 75 73 69 6e assemblies usin 5650: 67 20 73 6f 6d 65 0d 0a 20 20 20 20 20 20 20 20 g some.. 5660: 23 20 20 20 20 20 20 20 20 20 20 63 6f 6d 6d 61 # comma 5670: 6e 64 73 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d nds similar to:. 5680: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5690: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62 # b 56a0: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 uild.bat${Confi
56b0: 67 75 72 61 74 69 6f 6e 7d 4d 61 6e 61 67 65 64  guration}Managed
56c0: 4f 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d  Only ${Platform} 56d0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 56e0: 20 20 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 build.bat$
56f0: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 4e  {Configuration}N
5700: 61 74 69 76 65 4f 6e 6c 79 20 24 7b 50 6c 61 74  ativeOnly ${Plat 5710: 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 form}.. # 5720: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5730: 20 20 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e Where${Con
5740: 66 69 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65  figuration} is e
5750: 69 74 68 65 72 20 22 44 65 62 75 67 22 20 6f 72  ither "Debug" or
5760: 20 22 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a   "Release" and..
5770: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
5780: 20 20 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69     ${Platform} i 5790: 73 20 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 s either "Win32" 57a0: 20 6f 72 20 22 78 36 34 22 2e 0d 0a 20 20 20 20 or "x64"... 57b0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 57c0: 20 20 20 20 20 20 20 32 2e 20 42 75 69 6c 64 20 2. Build 57d0: 74 68 65 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61 the mixed-mode a 57e0: 73 73 65 6d 62 6c 79 20 75 73 69 6e 67 20 61 20 ssembly using a 57f0: 63 6f 6d 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 command similar 5800: 74 6f 3a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a to:.. #.. 5810: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5820: 20 20 20 62 75 69 6c 64 2e 62 61 74 20 24 7b 43 build.bat${C
5830: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20 24 7b  onfiguration} ${ 5840: 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20 20 Platform}.. 5850: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 5860: 20 20 20 20 20 20 20 20 20 57 68 65 72 65 20 24 Where$
5870: 7b 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 7d 20  {Configuration}
5880: 69 73 20 65 69 74 68 65 72 20 22 44 65 62 75 67  is either "Debug
5890: 22 20 6f 72 20 22 52 65 6c 65 61 73 65 22 20 61  " or "Release" a
58a0: 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  nd..        #
58b0: 20 20 20 20 20 20 20 24 7b 50 6c 61 74 66 6f 72         ${Platfor 58c0: 6d 7d 20 69 73 20 65 69 74 68 65 72 20 22 57 69 m} is either "Wi 58d0: 6e 33 32 22 20 6f 72 20 22 78 36 34 22 2e 20 20 n32" or "x64". 58e0: 49 66 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 If this command 58f0: 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 is.. # 5900: 20 20 20 20 20 20 20 75 73 65 64 2c 20 76 61 72 used, var 5910: 69 6f 75 73 20 74 65 73 74 73 20 74 68 61 74 20 ious tests that 5920: 72 65 71 75 69 72 65 20 73 75 70 70 6c 65 6d 65 require suppleme 5930: 6e 74 61 72 79 20 6d 61 6e 61 67 65 64 0d 0a 20 ntary managed.. 5940: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 5950: 20 20 61 73 73 65 6d 62 6c 69 65 73 20 28 65 2e assemblies (e. 5960: 67 2e 20 4c 49 4e 51 29 20 6d 61 79 20 62 65 20 g. LINQ) may be 5970: 73 6b 69 70 70 65 64 20 75 6e 6c 65 73 73 20 74 skipped unless t 5980: 68 6f 73 65 20 62 69 6e 61 72 69 65 73 0d 0a 20 hose binaries.. 5990: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 59a0: 20 20 61 72 65 20 73 75 62 73 65 71 75 65 6e 74 are subsequent 59b0: 6c 79 20 63 6f 70 69 65 64 20 69 6e 74 6f 20 74 ly copied into t 59c0: 68 65 20 63 6f 72 72 65 63 74 20 64 69 72 65 63 he correct direc 59d0: 74 6f 72 79 20 28 69 2e 65 2e 20 62 79 0d 0a 20 tory (i.e. by.. 59e0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 # 59f0: 20 20 22 74 65 73 74 5f 61 6c 6c 2e 62 61 74 22 "test_all.bat" 5a00: 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 )... #.. 5a10: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 4e # N 5a20: 6f 74 65 20 74 68 61 74 20 61 6c 6c 20 6f 66 20 ote that all of 5a30: 74 68 65 20 62 75 69 6c 64 20 63 6f 6d 6d 61 6e the build comman 5a40: 64 73 20 61 62 6f 76 65 20 77 69 6c 6c 20 64 65 ds above will de 5a50: 66 61 75 6c 74 20 74 6f 20 75 73 69 6e 67 0d 0a fault to using.. 5a60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 5a70: 74 68 65 20 6c 61 74 65 73 74 20 76 65 72 73 69 the latest versi 5a80: 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 76 on of MSBuild av 5a90: 61 69 6c 61 62 6c 65 20 61 6e 64 20 74 68 65 20 ailable and the 5aa0: 22 74 65 73 74 5f 79 65 61 72 22 20 6d 61 79 0d "test_year" may. 5ab0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 5ac0: 20 6e 65 65 64 20 74 6f 20 62 65 20 61 64 6a 75 need to be adju 5ad0: 73 74 65 64 20 61 63 63 6f 72 64 69 6e 67 6c 79 sted accordingly 5ae0: 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 72 75 6e to actually run 5af0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 5b00: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 5b10: 20 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 63 Refer to the c 5b20: 6f 6d 6d 65 6e 74 73 20 69 6e 20 5b 67 65 74 42 omments in [getB 5b30: 75 69 6c 64 59 65 61 72 5d 20 66 6f 72 20 6d 6f uildYear] for mo 5b40: 72 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f re information o 5b50: 6e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 n.. # 5b60: 20 20 20 68 6f 77 20 74 6f 20 73 65 74 20 74 68 how to set th 5b70: 69 73 20 76 61 72 69 61 62 6c 65 2e 0d 0a 20 20 is variable... 5b80: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5b90: 20 73 65 74 20 6e 61 74 69 76 65 20 5b 68 61 73 set native [has 5ba0: 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 RuntimeOption na 5bb0: 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tive].... 5bc0: 20 72 65 74 75 72 6e 20 5b 6a 6f 69 6e 42 75 69 return [joinBui 5bd0: 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 ldDirectory$nat
5be0: 69 76 65 20 5b 67 65 74 42 75 69 6c 64 42 61 73  ive [getBuildBas
5bf0: 65 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a 20  eDirectory] \..
5c00: 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42             [getB
5c10: 75 69 6c 64 59 65 61 72 5d 20 5b 67 65 74 42 75  uildYear] [getBu
5c20: 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61 74  ildPlatform $nat 5c30: 69 76 65 5d 20 5b 67 65 74 42 75 69 6c 64 43 6f ive] [getBuildCo 5c40: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 5d 0d 0a 20 nfiguration]].. 5c50: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 5c60: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 52 65 .. proc getRe 5c70: 6c 65 61 73 65 56 65 72 73 69 6f 6e 20 7b 7d 20 leaseVersion {} 5c80: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 5c90: 20 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 # NOTE: Figure 5ca0: 20 6f 75 74 20 74 68 65 20 72 65 6c 65 61 73 65 out the release 5cb0: 20 76 65 72 73 69 6f 6e 20 66 6f 72 20 75 73 65 version for use 5cc0: 20 77 69 74 68 20 74 68 65 20 62 75 69 6c 64 20 with the build 5cd0: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 directory.. 5ce0: 20 23 20 20 20 20 20 20 20 77 68 65 6e 20 63 68 # when ch 5cf0: 65 63 6b 69 6e 67 20 66 6f 72 20 61 76 61 69 6c ecking for avail 5d00: 61 62 6c 65 20 72 65 6c 65 61 73 65 73 2e 0d 0a able releases... 5d10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 5d20: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 5d30: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 5d40: 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 n] && \.. 5d50: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 5d60: 68 20 24 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 h$::release_ver
5d70: 73 69 6f 6e 5d 20 3e 20 30 7d 20 74 68 65 6e 20  sion] > 0} then
5d80: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
5d90: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68        # NOTE: Th
5da0: 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f  e release versio
5db0: 6e 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72  n has been overr
5dc0: 69 64 64 65 6e 3b 20 74 68 65 72 65 66 6f 72 65  idden; therefore
5dd0: 2c 20 75 73 65 20 69 74 0d 0a 20 20 20 20 20 20  , use it..
5de0: 20 20 23 20 20 20 20 20 20 20 76 65 72 62 61 74    #       verbat
5df0: 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  im...        #..
5e00: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24          return $5e10: 3a 3a 72 65 6c 65 61 73 65 5f 76 65 72 73 69 6f ::release_versio 5e20: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 n.. } else 5e30: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 5e40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f # NOTE: No 5e50: 20 72 65 6c 65 61 73 65 20 76 65 72 73 69 6f 6e release version 5e60: 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 20 72 is available, r 5e70: 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 20 73 eturn an empty s 5e80: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 tring... 5e90: 23 20 20 20 20 20 20 20 49 74 20 69 73 20 69 6d # It is im 5ea0: 70 6f 72 74 61 6e 74 20 74 6f 20 72 65 74 75 72 portant to retur 5eb0: 6e 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e n an empty strin 5ec0: 67 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 g here because t 5ed0: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # 5ee0: 20 20 20 20 72 65 73 75 6c 74 20 6f 66 20 74 68 result of th 5ef0: 69 73 20 70 72 6f 63 65 64 75 72 65 20 6d 61 79 is procedure may 5f00: 20 62 65 20 75 73 65 64 20 77 69 74 68 20 5b 66 be used with [f 5f10: 69 6c 65 20 6a 6f 69 6e 5d 2e 0d 0a 20 20 20 20 ile join]... 5f20: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 5f30: 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 eturn "".. 5f40: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 5f50: 20 70 72 6f 63 20 67 65 74 42 75 69 6c 64 46 69 proc getBuildFi 5f60: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d leName { fileNam 5f70: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 5f80: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 } {.. #.. 5f90: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 5fa0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65 rns the specifie 5fb0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69 d file name as i 5fc0: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65 f it were locate 5fd0: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 d in the.. 5fe0: 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 64 69 # build di 5ff0: 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72 64 rectory, discard 6000: 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f 72 ing any director 6010: 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70 72 y information pr 6020: 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 esent.. # 6030: 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c 65 in the file 6040: 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64 65 name as provide 6050: 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e d by our caller. 6060: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6070: 20 73 65 74 20 72 65 73 75 6c 74 20 5b 66 69 6c set result [fil 6080: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a e nativename \.. 6090: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 60a0: 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44 69 join [getBuildDi 60b0: 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f rectory]$platfo
60c0: 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66  rm [file tail $f 60d0: 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 0d 0a 20 20 ileName]]].... 60e0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 48 #.. # H 60f0: 41 43 4b 3a 20 57 68 65 6e 20 72 75 6e 6e 69 6e ACK: When runnin 6100: 67 20 6f 6e 20 57 6f 57 36 34 2c 20 61 73 73 75 g on WoW64, assu 6110: 6d 65 20 74 68 65 20 74 65 73 74 20 65 78 65 63 me the test exec 6120: 75 74 61 62 6c 65 73 20 61 72 65 20 70 72 65 73 utables are pres 6130: 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ent.. # 6140: 20 20 20 77 69 74 68 20 74 68 65 20 22 33 32 22 with the "32" 6150: 20 73 75 66 66 69 78 20 6f 6e 20 74 68 65 6d 2e suffix on them. 6160: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6170: 20 69 66 20 7b 5b 69 73 52 75 6e 6e 69 6e 67 57 if {[isRunningW 6180: 6f 57 36 34 5d 20 26 26 20 5b 66 69 6c 65 20 65 oW64] && [file e 6190: 78 74 65 6e 73 69 6f 6e 20 24 72 65 73 75 6c 74 xtension$result
61a0: 5d 20 65 71 20 22 2e 65 78 65 22 7d 20 74 68 65  ] eq ".exe"} the
61b0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74  n {..        set
61c0: 20 72 65 73 75 6c 74 20 5b 61 70 70 65 6e 64 41   result [appendA
61d0: 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  rgs [file rootna
61e0: 6d 65 20 24 72 65 73 75 6c 74 5d 20 33 32 2e 65  me $result] 32.e 61f0: 78 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a xe].. }.... 6200: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 return$re
6210: 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  sult..    }.....
6220: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65      proc getExte
6230: 72 6e 61 6c 44 69 72 65 63 74 6f 72 79 20 7b 7d  rnalDirectory {}
6240: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
6250: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20     # NOTE: This
6260: 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e  procedure return
6270: 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20  s the directory
6280: 77 68 65 72 65 20 74 68 65 20 65 78 74 65 72 6e  where the extern
6290: 61 6c 20 62 69 6e 61 72 79 0d 0a 20 20 20 20 20  al binary..
62a0: 20 23 20 20 20 20 20 20 20 66 69 6c 65 73 20 61   #       files a
62b0: 72 65 20 6c 6f 63 61 74 65 64 2e 0d 0a 20 20 20  re located...
62c0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
62d0: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  rn [file nativen
62e0: 61 6d 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d  ame [file dirnam
62f0: 65 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20  e [file dirname
6300: 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 5d 5d 5d  [info binary]]]]
6310: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
6320: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 44 69  proc getBinaryDi
6330: 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20  rectory {} {..
6340: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
6350: 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64  OTE: This proced
6360: 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 20  ure returns the
6370: 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 20  directory where
6380: 74 68 65 20 74 65 73 74 20 61 70 70 6c 69 63 61  the test applica
6390: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  tion..      #
63a0: 20 20 20 20 69 74 73 65 6c 66 20 28 69 2e 65 2e      itself (i.e.
63b0: 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 6c 6c   the Eagle shell
63c0: 29 20 69 73 20 6c 6f 63 61 74 65 64 2e 20 20 54  ) is located.  T
63d0: 68 69 73 20 77 69 6c 6c 20 62 65 20 75 73 65 64  his will be used
63e0: 20 61 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20   as..      #
63f0: 20 20 20 74 68 65 20 64 65 73 74 69 6e 61 74 69     the destinati
6400: 6f 6e 20 66 6f 72 20 74 68 65 20 63 6f 70 69 65  on for the copie
6410: 64 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  d System.Data.SQ
6420: 4c 69 74 65 20 6e 61 74 69 76 65 20 61 6e 64 0d  Lite native and.
6430: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d  .      #       m
6440: 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65  anaged assemblie
6450: 73 20 28 69 2e 65 2e 20 62 65 63 61 75 73 65 20  s (i.e. because
6460: 74 68 69 73 20 69 73 20 6f 6e 65 20 6f 66 20 74  this is one of t
6470: 68 65 20 66 65 77 20 70 6c 61 63 65 73 0d 0a 20  he few places..
6480: 20 20 20 20 20 23 20 20 20 20 20 20 20 77 68 65       #       whe
6490: 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c 20  re the CLR will
64a0: 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61 6e  actually find an
64b0: 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f 70  d load them prop
64c0: 65 72 6c 79 29 2e 0d 0a 20 20 20 20 20 20 23 0d  erly)...      #.
64d0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f  .      if {[info
64e0: 20 65 78 69 73 74 73 20 3a 3a 62 69 6e 61 72 79   exists ::binary
64f0: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c  _directory] && \
6500: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
6510: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 62 69  ing length $::bi 6520: 6e 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 nary_directory] 6530: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 6540: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 6550: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 # NOTE: The loca 6560: 74 69 6f 6e 20 6f 66 20 74 68 65 20 62 69 6e 61 tion of the bina 6570: 72 79 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 ry directory has 6580: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 6590: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 65a0: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 65b0: 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d 0a e it verbatim... 65c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 65d0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 69 6e return$::bin
65e0: 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20  ary_directory..
65f0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
6600: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 69         return [i
6610: 6e 66 6f 20 62 69 6e 61 72 79 5d 0d 0a 20 20 20  nfo binary]..
6620: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
6630: 20 20 20 20 70 72 6f 63 20 67 65 74 45 78 74 65      proc getExte
6640: 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 7b 20 66  rnalFileName { f
6650: 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20  ileName } {..
6660: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
6670: 54 45 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20  TE: Returns the
6680: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e  specified file n
6690: 61 6d 65 20 61 73 20 69 66 20 69 74 20 77 65 72  ame as if it wer
66a0: 65 20 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65  e located in the
66b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
66c0: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
66d0: 6e 69 6e 67 20 74 68 65 20 65 78 74 65 72 6e 61  ning the externa
66e0: 6c 20 62 69 6e 61 72 69 65 73 2e 0d 0a 20 20 20  l binaries...
66f0: 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74 75     #..      retu
6700: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  rn [file nativen
6710: 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b  ame [file join [
6720: 67 65 74 45 78 74 65 72 6e 61 6c 44 69 72 65 63  getExternalDirec
6730: 74 6f 72 79 5d 20 24 66 69 6c 65 4e 61 6d 65 5d  tory] $fileName] 6740: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 ].. }..... 6750: 20 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 proc getBinaryF 6760: 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 ileName { fileNa 6770: 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d me {platform ""} 6780: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 6790: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 # NOTE: Ret 67a0: 75 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 urns the specifi 67b0: 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 ed file name as 67c0: 69 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 if it were locat 67d0: 65 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 ed in the.. 67e0: 20 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 # binary 67f0: 64 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 directory, disca 6800: 72 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 rding any direct 6810: 6f 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 ory information 6820: 70 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 present.. # 6830: 20 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 in the fi 6840: 6c 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 le name as provi 6850: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle 6860: 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 r... #.. 6870: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 6880: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 6890: 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f [file jo 68a0: 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 in [getBinaryDir 68b0: 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 ectory]$platfor
68c0: 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  m [file tail $fi 68d0: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d leName]]].. } 68e0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 ..... proc ge 68f0: 74 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e tCoreBinaryFileN 6900: 61 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 ame { {platform 6910: 22 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 66 61 ""} {standard fa 6920: 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 lse} } {.. 6930: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 6940: 20 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c Returns the ful 6950: 6c 20 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 l path for the f 6960: 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 ile containing t 6970: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a he SQLite core.. 6980: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 # na 6990: 74 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 tive library cod 69a0: 65 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 e for this platf 69b0: 6f 72 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 orm. First, che 69c0: 63 6b 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 ck and see if.. 69d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 69e0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 SQLite core nat 69f0: 69 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 ive library has 6a00: 61 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 already been loa 6a10: 64 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 ded. Next,.. 6a20: 20 20 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 # fallb 6a30: 61 63 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 ack to what the 6a40: 66 75 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 full path should 6a50: 20 62 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 be, based on wh 6a60: 65 74 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 ether the.. 6a70: 20 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d # mixed-m 6a80: 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 ode assembly is 6a90: 62 65 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 being used and t 6aa0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 he name of the c 6ab0: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 urrent.. # 6ac0: 20 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d platform.. 6ad0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. 6ae0: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 6af0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv 6b00: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP 6b10: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 ublic \.. 6b20: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data 6b30: 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 .SQLite.UnsafeNa 6b40: 74 69 76 65 4d 65 74 68 6f 64 73 20 5f 53 51 4c tiveMethods _SQL 6b50: 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 46 iteNativeModuleF 6b60: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } 6b70: 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20 fileName] == 0 6b80: 26 26 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 && [string lengt 6b90: 68 20 24 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 h$fileName] > 0
6ba0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
6bb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6bc0: 4f 54 45 3a 20 54 68 65 20 53 51 4c 69 74 65 20  OTE: The SQLite
6bd0: 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72  core native libr
6be0: 61 72 79 20 68 61 73 20 61 6c 72 65 61 64 79 20  ary has already
6bf0: 62 65 65 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d  been loaded via.
6c00: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
6c10: 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
6c20: 61 72 79 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20  ary pre-loader.
6c30: 20 52 65 74 75 72 6e 20 74 68 61 74 20 66 69 6c   Return that fil
6c40: 65 20 6e 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20  e name now...
6c50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
6c60: 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65  return $fileName 6c70: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 6c80: 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 if {[hasRunti 6c90: 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d meOption native] 6ca0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 6cb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 6cc0: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 OTE: Return the 6cd0: 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d mixed-mode assem 6ce0: 62 6c 79 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a bly file name... 6cf0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 6d00: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 6d10: 6e 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 nativename \.. 6d20: 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 6d30: 6a 6f 69 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 join [getBinaryD 6d40: 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 irectory]$platf
6d50: 6f 72 6d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  orm System.Data.
6d60: 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20  SQLite.dll]]..
6d70: 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73      } elseif {$s 6d80: 74 61 6e 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d tandard} then {. 6d90: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 6da0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 # NOTE: Retu 6db0: 72 6e 20 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e rn the native-on 6dc0: 6c 79 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 ly standard SQLi 6dd0: 74 65 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 te library file 6de0: 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 name... # 6df0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 6e00: 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d [file nativenam 6e10: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 6e20: 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 [file join [get 6e30: 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d BinaryDirectory] 6e40: 20 24 70 6c 61 74 66 6f 72 6d 20 73 71 6c 69 74$platform sqlit
6e50: 65 33 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20  e3.dll]]..
6e60: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
6e70: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
6e80: 4f 54 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20  OTE: Return the
6e90: 6e 61 74 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65  native-only inte
6ea0: 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 66 69 6c  rop assembly fil
6eb0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  e name...
6ec0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
6ed0: 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  rn [file nativen
6ee0: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
6ef0: 20 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67     [file join [g
6f00: 65 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72  etBinaryDirector
6f10: 79 5d 20 24 70 6c 61 74 66 6f 72 6d 20 53 51 4c  y] $platform SQL 6f20: 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d ite.Interop.dll] 6f30: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 6f40: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 6f50: 65 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 etCommonDirector 6f60: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 6f70: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 6f80: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 6f90: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 6fa0: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 6fb0: 73 74 20 73 63 72 69 70 74 73 0d 0a 20 20 20 20 st scripts.. 6fc0: 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c 64 # should 6fd0: 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 be located. By 6fe0: 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20 6a default, this j 6ff0: 75 73 74 20 72 65 74 75 72 6e 73 20 74 68 65 20 ust returns the 7000: 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 Eagle.. # 7010: 20 20 20 20 20 62 69 6e 61 72 79 20 64 69 72 65 binary dire 7020: 63 74 6f 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d ctory... #. 7030: 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 7040: 20 65 78 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e exists ::common 7050: 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c _directory] && \ 7060: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 .. [str 7070: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f ing length$::co
7080: 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20  mmon_directory]
7090: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
70a0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
70b0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61  # NOTE: The loca
70c0: 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d  tion of the comm
70d0: 6f 6e 20 64 69 72 65 63 74 6f 72 79 20 68 61 73  on directory has
70e0: 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20   been set;..
70f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
7100: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
7110: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
7120: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d     return $::com 7130: 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 mon_directory.. 7140: 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b } elseif {[ 7150: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 info exists ::ve 7160: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 ndor_directory] 7170: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 && \.. 7180: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
7190: 3a 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f  ::vendor_directo
71a0: 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  ry] > 0} then {.
71b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
71c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
71d0: 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20  location of the
71e0: 76 65 6e 64 6f 72 20 64 69 72 65 63 74 6f 72 79  vendor directory
71f0: 20 68 61 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a   has been set;..
7200: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
7210: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
7220: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
7230: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 7240: 3a 76 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 :vendor_director 7250: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 y.. } elsei 7260: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 7270: 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 ::tcl_library] & 7280: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 7290: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a string length$:
72a0: 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20  :tcl_library] >
72b0: 30 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20  0 && \..
72c0: 20 20 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74    [file isdirect
72d0: 6f 72 79 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61  ory $::tcl_libra 72e0: 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 ry]} then {.. 72f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 7300: 23 20 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 # NOTE: The vari 7310: 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 6c 6f able with the lo 7320: 63 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 cation of the sc 7330: 72 69 70 74 20 6c 69 62 72 61 72 79 20 69 73 0d ript library is. 7340: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 7350: 20 73 65 74 20 61 6e 64 20 61 70 70 65 61 72 73 set and appears 7360: 20 74 6f 20 62 65 20 61 20 72 65 61 6c 20 64 69 to be a real di 7370: 72 65 63 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f rectory (i.e. no 7380: 74 20 65 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 t embedded.. 7390: 20 20 20 20 23 20 20 20 20 20 20 20 77 69 74 68 # with 73a0: 69 6e 20 61 20 66 69 6c 65 29 3b 20 74 68 65 72 in a file); ther 73b0: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a efore, use it... 73c0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 73d0: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c return$::tcl
73e0: 5f 6c 69 62 72 61 72 79 0d 0a 20 20 20 20 20 20  _library..
73f0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
7400: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
7410: 4f 54 45 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f  OTE: Fallback to
7420: 20 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 63   the directory c
7430: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 65 78  ontaining the ex
7440: 65 63 75 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20  ecutable...
7450: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
7460: 74 75 72 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72  turn [info binar
7470: 79 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  y]..      }..
7480: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
7490: 67 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63  getDatabaseDirec
74a0: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  tory {} {..
74b0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
74c0: 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65  : This procedure
74d0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72   returns the dir
74e0: 65 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65  ectory where the
74f0: 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73 0d   test databases.
7500: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
7510: 68 6f 75 6c 64 20 62 65 20 6c 6f 63 61 74 65 64  hould be located
7520: 2e 20 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  .  By default, t
7530: 68 69 73 20 6a 75 73 74 20 75 73 65 73 20 74 68  his just uses th
7540: 65 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20  e temporary..
7550: 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
7560: 74 6f 72 79 20 63 6f 6e 66 69 67 75 72 65 64 20  tory configured
7570: 66 6f 72 20 74 68 69 73 20 73 79 73 74 65 6d 2e  for this system.
7580: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7590: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
75a0: 73 20 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72  s ::database_dir
75b0: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
75c0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
75d0: 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 61 62 61  length $::databa 75e0: 73 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 se_directory] > 75f0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 7600: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 7610: 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 NOTE: The locati 7620: 6f 6e 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 on of the databa 7630: 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 se directory has 7640: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 7650: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 7660: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 7670: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 7680: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 7690: 20 24 3a 3a 64 61 74 61 62 61 73 65 5f 64 69 72$::database_dir
76a0: 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20  ectory..      }
76b0: 65 6c 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78  elseif {[info ex
76c0: 69 73 74 73 20 3a 3a 73 63 72 61 74 63 68 5f 64  ists ::scratch_d
76d0: 69 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a  irectory] && \..
76e0: 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e            [strin
76f0: 67 20 6c 65 6e 67 74 68 20 24 3a 3a 73 63 72 61  g length $::scra 7700: 74 63 68 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e tch_directory] > 7710: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 7720: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 7730: 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 NOTE: The locat 7740: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 61 74 ion of the scrat 7750: 63 68 20 64 69 72 65 63 74 6f 72 79 20 68 61 73 ch directory has 7760: 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e been overridden 7770: 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ;.. # 7780: 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 therefore, us 7790: 65 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 e it... # 77a0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 77b0: 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65$::scratch_dire
77c0: 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65  ctory..      } e
77d0: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 72  lse {..        r
77e0: 65 74 75 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72  eturn [getTempor
77f0: 61 72 79 50 61 74 68 5d 0d 0a 20 20 20 20 20 20  aryPath]..
7800: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  }..    }.....
7810: 20 70 72 6f 63 20 67 65 74 54 65 6d 70 6f 72 61   proc getTempora
7820: 72 79 44 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b  ryDirectory {} {
7830: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
7840: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
7850: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
7860: 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 77 68  the directory wh
7870: 65 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61 72  ere the temporar
7880: 79 20 66 69 6c 65 73 0d 0a 20 20 20 20 20 20 23  y files..      #
7890: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
78a0: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
78b0: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
78c0: 20 75 73 65 73 20 74 68 65 20 74 65 6d 70 6f 72   uses the tempor
78d0: 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ary..      #
78e0: 20 20 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e     directory con
78f0: 66 69 67 75 72 65 64 20 66 6f 72 20 74 68 69 73  figured for this
7900: 20 73 79 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20   system...
7910: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
7920: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 6d 70  fo exists ::temp
7930: 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 5d  orary_directory]
7940: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20   && \..
7950: 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
7960: 24 3a 3a 74 65 6d 70 6f 72 61 72 79 5f 64 69 72  $::temporary_dir 7970: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 ectory] > 0} the 7980: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 7990: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 79a0: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 The location of 79b0: 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 the temporary di 79c0: 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e rectory has been 79d0: 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 overridden;.. 79e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 79f0: 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e erefore, use it. 7a00: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 7a10: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 return$::t
7a20: 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74 6f  emporary_directo
7a30: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  ry..      } else
7a40: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
7a50: 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63   ::scratch_direc
7a60: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
7a70: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
7a80: 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 5f  ngth $::scratch_ 7a90: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 directory] > 0} 7aa0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 7ab0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 7ac0: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 E: The location 7ad0: 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20 64 of the scratch d 7ae0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 7af0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 7b00: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 7b10: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 7b20: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 7b30: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a return$::
7b40: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72  scratch_director
7b50: 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  y..      } else
7b60: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
7b70: 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50  n [getTemporaryP
7b80: 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ath]..      }..
7b90: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
7ba0: 63 20 67 65 74 45 78 65 63 75 74 65 4f 6e 53 65  c getExecuteOnSe
7bb0: 74 75 70 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  tup {} {..
7bc0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
7bd0: 20 3a 3a 65 78 65 63 75 74 65 5f 6f 6e 5f 73 65   ::execute_on_se
7be0: 74 75 70 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  tup] && \..
7bf0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
7c00: 67 74 68 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f  gth $::execute_o 7c10: 6e 5f 73 65 74 75 70 5d 20 3e 20 30 7d 20 74 68 n_setup] > 0} th 7c20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 7c30: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 7c40: 20 52 65 74 75 72 6e 20 74 68 65 20 63 6f 6e 66 Return the conf 7c50: 69 67 75 72 65 64 20 53 51 4c 20 74 6f 20 65 78 igured SQL to ex 7c60: 65 63 75 74 65 20 64 75 72 69 6e 67 20 74 68 65 ecute during the 7c70: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 connection.. 7c80: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 # set 7c90: 75 70 20 70 72 6f 63 65 64 75 72 65 20 28 69 2e up procedure (i. 7ca0: 65 2e 20 66 6f 72 20 65 76 65 72 79 20 74 65 73 e. for every tes 7cb0: 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 t database conne 7cc0: 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20 20 ction)... 7cd0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu 7ce0: 72 6e 20 24 3a 3a 65 78 65 63 75 74 65 5f 6f 6e rn$::execute_on
7cf0: 5f 73 65 74 75 70 0d 0a 20 20 20 20 20 20 7d 20  _setup..      }
7d00: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
7d10: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
7d20: 45 3a 20 42 79 20 64 65 66 61 75 6c 74 2c 20 74  E: By default, t
7d30: 68 65 72 65 20 69 73 20 6e 6f 20 53 51 4c 20 74  here is no SQL t
7d40: 6f 20 65 78 65 63 75 74 65 20 64 75 72 69 6e 67  o execute during
7d50: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d   the connection.
7d60: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
7d70: 20 73 65 74 75 70 20 70 72 6f 63 65 64 75 72 65   setup procedure
7d80: 20 28 69 2e 65 2e 20 66 6f 72 20 65 76 65 72 79   (i.e. for every
7d90: 20 74 65 73 74 20 64 61 74 61 62 61 73 65 20 63   test database c
7da0: 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20  onnection)...
7db0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
7dc0: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20  return ""..
7dd0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
7de0: 20 20 70 72 6f 63 20 67 65 74 54 65 73 74 4f 76    proc getTestOv
7df0: 65 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20  erridesPreamble
7e00: 7b 20 7b 65 78 74 72 61 56 61 72 4e 61 6d 65 73  { {extraVarNames
7e10: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
7e20: 73 65 74 20 76 61 72 4e 61 6d 65 73 20 5b 6c 69  set varNames [li
7e30: 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  st]....      #..
7e40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
7e50: 20 61 76 61 69 6c 61 62 6c 65 2c 20 73 74 61 72   available, star
7e60: 74 20 77 69 74 68 20 74 68 65 20 6d 61 73 74 65  t with the maste
7e70: 72 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 6f  r list of test o
7e80: 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20 20 23  verride..      #
7e90: 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 73         variables
7ea0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
7eb0: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
7ec0: 74 73 20 3a 3a 74 65 73 74 5f 6f 76 65 72 72 69  ts ::test_overri
7ed0: 64 65 73 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20  des] && \..
7ee0: 20 20 20 20 20 5b 6c 6c 65 6e 67 74 68 20 24 3a       [llength $: 7ef0: 3a 74 65 73 74 5f 6f 76 65 72 72 69 64 65 73 5d :test_overrides] 7f00: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 7f10: 20 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 eval lappe 7f20: 6e 64 20 76 61 72 4e 61 6d 65 73 20 24 3a 3a 74 nd varNames$::t
7f30: 65 73 74 5f 6f 76 65 72 72 69 64 65 73 0d 0a 20  est_overrides..
7f40: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
7f50: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
7f60: 20 49 66 20 72 65 71 75 65 73 74 65 64 20 62 79   If requested by
7f70: 20 6f 75 72 20 63 61 6c 6c 65 72 2c 20 61 64 64   our caller, add
7f80: 20 61 6e 79 20 61 64 64 69 74 69 6f 6e 61 6c 20   any additional
7f90: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20  variable..
7fa0: 23 20 20 20 20 20 20 20 6e 61 6d 65 73 20 74 6f  #       names to
7fb0: 20 63 6f 70 79 20 6e 6f 77 2e 0d 0a 20 20 20 20   copy now...
7fc0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
7fd0: 6c 6c 65 6e 67 74 68 20 24 65 78 74 72 61 56 61  llength $extraVa 7fe0: 72 4e 61 6d 65 73 5d 20 3e 20 30 7d 20 74 68 65 rNames] > 0} the 7ff0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76 61 n {.. eva 8000: 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61 6d l lappend varNam 8010: 65 73 20 24 65 78 74 72 61 56 61 72 4e 61 6d 65 es$extraVarName
8020: 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  s..      }....
8030: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
8040: 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 73  OTE: Build the s
8050: 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 20 74  cript fragment t
8060: 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 62 79  o be returned by
8070: 20 70 72 6f 63 65 73 73 69 6e 67 20 65 61 63 68   processing each
8080: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
8090: 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 20 61 6e  variable name an
80a0: 64 20 61 64 64 69 6e 67 20 74 68 65 20 6e 65 63  d adding the nec
80b0: 65 63 65 73 73 61 72 79 20 73 63 72 69 70 74 20  ecessary script
80c0: 66 72 61 67 6d 65 6e 74 73 20 66 6f 72 0d 0a 20  fragments for..
80d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 65 61 63       #       eac
80e0: 68 20 6f 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d  h one...      #.
80f0: 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c  .      set resul
8100: 74 20 22 22 0d 0a 0d 0a 20 20 20 20 20 20 66 6f  t ""....      fo
8110: 72 65 61 63 68 20 76 61 72 4e 61 6d 65 20 24 76  reach varName $v 8120: 61 72 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 arNames {.. 8130: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 8140: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 8150: 71 75 61 6c 69 66 69 65 64 20 67 6c 6f 62 61 6c qualified global 8160: 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65 2e 0d variable name.. 8170: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 8180: 20 20 20 20 73 65 74 20 66 75 6c 6c 56 61 72 4e set fullVarN 8190: 61 6d 65 20 5b 61 70 70 65 6e 64 41 72 67 73 20 ame [appendArgs 81a0: 3a 3a 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 0d 0a ::$varName]....
81b0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
81c0: 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20     # NOTE: Does
81d0: 74 68 65 20 76 61 72 69 61 62 6c 65 20 65 78 69  the variable exi
81e0: 73 74 20 69 6e 20 74 68 69 73 20 69 6e 74 65 72  st in this inter
81f0: 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 3f 0d  preter context?.
8200: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
8210: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
8220: 69 73 74 73 20 24 66 75 6c 6c 56 61 72 4e 61 6d  ists $fullVarNam 8230: 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 e]} then {.. 8240: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 8250: 20 20 20 23 20 4e 4f 54 45 3a 20 41 70 70 65 6e # NOTE: Appen 8260: 64 20 61 20 73 63 72 69 70 74 20 66 72 61 67 6d d a script fragm 8270: 65 6e 74 20 74 6f 20 74 68 65 20 72 65 73 75 6c ent to the resul 8280: 74 20 74 68 61 74 20 77 69 6c 6c 20 63 6f 72 72 t that will corr 8290: 65 63 74 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 ectly.. 82a0: 20 23 20 20 20 20 20 20 20 63 6f 70 79 20 61 6e # copy an 82b0: 79 20 63 6f 6e 74 61 69 6e 65 64 20 76 61 6c 75 y contained valu 82c0: 65 20 74 6f 20 61 6e 6f 74 68 65 72 20 69 6e 74 e to another int 82d0: 65 72 70 72 65 74 65 72 20 63 6f 6e 74 65 78 74 erpreter context 82e0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 82f0: 20 20 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 append 8300: 20 72 65 73 75 6c 74 20 5c 6e 20 22 73 65 74 20 result \n "set 8310: 22 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 20 22 "$fullVarName "
8320: 20 5c 7b 22 20 5b 73 65 74 20 24 66 75 6c 6c 56   \{" [set $fullV 8330: 61 72 4e 61 6d 65 5d 20 5c 7d 0d 0a 20 20 20 20 arName] \}.. 8340: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. 8350: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 8360: 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 # NOTE: If the 8370: 72 65 73 75 6c 74 20 63 6f 6e 74 61 69 6e 73 20 result contains 8380: 6f 6e 65 20 6f 72 20 6d 6f 72 65 20 73 63 72 69 one or more scri 8390: 70 74 20 66 72 61 67 6d 65 6e 74 73 2c 20 61 70 pt fragments, ap 83a0: 70 65 6e 64 20 61 0d 0a 20 20 20 20 20 20 23 20 pend a.. # 83b0: 20 20 20 20 20 20 6e 65 77 6c 69 6e 65 2e 0d 0a newline... 83c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 83d0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 83e0: 68 20 24 72 65 73 75 6c 74 5d 20 3e 20 30 7d 20 h$result] > 0}
83f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
8400: 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 5c 6e  append result \n
8410: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
8420: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c     return $resul 8430: 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 t.. }..... 8440: 20 70 72 6f 63 20 67 65 74 41 70 70 44 6f 6d 61 proc getAppDoma 8450: 69 6e 50 72 65 61 6d 62 6c 65 20 7b 20 7b 70 72 inPreamble { {pr 8460: 65 66 69 78 20 22 22 7d 20 7b 73 75 66 66 69 78 efix ""} {suffix 8470: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 ""} } {.. 8480: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: 8490: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure 84a0: 72 65 74 75 72 6e 73 20 61 20 74 65 73 74 20 73 returns a test s 84b0: 65 74 75 70 20 73 63 72 69 70 74 20 66 72 61 67 etup script frag 84c0: 6d 65 6e 74 20 73 75 69 74 61 62 6c 65 20 66 6f ment suitable fo 84d0: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 84e0: 20 65 76 61 6c 75 61 74 69 6f 6e 20 62 79 20 61 evaluation by a 84f0: 6e 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 72 n interpreter cr 8500: 65 61 74 65 64 20 69 6e 20 61 6e 20 69 73 6f 6c eated in an isol 8510: 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e ated application 8520: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8530: 64 6f 6d 61 69 6e 2e 20 20 54 68 65 20 73 63 72 domain. The scr 8540: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 62 65 69 ipt fragment bei 8550: 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c ng returned will 8560: 20 62 65 20 73 75 72 72 6f 75 6e 64 65 64 20 62 be surrounded b 8570: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # 8580: 20 74 68 65 20 70 72 65 66 69 78 20 61 6e 64 20 the prefix and 8590: 73 75 66 66 69 78 20 22 73 63 72 69 70 74 20 66 suffix "script f 85a0: 72 61 67 6d 65 6e 74 73 22 20 73 70 65 63 69 66 ragments" specif 85b0: 69 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ied by our calle 85c0: 72 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 r,.. # 85d0: 20 20 69 66 20 61 6e 79 2e 20 20 54 68 65 20 65 if any. The e 85e0: 6e 74 69 72 65 20 73 63 72 69 70 74 20 62 65 69 ntire script bei 85f0: 6e 67 20 72 65 74 75 72 6e 65 64 20 77 69 6c 6c ng returned will 8600: 20 62 65 20 73 75 62 73 74 69 74 75 74 65 64 20 be substituted 8610: 76 69 61 0d 0a 20 20 20 20 20 20 23 20 20 20 20 via.. # 8620: 20 20 20 5b 73 75 62 73 74 5d 2c 20 69 6e 20 74 [subst], in t 8630: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou 8640: 72 20 63 61 6c 6c 65 72 2c 20 62 65 66 6f 72 65 r caller, before 8650: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 2e being returned. 8660: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8670: 54 68 69 73 20 73 74 65 70 20 69 73 20 6e 65 63 This step is nec 8680: 65 73 73 61 72 79 20 73 6f 20 74 68 61 74 20 73 essary so that s 8690: 6f 6d 65 20 6c 69 6d 69 74 65 64 20 63 6f 6e 74 ome limited cont 86a0: 65 78 74 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2c ext information, 86b0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 86c0: 70 72 69 6d 61 72 69 6c 79 20 72 65 6c 61 74 65 primarily relate 86d0: 64 20 74 6f 20 74 68 65 20 74 65 73 74 69 6e 67 d to the testing 86e0: 20 64 69 72 65 63 74 6f 72 69 65 73 2c 20 63 61 directories, ca 86f0: 6e 20 62 65 20 74 72 61 6e 73 66 65 72 72 65 64 n be transferred 8700: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8710: 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 to the interpret 8720: 65 72 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 er in the isolat 8730: 65 64 20 61 70 70 6c 69 63 61 74 69 6f 6e 20 64 ed application d 8740: 6f 6d 61 69 6e 2c 20 6d 61 6b 69 6e 67 20 69 74 omain, making it 8750: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8760: 61 62 6c 65 20 74 6f 20 73 75 63 63 65 73 73 66 able to successf 8770: 75 6c 6c 79 20 72 75 6e 20 74 65 73 74 73 20 74 ully run tests t 8780: 68 61 74 20 72 65 71 75 69 72 65 20 6f 6e 65 20 hat require one 8790: 6f 72 20 6d 6f 72 65 20 6f 66 20 74 68 65 0d 0a or more of the.. 87a0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 # fi 87b0: 6c 65 73 20 69 6e 20 6f 6e 65 20 6f 66 20 74 68 les in one of th 87c0: 65 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 e testing direct 87d0: 6f 72 69 65 73 2e 20 20 43 61 6c 6c 65 72 73 20 ories. Callers 87e0: 73 68 6f 75 6c 64 20 6b 65 65 70 20 69 6e 0d 0a should keep in.. 87f0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 69 # mi 8800: 6e 64 20 74 68 61 74 20 74 68 65 20 74 65 73 74 nd that the test 8810: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 8820: 20 62 65 69 6e 67 20 72 65 74 75 72 6e 65 64 20 being returned 8830: 63 61 6e 6e 6f 74 20 72 65 6c 79 20 6f 6e 0d 0a cannot rely on.. 8840: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an 8850: 79 20 73 63 72 69 70 74 20 6c 69 62 72 61 72 79 y script library 8860: 20 70 72 6f 63 65 64 75 72 65 73 20 74 68 61 74 procedures that 8870: 20 61 72 65 20 6e 6f 74 20 70 72 6f 76 69 64 65 are not provide 8880: 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 0d 0a d by the Eagle.. 8890: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69 # li 88a0: 62 72 61 72 79 20 70 61 63 6b 61 67 65 20 28 69 brary package (i 88b0: 2e 65 2e 20 22 69 6e 69 74 2e 65 61 67 6c 65 22 .e. "init.eagle" 88c0: 29 2c 20 69 6e 63 6c 75 64 69 6e 67 20 74 68 6f ), including tho 88d0: 73 65 20 70 72 6f 76 69 64 65 64 20 62 79 0d 0a se provided by.. 88e0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 88f0: 65 20 45 61 67 6c 65 20 74 65 73 74 20 70 61 63 e Eagle test pac 8900: 6b 61 67 65 2c 20 75 6e 6c 65 73 73 20 74 68 65 kage, unless the 8910: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 file containing 8920: 20 74 68 65 6d 20 69 73 20 6c 6f 61 64 65 64 0d them is loaded. 8930: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d . # m 8940: 61 6e 75 61 6c 6c 79 20 76 69 61 20 73 6f 6d 65 anually via some 8950: 20 6f 74 68 65 72 20 6d 65 63 68 61 6e 69 73 6d other mechanism 8960: 20 28 65 2e 67 2e 20 62 79 20 69 6e 63 6c 75 64 (e.g. by includ 8970: 69 6e 67 20 61 70 70 72 6f 70 72 69 61 74 65 0d ing appropriate. 8980: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b . # [ 8990: 70 61 63 6b 61 67 65 20 72 65 71 75 69 72 65 5d package require] 89a0: 20 6f 72 20 5b 73 6f 75 72 63 65 5d 20 63 6f 6d or [source] com 89b0: 6d 61 6e 64 73 20 69 6e 20 74 68 65 20 70 72 65 mands in the pre 89c0: 66 69 78 20 6f 72 20 73 75 66 66 69 78 0d 0a 20 fix or suffix.. 89d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72 # scr 89e0: 69 70 74 20 66 72 61 67 6d 65 6e 74 73 29 2e 20 ipt fragments). 89f0: 20 41 6c 73 6f 2c 20 61 6c 6c 20 76 61 72 69 61 Also, all varia 8a00: 62 6c 65 20 72 65 66 65 72 65 6e 63 65 73 20 61 ble references a 8a10: 6e 64 20 61 6c 6c 20 6e 65 73 74 65 64 0d 0a 20 nd all nested.. 8a20: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d # com 8a30: 6d 61 6e 64 73 20 28 69 2e 65 2e 20 74 68 6f 73 mands (i.e. thos 8a40: 65 20 69 6e 20 73 71 75 61 72 65 20 62 72 61 63 e in square brac 8a50: 6b 65 74 73 29 20 63 6f 6e 74 61 69 6e 65 64 20 kets) contained 8a60: 69 6e 20 74 68 65 20 66 69 6e 61 6c 0d 0a 20 20 in the final.. 8a70: 20 20 20 20 23 20 20 20 20 20 20 20 73 63 72 69 # scri 8a80: 70 74 20 66 72 61 67 6d 65 6e 74 20 77 69 6c 6c pt fragment will 8a90: 20 65 6e 64 20 75 70 20 62 65 69 6e 67 20 65 76 end up being ev 8aa0: 61 6c 75 61 74 65 64 20 69 6e 20 74 68 65 20 63 aluated in the c 8ab0: 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20 ontext of the.. 8ac0: 20 20 20 20 20 23 20 20 20 20 20 20 20 63 61 6c # cal 8ad0: 6c 69 6e 67 20 69 6e 74 65 72 70 72 65 74 65 72 ling interpreter 8ae0: 20 61 6e 64 20 6e 6f 74 20 74 68 65 20 74 61 72 and not the tar 8af0: 67 65 74 20 69 6e 74 65 72 70 72 65 74 65 72 20 get interpreter 8b00: 63 72 65 61 74 65 64 20 69 6e 20 74 68 65 0d 0a created in the.. 8b10: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 # is 8b20: 6f 6c 61 74 65 64 20 61 70 70 6c 69 63 61 74 69 olated applicati 8b30: 6f 6e 20 64 6f 6d 61 69 6e 20 75 6e 6c 65 73 73 on domain unless 8b40: 20 74 68 65 20 64 6f 6c 6c 61 72 20 73 69 67 6e the dollar sign 8b50: 73 20 61 6e 64 2f 6f 72 20 73 71 75 61 72 65 0d s and/or square. 8b60: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b 8b70: 72 61 63 6b 65 74 73 20 61 72 65 20 73 70 65 63 rackets are spec 8b80: 69 61 6c 6c 79 20 71 75 6f 74 65 64 20 77 69 74 ially quoted wit 8b90: 68 20 62 61 63 6b 73 6c 61 73 68 65 73 2e 0d 0a h backslashes... 8ba0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r 8bb0: 65 74 75 72 6e 20 5b 75 70 6c 65 76 65 6c 20 31 eturn [uplevel 1 8bc0: 20 5b 6c 69 73 74 20 73 75 62 73 74 20 5b 61 70 [list subst [ap 8bd0: 70 65 6e 64 41 72 67 73 20 24 70 72 65 66 69 78 pendArgs$prefix
8be0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
8bf0: 5b 68 61 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f  [hasRuntimeOptio
8c00: 6e 20 6e 61 74 69 76 65 5d 7d 20 74 68 65 6e 20  n native]} then
8c10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  {..          #..
8c20: 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
8c30: 3a 20 54 68 65 20 5c 5b 6f 62 6a 65 63 74 5c 5d  : The $object$
8c40: 20 63 6f 6d 6d 61 6e 64 20 6d 61 79 20 62 65 20   command may be
8c50: 6d 69 73 73 69 6e 67 20 69 6e 20 73 6f 6d 65 20  missing in some
8c60: 45 61 67 6c 65 20 63 6f 72 65 0d 0a 20 20 20 20  Eagle core..
8c70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c 69        #       li
8c80: 62 72 61 72 79 20 63 6f 6e 66 69 67 75 72 61 74  brary configurat
8c90: 69 6f 6e 73 2e 20 20 49 6e 20 74 68 61 74 20 63  ions.  In that c
8ca0: 61 73 65 2c 20 77 65 20 63 61 6e 6e 6f 74 20 63  ase, we cannot c
8cb0: 6f 70 79 20 74 68 65 0d 0a 20 20 20 20 20 20 20  opy the..
8cc0: 20 20 20 23 20 20 20 20 20 20 20 22 6e 61 74 69     #       "nati
8cd0: 76 65 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69  ve" runtime opti
8ce0: 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  on...          #
8cf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63  ..          catc
8d00: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  h {..
8d10: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49   object invoke I
8d20: 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 41 63  nterpreter.GetAc
8d30: 74 69 76 65 20 41 64 64 52 75 6e 74 69 6d 65 4f  tive AddRuntimeO
8d40: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20  ption native..
8d50: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
8d60: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 5b 67     }..      } [g
8d70: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50  etTestOverridesP
8d80: 72 65 61 6d 62 6c 65 20 5b 6c 69 73 74 20 70 61  reamble [list pa
8d90: 74 68 20 74 65 73 74 5f 63 68 61 6e 6e 65 6c 5d  th test_channel]
8da0: 5d 20 24 73 75 66 66 69 78 5d 5d 5d 0d 0a 20 20  ] $suffix]]].. 8db0: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 8dc0: 20 74 72 79 43 6f 70 79 45 78 74 65 72 6e 61 6c tryCopyExternal 8dd0: 46 69 6c 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 File {.. 8de0: 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c fileName {pl 8df0: 61 74 66 6f 72 6d 20 22 22 7d 20 7b 6e 65 77 46 atform ""} {newF 8e00: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7b 76 65 72 ileName ""} {ver 8e10: 62 6f 73 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d bose false} } {. 8e20: 0a 20 20 20 20 20 20 73 65 74 20 73 6f 75 72 63 . set sourc 8e30: 65 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 45 78 eFileName [getEx 8e40: 74 65 72 6e 61 6c 46 69 6c 65 4e 61 6d 65 20 24 ternalFileName$
8e50: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20  fileName]....
8e60: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
8e70: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65  ists $sourceFile 8e80: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 8e90: 20 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 if {$verb
8ea0: 6f 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ose} then {..
8eb0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 8ec0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 8ed0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 8ee0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 8ef0: 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 skipped copying 8f00: 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 20 5c 22 external file \" 8f10: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d "$sourceFileNam
8f20: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
8f30: 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 20     "\", it does
8f40: 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a 20  not exist\n"]..
8f50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
8f60: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20    return..
8f70: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  }....      if {[
8f80: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 6e  string length $n 8f90: 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d ewFileName] > 0} 8fa0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 8fb0: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN 8fc0: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 ame [getBinaryFi 8fd0: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e leName$newFileN
8fe0: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. 8ff0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 9000: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67 set targ 9010: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 etFileName [getB 9020: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 inaryFileName$f
9030: 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72  ileName $platfor 9040: 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 m].. }.... 9050: 20 20 20 20 20 73 65 74 20 74 61 72 67 65 74 44 set targetD 9060: 69 72 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 64 irectory [file d 9070: 69 72 6e 61 6d 65 20 24 74 61 72 67 65 74 46 69 irname$targetFi
9080: 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20  leName]....
9090: 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
90a0: 20 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c         if {![fil
90b0: 65 20 65 78 69 73 74 73 20 24 74 61 72 67 65 74  e exists $target 90c0: 44 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e Directory]} then 90d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 69 {.. fi 90e0: 6c 65 20 6d 6b 64 69 72 20 24 74 61 72 67 65 74 le mkdir$target
90f0: 44 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  Directory..
9100: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
9110: 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65 20 24  le copy -force $9120: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 24 sourceFileName$
9130: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 0d 0a  targetFileName..
9140: 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74        }] == 0} t
9150: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
9160: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 9170: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 9180: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9190: 22 2d 2d 2d 2d 20 63 6f 70 69 65 64 20 65 78 74 "---- copied ext 91a0: 65 72 6e 61 6c 20 66 69 6c 65 20 66 72 6f 6d 20 ernal file from 91b0: 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e \""$sourceFileN
91c0: 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22 20 5c  ame "\" to \"" \
91d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 74  ..            $t 91e0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 argetFileName \" 91f0: 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 \n].. } els 9200: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 9210: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
9220: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
9230: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
9240: 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f  --- failed to co
9250: 70 79 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65  py external file
9260: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63   from \"" $sourc 9270: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 eFileName \.. 9280: 20 20 20 20 20 20 20 20 20 22 5c 22 20 74 6f 20 "\" to 9290: 5c 22 22 20 24 74 61 72 67 65 74 46 69 6c 65 4e \""$targetFileN
92a0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
92b0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
92c0: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42 69    proc tryCopyBi
92d0: 6e 61 72 79 46 69 6c 65 20 7b 0d 0a 20 20 20 20  naryFile {..
92e0: 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65          fileName
92f0: 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b   {platform ""} {
9300: 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22 22 7d 20  newFileName ""}
9310: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20  {verbose false}
9320: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73  } {..      set s
9330: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5b 67  ourceFileName [g
9340: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
9350: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
9360: 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69  form]....      i
9370: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
9380: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 9390: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 93a0: 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 65 7d if {$verbose}
93b0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
93c0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test 93d0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append 93e0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 93f0: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 "---- skip 9400: 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69 6e 61 ped copying bina 9410: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 ry file \""$sou
9420: 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  rceFileName \..
9430: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22               "\"
9440: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78  , it does not ex
9450: 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20  ist\n"]..
9460: 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   }..        retu
9470: 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  rn..      }....
9480: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
9490: 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c 65   length $newFile 94a0: 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 Name] > 0} then 94b0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 {.. set t 94c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 argetFileName [g 94d0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 etBuildFileName 94e0: 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 70 6c$newFileName $pl 94f0: 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d atform].. } 9500: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 9510: 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e set targetFileN 9520: 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c ame [getBuildFil 9530: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 eName$fileName
9540: 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20  $platform].. 9550: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 }.... set 9560: 20 74 61 72 67 65 74 44 69 72 65 63 74 6f 72 79 targetDirectory 9570: 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 24 [file dirname$
9580: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 5d 0d  targetFileName].
9590: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
95a0: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 69  tch {..        i
95b0: 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73  f {![file exists
95c0: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72   $targetDirector 95d0: 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 y]} then {.. 95e0: 20 20 20 20 20 20 66 69 6c 65 20 6d 6b 64 69 72 file mkdir 95f0: 20 24 74 61 72 67 65 74 44 69 72 65 63 74 6f 72$targetDirector
9600: 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  y..        }..
9610: 20 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20        file copy
9620: 2d 66 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69  -force $sourceFi 9630: 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 leName$targetFi
9640: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d 5d  leName..      }]
9650: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
9660: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 9670: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 9680: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 9690: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f "---- co 96a0: 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 6c 65 pied binary file 96b0: 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72 63 from \""$sourc
96c0: 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74 6f  eFileName "\" to
96d0: 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
96e0: 20 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e      $targetFileN 96f0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ame \"\n].. 9700: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 9710: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
9720: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
9730: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
9740: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64      "---- failed
9750: 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72 79 20   to copy binary
9760: 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73  file from \"" $s 9770: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. 9780: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 9790: 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 46 to \""$targetF
97a0: 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20  ileName \"\n]..
97b0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
97c0: 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 43 6f  ..    proc tryCo
97d0: 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 0d 0a 20  pyBuildFile {..
97e0: 20 20 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e             fileN
97f0: 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22  ame {platform ""
9800: 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20 22  } {newFileName "
9810: 22 7d 20 7b 76 65 72 62 6f 73 65 20 66 61 6c 73  "} {verbose fals
9820: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65  e} } {..      se
9830: 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65  t sourceFileName
9840: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
9850: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c  me $fileName$pl
9860: 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20  atform]....
9870: 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69 73   if {![file exis
9880: 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61  ts $sourceFileNa 9890: 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 me]} then {.. 98a0: 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f 73 if {$verbos
98b0: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..
98c0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 98d0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 98e0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 98f0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 9900: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 75 ipped copying bu 9910: 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24 73 6f ild file \""$so
9920: 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a  urceFileName \..
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
9940: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
9950: 78 69 73 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20  xist\n"]..
9960: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 72 65 74    }..        ret
9970: 75 72 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  urn..      }....
9980: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e        if {[strin
9990: 67 20 6c 65 6e 67 74 68 20 24 6e 65 77 46 69 6c  g length $newFil 99a0: 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 68 65 6e eName] > 0} then 99b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set 99c0: 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b targetFileName [ 99d0: 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 99e0: 65 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 20 24 e$newFileName $99f0: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 platform].. 9a00: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 9a10: 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c set targetFil 9a20: 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 eName [getBinary 9a30: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
9a40: 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 20  me $platform].. 9a50: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 9a60: 73 65 74 20 74 61 72 67 65 74 44 69 72 65 63 74 set targetDirect 9a70: 6f 72 79 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d ory [file dirnam 9a80: 65 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d e$targetFileNam
9a90: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b  e]....      if {
9aa0: 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
9ab0: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
9ac0: 73 74 73 20 24 74 61 72 67 65 74 44 69 72 65 63  sts $targetDirec 9ad0: 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 tory]} then {.. 9ae0: 20 20 20 20 20 20 20 20 20 66 69 6c 65 20 6d 6b file mk 9af0: 64 69 72 20 24 74 61 72 67 65 74 44 69 72 65 63 dir$targetDirec
9b00: 74 6f 72 79 0d 0a 20 20 20 20 20 20 20 20 7d 0d  tory..        }.
9b10: 0a 20 20 20 20 20 20 20 20 66 69 6c 65 20 63 6f  .        file co
9b20: 70 79 20 2d 66 6f 72 63 65 20 24 73 6f 75 72 63  py -force $sourc 9b30: 65 46 69 6c 65 4e 61 6d 65 20 24 74 61 72 67 65 eFileName$targe
9b40: 74 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20  tFileName..
9b50: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b   }] == 0} then {
9b60: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs
9b70: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 9b80: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 9b90: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- 9ba0: 20 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 copied build fi 9bb0: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
9bc0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20  rceFileName "\"
9bd0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
9be0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c        $targetFil 9bf0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. 9c00: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 9c10: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
9c20: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
9c30: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
9c40: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
9c50: 65 64 20 74 6f 20 63 6f 70 79 20 62 75 69 6c 64  ed to copy build
9c60: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24   file from \"" $9c70: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c sourceFileName \ 9c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c .. "\ 9c90: 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 74 " to \""$target
9ca0: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a  FileName \"\n]..
9cb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
9cc0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44  ...    proc tryD
9cd0: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile
9ce0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
9cf0: 66 6f 72 6d 20 22 22 7d 20 7b 76 65 72 62 6f 73  form ""} {verbos
9d00: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  e false} } {..
9d10: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
9d20: 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
9d30: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ame $fileName$p
9d40: 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20  latform]....
9d50: 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78 69    if {![file exi
9d60: 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20  sts $fileName]} 9d70: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 9d80: 69 66 20 7b 24 76 65 72 62 6f 73 65 7d 20 74 68 if {$verbose} th
9d90: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
9da0: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 9db0: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 9dc0: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 9dd0: 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 "---- skipped 9de0: 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 deleting binary 9df0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
9e00: 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ame \..
9e10: 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65       "\", it doe
9e20: 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d  s not exist\n"].
9e30: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
9e40: 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20      return..
9e50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
9e60: 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65  {[catch {file de
9e70: 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d  lete $fileName}] 9e80: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 9e90: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
9ea0: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
9eb0: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
9ec0: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65          "---- de
9ed0: 6c 65 74 65 64 20 62 69 6e 61 72 79 20 66 69 6c  leted binary fil
9ee0: 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65 20  e \"" $fileName 9ef0: 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 \"\n].. } e 9f00: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 9f10: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
9f20: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
9f30: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
9f40: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to
9f50: 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69  delete binary fi
9f60: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName 9f70: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d \"\n].. }. 9f80: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 9f90: 72 6f 63 20 74 72 79 44 65 6c 65 74 65 42 75 69 roc tryDeleteBui 9fa0: 6c 64 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d ldFile { fileNam 9fb0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 e {platform ""} 9fc0: 7b 76 65 72 62 6f 73 65 20 66 61 6c 73 65 7d 20 {verbose false} 9fd0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66 } {.. set f 9fe0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c ileName [getBuil 9ff0: 64 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e dFileName$fileN
a000: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a  ame $platform].. a010: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 .. if {![fi a020: 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
a030: 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
a040: 20 20 20 20 20 20 69 66 20 7b 24 76 65 72 62 6f        if {$verbo a050: 73 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 se} then {.. a060: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
a070: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
a080: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
a090: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73           "---- s
a0a0: 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
a0b0: 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20 24  build file \"" $a0c0: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 fileName \.. a0d0: 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 69 "\", i a0e0: 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 t does not exist a0f0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. a100: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 0d . return. a110: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... a120: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 69 if {[catch {fi a130: 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e le delete$fileN
a140: 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ame}] == 0} then
a150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
a160: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe a170: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. a180: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- a190: 2d 2d 20 64 65 6c 65 74 65 64 20 62 75 69 6c 64 -- deleted build a1a0: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
a1b0: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
a1c0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
a1d0: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74     tputs $::test a1e0: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 _channel [append a1f0: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. a200: 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 "---- failed a210: 20 74 6f 20 64 65 6c 65 74 65 20 62 75 69 6c 64 to delete build a220: 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e file \""$fileN
a230: 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20  ame \"\n]..
a240: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
a250: 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 41 73    proc tryCopyAs
a260: 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 20  sembly {..
a270: 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 7b        fileName {
a280: 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 64  platform ""} {pd
a290: 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 65  b true} {verbose
a2a0: 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
a2b0: 20 20 20 74 72 79 43 6f 70 79 42 75 69 6c 64 46     tryCopyBuildF
a2c0: 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 20 24 70  ile $fileName$p
a2d0: 6c 61 74 66 6f 72 6d 20 22 22 20 24 76 65 72 62  latform "" $verb a2e0: 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 ose.... if a2f0: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 {$pdb} then {..
a300: 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75         tryCopyBu
a310: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41  ildFile [appendA
a320: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
a330: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d     [file rootnam
a340: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64  e $fileName] .pd a350: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 20 22 22 20 b]$platform ""
a360: 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20 20  $verbose.. a370: 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... a380: 20 70 72 6f 63 20 74 72 79 44 65 6c 65 74 65 41 proc tryDeleteA a390: 73 73 65 6d 62 6c 79 20 7b 0d 0a 20 20 20 20 20 ssembly {.. a3a0: 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20 fileName a3b0: 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7b 70 {platform ""} {p a3c0: 64 62 20 74 72 75 65 7d 20 7b 76 65 72 62 6f 73 db true} {verbos a3d0: 65 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 e false} } {.. a3e0: 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 69 6e tryDeleteBin a3f0: 61 72 79 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d aryFile$fileNam
a400: 65 20 24 70 6c 61 74 66 6f 72 6d 20 24 76 65 72  e $platform$ver
a410: 62 6f 73 65 0d 0a 0d 0a 20 20 20 20 20 20 69 66  bose....      if
a420: 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a   {$pdb} then {.. a430: 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 tryDelet a440: 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 eBinaryFile [app a450: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. a460: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f [file roo a470: 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d tname$fileName]
a480: 20 2e 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d   .pdb] $platform a490: 20 24 76 65 72 62 6f 73 65 0d 0a 20 20 20 20 20$verbose..
a4a0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
a4b0: 20 20 70 72 6f 63 20 74 72 79 4c 6f 61 64 41 73    proc tryLoadAs
a4c0: 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e 61 6d  sembly { fileNam
a4d0: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
a4e0: 7d 20 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 66  } {..      set f
a4f0: 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61  ileName [getBina
a500: 72 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65  ryFileName $file a510: 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d Name$platform].
a520: 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61  ...      if {[ca
a530: 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 73  tch {..        s
a540: 65 74 20 61 73 73 65 6d 62 6c 79 20 5b 6f 62 6a  et assembly [obj
a550: 65 63 74 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79  ect load -loadty
a560: 70 65 20 46 69 6c 65 20 2d 61 6c 69 61 73 20 24  pe File -alias $a570: 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 fileName].. a580: 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b }] == 0} then { a590: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a5a0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77 # NOTE: Now a5b0: 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65 73 73 , add the necess a5c0: 61 72 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 ary test constra a5d0: 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d int... #. a5e0: 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 . addCons a5f0: 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f 6f traint [file roo a600: 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69 6c tname [file tail a610: 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d 0a$fileName]]....
a620: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
a630: 20 20 20 23 20 4e 4f 54 45 3a 20 47 72 61 62 20     # NOTE: Grab
a640: 74 68 65 20 69 6d 61 67 65 20 72 75 6e 74 69 6d  the image runtim
a650: 65 20 76 65 72 73 69 6f 6e 20 66 72 6f 6d 20 74  e version from t
a660: 68 65 20 61 73 73 65 6d 62 6c 79 20 62 65 63 61  he assembly beca
a670: 75 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  use..        #
a680: 20 20 20 20 20 73 65 76 65 72 61 6c 20 74 65 73       several tes
a690: 74 73 20 72 65 6c 79 20 6f 6e 20 69 74 20 68 61  ts rely on it ha
a6a0: 76 69 6e 67 20 61 20 63 65 72 74 61 69 6e 20 76  ving a certain v
a6b0: 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 23  alue...        #
a6c0: 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
a6d0: 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41  straint [appendA
a6e0: 72 67 73 20 5b 66 69 6c 65 20 74 61 69 6c 20 24  rgs [file tail $a6f0: 66 69 6c 65 4e 61 6d 65 5d 20 5f 20 5c 0d 0a 20 fileName] _ \.. a700: 20 20 20 20 20 20 20 20 20 20 20 5b 24 61 73 73 [$ass
a710: 65 6d 62 6c 79 20 49 6d 61 67 65 52 75 6e 74 69  embly ImageRunti
a720: 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d 0a 0d 0a 20  meVersion]]....
a730: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a740: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e    # NOTE: Return
a750: 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f   the full path o
a760: 66 20 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c  f the loaded fil
a770: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
a780: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66         return $f a790: 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7d ileName.. } a7a0: 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e .... return a7b0: 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 "".. }..... a7c0: 20 20 20 70 72 6f 63 20 69 73 53 51 4c 69 74 65 proc isSQLite a7d0: 52 65 61 64 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 Ready {} {.. a7e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT a7f0: 45 3a 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 E: This procedur a800: 65 20 6d 75 73 74 20 72 65 74 75 72 6e 20 6e 6f e must return no a810: 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 69 66 20 74 n-zero only if t a820: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 he SQLite native a830: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # a840: 6c 69 62 72 61 72 79 20 61 6e 64 20 74 68 65 20 library and the a850: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi a860: 74 65 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d te managed assem a870: 62 6c 79 20 61 72 65 20 6c 6f 61 64 65 64 0d 0a bly are loaded.. a880: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e # an a890: 64 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 d ready for use a8a0: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit a8b0: 65 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 74 e. Currently, t a8c0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 0d 0a 20 his procedure.. a8d0: 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f # sho a8e0: 75 6c 64 20 62 65 20 63 61 6c 6c 65 64 20 6f 6e uld be called on a8f0: 6c 79 20 61 66 74 65 72 20 74 68 65 20 5b 74 72 ly after the [tr a900: 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 5d 20 70 yLoadAssembly] p a910: 72 6f 63 65 64 75 72 65 20 68 61 73 0d 0a 20 20 rocedure has.. a920: 20 20 20 20 23 20 20 20 20 20 20 20 62 65 65 6e # been a930: 20 63 61 6c 6c 65 64 20 74 6f 20 70 72 6f 62 65 called to probe a940: 20 66 6f 72 20 74 68 65 20 53 79 73 74 65 6d 2e for the System. a950: 44 61 74 61 2e 53 51 4c 69 74 65 20 6d 61 6e 61 Data.SQLite mana a960: 67 65 64 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 ged assembly.. a970: 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and a980: 74 68 65 20 5b 63 68 65 63 6b 46 6f 72 53 51 4c the [checkForSQL a990: 69 74 65 5d 20 70 72 6f 63 65 64 75 72 65 20 68 ite] procedure h a9a0: 61 73 20 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 as been called t a9b0: 6f 20 70 72 6f 62 65 20 66 6f 72 0d 0a 20 20 20 o probe for.. a9c0: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S a9d0: 51 4c 69 74 65 20 6e 61 74 69 76 65 20 6c 69 62 QLite native lib a9e0: 72 61 72 79 3b 20 6f 74 68 65 72 77 69 73 65 2c rary; otherwise, a9f0: 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 this procedure aa00: 77 69 6c 6c 20 73 69 6d 70 6c 79 0d 0a 20 20 20 will simply.. aa10: 20 20 20 23 20 20 20 20 20 20 20 61 6c 77 61 79 # alway aa20: 73 20 72 65 74 75 72 6e 20 7a 65 72 6f 2e 0d 0a s return zero... aa30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 #.. r aa40: 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 0d 0a 20 eturn [expr {.. aa50: 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons aa60: 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 traint System.Da aa70: 74 61 2e 53 51 4c 69 74 65 5d 20 26 26 20 5b 68 ta.SQLite] && [h aa80: 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 53 51 aveConstraint SQ aa90: 4c 69 74 65 5d 0d 0a 20 20 20 20 20 20 7d 5d 0d Lite].. }]. aaa0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p aab0: 72 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65 roc matchMachine aac0: 20 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d { platform } {. aad0: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. aae0: 23 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 # NOTE: An empty aaf0: 20 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 string for the ab00: 70 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 platform means t ab10: 68 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 hat the build is ab20: 20 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 not.. # ab30: 20 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 [primarily] ab40: 61 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 a native build; ab50: 74 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c therefore, it al ab60: 77 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 ways matches... ab70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if ab80: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length ab90: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30$platform] == 0
aba0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
abb0: 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20    return true..
abc0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
abd0: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
abe0: 20 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66   Does the specif
abf0: 69 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74  ied platform mat
ac00: 63 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72  ch up to the cur
ac10: 72 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20  rent process?..
ac20: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
ac30: 20 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b   {$platform eq [ ac40: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 machineToPlatfor ac50: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 m$::tcl_platfor
ac60: 6d 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65  m(machine)]} the
ac70: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
ac80: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
ac90: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
aca0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20      # NOTE: The
acb0: 73 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f  specified platfo
acc0: 72 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rm does not matc
acd0: 68 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c  h up with the pl
ace0: 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20  atform..      #
acf0: 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75        for the cu
ad00: 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
ad10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72        #..      r
ad20: 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20  eturn false..
ad30: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
ad40: 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74  haveSQLiteObject
ad50: 43 6f 6d 6d 61 6e 64 20 7b 7d 20 7b 0d 0a 20 20  Command {} {..
ad60: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
ad70: 4f 54 45 3a 20 49 73 20 74 68 65 20 5b 6f 62 6a  OTE: Is the [obj
ad80: 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 63 75 72  ect] command cur
ad90: 72 65 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65  rently available
ada0: 3f 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ?..      #..
adb0: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b    return [expr {
adc0: 5b 6c 6c 65 6e 67 74 68 20 5b 69 6e 66 6f 20 63  [llength [info c
add0: 6f 6d 6d 61 6e 64 73 20 6f 62 6a 65 63 74 5d 5d  ommands object]]
ade0: 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c   > 0}]..    }...
adf0: 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b  ..    proc check
ae00: 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74 43  ForSQLiteObjectC
ae10: 6f 6d 6d 61 6e 64 20 7b 20 63 68 61 6e 6e 65 6c  ommand { channel
ae20: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74   } {..      tput
ae30: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d  s $channel "---- ae40: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 5c 22 checking for \" ae50: 6f 62 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 object\" command ae60: 20 75 73 61 67 65 2e 2e 2e 20 22 0d 0a 0d 0a 20 usage... ".... ae70: 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info ae80: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli ae90: 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 29 teObjectCommand) aea0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. aeb0: 20 20 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a [haveSQLiteObj aec0: 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 ectCommand]} the aed0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 n {.. tpu aee0: 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65 73 5c ts$channel yes\
aef0: 6e 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  n..      } else
af00: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
af10: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 6e        # NOTE: Un
af20: 6c 65 73 73 20 77 65 20 61 72 65 20 66 6f 72 62  less we are forb
af30: 69 64 64 65 6e 20 66 72 6f 6d 20 64 6f 69 6e 67  idden from doing
af40: 20 73 6f 2c 20 61 64 64 20 73 6f 6d 65 20 63 6f   so, add some co
af50: 6e 73 74 72 61 69 6e 74 73 0d 0a 20 20 20 20 20  nstraints..
af60: 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20     #       that
af70: 77 69 6c 6c 20 61 6c 6c 6f 77 20 6d 6f 73 74 20  will allow most
af80: 6f 66 20 74 68 65 20 74 65 73 74 20 73 75 69 74  of the test suit
af90: 65 20 74 6f 20 72 75 6e 20 28 69 2e 65 2e 20 74  e to run (i.e. t
afa0: 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20  hose..        #
afb0: 20 20 20 20 20 20 74 65 73 74 73 20 74 68 61 74        tests that
afc0: 20 64 6f 20 6e 6f 74 20 64 69 72 65 63 74 6c 79   do not directly
afd0: 20 72 65 6c 79 20 75 70 6f 6e 20 74 68 65 20 5b   rely upon the [
afe0: 6f 62 6a 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 29  object] command)
aff0: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
b000: 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
b010: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 68 69   exists ::no(shi
b020: 6d 53 51 4c 69 74 65 41 73 73 65 6d 62 6c 79 43  mSQLiteAssemblyC
b030: 6f 6e 73 74 72 61 69 6e 74 73 29 5d 7d 20 74 68  onstraints)]} th
b040: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
b050: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
b060: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Lite..
b070: 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53 51  addConstraint SQ
b080: 4c 69 74 65 49 6e 74 65 72 6f 70 0d 0a 20 20 20  LiteInterop..
b090: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
b0a0: 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 61  aint System.Data
b0b0: 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 20  .SQLite..
b0c0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
b0d0: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
b0e0: 69 74 65 2e 45 6e 63 72 79 70 74 69 6f 6e 0d 0a  ite.Encryption..
b0f0: 20 20 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e            addCon
b100: 73 74 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44  straint System.D
b110: 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 0d  ata.SQLite.Linq.
b120: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 61 64 64  ...          add
b130: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
b140: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
b150: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44          System.D
b160: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5f 76  ata.SQLite.dll_v
b170: 20 5b 67 65 74 42 75 69 6c 64 43 6c 72 56 65 72   [getBuildClrVer
b180: 73 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 20 20  sion]]..
b190: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if
b1a0: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
b1b0: 3a 6e 6f 28 73 68 69 6d 53 51 4c 69 74 65 44 65  :no(shimSQLiteDe
b1c0: 66 69 6e 65 43 6f 6e 73 74 61 6e 74 43 6f 6e 73  fineConstantCons
b1d0: 74 72 61 69 6e 74 73 29 5d 7d 20 74 68 65 6e 20  traints)]} then
b1e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  {..          for
b1f0: 65 61 63 68 20 64 65 66 69 6e 65 43 6f 6e 73 74  each defineConst
b200: 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  ant [list \..
b210: 20 20 20 20 20 20 20 20 20 20 20 49 4e 54 45 52             INTER
b220: 4f 50 5f 45 58 54 45 4e 53 49 4f 4e 5f 46 55 4e  OP_EXTENSION_FUN
b230: 43 54 49 4f 4e 53 20 49 4e 54 45 52 4f 50 5f 54  CTIONS INTEROP_T
b240: 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c 0d  EST_EXTENSION \.
b250: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49  .              I
b260: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
b270: 41 42 4c 45 20 55 53 45 5f 49 4e 54 45 52 4f 50  ABLE USE_INTEROP
b280: 5f 44 4c 4c 5d 20 7b 0d 0a 20 20 20 20 20 20 20  _DLL] {..
b290: 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69       addConstrai
b2a0: 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  nt [appendArgs \
b2b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
b2c0: 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74    defineConstant
b2d0: 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  .System.Data.SQL
b2e0: 69 74 65 2e 20 24 64 65 66 69 6e 65 43 6f 6e 73  ite. $defineCons b2f0: 74 61 6e 74 5d 0d 0a 20 20 20 20 20 20 20 20 20 tant].. b300: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... b310: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 . if {![i b320: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( b330: 73 68 69 6d 53 51 4c 69 74 65 56 69 73 75 61 6c shimSQLiteVisual b340: 53 74 75 64 69 6f 43 6f 6e 73 74 72 61 69 6e 74 StudioConstraint b350: 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 s)]} then {.. b360: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr b370: 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 aint [appendArgs b380: 20 76 69 73 75 61 6c 53 74 75 64 69 6f 20 5b 67 visualStudio [g b390: 65 74 42 75 69 6c 64 59 65 61 72 5d 5d 0d 0a 20 etBuildYear]].. b3a0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... b3b0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
b3c0: 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 7d  el no\n..      }
b3d0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
b3e0: 70 72 6f 63 20 63 68 61 6e 67 65 4e 61 74 69 76  proc changeNativ
b3f0: 65 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 7b  eRuntimeOption {
b400: 20 6e 61 74 69 76 65 20 7d 20 7b 0d 0a 20 20 20   native } {..
b410: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20     if {[llength
b420: 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20 64  [info commands d
b430: 65 62 75 67 5d 5d 20 3e 20 30 20 26 26 20 5c 0d  ebug]] > 0 && \.
b440: 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c 65 6e  .          [llen
b450: 67 74 68 20 5b 69 6e 66 6f 20 73 75 62 63 6f 6d  gth [info subcom
b460: 6d 61 6e 64 73 20 64 65 62 75 67 20 72 75 6e 74  mands debug runt
b470: 69 6d 65 6f 70 74 69 6f 6e 5d 5d 20 3e 20 30 20  imeoption]] > 0
b480: 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20  && [catch {..
b490: 20 20 20 20 20 64 65 62 75 67 20 72 75 6e 74 69       debug runti
b4a0: 6d 65 6f 70 74 69 6f 6e 20 5b 65 78 70 72 20 7b  meoption [expr {
b4b0: 24 6e 61 74 69 76 65 20 3f 20 22 61 64 64 22 20  $native ? "add" b4c0: 3a 20 22 72 65 6d 6f 76 65 22 7d 5d 20 6e 61 74 : "remove"}] nat b4d0: 69 76 65 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d ive.. }] == b4e0: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. b4f0: 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d return true. b500: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... b510: 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit b520: 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 eObjectCommand] b530: 26 26 20 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 && [catch {.. b540: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo b550: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ke Interpreter.G b560: 65 74 41 63 74 69 76 65 20 5b 65 78 70 72 20 7b etActive [expr { b570: 24 6e 61 74 69 76 65 20 3f 20 5c 0d 0a 20 20 20$native ? \..
b580: 20 20 20 20 20 20 20 20 20 22 41 64 64 52 75 6e           "AddRun
b590: 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20 22 52  timeOption" : "R
b5a0: 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70 74 69  emoveRuntimeOpti
b5b0: 6f 6e 22 7d 5d 20 6e 61 74 69 76 65 0d 0a 20 20  on"}] native..
b5c0: 20 20 20 20 7d 5d 20 3d 3d 20 30 7d 20 74 68 65      }] == 0} the
b5d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  n {..        ret
b5e0: 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20  urn true..
b5f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
b600: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a  n false..    }..
b610: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
b620: 6b 46 6f 72 53 51 4c 69 74 65 42 75 69 6c 64 73  kForSQLiteBuilds
b630: 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65   { channel {sele
b640: 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20  ct false} } {..
b650: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
b660: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20  NOTE: Check for
b670: 65 76 65 72 79 20 70 6f 73 73 69 62 6c 65 20 76  every possible v
b680: 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74 69 6f 6e  alid combination
b690: 20 6f 66 20 76 61 6c 75 65 73 20 75 73 65 64 20   of values used
b6a0: 77 68 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  when..      #
b6b0: 20 20 20 20 6c 6f 63 61 74 69 6e 67 20 6f 75 74      locating out
b6c0: 20 74 68 65 20 62 75 69 6c 64 20 6f 75 74 70 75   the build outpu
b6d0: 74 20 64 69 72 65 63 74 6f 72 79 2c 20 73 68 6f  t directory, sho
b6e0: 77 69 6e 67 20 65 61 63 68 20 61 76 61 69 6c 61  wing each availa
b6f0: 62 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ble..      #
b700: 20 20 20 62 75 69 6c 64 20 76 61 72 69 61 74 69     build variati
b710: 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20 77 61 79  on along the way
b720: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
b730: 20 20 66 6f 72 65 61 63 68 20 6e 61 74 69 76 65    foreach native
b740: 20 5b 6c 69 73 74 20 66 61 6c 73 65 20 74 72 75   [list false tru
b750: 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 66 6f  e] {..        fo
b760: 72 65 61 63 68 20 79 65 61 72 20 5b 67 65 74 42  reach year [getB
b770: 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d 0a 20 20  uildYears] {..
b780: 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20          foreach
b790: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67  configuration [g
b7a0: 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61  etBuildConfigura
b7b0: 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20  tions] {..
b7c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
b7d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 67       # NOTE: Fig
b7e0: 75 72 65 20 6f 75 74 20 74 68 65 20 65 66 66 65  ure out the effe
b7f0: 63 74 69 76 65 20 62 75 69 6c 64 20 70 6c 61 74  ctive build plat
b800: 66 6f 72 6d 2e 20 20 54 68 69 73 20 69 73 0d 0a  form.  This is..
b810: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
b820: 20 20 20 20 62 61 73 65 64 20 6f 6e 20 77 68 65      based on whe
b830: 74 68 65 72 20 6f 72 20 6e 6f 74 20 61 20 5b 70  ther or not a [p
b840: 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74 69 76 65  rimarily] native
b850: 20 62 75 69 6c 64 0d 0a 20 20 20 20 20 20 20 20   build..
b860: 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 62      #       is b
b870: 65 69 6e 67 20 75 73 65 64 2e 20 20 46 6f 72 20  eing used.  For
b880: 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 6f 6e 2d  [primarily] non-
b890: 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c 0d 0a  native builds,..
b8a0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
b8b0: 20 20 20 20 74 68 69 73 20 77 69 6c 6c 20 62 65      this will be
b8c0: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
b8d0: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
b8e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
b8f0: 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67 65 74 42  t platform [getB
b900: 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 24 6e 61  uildPlatform $na b910: 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tive].... b920: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
b930: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
b940: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
b950: 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
b960: 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  g for System.Dat
b970: 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20 5c  a.SQLite build \
b980: 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20 20 20 20  "" [expr \..
b990: 20 20 20 20 20 20 20 20 20 20 20 20 7b 24 6e 61              {$na b9a0: 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 tive ? "native/" b9b0: 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 20 7b 5b : ""}] [expr {[ b9c0: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 5c 0d string length \. b9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . b9e0: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 20$platform] > 0
b9f0: 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 70  ? [appendArgs $p ba00: 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d latform /] : ""} ba10: 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 20 20 20 ]$year \..
ba20: 20 20 20 20 20 20 20 20 20 20 20 2f 20 24 63 6f             / $co ba30: 6e 66 69 67 75 72 61 74 69 6f 6e 20 22 5c 22 2e nfiguration "\". ba40: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 .. "].... ba50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ba60: 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c # NOTE: Buil ba70: 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c d the fully qual ba80: 69 66 69 65 64 20 64 69 72 65 63 74 6f 72 79 20 ified directory ba90: 77 68 65 72 65 20 74 68 65 20 6e 65 63 65 73 73 where the necess baa0: 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ary.. bab0: 20 23 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 # compone bac0: 6e 74 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 nts for System.D bad0: 61 74 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c ata.SQLite shoul bae0: 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 d be found... baf0: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. bb00: 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72 65 set dire bb10: 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 69 6c 64 ctory [joinBuild bb20: 44 69 72 65 63 74 6f 72 79 20 24 6e 61 74 69 76 Directory$nativ
bb30: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e \..
bb40: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 42 61       [getBuildBa
bb50: 73 65 44 69 72 65 63 74 6f 72 79 5d 20 24 79 65  seDirectory] $ye bb60: 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 63 6f ar$platform $co bb70: 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 0d 0a nfiguration].... bb80: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. bb90: 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT bba0: 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 65 73 73 E: Do the necess bbb0: 61 72 79 20 66 69 6c 65 73 20 65 78 69 73 74 3f ary files exist? bbc0: 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 6e 6f 20 Currently, no bbd0: 6f 74 68 65 72 20 73 74 65 70 73 0d 0a 20 20 20 other steps.. bbe0: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # bbf0: 20 61 72 65 20 74 61 6b 65 6e 20 74 6f 20 76 65 are taken to ve bc00: 72 69 66 79 20 74 68 69 73 20 62 75 69 6c 64 20 rify this build bc10: 69 73 20 61 63 74 75 61 6c 6c 79 20 76 69 61 62 is actually viab bc20: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 le... bc30: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. bc40: 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 76 61 69 if {[isBuildAvai bc50: 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 20 24 64 lable$native $d bc60: 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 irectory]} then bc70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. bc80: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 #.. bc90: 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 6e 20 69 # NOTE: When i bca0: 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f 64 65 2c n "select" mode, bcb0: 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 automatically s bcc0: 65 6c 65 63 74 20 74 68 65 20 66 69 72 73 74 0d elect the first. bcd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # bce0: 20 20 20 20 20 20 20 61 76 61 69 6c 61 62 6c 65 available bcf0: 20 62 75 69 6c 64 20 6f 66 20 53 79 73 74 65 6d build of System bd00: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 61 6e 64 .Data.SQLite and bd10: 20 74 68 65 6e 20 72 65 74 75 72 6e 0d 0a 20 20 then return.. bd20: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # bd30: 20 20 20 20 69 6d 6d 65 64 69 61 74 65 6c 79 2e immediately. bd40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bd50: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. bd60: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 if {$select &&
bd70: 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70  [matchMachine $p bd80: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b latform]} then { bd90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. bda0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. bdb0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6e # NOTE: Man bdc0: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 65 20 61 ually override a bdd0: 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 ll the build dir bde0: 65 63 74 6f 72 79 20 73 65 6c 65 63 74 69 6f 6e ectory selection bdf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. be00: 20 20 23 20 20 20 20 20 20 20 72 65 6c 61 74 65 # relate be10: 64 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 d test settings be20: 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 6f 72 63 in order to forc be30: 65 20 74 68 69 73 20 62 75 69 6c 64 0d 0a 20 20 e this build.. be40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 # be50: 20 20 20 20 20 20 6f 66 20 53 79 73 74 65 6d 2e of System. be60: 44 61 74 61 2e 53 51 4c 69 74 65 20 74 6f 20 62 Data.SQLite to b be70: 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 20 e used... be80: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. be90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b if { bea0: 21 5b 63 68 61 6e 67 65 4e 61 74 69 76 65 52 75 ![changeNativeRu beb0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 6e 61 74 ntimeOption$nat
bec0: 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ive]} then {..
bed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bee0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ bef0: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. bf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 bf10: 20 20 20 20 22 6e 6f 2c 20 66 61 69 6c 65 64 20 "no, failed bf20: 74 6f 20 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 to " [expr {$nat
bf30: 69 76 65 20 3f 20 22 61 64 64 22 20 3a 20 22 72  ive ? "add" : "r
bf40: 65 6d 6f 76 65 22 7d 5d 20 5c 0d 0a 20 20 20 20  emove"}] \..
bf50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
bf60: 20 20 22 20 74 68 65 20 5c 22 6e 61 74 69 76 65    " the \"native
bf70: 5c 22 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f  \" runtime optio
bf80: 6e 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  n\n"]....
bf90: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
bfa0: 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20  n false..
bfb0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
bfc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65                se
bfd0: 74 20 3a 3a 74 65 73 74 5f 79 65 61 72 20 24 79  t ::test_year $y bfe0: 65 61 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ear.. bff0: 20 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f set ::test_ c000: 70 6c 61 74 66 6f 72 6d 20 24 70 6c 61 74 66 6f platform$platfo
c010: 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  rm..
c020: 20 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 63      set ::test_c
c030: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 24 63 6f  onfiguration $co c040: 6e 66 69 67 75 72 61 74 69 6f 6e 0d 0a 0d 0a 20 nfiguration.... c050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 t c060: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
c070: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
c080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c090: 20 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20   "yes, selected
c0a0: 28 22 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76  (" [expr {$nativ c0b0: 65 20 3f 20 22 6e 61 74 69 76 65 2f 22 20 3a 20 e ? "native/" : c0c0: 22 22 7d 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 ""}] \.. c0d0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 65 78 70 [exp c0e0: 72 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 r {[string lengt c0f0: 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 h$platform] > 0
c100: 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c   ? [appendArgs \
c110: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
c120: 20 20 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20        $platform c130: 2f 5d 20 3a 20 22 22 7d 5d 20 24 79 65 61 72 20 /] : ""}]$year
c140: 2f 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  / $configuration c150: 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ")\n"].... c160: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 retur c170: 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 n true.. c180: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. c190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c1a0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 tputs$channel y
c1b0: 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  es\n..
c1c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
c1d0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
c1e0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
c1f0: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. c200: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. c210: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. c220: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a }.. }.. c230: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 .. return f c240: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a alse.. }..... c250: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo c260: 72 53 51 4c 69 74 65 52 65 6c 65 61 73 65 73 20 rSQLiteReleases c270: 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 65 6c 65 63 { channel {selec c280: 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 t false} } {.. c290: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N c2a0: 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 70 OTE: Check for p c2b0: 61 73 74 20 72 65 6c 65 61 73 65 73 20 6f 66 20 ast releases of c2c0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi c2d0: 74 65 20 69 6e 20 74 68 65 20 64 69 72 65 63 74 te in the direct c2e0: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ory.. # c2f0: 20 20 20 63 6f 6e 74 61 69 6e 65 64 20 69 6e 20 contained in c300: 74 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 the "System.Data c310: 2e 53 51 4c 69 74 65 22 20 65 6e 76 69 72 6f 6e .SQLite" environ c320: 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 2c 20 69 ment variable, i c330: 66 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 f.. # c340: 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20 20 present... c350: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i c360: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 65 6e 76 nfo exists ::env c370: 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c (System.Data.SQL c380: 69 74 65 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 ite)] && \.. c390: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le c3a0: 6e 67 74 68 20 24 3a 3a 65 6e 76 28 53 79 73 74 ngth$::env(Syst
c3b0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 29 5d  em.Data.SQLite)]
c3c0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
c3d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
c3e0: 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74   # NOTE: Build t
c3f0: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
c400: 65 64 20 64 69 72 65 63 74 6f 72 79 20 77 68 65  ed directory whe
c410: 72 65 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  re the necessary
c420: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
c430: 20 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 66 6f 72    components for
c440: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
c450: 69 74 65 20 73 68 6f 75 6c 64 20 62 65 20 66 6f  ite should be fo
c460: 75 6e 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  und...        #.
c470: 0a 20 20 20 20 20 20 20 20 73 65 74 20 64 69 72  .        set dir
c480: 65 63 74 6f 72 79 20 5b 66 69 6c 65 20 6e 61 74  ectory [file nat
c490: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
c4a0: 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
c4b0: 20 20 24 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e    $::env(System. c4c0: 44 61 74 61 2e 53 51 4c 69 74 65 29 20 5b 67 65 Data.SQLite) [ge c4d0: 74 52 65 6c 65 61 73 65 56 65 72 73 69 6f 6e 5d tReleaseVersion] c4e0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 ]].... tp c4f0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
c500: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
c510: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
c520: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
c530: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 72 65  m.Data.SQLite re
c540: 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20  lease \"" \..
c550: 20 20 20 20 20 20 20 20 20 24 64 69 72 65 63 74           $direct c560: 6f 72 79 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d ory "\"... "]... c570: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 . if {[is c580: 52 65 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 ReleaseAvailable c590: 20 24 64 69 72 65 63 74 6f 72 79 20 70 6c 61 74$directory plat
c5a0: 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  form]} then {..
c5b0: 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74           if {[st
c5c0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61  ring length $pla c5d0: 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 tform] == 0} the c5e0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. c5f0: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e set platform un c600: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20 known.. c610: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 }.... c620: 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20 5b if {$select && [
c630: 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 6c  matchMachine $pl c640: 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d atform]} then {. c650: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 . set c660: 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 74 6f ::build_directo c670: 72 79 20 24 64 69 72 65 63 74 6f 72 79 0d 0a 0d ry$directory...
c680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
c690: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app c6a0: 65 6e 64 41 72 67 73 20 22 79 65 73 2c 20 73 65 endArgs "yes, se c6b0: 6c 65 63 74 65 64 20 28 22 20 24 70 6c 61 74 66 lected ("$platf
c6c0: 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d 0a 20 20  orm ")\n"]....
c6d0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
c6e0: 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20   true..
c6f0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
c700: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch c710: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg c720: 73 20 22 79 65 73 20 28 22 20 24 70 6c 61 74 66 s "yes ("$platf
c730: 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 20 20 20 20  orm ")\n"]..
c740: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
c750: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
c760: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan c770: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d 0a 20 20 20 20 nel no\n.... c780: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 70 61 foreach pa c790: 74 68 20 5b 6c 73 6f 72 74 20 2d 64 65 63 72 65 th [lsort -decre c7a0: 61 73 69 6e 67 20 5b 66 69 6c 65 20 6c 69 73 74 asing [file list c7b0: 20 24 64 69 72 65 63 74 6f 72 79 20 2a 5d 5d 20$directory *]]
c7c0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
c7d0: 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20  f {[file exists
c7e0: 24 70 61 74 68 5d 20 26 26 20 5b 66 69 6c 65 20  $path] && [file c7f0: 69 73 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 isdirectory$pat
c800: 68 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  h]} then {..
c810: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c820: 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append c830: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. c840: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- c850: 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 checking for Sys c860: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite c870: 72 65 6c 65 61 73 65 20 5c 22 22 20 5c 0d 0a 20 release \"" \.. c880: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c890: 20 24 70 61 74 68 20 22 5c 22 2e 2e 2e 20 22 5d$path "\"... "]
c8a0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
c8b0: 20 20 69 66 20 7b 5b 69 73 52 65 6c 65 61 73 65    if {[isRelease
c8c0: 41 76 61 69 6c 61 62 6c 65 20 24 70 61 74 68 20  Available $path c8d0: 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 platform]} then c8e0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. c8f0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l c900: 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d ength$platform]
c910: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
c920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
c930: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 75 6e   set platform un
c940: 6b 6e 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 20  known..
c950: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
c960: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
c970: 24 73 65 6c 65 63 74 20 26 26 20 5b 6d 61 74 63  $select && [matc c980: 68 4d 61 63 68 69 6e 65 20 24 70 6c 61 74 66 6f hMachine$platfo
c990: 72 6d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  rm]} then {..
c9a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
c9b0: 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  et ::build_direc
c9c0: 74 6f 72 79 20 24 70 61 74 68 0d 0a 0d 0a 20 20  tory $path.... c9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 c9e0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
c9f0: 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 2c  appendArgs "yes,
ca00: 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 70 6c   selected (" $pl ca10: 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d 0a 0d atform ")\n"]... ca20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . ca30: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. ca40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 ca50: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. ca60: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput ca70: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
ca80: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24  ndArgs "yes (" $ca90: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d platform ")\n"]. caa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . cab0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. cac0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. cad0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput cae0: 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d s$channel no\n.
caf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
cb00: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
cb10: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
cb20: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
cb30: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
cb40: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel cb50: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. cb60: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d "---- cb70: 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 environment var cb80: 69 61 62 6c 65 20 5c 22 53 79 73 74 65 6d 2e 44 iable \"System.D cb90: 61 74 61 2e 53 51 4c 69 74 65 5c 22 20 69 73 20 ata.SQLite\" is cba0: 6e 6f 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 not " \.. cbb0: 20 20 20 20 20 22 73 65 74 2c 20 73 6b 69 70 70 "set, skipp cbc0: 69 6e 67 20 63 68 65 63 6b 20 66 6f 72 20 72 65 ing check for re cbd0: 6c 65 61 73 65 73 2e 2e 2e 5c 6e 22 5d 0d 0a 20 leases...\n"].. cbe0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... cbf0: 72 65 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 return false.. cc00: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc cc10: 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 4c checkForSQLiteL cc20: 69 62 72 61 72 79 20 7b 20 63 68 61 6e 6e 65 6c ibrary { channel cc30: 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 } {.. tput cc40: 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
cc50: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51   checking for SQ
cc60: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
cc70: 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20  y... "....
cc80: 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
cc90: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
cca0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
ccb0: 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
ccc0: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
ccd0: 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20  .SQLite.SQLite3
cce0: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20  SQLiteVersion..
ccf0: 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20       } version]
cd00: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
cd10: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
cd20: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69   # NOTE: Check i
cd30: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76  f the returned v
cd40: 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e  ersion was null.
cd50: 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74    If so, make it
cd60: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23   easy..        #
cd70: 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d         to spot..
cd80: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
cd90: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
cda0: 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d  length $version] cdb0: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. cdc0: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72 set ver cdd0: 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 sion null.. cde0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... cdf0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT ce00: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75 E: Attempt to qu ce10: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73 ery the Fossil s ce20: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72 ource identifier ce30: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d for the SQLite. ce40: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # ce50: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a core library... ce60: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. ce70: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. ce80: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 . objec ce90: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 t invoke -flags cea0: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 +NonPublic \.. ceb0: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst cec0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S ced0: 51 4c 69 74 65 33 20 53 51 4c 69 74 65 53 6f 75 QLite3 SQLiteSou cee0: 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20 7d rceId.. } cef0: 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65 6e sourceId]} then cf00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. cf10: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT cf20: 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f 20 E: We failed to cf30: 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c query the Fossil cf40: 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 source identifi cf50: 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 er... # cf60: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 .. set cf70: 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77 6e sourceId unknown cf80: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 .. }.... cf90: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. cfa0: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check cfb0: 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 if the returned cfc0: 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69 64 Fossil source id cfd0: 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75 6c entifier was nul cfe0: 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20 20 l. If.. cff0: 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b 65 # so, make d000: 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f 74 it easy to spot d010: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d020: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin d030: 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63 65 g length$source
d040: 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  Id] == 0} then {
d050: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
d060: 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a 20  sourceId null..
d070: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
d080: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
d090: 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 20   NOTE: Yes, the
d0a0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
d0b0: 61 72 79 20 61 70 70 65 61 72 73 20 74 6f 20 62  ary appears to b
d0c0: 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20  e available...
d0d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
d0e0: 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 53   addConstraint S
d0f0: 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20 20 20 20  QLite....
d100: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel d110: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73 [appendArgs "yes d120: 20 28 22 20 24 76 65 72 73 69 6f 6e 20 22 20 22 ("$version " "
d130: 20 24 73 6f 75 72 63 65 49 64 20 22 29 5c 6e 22   $sourceId ")\n" d140: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 ].. } else d150: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 {.. tputs d160: 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a$channel no\n..
d170: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
d180: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 65 63  ...    proc chec
d190: 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74 65 72 6f  kForSQLiteIntero
d1a0: 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d 20 7b 0d  p { channel } {.
d1b0: 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68  .      tputs $ch d1c0: 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 68 65 63 annel "---- chec d1d0: 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 74 65 20 king for SQLite d1e0: 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 interop assembly d1f0: 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 69 ... ".... i d200: 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 f {[catch {.. d210: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo d220: 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 ke -flags +NonPu d230: 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 blic \.. d240: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. d250: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 49 SQLite.SQLite3 I d260: 6e 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 nteropVersion.. d270: 20 20 20 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 } version] d280: 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. d290: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. d2a0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i d2b0: 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 76 f the returned v d2c0: 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 6c 6c 2e ersion was null. d2d0: 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 20 69 74 If so, make it d2e0: 20 65 61 73 79 0d 0a 20 20 20 20 20 20 20 20 23 easy.. # d2f0: 20 20 20 20 20 20 20 74 6f 20 73 70 6f 74 2e 0d to spot.. d300: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. d310: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string d320: 6c 65 6e 67 74 68 20 24 76 65 72 73 69 6f 6e 5d length$version]
d330: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
d340: 20 20 20 20 20 20 20 20 20 73 65 74 20 76 65 72           set ver
d350: 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20 20 20 20  sion null..
d360: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
d370: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
d380: 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 71 75  E: Attempt to qu
d390: 65 72 79 20 74 68 65 20 46 6f 73 73 69 6c 20 73  ery the Fossil s
d3a0: 6f 75 72 63 65 20 69 64 65 6e 74 69 66 69 65 72  ource identifier
d3b0: 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 0d   for the SQLite.
d3c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
d3d0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a   core library...
d3e0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
d3f0: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d     if {[catch {.
d400: 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63  .          objec
d410: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
d420: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
d430: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
d440: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53  em.Data.SQLite.S
d450: 51 4c 69 74 65 33 20 49 6e 74 65 72 6f 70 53 6f  QLite3 InteropSo
d460: 75 72 63 65 49 64 0d 0a 20 20 20 20 20 20 20 20  urceId..
d470: 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68 65  } sourceId]} the
d480: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  n {..          #
d490: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
d4a0: 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74 6f  TE: We failed to
d4b0: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
d4c0: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
d4d0: 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ier...
d4e0: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  #..          set
d4f0: 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f 77   sourceId unknow
d500: 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  n..        }....
d510: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
d520: 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b     # NOTE: Check
d530: 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   if the returned
d540: 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20 69   Fossil source i
d550: 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e 75  dentifier was nu
d560: 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20 20  ll.  If..
d570: 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61 6b   #       so, mak
d580: 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70 6f  e it easy to spo
d590: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
d5a0: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
d5b0: 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72 63  ng length $sourc d5c0: 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 eId] == 0} then d5d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set d5e0: 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a sourceId null.. d5f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... d600: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. d610: 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 65 # NOTE: Yes, the d620: 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 20 SQLite interop d630: 61 73 73 65 6d 62 6c 79 20 61 70 70 65 61 72 73 assembly appears d640: 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 to be available d650: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. d660: 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 addConstra d670: 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 6f int SQLiteIntero d680: 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75 p.... tpu d690: 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
d6a0: 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20  endArgs "yes ("
d6b0: 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73 6f  $version " "$so
d6c0: 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a 20  urceId ")\n"]..
d6d0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
d6e0: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch d6f0: 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 annel no\n.. d700: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... d710: 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 proc checkFor d720: 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 SQLiteDefineCons d730: 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 6e tant { channel n d740: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74 ame } {.. t d750: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
d760: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
d770: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65         "---- che
d780: 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d  cking for System
d790: 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65 66  .Data.SQLite def
d7a0: 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22 22  ine constant \""
d7b0: 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20   $name \.. d7c0: 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d "\"... "]... d7d0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 . if {[catc d7e0: 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a h {.. obj d7f0: 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag d800: 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. d810: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst d820: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S d830: 51 4c 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e QLite3 DefineCon d840: 73 74 61 6e 74 73 0d 0a 20 20 20 20 20 20 7d 20 stants.. } d850: 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 5d defineConstants] d860: 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. d870: 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 61 if {[lsea d880: 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 61 rch -exact -noca d890: 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61 se$defineConsta
d8a0: 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d 31  nts $name] != -1 d8b0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. d8c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. d8d0: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 # NOTE: Yes, th d8e0: 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 is define consta d8f0: 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 77 nt was enabled w d900: 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 0d hen the managed. d910: 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # d920: 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 20 assembly was d930: 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 20 compiled... d940: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. d950: 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 addConstraint d960: 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 66 69 [appendArgs defi d970: 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 neConstant.Syste d980: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 24 m.Data.SQLite.$
d990: 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  name]....
d9a0: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe d9b0: 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 20 l yes\n.. d9c0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. d9d0: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
d9e0: 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20  nel no\n..
d9f0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73    }..      } els
da00: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  e {..        tpu
da10: 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72 6f  ts $channel erro da20: 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 r\n.. }.. da30: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc da40: 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 6d getDateTimeForm da50: 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 at {} {.. # da60: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: da70: 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 73 This procedure s da80: 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 68 imply returns th da90: 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 65 e "default" Date daa0: 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 64 Time format used dab0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # dac0: 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 74 by the test suit dad0: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. dae0: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 if {[info exi daf0: 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f 66 sts ::datetime_f db00: 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 20 ormat] && \.. db10: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l db20: 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 6d ength$::datetim
db30: 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20 74  e_format] > 0} t
db40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
db50: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
db60: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61 6e  : Return the man
db70: 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65 6e  ually overridden
db80: 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 44   value for the D
db90: 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e 0d  ateTime format..
dba0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
dbb0: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64 61      return $::da dbc0: 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a 20 tetime_format.. dbd0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. dbe0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. dbf0: 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e # NOTE: Return dc00: 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 65 an ISO8601 Date dc10: 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d 70 Time format comp dc20: 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c 69 atible with SQLi dc30: 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 te,.. # dc40: 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 System.Data dc50: 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 69 .SQLite, and sui dc60: 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 2d table for round- dc70: 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 68 tripping with th dc80: 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 e.. # dc90: 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 73 DateTime clas dca0: 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 6f s of the framewo dcb0: 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c rk. If this val dcc0: 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d 0a ue is changed,.. dcd0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # dce0: 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d 61 various tests ma dcf0: 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 20 y fail... dd00: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 #.. retu dd10: 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 rn "yyyy-MM-dd H dd20: 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b H:mm:ss.FFFFFFFK dd30: 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ".. }.. dd40: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65 }..... proc e dd50: 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 20 numerableToList dd60: 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 7b { enumerable } { dd70: 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75 .. set resu dd80: 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 lt [list].... dd90: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l dda0: 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c ength$enumerabl
ddb0: 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d  e] == 0 || $enum ddc0: 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 erable eq "null" ddd0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. dde0: 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 return$result
ddf0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
de00: 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63     object foreac
de10: 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24 65  h -alias item $e de20: 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 20 numerable {.. de30: 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 if {[string de40: 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 3e length$item] >
de50: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
de60: 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 65        lappend re
de70: 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53 74  sult [$item ToSt de80: 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 7d ring].. } de90: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... dea0: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
deb0: 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  t..    }.....
dec0: 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52 65   proc catchAndRe
ded0: 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b 73  turn { script {s
dee0: 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65 7d  tackTrace false}
def0: 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20 7d   {strict true} }
df00: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
df10: 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c 75     # NOTE: Evalu
df20: 61 74 65 20 74 68 65 20 73 63 72 69 70 74 20 70  ate the script p
df30: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
df40: 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20 63  aller in their c
df50: 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 23  ontext,..      #
df60: 20 20 20 20 20 20 20 63 61 70 74 75 72 69 6e 67         capturing
df70: 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c 74   both the result
df80: 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e 20   and the return
df90: 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  code...      #..
dfa0: 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 5b        set code [
dfb0: 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31  catch {uplevel 1
dfc0: 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c 74   $script} result dfd0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ].... #.. dfe0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 20 # NOTE: Did dff0: 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 69 the script provi e000: 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 ded by our calle e010: 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 65 r NOT raise an e e020: 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d 0a rror?.. #.. e030: 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 63 if {$stric
e040: 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30 20  t && $code == 0 e050: 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 24 || !$strict && $e060: 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e 20 code != 1} then e070: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. e080: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 # NOTE: Su e090: 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 61 ccess. Return a e0a0: 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 72 list with the r e0b0: 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 74 eturn code and t e0c0: 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 20 he result... e0d0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r e0e0: 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 eturn [list$cod
e0f0: 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20  e $result].. e100: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 } elseif {$sta
e110: 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b 0d  ckTrace} then {.
e120: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
e130: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69 6c      # NOTE: Fail
e140: 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65 72  ure.  Our caller
e150: 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73 74   wants a full st
e160: 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 61 70  ack trace (if ap
e170: 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20 20  plicable),..
e180: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74 75      #       retu
e190: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74  rn a list with t
e1a0: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 61  he return code a
e1b0: 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 76 65  nd the result ve
e1c0: 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20  rbatim...
e1d0: 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   #..        retu
e1e0: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24  rn [list $code$
e1f0: 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20 7d  result]..      }
e200: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
e210: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
e220: 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f 75  TE: Failure.  Ou
e230: 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e 6f  r caller does no
e240: 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73 74  t want a full st
e250: 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a 20  ack trace (if..
e260: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61         #       a
e270: 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74 75  pplicable), retu
e280: 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20 74  rn a list with t
e290: 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c 20  he return code,
e2a0: 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20 20  the error..
e2b0: 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65 20     #       code
e2c0: 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72 65  for the interpre
e2d0: 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72 72  ter, and the err
e2e0: 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 74 6f  or message up to
e2f0: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20   the..        #
e300: 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65 72        point wher
e310: 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 61 63  e the stack trac
e320: 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e 0d  e should start..
e330: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
e340: 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b 73      set index [s
e350: 74 72 69 6e 67 20 66 69 72 73 74 20 22 20 20 20  tring first "
e360: 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b 20 23  at " $result]; # e370: 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 3f HACK: Reliable? e380: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 .... retu e390: 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 24 rn [list$code $e3a0: 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65 78 70 ::errorCode [exp e3b0: 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 20 r {$index != -1
e3c0: 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ? \..
e3d0: 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b 73   [string trim [s
e3e0: 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72 65 73  tring range $res e3f0: 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 3a ult 0$index]] :
e400: 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20 20   $result}]].. e410: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... e420: 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c 65 proc compile e430: 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 20 CSharpWith {.. e440: 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 6d text m e450: 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 74 emory symbols st e460: 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 4e rict resultsVarN e470: 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d ame errorsVarNam e480: 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 20 e fileNames.. e490: 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d 20 args } e4a0: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. e4b0: 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 20 # NOTE: Since e4c0: 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f 20 we are going to e4d0: 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 20 use this method e4e0: 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 69 name a lot, assi e4f0: 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 20 gn it to a.. e500: 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 62 # variab e510: 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 20 le first... e520: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 64 #.. set ad e530: 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 d ReferencedAsse e540: 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 20 mblies.Add.... e550: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N e560: 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 20 OTE: Create the e570: 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 base command to e580: 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 64 evaluate and add e590: 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 65 the property se e5a0: 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 20 ttings.. # e5b0: 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61 that are a e5c0: 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65 lmost always nee e5d0: 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20 ded by our unit e5e0: 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20 tests (i.e. the e5f0: 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 20 System.. # e600: 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d and System e610: 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 .Data assembly r e620: 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 eferences)... e630: 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 #.. set e640: 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c 0d command [list \. e650: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 69 . compi e660: 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 20 24 leCSharp$text $e670: 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73 20 memory$symbols
e680: 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 73 20  $strict results e690: 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 20 errors \.. e6a0: 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e$add System.
e6b0: 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d 2e  dll $add System. e6c0: 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 79 Data.dll$add Sy
e6d0: 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f 6e  stem.Transaction
e6e0: 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20 20  s.dll \..
e6f0: 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e 58     $add System.X e700: 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 ml.dll].... e710: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE e720: 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70 72 : Add all the pr e730: 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d 65 ovided file name e740: 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72 65 s as assembly re e750: 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 20 ferences... e760: 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 63 #.. foreac e770: 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 h fileName$file
e780: 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20  Names {..
e790: 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64   lappend command
e7a0: 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 72 79   $add [getBinary e7b0: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 FileName$fileNa
e7c0: 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
e7d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
e7e0: 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20 65   NOTE: Add the e
e7f0: 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 2c 20  xtra arguments,
e800: 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20 63  if any, to the c
e810: 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61  ommand to evalua
e820: 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  te...      #..
e830: 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e 64      eval lappend
e840: 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d 0a   command $args.. e850: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. e860: 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74 # NOTE: Alias t e870: 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61 he compiler loca e880: 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72 l results and er e890: 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 74 rors variables t e8a0: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 o the.. # e8b0: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 variable na e8c0: 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 mes provided by e8d0: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 our caller... e8e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { e8f0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
e900: 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 5d 20  resultsVarName]
e910: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
e920: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 72 65       upvar 1 $re e930: 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65 73 sultsVarName res e940: 75 6c 74 73 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d ults.. }... e950: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri e960: 6e 67 20 6c 65 6e 67 74 68 20 24 65 72 72 6f 72 ng length$error
e970: 73 56 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74  sVarName] > 0} t
e980: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
e990: 70 76 61 72 20 31 20 24 65 72 72 6f 72 73 56 61  pvar 1 $errorsVa e9a0: 72 4e 61 6d 65 20 65 72 72 6f 72 73 0d 0a 20 20 rName errors.. e9b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # e9c0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: e9d0: 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e Evaluate the con e9e0: 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c structed [compil e9f0: 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 eCSharp] command ea00: 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d and return the. ea10: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72 . # r ea20: 65 73 75 6c 74 2e 0d 0a 20 20 20 20 20 20 23 0d esult... #. ea30: 0a 20 20 20 20 20 20 65 76 61 6c 20 24 63 6f 6d . eval$com
ea40: 6d 61 6e 64 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  mand..    }.....
ea50: 20 20 20 20 70 72 6f 63 20 69 73 4d 65 6d 6f 72      proc isMemor
ea60: 79 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  yDb { fileName }
ea70: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
ea80: 20 20 20 23 20 4e 4f 54 45 3a 20 49 73 20 74 68     # NOTE: Is th
ea90: 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61  e specified data
eaa0: 62 61 73 65 20 66 69 6c 65 20 6e 61 6d 65 20 72  base file name r
eab0: 65 61 6c 6c 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f  eally an in-memo
eac0: 72 79 20 64 61 74 61 62 61 73 65 3f 0d 0a 20 20  ry database?..
ead0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 74      #..      ret
eae0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 66 69 6c 65  urn [expr {$file eaf0: 4e 61 6d 65 20 65 71 20 22 3a 6d 65 6d 6f 72 79 Name eq ":memory eb00: 3a 22 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 :" || \.. eb10: 20 20 20 5b 73 74 72 69 6e 67 20 72 61 6e 67 65 [string range eb20: 20 24 66 69 6c 65 4e 61 6d 65 20 30 20 31 32 5d$fileName 0 12]
eb30: 20 65 71 20 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72   eq "file::memor
eb40: 79 3a 22 7d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  y:"}]..    }....
eb50: 0a 20 20 20 20 70 72 6f 63 20 69 73 54 61 62 6c  .    proc isTabl
eb60: 65 49 6e 44 62 20 7b 20 6e 61 6d 65 20 7b 76 61  eInDb { name {va
eb70: 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d 0a 20  rName db} } {..
eb80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
eb90: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
eba0: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
ebb0: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
ebc0: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
ebd0: 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 23   of our..      #
ebe0: 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20         caller.
ebf0: 49 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20  It contains the
ec00: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
ec10: 69 6f 6e 20 68 61 6e 64 6c 65 20 74 68 61 74 20  ion handle that
ec20: 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20 20 23  will be..      #
ec30: 20 20 20 20 20 20 20 75 73 65 64 20 74 6f 20 65         used to e
ec40: 78 65 63 75 74 65 20 74 68 65 20 71 75 65 72 79  xecute the query
ec50: 20 75 73 65 64 20 74 6f 20 64 65 74 65 72 6d 69   used to determi
ec60: 6e 65 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20  ne if the named
ec70: 74 61 62 6c 65 20 69 73 0d 0a 20 20 20 20 20 20  table is..
ec80: 23 20 20 20 20 20 20 20 70 72 65 73 65 6e 74 20  #       present
ec90: 69 6e 20 74 68 61 74 20 64 61 74 61 62 61 73 65  in that database
eca0: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
ecb0: 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa ecc0: 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # ecd0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: ece0: 55 73 65 20 74 68 65 20 73 71 6c 69 74 65 5f 6d Use the sqlite_m ecf0: 61 73 74 65 72 20 74 61 62 6c 65 20 74 6f 20 64 aster table to d ed00: 65 74 65 72 6d 69 6e 65 20 69 66 20 74 68 65 20 etermine if the ed10: 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 0d 0a named table is.. ed20: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 72 # pr ed30: 65 73 65 6e 74 20 69 6e 20 74 68 65 20 64 61 74 esent in the dat ed40: 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d abase... #. ed50: 0a 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 7b . set sql { ed60: 0d 0a 20 20 20 20 20 20 20 20 53 45 4c 45 43 54 .. SELECT ed70: 20 43 4f 55 4e 54 28 2a 29 20 46 52 4f 4d 20 73 COUNT(*) FROM s ed80: 71 6c 69 74 65 5f 6d 61 73 74 65 72 20 57 48 45 qlite_master WHE ed90: 52 45 20 74 79 70 65 20 3d 20 27 74 61 62 6c 65 RE type = 'table eda0: 27 20 41 4e 44 20 6e 61 6d 65 20 3d 20 3f 3b 0d ' AND name = ?;. edb0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... edc0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT edd0: 45 3a 20 52 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 E: Return non-ze ede0: 72 6f 20 69 66 20 74 68 65 20 6e 61 6d 65 64 20 ro if the named edf0: 74 61 62 6c 65 20 69 73 20 70 72 65 73 65 6e 74 table is present ee00: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. ee10: 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b return [expr { ee20: 0d 0a 20 20 20 20 20 20 20 20 5b 73 71 6c 20 65 .. [sql e ee30: 78 65 63 75 74 65 20 2d 65 78 65 63 75 74 65 20 xecute -execute ee40: 73 63 61 6c 61 72 20 24 64 62 20 24 73 71 6c 20 scalar$db $sql ee50: 5b 6c 69 73 74 20 70 61 72 61 6d 31 20 53 74 72 [list param1 Str ee60: 69 6e 67 20 24 6e 61 6d 65 5d 5d 20 3e 20 30 0d ing$name]] > 0.
ee70: 0a 20 20 20 20 20 20 7d 5d 0d 0a 20 20 20 20 7d  .      }]..    }
ee80: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72  .....    proc tr
ee90: 69 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d  imSql { sql } {.
eea0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72  .      return [r
eeb0: 65 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c  egsub -all -- {\
eec0: 73 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d  s+} [string trim
eed0: 20 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20   $sql] " "].. eee0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc eef0: 65 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c executeSql { sql ef00: 20 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 {execute none} ef10: 7b 66 6f 72 6d 61 74 20 6e 6f 6e 65 7d 20 7b 66 {format none} {f ef20: 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d ileName ""} } {. ef30: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri ef40: 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65 4e ng length$fileN
ef50: 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ame] == 0} then
ef60: 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a 6d  {set fileName :m
ef70: 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 73  emory:}..      s
ef80: 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d 65  etupDb $fileName ef90: 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22 20 "" "" "" "" "" efa0: 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c 73 false false fals efb0: 65 20 66 61 6c 73 65 20 64 62 20 74 72 75 65 0d e false db true. efc0: 0a 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a ... try {.. efd0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ efe0: 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list eff0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 \.. s f000: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63 ql execute -exec f010: 75 74 65 20 24 65 78 65 63 75 74 65 20 2d 66 6f ute$execute -fo
f020: 72 6d 61 74 20 24 66 6f 72 6d 61 74 20 24 64 62  rmat $format$db
f030: 20 24 73 71 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d   $sql]].. } f040: 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 finally {.. f050: 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 24 66 cleanupDb$f
f060: 69 6c 65 4e 61 6d 65 20 64 62 20 66 61 6c 73 65  ileName db false
f070: 20 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20   false false..
f080: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
f090: 0a 20 20 20 20 70 72 6f 63 20 68 61 73 4e 6f 46  .    proc hasNoF
f0a0: 6c 61 67 73 20 7b 20 76 61 72 4e 61 6d 65 20 6e  lags { varName n
f0b0: 6f 6e 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 75  one } {..      u
f0c0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName f0d0: 66 6c 61 67 73 0d 0a 0d 0a 20 20 20 20 20 20 69 flags.... i f0e0: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists f0f0: 20 66 6c 61 67 73 5d 7d 20 74 68 65 6e 20 7b 0d flags]} then {. f100: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return f110: 74 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d true.. }... f120: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 . if {[stri f130: 6e 67 20 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 ng length$flags
f140: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
f150: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
f160: 72 75 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  rue..      }....
f170: 20 20 20 20 20 20 69 66 20 7b 24 6e 6f 6e 65 20        if {$none f180: 26 26 20 24 66 6c 61 67 73 20 65 71 20 22 4e 6f &&$flags eq "No
f190: 6e 65 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ne"} then {..
f1a0: 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
f1b0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
f1c0: 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 0d     return false.
f1d0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
f1e0: 72 6f 63 20 67 65 74 43 6f 6e 6e 65 63 74 69 6f  roc getConnectio
f1f0: 6e 46 6c 61 67 73 20 7b 20 66 69 6c 65 4e 61 6d  nFlags { fileNam
f200: 65 20 66 6c 61 67 73 20 7b 71 75 69 65 74 20 66  e flags {quiet f
f210: 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  alse} } {..
f220: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
f230: 3a 20 46 69 67 75 72 65 20 6f 75 74 20 77 68 69  : Figure out whi
f240: 63 68 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  ch database file
f250: 20 6e 61 6d 65 20 6f 72 20 63 6f 6e 6e 65 63 74   name or connect
f260: 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 65 73 65  ion string these
f270: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
f280: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
f290: 20 77 69 6c 6c 20 61 63 74 75 61 6c 6c 79 20 61   will actually a
f2a0: 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73 20 69  pply to.  This i
f2b0: 73 20 6e 6f 74 20 6e 65 63 65 73 73 61 72 79 0d  s not necessary.
f2c0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69  .      #       i
f2d0: 6e 20 71 75 69 65 74 20 6d 6f 64 65 20 62 65 63  n quiet mode bec
f2e0: 61 75 73 65 20 74 68 69 73 20 69 6e 66 6f 72 6d  ause this inform
f2f0: 61 74 69 6f 6e 20 69 73 20 6f 6e 6c 79 20 75 73  ation is only us
f300: 65 64 20 66 6f 72 20 6c 6f 67 67 69 6e 67 0d 0a  ed for logging..
f310: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 6e        #       an
f320: 64 20 72 65 70 6f 72 74 69 6e 67 20 70 75 72 70  d reporting purp
f330: 6f 73 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  oses...      #..
f340: 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie f350: 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. f360: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l f370: 65 6e 67 74 68 20 24 66 69 6c 65 4e 61 6d 65 5d ength$fileName]
f380: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..
f390: 20 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61          set data
f3a0: 62 61 73 65 20 5b 61 70 70 65 6e 64 41 72 67 73  base [appendArgs
f3b0: 20 22 66 69 6c 65 20 6e 61 6d 65 20 5c 22 22 20   "file name \""
f3c0: 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5d 0d 0a 20  $fileName \"].. f3d0: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 } elseif f3e0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: f3f0: 64 61 74 61 53 6f 75 72 63 65 5d 20 26 26 20 5c dataSource] && \ f400: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 21 5b .. ![ f410: 61 72 72 61 79 20 65 78 69 73 74 73 20 3a 3a 64 array exists ::d f420: 61 74 61 53 6f 75 72 63 65 5d 7d 20 74 68 65 6e ataSource]} then f430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se f440: 74 20 64 61 74 61 62 61 73 65 20 5b 61 70 70 65 t database [appe f450: 6e 64 41 72 67 73 20 22 64 61 74 61 20 73 6f 75 ndArgs "data sou f460: 72 63 65 20 5c 22 22 20 24 3a 3a 64 61 74 61 53 rce \""$::dataS
f470: 6f 75 72 63 65 20 5c 22 5d 0d 0a 20 20 20 20 20  ource \"]..
f480: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
f490: 20 20 20 20 20 20 20 73 65 74 20 64 61 74 61 62         set datab
f4a0: 61 73 65 20 3c 75 6e 6b 6e 6f 77 6e 3e 0d 0a 20  ase <unknown>..
f4b0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
f4c0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
f4d0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
f4e0: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 6c   (and log) the l
f4f0: 6f 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  ocal connection
f500: 66 6c 61 67 73 20 61 6e 64 20 74 68 65 20 61 73  flags and the as
f510: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 20 20  sociated..
f520: 23 20 20 20 20 20 20 20 64 61 74 61 20 73 6f 75  #       data sou
f530: 72 63 65 20 6f 72 20 66 69 6c 65 20 6e 61 6d 65  rce or file name
f540: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
f550: 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74    if {!$quiet} t f560: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i f570: 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists f580: 20 3a 3a 6e 6f 28 65 6d 69 74 4c 6f 63 61 6c 46 ::no(emitLocalF f590: 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 lags)] && \.. f5a0: 20 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f (![info f5b0: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 exists ::no(emi f5c0: 74 4c 6f 63 61 6c 46 6c 61 67 73 49 66 4e 6f 6e tLocalFlagsIfNon f5d0: 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 e)] || \.. f5e0: 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c ![hasNoFl f5f0: 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d ags flags false] f600: 29 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 )} then {.. f610: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
f620: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
f630: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
f640: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f          "---- lo
f650: 63 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  cal connection f
f660: 6c 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61  lags for " $data f670: 62 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 base \.. f680: 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b " are: " [ f690: 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 expr {![hasNoFla f6a0: 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d 20 gs flags false] f6b0: 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ? \.. f6c0: 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c [appendArgs \ f6d0: 22 20 24 66 6c 61 67 73 20 5c 22 5d 20 3a 20 22 "$flags \"] : "
f6e0: 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20  <none>"}] \n]..
f6f0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
f700: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
f710: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
f720: 20 28 61 6e 64 20 6c 6f 67 29 20 74 68 65 20 73   (and log) the s
f730: 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e  hared connection
f740: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 23   flags...      #
f750: 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 71 75  ..      if {!$qu f760: 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. f770: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 if {[catch f780: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a {.. obj f790: 65 63 74 20 69 6e 76 6f 6b 65 20 53 79 73 74 65 ect invoke Syste f7a0: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 m.Data.SQLite.SQ f7b0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 53 LiteConnection S f7c0: 68 61 72 65 64 46 6c 61 67 73 0d 0a 20 20 20 20 haredFlags.. f7d0: 20 20 20 20 7d 20 73 68 61 72 65 64 46 6c 61 67 } sharedFlag f7e0: 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. f7f0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 . if {! f800: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n f810: 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61 67 o(emitSharedFlag f820: 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. f830: 20 20 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 (![info f840: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 exists ::no(emit f850: 53 68 61 72 65 64 46 6c 61 67 73 49 66 4e 6f 6e SharedFlagsIfNon f860: 65 29 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 e)] || \.. f870: 20 20 20 20 20 20 20 20 20 21 5b 68 61 73 4e 6f ![hasNo f880: 46 6c 61 67 73 20 73 68 61 72 65 64 46 6c 61 67 Flags sharedFlag f890: 73 20 74 72 75 65 5d 29 7d 20 74 68 65 6e 20 7b s true])} then { f8a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp f8b0: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
f8c0: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
f8d0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
f8e0: 20 20 20 22 2d 2d 2d 2d 20 73 68 61 72 65 64 20     "---- shared
f8f0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
f900: 20 66 6f 72 20 22 20 24 64 61 74 61 62 61 73 65   for " $database f910: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. f920: 20 20 20 20 22 20 61 72 65 3a 20 22 20 5b 65 78 " are: " [ex f930: 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c 61 67 73 pr {![hasNoFlags f940: 20 73 68 61 72 65 64 46 6c 61 67 73 20 74 72 75 sharedFlags tru f950: 65 5d 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 e] ? \.. f960: 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 [appendA f970: 72 67 73 20 5c 22 20 24 73 68 61 72 65 64 46 6c rgs \"$sharedFl
f980: 61 67 73 20 5c 22 5d 20 3a 20 22 3c 6e 6f 6e 65  ags \"] : "<none
f990: 3e 22 7d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  >"}] \n]..
f9a0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
f9b0: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
f9c0: 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78     if {![info ex
f9d0: 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 53 68  ists ::no(emitSh
f9e0: 61 72 65 64 46 6c 61 67 73 29 5d 20 26 26 20 5c  aredFlags)] && \
f9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
fa00: 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
fa10: 6e 6f 28 65 6d 69 74 53 68 61 72 65 64 46 6c 61  no(emitSharedFla
fa20: 67 73 49 66 55 6e 61 76 61 69 6c 61 62 6c 65 29  gsIfUnavailable)
fa30: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
fa40: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: fa50: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap fa60: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. fa70: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- fa80: 2d 20 73 68 61 72 65 64 20 63 6f 6e 6e 65 63 74 - shared connect fa90: 69 6f 6e 20 66 6c 61 67 73 20 66 6f 72 20 22 20 ion flags for " faa0: 24 64 61 74 61 62 61 73 65 20 5c 0d 0a 20 20 20$database \..
fab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 20 61               " a
fac0: 72 65 3a 20 3c 75 6e 61 76 61 69 6c 61 62 6c 65  re: <unavailable
fad0: 3e 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  >\n"]..
fae0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }..
faf0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
fb00: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
fb10: 20 53 68 6f 77 20 28 61 6e 64 20 6c 6f 67 29 20   Show (and log)
fb20: 74 68 65 20 64 65 74 65 63 74 65 64 20 67 6c 6f  the detected glo
fb30: 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66  bal connection f
fb40: 6c 61 67 73 2c 20 69 66 20 61 6e 79 2e 0d 0a 20  lags, if any...
fb50: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
fb60: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then fb70: 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 {.. if {! fb80: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n fb90: 6f 28 65 6d 69 74 47 6c 6f 62 61 6c 46 6c 61 67 o(emitGlobalFlag fba0: 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 s)] && \.. fbb0: 20 20 20 20 20 20 28 21 5b 69 6e 66 6f 20 65 78 (![info ex fbc0: 69 73 74 73 20 3a 3a 6e 6f 28 65 6d 69 74 47 6c ists ::no(emitGl fbd0: 6f 62 61 6c 46 6c 61 67 73 49 66 4e 6f 6e 65 29 obalFlagsIfNone) fbe0: 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] || \.. fbf0: 20 20 20 20 20 21 5b 68 61 73 4e 6f 46 6c 61 67 ![hasNoFlag fc00: 73 20 3a 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 s ::connection_f fc10: 6c 61 67 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 lags false])} th fc20: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. fc30: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
fc40: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
fc50: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
fc60: 20 20 20 22 2d 2d 2d 2d 20 67 6c 6f 62 61 6c 20     "---- global
fc70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
fc80: 20 61 72 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20   are: " \..
fc90: 20 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b           [expr {
fca0: 21 5b 68 61 73 4e 6f 46 6c 61 67 73 20 3a 3a 63  ![hasNoFlags ::c
fcb0: 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20  onnection_flags
fcc0: 66 61 6c 73 65 5d 20 3f 20 5c 0d 0a 20 20 20 20  false] ? \..
fcd0: 20 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e            [appen
fce0: 64 41 72 67 73 20 5c 22 20 24 3a 3a 63 6f 6e 6e  dArgs \" $::conn fcf0: 65 63 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 22 5d ection_flags \"] fd00: 20 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e : "<none>"}] \n fd10: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. fd20: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # fd30: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: fd40: 49 66 20 74 68 65 72 65 20 61 72 65 20 61 6e 79 If there are any fd50: 20 67 6c 6f 62 61 6c 20 28 70 65 72 20 74 65 73 global (per tes fd60: 74 20 72 75 6e 29 20 63 6f 6e 6e 65 63 74 69 6f t run) connectio fd70: 6e 20 66 6c 61 67 73 20 63 75 72 72 65 6e 74 6c n flags currentl fd80: 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 y.. # fd90: 20 73 65 74 2c 20 75 73 65 20 74 68 65 6d 20 6e set, use them n fda0: 6f 77 20 28 69 2e 65 2e 20 62 79 20 63 6f 6d 62 ow (i.e. by comb fdb0: 69 6e 69 6e 67 20 74 68 65 6d 20 77 69 74 68 20 ining them with fdc0: 74 68 65 20 6f 6e 65 73 20 66 6f 72 20 74 68 69 the ones for thi fdd0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 s.. # fde0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 2e 0d 0a 20 connection)... fdf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if fe00: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : fe10: 3a 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 :connection_flag fe20: 73 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 s]} then {.. fe30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # fe40: 20 4e 4f 54 45 3a 20 43 6f 6d 62 69 6e 65 20 61 NOTE: Combine a fe50: 6e 64 2f 6f 72 20 72 65 70 6c 61 63 65 20 74 68 nd/or replace th fe60: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 e connection fla fe70: 67 73 20 61 6e 64 20 74 68 65 6e 20 73 68 6f 77 gs and then show fe80: 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 the.. # fe90: 20 20 20 20 20 20 6e 65 77 20 76 61 6c 75 65 2e new value. fea0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. feb0: 20 20 20 20 20 73 65 74 20 66 6c 61 67 73 20 5b set flags [ fec0: 63 6f 6d 62 69 6e 65 46 6c 61 67 73 20 24 66 6c combineFlags$fl
fed0: 61 67 73 20 24 3a 3a 63 6f 6e 6e 65 63 74 69 6f  ags $::connectio fee0: 6e 5f 66 6c 61 67 73 5d 0d 0a 0d 0a 20 20 20 20 n_flags].... fef0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # ff00: 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 61 6e 64 NOTE: Show (and ff10: 20 6c 6f 67 29 20 74 68 65 20 6e 65 77 20 65 66 log) the new ef ff20: 66 65 63 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 fective connecti ff30: 6f 6e 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 on flags... ff40: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if ff50: 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
ff60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
ff70: 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
ff80: 3a 6e 6f 28 65 6d 69 74 43 6f 6d 62 69 6e 65 64  :no(emitCombined
ff90: 46 6c 61 67 73 29 5d 20 26 26 20 5c 0d 0a 20 20  Flags)] && \..
ffa0: 20 20 20 20 20 20 20 20 20 20 20 20 28 21 5b 69              (![i
ffb0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
ffc0: 65 6d 69 74 43 6f 6d 62 69 6e 65 64 46 6c 61 67  emitCombinedFlag
ffd0: 73 49 66 4e 6f 6e 65 29 5d 20 7c 7c 20 5c 0d 0a  sIfNone)] || \..
ffe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21                 !
fff0: 5b 68 61 73 4e 6f 46 6c 61 67 73 20 66 6c 61 67  [hasNoFlags flag
10000 73 20 66 61 6c 73 65 5d 29 7d 20 74 68 65 6e 20  s false])} then
10010 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
10020 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha 10030 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 10040 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10050 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 62 69 6e "---- combin 10060 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c ed connection fl 10070 61 67 73 20 66 6f 72 20 22 20 24 64 61 74 61 62 ags for "$datab
10080 61 73 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ase \..
10090 20 20 20 20 20 20 20 22 20 61 72 65 3a 20 22 20         " are: "
100a0 5b 65 78 70 72 20 7b 21 5b 68 61 73 4e 6f 46 6c  [expr {![hasNoFl
100b0 61 67 73 20 66 6c 61 67 73 20 66 61 6c 73 65 5d  ags flags false]
100c0 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
100d0 20 20 20 20 20 20 5b 61 70 70 65 6e 64 41 72 67        [appendArg
100e0 73 20 5c 22 20 24 66 6c 61 67 73 20 5c 22 5d 20  s \" $flags \"] 100f0 3a 20 22 3c 6e 6f 6e 65 3e 22 7d 5d 20 5c 6e 5d : "<none>"}] \n] 10100 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 10110 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10120 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 10130 6e 20 24 66 6c 61 67 73 0d 0a 20 20 20 20 7d 0d n$flags..    }.
10140 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
10150 46 6c 61 67 73 50 72 6f 70 65 72 74 79 20 7b 20  FlagsProperty {
10160 7b 66 6c 61 67 73 20 22 22 7d 20 7b 71 75 69 65  {flags ""} {quie
10170 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20  t false} } {..
10180 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
10190 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 77  OTE: Determine w
101a0 68 61 74 20 74 68 65 20 63 6f 6d 62 69 6e 65 64  hat the combined
101b0 20 28 67 6c 6f 62 61 6c 20 61 6e 64 20 6c 6f 63   (global and loc
101c0 61 6c 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  al) connection..
101d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 6c        #       fl
101e0 61 67 73 20 73 68 6f 75 6c 64 20 62 65 2c 20 70  ags should be, p
101f0 6f 73 73 69 62 6c 79 20 71 75 69 65 74 6c 79 2e  ossibly quietly.
10200 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
10210 20 73 65 74 20 66 6c 61 67 73 20 5b 67 65 74 43   set flags [getC
10220 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 22  onnectionFlags "
10230 22 20 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d  " $flags$quiet]
10240 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
10250 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 6f     # NOTE: If no
10260 20 67 6c 6f 62 61 6c 20 6f 72 20 6c 6f 63 61 6c   global or local
10270 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
10280 73 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64  s were specified
10290 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  , the..      #
102a0 20 20 20 20 20 64 65 66 61 75 6c 74 20 63 6f 6e       default con
102b0 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 73 68  nection flags sh
102c0 6f 75 6c 64 20 62 65 20 75 73 65 64 3b 20 74 68  ould be used; th
102d0 65 72 65 66 6f 72 65 2c 20 72 65 74 75 72 6e 0d  erefore, return.
102e0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61  .      #       a
102f0 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69  n empty string i
10300 6e 20 74 68 61 74 20 63 61 73 65 2e 0d 0a 20 20  n that case...
10310 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
10320 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
10330 24 66 6c 61 67 73 5d 20 3d 3d 20 30 7d 20 74 68  $flags] == 0} th 10340 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 en {.. re 10350 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 20 20 7d turn "".. } 10360 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 10370 20 20 20 23 20 4e 4f 54 45 3a 20 49 6e 20 6f 72 # NOTE: In or 10380 64 65 72 20 74 6f 20 63 68 65 63 6b 20 69 66 20 der to check if 10390 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e the default conn 103a0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 ection flags are 103b0 20 62 65 69 6e 67 20 75 73 65 64 0d 0a 20 20 20 being used.. 103c0 20 20 20 23 20 20 20 20 20 20 20 69 74 20 69 73 # it is 103d0 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 61 74 necessary to at 103e0 74 65 6d 70 74 20 61 20 63 6f 6e 76 65 72 73 69 tempt a conversi 103f0 6f 6e 20 74 6f 20 74 68 65 20 61 63 74 75 61 6c on to the actual 10400 20 65 6e 75 6d 65 72 61 74 65 64 0d 0a 20 20 20 enumerated.. 10410 20 20 20 23 20 20 20 20 20 20 20 74 79 70 65 2e # type. 10420 20 20 46 61 69 6c 69 6e 67 20 74 68 61 74 2c 20 Failing that, 10430 74 68 65 20 63 68 65 63 6b 20 61 67 61 69 6e 73 the check agains 10440 74 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 t the default va 10450 6c 75 65 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 lue will be.. 10460 20 20 20 23 20 20 20 20 20 20 20 73 6b 69 70 70 # skipp 10470 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ed... #.. 10480 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 10490 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 65 72 .. set er 104a0 72 6f 72 20 6e 75 6c 6c 3b 20 23 20 49 47 4e 4f ror null; # IGNO 104b0 52 45 44 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6f RED.... o 104c0 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 55 74 69 bject invoke Uti 104d0 6c 69 74 79 20 54 72 79 50 61 72 73 65 46 6c 61 lity TryParseFla 104e0 67 73 45 6e 75 6d 20 22 22 20 5c 0d 0a 20 20 20 gsEnum "" \.. 104f0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e System. 10500 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 Data.SQLite.SQLi 10510 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 teConnectionFlag 10520 73 20 22 22 20 24 66 6c 61 67 73 20 6e 75 6c 6c s ""$flags null
10530 20 74 72 75 65 20 5c 0d 0a 20 20 20 20 20 20 20   true \..
10540 20 20 20 20 20 74 72 75 65 20 65 72 72 6f 72 0d       true error.
10550 0a 20 20 20 20 20 20 7d 20 76 61 6c 75 65 5d 7d  .      } value]}
10560 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10570 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
10580 54 45 3a 20 41 74 74 65 6d 70 74 69 6e 67 20 74  TE: Attempting t
10590 6f 20 70 61 72 73 65 20 74 68 65 20 63 6f 6e 6e  o parse the conn
105a0 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 63 61 75  ection flags cau
105b0 73 65 64 20 61 20 73 63 72 69 70 74 0d 0a 20 20  sed a script..
105c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 65 72        #       er
105d0 72 6f 72 2e 20 20 45 6d 69 74 20 61 20 77 61 72  ror.  Emit a war
105e0 6e 69 6e 67 20 74 6f 20 74 68 65 20 74 65 73 74  ning to the test
105f0 20 6c 6f 67 20 66 69 6c 65 20 61 6e 64 20 63 6f   log file and co
10600 6e 74 69 6e 75 65 0d 0a 20 20 20 20 20 20 20 20  ntinue..
10610 23 20 20 20 20 20 20 20 75 73 69 6e 67 20 61 6e  #       using an
10620 20 65 6d 74 70 79 20 73 74 72 69 6e 67 20 69 6e   emtpy string in
10630 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 20 20  stead...
10640 23 0d 0a 20 20 20 20 20 20 20 20 74 6c 6f 67 20  #..        tlog
10650 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
10660 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d             "====
10670 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64   WARNING: failed
10680 20 74 6f 20 70 61 72 73 65 20 63 6f 6e 6e 65 63   to parse connec
10690 74 69 6f 6e 20 66 6c 61 67 73 2c 20 65 72 72 6f  tion flags, erro
106a0 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  r: " \..
106b0 20 20 20 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20      \n\t $value 106c0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 \n].... s 106d0 65 74 20 76 61 6c 75 65 20 22 22 0d 0a 20 20 20 et value "".. 106e0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d }.... #. 106f0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 . # NOTE: I 10700 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 64 20 66 f the combined f 10710 6c 61 67 73 20 73 74 72 69 6e 67 20 63 6f 75 6c lags string coul 10720 64 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 20 62 d not actually b 10730 65 20 63 6f 6e 76 65 72 74 65 64 0d 0a 20 20 20 e converted.. 10740 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 74 68 # to th 10750 65 20 65 6e 75 6d 65 72 61 74 65 64 20 74 79 70 e enumerated typ 10760 65 20 69 74 20 69 73 20 74 68 65 20 64 65 66 61 e it is the defa 10770 75 6c 74 20 76 61 6c 75 65 2c 20 74 68 65 6e 20 ult value, then 10780 6a 75 73 74 20 75 73 65 0d 0a 20 20 20 20 20 20 just use.. 10790 23 20 20 20 20 20 20 20 69 74 20 76 65 72 62 61 # it verba 107a0 74 69 6d 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 tim; otherwise, 107b0 6a 75 73 74 20 72 65 74 75 72 6e 20 61 6e 20 65 just return an e 107c0 6d 70 74 79 20 73 74 72 69 6e 67 2e 20 20 49 6e mpty string. In 107d0 20 74 68 61 74 0d 0a 20 20 20 20 20 20 23 20 20 that.. # 107e0 20 20 20 20 20 63 61 73 65 2c 20 74 68 65 20 64 case, the d 107f0 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74 69 6f efault connectio 10800 6e 20 66 6c 61 67 73 20 77 69 6c 6c 20 62 65 20 n flags will be 10810 75 73 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a used... #.. 10820 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin 10830 67 20 6c 65 6e 67 74 68 20 24 76 61 6c 75 65 5d g length$value]
10840 20 3d 3d 20 30 20 7c 7c 20 24 76 61 6c 75 65 20   == 0 || $value 10850 6e 65 20 22 44 65 66 61 75 6c 74 22 7d 20 74 68 ne "Default"} th 10860 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 10870 0a 20 20 20 20 20 20 20 20 23 20 57 41 52 4e 49 . # WARNI 10880 4e 47 3a 20 54 68 69 73 20 72 65 74 75 72 6e 73 NG: This returns 10890 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75 the string valu 108a0 65 20 6f 66 20 74 68 65 20 63 6f 6d 62 69 6e 65 e of the combine 108b0 64 20 66 6c 61 67 73 2c 20 6e 6f 74 0d 0a 20 20 d flags, not.. 108c0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 108d0 20 74 68 65 20 65 6e 75 6d 65 72 61 74 65 64 20 the enumerated 108e0 76 61 6c 75 65 2e 20 20 54 68 69 73 20 69 73 20 value. This is 108f0 62 79 20 64 65 73 69 67 6e 20 61 6e 64 20 73 68 by design and sh 10900 6f 75 6c 64 20 6e 6f 74 0d 0a 20 20 20 20 20 20 ould not.. 10910 20 20 23 20 20 20 20 20 20 20 20 20 20 62 65 20 # be 10920 63 68 61 6e 67 65 64 20 77 69 74 68 6f 75 74 20 changed without 10930 63 61 72 65 66 75 6c 20 63 6f 6e 73 69 64 65 72 careful consider 10940 61 74 69 6f 6e 20 28 65 2e 67 2e 20 69 74 20 77 ation (e.g. it w 10950 6f 75 6c 64 0d 0a 20 20 20 20 20 20 20 20 23 20 ould.. # 10960 20 20 20 20 20 20 20 20 20 70 72 65 76 65 6e 74 prevent 10970 20 74 68 65 20 53 51 4c 69 74 65 43 6f 6e 6e 65 the SQLiteConne 10980 63 74 69 6f 6e 20 63 6c 61 73 73 20 66 72 6f 6d ction class from 10990 20 61 6c 6c 6f 77 69 6e 67 20 69 6e 76 61 6c 69 allowing invali 109a0 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 d.. # 109b0 20 20 20 20 20 20 5b 22 6d 61 67 69 63 61 6c 22 ["magical" 109c0 5d 20 6d 65 74 61 2d 66 6c 61 67 73 29 2e 0d 0a ] meta-flags)... 109d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 109e0 20 20 20 72 65 74 75 72 6e 20 5b 61 70 70 65 6e return [appen 109f0 64 41 72 67 73 20 22 46 6c 61 67 73 3d 22 20 24 dArgs "Flags="$
10a00 66 6c 61 67 73 20 5c 3b 5d 0d 0a 20 20 20 20 20  flags \;]..
10a10 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75   }....      retu
10a20 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a 0c 0d  rn ""..    }....
10a30 0a 20 20 20 20 70 72 6f 63 20 65 6e 61 62 6c 65  .    proc enable
10a40 53 68 61 72 65 64 43 61 63 68 65 20 7b 20 63 68  SharedCache { ch
10a50 61 6e 6e 65 6c 20 65 6e 61 62 6c 65 20 7b 71 75  annel enable {qu
10a60 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
10a70 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
10a80 20 7b 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65   {..        obje
10a90 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73  ct invoke -flags
10aa0 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20   +NonPublic \..
10ab0 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
10ac0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e  m.Data.SQLite.Un
10ad0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10ae0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
10af0 20 73 71 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f   sqlite3_enable_
10b00 73 68 61 72 65 64 5f 63 61 63 68 65 20 5b 65 78  shared_cache [ex
10b10 70 72 20 69 6e 74 28 24 65 6e 61 62 6c 65 29 5d  pr int($enable)] 10b20 0d 0a 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 .. } result 10b30 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 10b40 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
10b50 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
10b60 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 10b70 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 10b80 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 10b90 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 "---- call sq 10ba0 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 73 68 61 lite3_enable_sha 10bb0 72 65 64 5f 63 61 63 68 65 28 22 20 24 65 6e 61 red_cache("$ena
10bc0 62 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ble \..
10bd0 20 20 20 20 20 22 29 2e 2e 2e 20 6f 6b 3a 20 22       ")... ok: "
10be0 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20   $result \n].. 10bf0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d }.. } 10c00 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 10c10 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
10c20 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
10c30 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 10c40 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 10c50 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 10c60 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 65 - call sqlite3_e 10c70 6e 61 62 6c 65 5f 73 68 61 72 65 64 5f 63 61 63 nable_shared_cac 10c80 68 65 28 22 20 24 65 6e 61 62 6c 65 20 5c 0d 0a he("$enable \..
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 29                ")
10ca0 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  ... error: " \n\
10cb0 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  t $result \n].. 10cc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 10cd0 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 }.. }..... 10ce0 20 70 72 6f 63 20 73 65 74 75 70 44 62 20 7b 0d proc setupDb {. 10cf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c . fil 10d00 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22 22 7d 20 eName {mode ""} 10d10 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 20 {dateTimeFormat 10d20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65 4b 69 6e ""} {dateTimeKin 10d30 64 20 22 22 7d 20 7b 66 6c 61 67 73 20 22 22 7d d ""} {flags ""} 10d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 65 .. {e 10d50 78 74 72 61 20 22 22 7d 20 7b 71 75 61 6c 69 66 xtra ""} {qualif 10d60 79 20 74 72 75 65 7d 20 7b 64 65 6c 65 74 65 20 y true} {delete 10d70 74 72 75 65 7d 20 7b 75 72 69 20 66 61 6c 73 65 true} {uri false 10d80 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b }.. { 10d90 74 65 6d 70 6f 72 61 72 79 20 74 72 75 65 7d 20 temporary true} 10da0 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 71 75 {varName db} {qu 10db0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 10dc0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 10dd0 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c 20 73 65 NOTE: First, se 10de0 65 20 69 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 e if our caller 10df0 68 61 73 20 72 65 71 75 65 73 74 65 64 20 61 6e has requested an 10e00 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 in-memory datab 10e10 61 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ase... #.. 10e20 20 20 20 20 20 73 65 74 20 69 73 4d 65 6d 6f 72 set isMemor 10e30 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62 20 24 66 y [isMemoryDb$f
10e40 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....
10e50 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
10e60 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c 6c 20  E: For now, all
10e70 74 65 73 74 20 64 61 74 61 62 61 73 65 73 20 75  test databases u
10e80 73 65 64 20 62 79 20 74 68 65 20 74 65 73 74 20  sed by the test
10e90 73 75 69 74 65 20 61 72 65 20 70 6c 61 63 65 64  suite are placed
10ea0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
10eb0 69 6e 74 6f 20 74 68 65 20 64 61 74 61 62 61 73  into the databas
10ec0 65 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45 61  e directory.  Ea
10ed0 63 68 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  ch database and
10ee0 72 65 6c 61 74 65 64 20 66 69 6c 65 73 0d 0a 20  related files..
10ef0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
10f00 64 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75  d by a test shou
10f10 6c 64 20 62 65 20 63 6c 65 61 6e 65 64 20 75 70  ld be cleaned up
10f20 20 62 79 20 74 68 61 74 20 74 65 73 74 20 75 73   by that test us
10f30 69 6e 67 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ing the..      #
10f40 20 20 20 20 20 20 20 22 63 6c 65 61 6e 75 70 44         "cleanupD
10f50 62 22 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65  b" procedure, be
10f60 6c 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  low...      #..
10f70 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d       if {!$isMem 10f80 6f 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d ory &&$qualify}
10f90 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
10fa0 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66   set fileName [f
10fb0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74  ile join [getDat
10fc0 61 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  abaseDirectory]
10fd0 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65  [file tail $file 10fe0 4e 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d Name]].. }. 10ff0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11000 20 20 23 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 # NOTE: By def 11010 61 75 6c 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 ault, delete any 11020 20 70 72 65 2d 65 78 69 73 74 69 6e 67 20 64 61 pre-existing da 11030 74 61 62 61 73 65 20 77 69 74 68 20 74 68 65 20 tabase with the 11040 73 61 6d 65 20 66 69 6c 65 0d 0a 20 20 20 20 20 same file.. 11050 20 23 20 20 20 20 20 20 20 6e 61 6d 65 20 69 66 # name if 11060 20 69 74 20 63 75 72 72 65 6e 74 6c 79 20 65 78 it currently ex 11070 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ists... #.. 11080 20 20 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 if {!$isMe
11090 6d 6f 72 79 20 26 26 20 24 64 65 6c 65 74 65 20  mory && $delete 110a0 26 26 20 5b 66 69 6c 65 20 65 78 69 73 74 73 20 && [file exists 110b0 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e$fileName]} then
110c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
110d0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41         # NOTE: A
110e0 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65  ttempt to delete
110f0 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69 6e   any pre-existin
11100 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68 20  g database with
11110 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a 20  the same file..
11120 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e         #       n
11130 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  ame...        #.
11140 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61  .        if {[ca
11150 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65  tch {file delete
11160 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f   $fileName} erro 11170 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 11180 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 11190 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 73 6f # NOTE: We so 111a0 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 6f 20 mehow failed to 111b0 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c 65 2c delete the file, 111c0 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 report why... 111d0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 111e0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
111f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
11200 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 11210 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 11220 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 11230 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 11240 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 11250 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 to delete datab 11260 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ase file \""$fi
11270 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  leName \..
11280 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
11290 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f  ring setup, erro
112a0 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 112b0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 112c0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 112d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 112e0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 112f0 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe 11300 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable 11310 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t 11320 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou 11330 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # 11340 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 caller. The ha 11350 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f 70 65 6e ndle to the open 11360 65 64 20 64 61 74 61 62 61 73 65 20 77 69 6c 6c ed database will 11370 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 be stored there 11380 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 11390 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 upvar 1$varNa
113a0 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23  me db....      #
113b0 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
113c0 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67 20 74  Start building t
113d0 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
113e0 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c 79 20  ring.  The only
113f0 72 65 71 75 69 72 65 64 20 70 6f 72 74 69 6f 6e  required portion
11400 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
11410 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
11420 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  n string is the
11430 64 61 74 61 20 73 6f 75 72 63 65 2c 20 77 68 69  data source, whi
11440 63 68 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d  ch contains the.
11450 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64  .      #       d
11460 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61 6d  atabase file nam
11470 65 20 69 74 73 65 6c 66 2e 20 20 49 66 20 6f 75  e itself.  If ou
11480 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 73 20 74  r caller wants t
11490 6f 20 75 73 65 20 61 20 55 52 49 20 61 73 0d 0a  o use a URI as..
114a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
114b0 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 75  e data source, u
114c0 73 65 20 74 68 65 20 46 75 6c 6c 55 72 69 20 63  se the FullUri c
114d0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
114e0 20 70 72 6f 70 65 72 74 79 20 74 6f 0d 0a 20 20   property to..
114f0 20 20 20 20 23 20 20 20 20 20 20 20 70 72 65 76      #       prev
11500 65 6e 74 20 74 68 65 20 64 61 74 61 20 73 6f 75  ent the data sou
11510 72 63 65 20 73 74 72 69 6e 67 20 66 72 6f 6d 20  rce string from
11520 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64 2e 0d 0a  being mangled...
11530 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
11540 66 20 7b 24 75 72 69 7d 20 74 68 65 6e 20 7b 0d  f {$uri} then {. 11550 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e . set con 11560 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c 55 72 69 nection {FullUri 11570 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d 0a 20 =${fileName}}..
11580 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20       } else {..
11590 20 20 20 20 20 20 20 73 65 74 20 63 6f 6e 6e 65         set conne
115a0 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72  ction {Data Sour
115b0 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d  ce=${fileName}}. 115c0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 115d0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 115e0 45 3a 20 53 69 6e 63 65 20 74 68 69 73 20 70 72 E: Since this pr 115f0 6f 63 65 64 75 72 65 20 68 61 73 20 6e 6f 20 73 ocedure has no s 11600 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 64 67 65 pecial knowledge 11610 20 6f 66 20 77 68 61 74 20 74 68 65 20 64 65 66 of what the def 11620 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 20 20 20 ault.. # 11630 20 20 20 20 73 65 74 74 69 6e 67 20 69 73 20 66 setting is f 11640 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c 50 61 74 or the ToFullPat 11650 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 h connection str 11660 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 61 6c 77 ing propery, alw 11670 61 79 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 ays.. # 11680 20 20 20 61 64 64 20 74 68 65 20 76 61 6c 75 65 add the value 11690 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 74 20 74 we know about t 116a0 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e o the connection 116b0 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20 string... 116c0 23 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64 20 #.. append 116d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 54 6f 46 connection {;ToF 116e0 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 6c 69 66 ullPath=${qualif
116f0 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a  y}}....      #..
11700 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66        # NOTE: If
11710 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63   our caller spec
11720 69 66 69 65 64 20 61 20 6a 6f 75 72 6e 61 6c 20  ified a journal
11730 6d 6f 64 65 2c 20 61 64 64 20 74 68 65 20 6e 65  mode, add the ne
11740 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d  cessary portion.
11750 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f  .      #       o
11760 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
11770 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20   string now...
11780 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
11790 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
117a0 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68 65 6e  $mode] > 0} then 117b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 {.. appe 117c0 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; 117d0 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d Journal Mode=${m
117e0 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ode}}..      }..
117f0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
11800 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20   # NOTE: If our
11810 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64  caller specified
11820 20 61 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d   a DateTime form
11830 61 74 2c 20 61 64 64 20 74 68 65 20 6e 65 63 65  at, add the nece
11840 73 73 61 72 79 0d 0a 20 20 20 20 20 20 23 20 20  ssary..      #
11850 20 20 20 20 20 70 6f 72 74 69 6f 6e 20 6f 66 20       portion of
11860 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
11870 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20  tring now...
11880 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
11890 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 64  string length $d 118a0 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 5d 20 3e ateTimeFormat] > 118b0 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 118c0 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 append conne 118d0 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 ction {;DateTime 118e0 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 54 69 6d Format=${dateTim
118f0 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20 20 20 20  eFormat}}..
11900 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
11910 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20       # NOTE: If
11920 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69  our caller speci
11930 66 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 4b  fied a DateTimeK
11940 69 6e 64 2c 20 61 64 64 20 74 68 65 20 6e 65 63  ind, add the nec
11950 65 73 73 61 72 79 20 70 6f 72 74 69 6f 6e 0d 0a  essary portion..
11960 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6f 66        #       of
11970 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection
11980 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20  string now...
11990 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
119a0 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $119b0 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d 20 3e 20 dateTimeKind] > 119c0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 119d0 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63 append connec 119e0 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 6d 65 4b tion {;DateTimeK 119f0 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d 65 4b 69 ind=${dateTimeKi
11a00 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  nd}}..      }...
11a10 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
11a20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20 6f  # NOTE: Figure o
11a30 75 74 20 77 68 61 74 20 74 68 65 20 66 69 6e 61  ut what the fina
11a40 6c 20 66 6c 61 67 73 20 66 6f 72 20 74 68 69 73  l flags for this
11a50 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 65 65 64   connection need
11a60 20 74 6f 20 62 65 2e 0d 0a 20 20 20 20 20 20 23   to be...      #
11a70 0d 0a 20 20 20 20 20 20 73 65 74 20 66 6c 61 67  ..      set flag
11a80 73 20 5b 67 65 74 43 6f 6e 6e 65 63 74 69 6f 6e  s [getConnection
11a90 46 6c 61 67 73 20 24 66 69 6c 65 4e 61 6d 65 20  Flags $fileName 11aa0 24 66 6c 61 67 73 20 24 71 75 69 65 74 5d 0d 0a$flags $quiet].. 11ab0 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 11ac0 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 72 20 # NOTE: If our 11ad0 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 65 64 caller specified 11ae0 20 73 6f 6d 65 20 53 51 4c 69 74 65 43 6f 6e 6e some SQLiteConn 11af0 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 61 64 64 ectionFlags, add 11b00 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 the.. # 11b10 20 20 20 20 6e 65 63 65 73 73 61 72 79 20 70 6f necessary po 11b20 72 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 6f 6e rtion of the con 11b30 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e nection string n 11b40 6f 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 ow... #.. 11b50 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 11b60 6c 65 6e 67 74 68 20 24 66 6c 61 67 73 5d 20 3e length$flags] >
11b70 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
11b80 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
11b90 63 74 69 6f 6e 20 7b 3b 46 6c 61 67 73 3d 24 7b  ction {;Flags=${ 11ba0 66 6c 61 67 73 7d 7d 0d 0a 20 20 20 20 20 20 7d flags}}.. } 11bb0 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11bc0 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f 75 # NOTE: If ou 11bd0 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66 69 r caller specifi 11be0 65 64 20 61 6e 20 65 78 74 72 61 20 70 61 79 6c ed an extra payl 11bf0 6f 61 64 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 oad to the conne 11c00 63 74 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 ction.. # 11c10 20 20 20 20 20 73 74 72 69 6e 67 2c 20 61 70 70 string, app 11c20 65 6e 64 20 69 74 20 6e 6f 77 2e 0d 0a 20 20 20 end it now... 11c30 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 11c40 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
11c50 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e  extra] > 0} then
11c60 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65   {..        appe
11c70 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b  nd connection \;
11c80 20 24 65 78 74 72 61 0d 0a 20 20 20 20 20 20 7d   $extra.. } 11c90 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 .... #.. 11ca0 20 20 20 23 20 4e 4f 54 45 3a 20 4f 70 65 6e 20 # NOTE: Open 11cb0 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e the database con 11cc0 6e 65 63 74 69 6f 6e 20 6e 6f 77 2c 20 70 6c 61 nection now, pla 11cd0 63 69 6e 67 20 74 68 65 20 6f 70 61 71 75 65 20 cing the opaque 11ce0 68 61 6e 64 6c 65 20 76 61 6c 75 65 0d 0a 20 20 handle value.. 11cf0 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 74 6f # into 11d00 20 74 68 65 20 76 61 72 69 61 62 6c 65 20 73 70 the variable sp 11d10 65 63 69 66 69 65 64 20 62 79 20 6f 75 72 20 63 ecified by our c 11d20 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 11d30 0a 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 73 . set db [s 11d40 71 6c 20 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 ql open -type SQ 11d50 4c 69 74 65 20 5b 73 75 62 73 74 20 24 63 6f 6e Lite [subst$con
11d60 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 0d 0a 20 20 20  nection]]....
11d70 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
11d80 54 45 3a 20 43 6f 6e 66 69 67 75 72 65 20 74 68  TE: Configure th
11d90 65 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  e temporary dire
11da0 63 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6e 65  ctory for the ne
11db0 77 6c 79 20 6f 70 65 6e 65 64 20 64 61 74 61 62  wly opened datab
11dc0 61 73 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ase..      #
11dd0 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f     connection no
11de0 77 20 75 6e 6c 65 73 73 20 6f 75 72 20 63 61 6c  w unless our cal
11df0 6c 65 72 20 66 6f 72 62 69 64 73 20 69 74 2e 0d  ler forbids it..
11e00 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
11e10 69 66 20 7b 24 74 65 6d 70 6f 72 61 72 79 20 26  if {$temporary & 11e20 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 & ![info exists 11e30 3a 3a 6e 6f 28 73 65 74 54 65 6d 70 6f 72 61 72 ::no(setTemporar 11e40 79 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 74 68 yDirectory)]} th 11e50 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 71 en {.. sq 11e60 6c 20 65 78 65 63 75 74 65 20 24 64 62 20 5b 61 l execute$db [a
11e70 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
11e80 20 20 20 20 20 20 20 20 20 22 50 52 41 47 4d 41           "PRAGMA
11e90 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
11ea0 63 74 6f 72 79 20 3d 20 5c 22 22 20 5b 67 65 74  ctory = \"" [get
11eb0 54 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f  TemporaryDirecto
11ec0 72 79 5d 20 5c 22 5c 3b 5d 0d 0a 20 20 20 20 20  ry] \"\;]..
11ed0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20   }....      #..
11ee0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 50 65 72       # NOTE: Per
11ef0 66 6f 72 6d 20 61 6e 79 20 65 78 74 72 61 20 70  form any extra p
11f00 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 65  er-connection se
11f10 74 75 70 20 66 6f 72 20 74 68 65 20 6e 65 77 6c  tup for the newl
11f20 79 20 6f 70 65 6e 65 64 0d 0a 20 20 20 20 20 20  y opened..
11f30 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65  #       database
11f40 20 6e 6f 77 20 75 6e 6c 65 73 73 20 6f 75 72 20   now unless our
11f50 63 61 6c 6c 65 72 20 66 6f 72 62 69 64 73 20 69  caller forbids i
11f60 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  t...      #..
11f70 20 20 20 73 65 74 20 65 78 65 63 75 74 65 4f 6e     set executeOn
11f80 53 65 74 75 70 20 5b 67 65 74 45 78 65 63 75 74  Setup [getExecut
11f90 65 4f 6e 53 65 74 75 70 5d 0d 0a 0d 0a 20 20 20  eOnSetup]....
11fa0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
11fb0 65 6e 67 74 68 20 24 65 78 65 63 75 74 65 4f 6e  ength $executeOn 11fc0 53 65 74 75 70 5d 20 3e 20 30 20 26 26 20 5c 0d Setup] > 0 && \. 11fd0 0a 20 20 20 20 20 20 20 20 20 20 21 5b 69 6e 66 . ![inf 11fe0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 o exists ::no(ex 11ff0 65 63 75 74 65 4f 6e 53 65 74 75 70 29 5d 7d 20 ecuteOnSetup)]} 12000 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12010 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 12020 45 3a 20 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20 E: This command 12030 6d 61 79 20 72 61 69 73 65 20 61 6e 20 65 72 72 may raise an err 12040 6f 72 3b 20 69 66 20 73 6f 2c 20 74 68 61 74 20 or; if so, that 12050 69 73 20 66 69 6e 65 2c 20 61 73 0d 0a 20 20 20 is fine, as.. 12060 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 12070 20 65 6e 63 6c 6f 73 69 6e 67 20 74 65 73 74 20 enclosing test 12080 77 69 6c 6c 20 74 68 65 6e 20 66 61 69 6c 2e 20 will then fail. 12090 20 54 68 65 20 5b 73 75 62 73 74 5d 20 63 6f 6d The [subst] com 120a0 6d 61 6e 64 20 69 73 0d 0a 20 20 20 20 20 20 20 mand is.. 120b0 20 23 20 20 20 20 20 20 20 75 73 65 64 20 6f 6e # used on 120c0 20 74 68 65 20 53 51 4c 20 69 6e 20 63 61 73 65 the SQL in case 120d0 20 69 74 20 6e 65 65 64 73 20 74 6f 20 72 65 66 it needs to ref 120e0 65 72 20 74 6f 20 73 74 61 74 65 20 69 6e 20 6f er to state in o 120f0 75 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 ur.. # 12100 20 20 20 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 context... 12110 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 12120 20 73 71 6c 20 65 78 65 63 75 74 65 20 24 64 62 sql execute$db
12130 20 5b 73 75 62 73 74 20 24 65 78 65 63 75 74 65   [subst $execute 12140 4f 6e 53 65 74 75 70 5d 0d 0a 20 20 20 20 20 20 OnSetup].. 12150 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 }.... #.. 12160 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 77 61 # NOTE: Alwa 12170 79 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 6f ys return the co 12180 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 nnection handle 12190 75 70 6f 6e 20 73 75 63 63 65 73 73 2e 0d 0a 20 upon success... 121a0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65 #.. re 121b0 74 75 72 6e 20 24 64 62 0d 0a 20 20 20 20 7d 0d turn$db..    }.
121c0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
121d0 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b  DbConnection { {
121e0 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
121f0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
12200 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
12210 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
12220 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
12230 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
12240 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
12250 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
12260 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20    The handle to
12270 74 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65  the database pre
12280 76 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76  viously opened v
12290 69 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  ia the..      #
122a0 20 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20        [setupDb]
122b0 70 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64  procedure should
122c0 20 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65   be stored there
122d0 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
122e0 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61    upvar 1 $varNa 122f0 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 me db.... # 12300 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 12310 54 68 69 73 20 72 65 74 75 72 6e 73 20 74 68 65 This returns the 12320 20 41 44 4f 2e 4e 45 54 20 49 44 62 43 6f 6e 6e ADO.NET IDbConn 12330 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20 69 6e ection object in 12340 73 74 61 6e 63 65 20 66 6f 72 20 74 68 65 0d 0a stance for the.. 12350 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 70 # sp 12360 65 63 69 66 69 65 64 20 64 61 74 61 62 73 65 20 ecified databse 12370 68 61 6e 64 6c 65 2e 20 20 53 69 6e 63 65 20 67 handle. Since g 12380 65 74 74 69 6e 67 20 74 68 69 73 20 6f 62 6a 65 etting this obje 12390 63 74 20 72 65 6c 69 65 73 20 75 70 6f 6e 0d 0a ct relies upon.. 123a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 # Ea 123b0 67 6c 65 20 69 6e 74 65 72 6e 61 6c 73 2c 20 67 gle internals, g 123c0 72 65 61 74 20 63 61 72 65 20 73 68 6f 75 6c 64 reat care should 123d0 20 62 65 20 74 61 6b 65 6e 20 74 6f 20 61 76 6f be taken to avo 123e0 69 64 20 64 69 73 70 6f 73 69 6e 67 20 6f 66 0d id disposing of. 123f0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 12400 68 69 73 20 6f 62 6a 65 63 74 20 6f 72 20 6f 74 his object or ot 12410 68 65 72 77 69 73 65 20 70 75 74 74 69 6e 67 20 herwise putting 12420 69 74 20 69 6e 74 6f 20 61 6e 20 69 6e 76 61 6c it into an inval 12430 69 64 20 73 74 61 74 65 2e 0d 0a 20 20 20 20 20 id state... 12440 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 12450 6e 66 6f 20 65 78 69 73 74 73 20 64 62 5d 7d 20 nfo exists db]} 12460 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 12470 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 if {[catch {.. 12480 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 object i 12490 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 124a0 6e 50 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 nPublic -objectf 124b0 6c 61 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 lags +NoDispose 124c0 2d 61 6c 69 61 73 20 5c 0d 0a 20 20 20 20 20 20 -alias \.. 124d0 20 20 20 20 20 20 20 20 49 6e 74 65 72 70 72 65 Interpre 124e0 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f ter.GetActive.co 124f0 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24 nnections Item$
12500 64 62 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65  db..        } re
12510 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  sult] == 0} then
12520 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
12530 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
12540 45 3a 20 53 75 63 63 65 73 73 2c 20 72 65 74 75  E: Success, retu
12550 72 6e 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62  rn the opaque ob
12560 6a 65 63 74 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  ject handle...
12570 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
12580 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73       return $res 12590 75 6c 74 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 ult.. } e 125a0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 125b0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 125c0 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c 20 72 NOTE: Failure, r 125d0 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 eport why... 125e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 125f0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
12600 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
12610 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
12620 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
12630 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67  ING: failed to g
12640 65 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  et connection ha
12650 6e 64 6c 65 20 66 6f 72 20 64 61 74 61 62 61 73  ndle for databas
12660 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  e \"" \..
12670 20 20 20 20 20 20 20 24 64 62 20 22 5c 22 2c 20         $db "\", 12680 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 error: " \n\t$r
12690 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20  esult \n]..
126a0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
126b0 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
126c0 23 20 4e 4f 54 45 3a 20 46 61 69 6c 75 72 65 2c  # NOTE: Failure,
126d0 20 72 65 74 75 72 6e 20 61 6e 20 6f 62 76 69 6f   return an obvio
126e0 75 73 6c 79 20 69 6e 76 61 6c 69 64 20 6f 70 61  usly invalid opa
126f0 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c  que object handl
12700 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  e...      #..
12710 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20     return ""..
12720 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
12730 20 66 72 65 65 44 62 43 6f 6e 6e 65 63 74 69 6f   freeDbConnectio
12740 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 63 6f 6e  n { {varName con
12750 6e 65 63 74 69 6f 6e 7d 20 7d 20 7b 0d 0a 20 20  nection} } {..
12760 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
12770 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68  OTE: Refer to th
12780 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72 69  e specified vari
12790 61 62 6c 65 20 28 65 2e 67 2e 20 22 63 6f 6e 6e  able (e.g. "conn
127a0 65 63 74 69 6f 6e 22 29 20 69 6e 20 74 68 65 0d  ection") in the.
127b0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
127c0 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 63 61  ontext of our ca
127d0 6c 6c 65 72 2e 20 20 54 68 65 20 6f 70 61 71 75  ller.  The opaqu
127e0 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 20  e object handle
127f0 66 6f 72 20 61 6e 20 41 44 4f 2e 4e 45 54 0d 0a  for an ADO.NET..
12800 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f        #       co
12810 6e 6e 65 63 74 69 6f 6e 20 70 72 65 76 69 6f 75  nnection previou
12820 73 6c 79 20 72 65 74 75 72 6e 65 64 20 62 79 20  sly returned by
12830 5b 67 65 74 44 62 43 6f 6e 6e 65 63 74 69 6f 6e  [getDbConnection
12840 5d 20 73 68 6f 75 6c 64 20 62 65 0d 0a 20 20 20  ] should be..
12850 20 20 20 23 20 20 20 20 20 20 20 73 74 6f 72 65     #       store
12860 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20  d there...
12870 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31  #..      upvar 1
12880 20 24 76 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63   $varName connec 12890 74 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 23 0d tion.... #. 128a0 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 . # NOTE: A 128b0 74 74 65 6d 70 74 20 74 6f 20 72 65 6d 6f 76 65 ttempt to remove 128c0 20 74 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 the opaque obje 128d0 63 74 20 68 61 6e 64 6c 65 20 66 72 6f 6d 20 74 ct handle from t 128e0 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 0d 0a he interpreter.. 128f0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 6f # no 12900 77 2e 20 20 54 68 69 73 20 5b 6f 62 6a 65 63 74 w. This [object 12910 20 64 69 73 70 6f 73 65 5d 20 63 61 6c 6c 20 77 dispose] call w 12920 69 6c 6c 20 6e 6f 74 20 61 63 74 75 61 6c 6c 79 ill not actually 12930 20 64 69 73 70 6f 73 65 20 6f 66 20 74 68 65 0d dispose of the. 12940 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 75 . # u 12950 6e 64 65 72 6c 79 69 6e 67 20 6f 62 6a 65 63 74 nderlying object 12960 20 62 65 63 61 75 73 65 20 74 68 65 20 2b 4e 6f because the +No 12970 44 69 73 70 6f 73 65 20 66 6c 61 67 20 77 61 73 Dispose flag was 12980 20 73 65 74 20 6f 6e 20 69 74 0d 0a 20 20 20 20 set on it.. 12990 20 20 23 20 20 20 20 20 20 20 64 75 72 69 6e 67 # during 129a0 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 74 68 65 creation of the 129b0 20 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 opaque object h 129c0 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d andle... #. 129d0 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f . if {[info 129e0 20 65 78 69 73 74 73 20 63 6f 6e 6e 65 63 74 69 exists connecti 129f0 6f 6e 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 on] && \.. 12a00 20 20 20 20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 [catch {obje 12a10 63 74 20 64 69 73 70 6f 73 65 20 24 63 6f 6e 6e ct dispose$conn
12a20 65 63 74 69 6f 6e 7d 20 65 72 72 6f 72 5d 7d 20  ection} error]}
12a30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
12a40 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
12a50 45 3a 20 57 65 20 73 6f 6d 65 68 6f 77 20 66 61  E: We somehow fa
12a60 69 6c 65 64 20 74 6f 20 72 65 6d 6f 76 65 20 74  iled to remove t
12a70 68 65 20 68 61 6e 64 6c 65 2c 20 72 65 70 6f 72  he handle, repor
12a80 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20  t why...
12a90 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  #..        tputs
12aa0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 12ab0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 12ac0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d "=== 12ad0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 = WARNING: faile 12ae0 64 20 74 6f 20 72 65 6d 6f 76 65 20 63 6f 6e 6e d to remove conn 12af0 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 5c 22 ection handle \" 12b00 22 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d "$connection \.
12b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22  .            "\"
12b20 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
12b30 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 12b40 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 12b50 20 20 20 70 72 6f 63 20 61 64 64 44 62 43 6f 6e proc addDbCon 12b60 6e 65 63 74 69 6f 6e 20 7b 20 63 6f 6e 6e 65 63 nection { connec 12b70 74 69 6f 6e 20 7b 76 61 72 4e 61 6d 65 20 64 62 tion {varName db 12b80 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a } } {.. #.. 12b90 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 # NOTE: Re 12ba0 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 fer to the speci 12bb0 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 fied variable (e 12bc0 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 .g. "db") in the 12bd0 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d context of our. 12be0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 . # c 12bf0 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d aller... #. 12c00 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20 24 . upvar 1$
12c10 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20  varName db....
12c20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e      #..      # N
12c30 4f 54 45 3a 20 43 72 65 61 74 65 20 61 20 63 6f  OTE: Create a co
12c40 72 72 65 63 74 6c 79 20 66 6f 72 6d 61 74 74 65  rrectly formatte
12c50 64 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 64  d name for the d
12c60 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
12c70 6f 6e 20 74 6f 0d 0a 20 20 20 20 20 20 23 20 20  on to..      #
12c80 20 20 20 20 20 62 65 20 61 64 64 65 64 20 74 6f       be added to
12c90 20 74 68 65 20 6c 69 73 74 20 6d 61 6e 61 67 65   the list manage
12ca0 64 20 62 79 20 74 68 65 20 45 61 67 6c 65 20 69  d by the Eagle i
12cb0 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20  nterpreter...
12cc0 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20     #..      set
12cd0 64 62 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  db [object invok
12ce0 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
12cf0 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
12d00 20 45 61 67 6c 65 2e 5f 43 6f 6d 70 6f 6e 65 6e   Eagle._Componen
12d10 74 73 2e 50 72 69 76 61 74 65 2e 46 6f 72 6d 61  ts.Private.Forma
12d20 74 4f 70 73 20 44 61 74 61 62 61 73 65 4f 62 6a  tOps DatabaseObj
12d30 65 63 74 4e 61 6d 65 20 24 63 6f 6e 6e 65 63 74  ectName $connect 12d40 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 12d50 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f SQLiteConnectio 12d60 6e 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 n [object invoke 12d70 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 12d80 41 63 74 69 76 65 20 4e 65 78 74 49 64 5d 5d 0d Active NextId]]. 12d90 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 12da0 20 20 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 # NOTE: Add th 12db0 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 e database conne 12dc0 63 74 69 6f 6e 20 70 72 6f 76 69 64 65 64 20 62 ction provided b 12dd0 79 20 6f 75 72 20 63 61 6c 6c 65 72 20 74 6f 20 y our caller to 12de0 74 68 65 20 6c 69 73 74 0d 0a 20 20 20 20 20 20 the list.. 12df0 23 20 20 20 20 20 20 20 6f 66 20 74 68 6f 73 65 # of those 12e00 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 65 20 45 61 known to the Ea 12e10 67 6c 65 20 69 6e 74 65 72 70 72 65 74 65 72 2e gle interpreter. 12e20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 12e30 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 12e40 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 12e50 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 65 74 Interpreter.Get 12e60 41 63 74 69 76 65 2e 63 6f 6e 6e 65 63 74 69 6f Active.connectio 12e70 6e 73 20 41 64 64 20 5c 0d 0a 20 20 20 20 20 20 ns Add \.. 12e80 20 20 20 20 24 64 62 20 24 63 6f 6e 6e 65 63 74$db $connect 12e90 69 6f 6e 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 ion.. }..... 12ea0 20 20 20 70 72 6f 63 20 67 65 74 52 6f 77 73 46 proc getRowsF 12eb0 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b 20 64 romDataTable { d 12ec0 61 74 61 54 61 62 6c 65 20 7d 20 7b 0d 0a 20 20 ataTable } {.. 12ed0 20 20 20 20 73 65 74 20 72 6f 77 73 20 5b 6c 69 set rows [li 12ee0 73 74 5d 0d 0a 20 20 20 20 20 20 73 65 74 20 63 st].. set c 12ef0 6f 75 6e 74 20 5b 24 64 61 74 61 54 61 62 6c 65 ount [$dataTable
12f00 20 43 6f 6c 75 6d 6e 73 2e 43 6f 75 6e 74 5d 0d   Columns.Count].
12f10 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 7b 73 65  ...      for {se
12f20 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e 64  t index 0} {$ind 12f30 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69 6e ex <$count} {in
12f40 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 20  cr index} {..
12f50 20 20 20 20 20 73 65 74 20 64 61 74 61 43 6f 6c       set dataCol
12f60 75 6d 6e 20 5b 24 64 61 74 61 54 61 62 6c 65 20  umn [$dataTable 12f70 2d 61 6c 69 61 73 20 43 6f 6c 75 6d 6e 73 2e 67 -alias Columns.g 12f80 65 74 5f 49 74 65 6d 20 24 69 6e 64 65 78 5d 0d et_Item$index].
12f90 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61 6d  .        set nam
12fa0 65 73 28 24 69 6e 64 65 78 29 20 5b 24 64 61 74  es($index) [$dat
12fb0 61 43 6f 6c 75 6d 6e 20 43 6f 6c 75 6d 6e 4e 61  aColumn ColumnNa
12fc0 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  me]..      }....
12fd0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72        object for
12fe0 65 61 63 68 20 2d 61 6c 69 61 73 20 64 61 74 61  each -alias data
12ff0 52 6f 77 20 5b 73 65 74 20 64 61 74 61 52 6f 77  Row [set dataRow
13000 73 20 5b 24 64 61 74 61 54 61 62 6c 65 20 52 6f  s [$dataTable Ro 13010 77 73 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 ws]] {.. 13020 73 65 74 20 72 6f 77 20 5b 6c 69 73 74 5d 0d 0a set row [list].. 13030 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 .. for {s 13040 65 74 20 69 6e 64 65 78 20 30 7d 20 7b 24 69 6e et index 0} {$in
13050 64 65 78 20 3c 20 24 63 6f 75 6e 74 7d 20 7b 69  dex < $count} {i 13060 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d 0a 20 20 ncr index} {.. 13070 20 20 20 20 20 20 20 20 73 65 74 20 76 61 6c 75 set valu 13080 65 20 5b 24 64 61 74 61 52 6f 77 20 2d 63 72 65 e [$dataRow -cre
13090 61 74 65 20 2d 61 6c 69 61 73 20 67 65 74 5f 49  ate -alias get_I
130a0 74 65 6d 20 24 69 6e 64 65 78 5d 0d 0a 0d 0a 20  tem $index].... 130b0 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 if {[st 130c0 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 61 6c ring length$val
130d0 75 65 5d 20 3e 20 30 20 26 26 20 5c 0d 0a 20 20  ue] > 0 && \..
130e0 20 20 20 20 20 20 20 20 20 20 20 20 21 5b 6f 62              ![ob
130f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 43 6f 6e 76  ject invoke Conv
13100 65 72 74 20 49 73 44 42 4e 75 6c 6c 20 24 76 61  ert IsDBNull $va 13110 6c 75 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lue]} then {.. 13120 20 20 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e lappen 13130 64 20 72 6f 77 20 5b 6c 69 73 74 20 24 6e 61 6d d row [list$nam
13140 65 73 28 24 69 6e 64 65 78 29 20 5b 24 76 61 6c  es($index) [$val
13150 75 65 20 54 6f 53 74 72 69 6e 67 5d 5d 0d 0a 20  ue ToString]]..
13160 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20           } else
13170 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
13180 61 70 70 65 6e 64 20 72 6f 77 20 5b 6c 69 73 74  append row [list
13190 20 24 6e 61 6d 65 73 28 24 69 6e 64 65 78 29 5d   $names($index)]
131a0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
131b0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
131c0 20 20 20 20 6c 61 70 70 65 6e 64 20 72 6f 77 73      lappend rows
131d0 20 24 72 6f 77 0d 0a 20 20 20 20 20 20 7d 0d 0a   $row.. }.. 131e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 .. return$
131f0 72 6f 77 73 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  rows..    }.....
13200 20 20 20 20 70 72 6f 63 20 64 75 6d 70 52 6f 77      proc dumpRow
13210 73 46 72 6f 6d 44 61 74 61 54 61 62 6c 65 20 7b  sFromDataTable {
13220 20 63 68 61 6e 6e 65 6c 20 72 6f 77 73 20 7d 20   channel rows }
13230 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 73 65 71  {..      set seq
13240 75 65 6e 63 65 20 31 0d 0a 0d 0a 20 20 20 20 20  uence 1....
13250 20 66 6f 72 65 61 63 68 20 72 6f 77 20 24 72 6f   foreach row $ro 13260 77 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 ws {.. tp 13270 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
13280 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
13290 20 20 20 20 20 20 20 20 5b 65 78 70 72 20 7b 24          [expr {$132a0 73 65 71 75 65 6e 63 65 20 3e 20 31 20 3f 20 22 sequence > 1 ? " 132b0 5c 6e 22 20 3a 20 22 22 7d 5d 20 22 2d 2d 2d 2d \n" : ""}] "---- 132c0 20 52 4f 57 20 23 22 20 24 73 65 71 75 65 6e 63 ROW #"$sequenc
132d0 65 20 3a 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20  e :\n]....
132e0 20 20 66 6f 72 65 61 63 68 20 70 61 69 72 20 24    foreach pair $132f0 72 6f 77 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 row {.. 13300 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 70 if {[llength$p
13310 61 69 72 5d 20 3e 3d 20 32 7d 20 74 68 65 6e 20  air] >= 2} then
13320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
13330 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13340 70 70 65 6e 64 41 72 67 73 20 5c 74 20 5c 0d 0a ppendArgs \t \.. 13350 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13360 5b 6c 69 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 [list [lindex$p
13370 61 69 72 20 30 5d 5d 20 22 3a 20 22 20 5b 6c 69  air 0]] ": " [li
13380 73 74 20 5b 6c 69 6e 64 65 78 20 24 70 61 69 72  st [lindex $pair 13390 20 31 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 1]] \n].. 133a0 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 6c } elseif {[l 133b0 6c 65 6e 67 74 68 20 24 70 61 69 72 5d 20 3d 3d length$pair] ==
133c0 20 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   1} then {..
133d0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 133e0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 133f0 67 73 20 5c 74 20 5c 0d 0a 20 20 20 20 20 20 20 gs \t \.. 13400 20 20 20 20 20 20 20 20 20 5b 6c 69 73 74 20 5b [list [ 13410 6c 69 6e 64 65 78 20 24 70 61 69 72 20 30 5d 5d lindex$pair 0]]
13420 20 22 3a 20 3c 6e 75 6c 6c 3e 5c 6e 22 5d 0d 0a   ": <null>\n"]..
13430 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
13440 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
13450 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c  tputs $channel \ 13460 74 3c 65 6d 70 74 79 3e 5c 6e 3b 20 23 20 4e 4f t<empty>\n; # NO 13470 54 45 3a 20 4e 6f 20 64 61 74 61 3f 0d 0a 20 20 TE: No data?.. 13480 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 13490 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 134a0 69 6e 63 72 20 73 65 71 75 65 6e 63 65 0d 0a 20 incr sequence.. 134b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... 134c0 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e .. proc clean 134d0 75 70 44 62 20 7b 20 66 69 6c 65 4e 61 6d 65 20 upDb { fileName 134e0 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20 7b 63 6f {varName db} {co 134f0 6c 6c 65 63 74 20 74 72 75 65 7d 20 7b 71 75 61 llect true} {qua 13500 6c 69 66 79 20 74 72 75 65 7d 0d 0a 20 20 20 20 lify true}.. 13510 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13520 20 7b 64 65 6c 65 74 65 20 74 72 75 65 7d 20 7d {delete true} } 13530 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. 13540 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 13550 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 pt to force all 13560 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 pending "garbage 13570 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 " objects to be 13580 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 collected,.. 13590 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 # includ 135a0 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 ing SQLite state 135b0 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 ments and backup 135c0 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 objects; this s 135d0 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 hould allow.. 135e0 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 # the u 135f0 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 nderlying databa 13600 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 se file to be de 13610 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d leted... #. 13620 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c . if {$coll
13630 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ect} then {..
13640 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62       collectGarb
13650 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  age $::test_chan 13660 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a nel.. }.... 13670 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 13680 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 NOTE: Refer to 13690 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 the specified va 136a0 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 riable (e.g. "db 136b0 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 ") in the contex 136c0 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20 20 t of our.. 136d0 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 # caller. 136e0 20 54 68 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 The handle to t 136f0 68 65 20 64 61 74 61 62 61 73 65 20 70 72 65 76 he database prev 13700 69 6f 75 73 6c 79 20 6f 70 65 6e 65 64 20 76 69 iously opened vi 13710 61 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20 a the.. # 13720 20 20 20 20 20 5b 73 65 74 75 70 44 62 5d 20 70 [setupDb] p 13730 72 6f 63 65 64 75 72 65 20 73 68 6f 75 6c 64 20 rocedure should 13740 62 65 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e be stored there. 13750 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 13760 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d upvar 1$varNam
13770 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d  e db....      #.
13780 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43  .      # NOTE: C
13790 6c 6f 73 65 20 74 68 65 20 63 6f 6e 6e 65 63 74  lose the connect
137a0 69 6f 6e 20 74 6f 20 74 68 65 20 64 61 74 61 62  ion to the datab
137b0 61 73 65 20 6e 6f 77 2e 20 20 54 68 69 73 20 73  ase now.  This s
137c0 68 6f 75 6c 64 20 61 6c 6c 6f 77 20 75 73 0d 0a  hould allow us..
137d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 6f        #       to
137e0 20 64 65 6c 65 74 65 20 74 68 65 20 75 6e 64 65   delete the unde
137f0 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 65 20  rlying database
13800 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  file...      #..
13810 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20        if {[info
13820 65 78 69 73 74 73 20 64 62 5d 20 26 26 20 5b 63  exists db] && [c
13830 61 74 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20  atch {sql close
13840 24 64 62 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65  $db} error]} the 13850 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a n {.. #.. 13860 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 13870 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 We somehow faile 13880 64 20 74 6f 20 63 6c 6f 73 65 20 74 68 65 20 64 d to close the d 13890 61 74 61 62 61 73 65 2c 20 72 65 70 6f 72 74 20 atabase, report 138a0 77 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d why... #. 138b0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
138c0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
138d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
138e0 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
138f0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
13900 74 6f 20 63 6c 6f 73 65 20 64 61 74 61 62 61 73  to close databas
13910 65 20 5c 22 22 20 24 64 62 20 22 5c 22 2c 20 65  e \"" $db "\", e 13920 72 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 rror: " \.. 13930 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72 \n\t$err
13940 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  or \n]..      }.
13950 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13960 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73 74 2c    # NOTE: First,
13970 20 73 65 65 20 69 66 20 6f 75 72 20 63 61 6c 6c   see if our call
13980 65 72 20 68 61 73 20 72 65 71 75 65 73 74 65 64  er has requested
13990 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64 61   an in-memory da
139a0 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20 20 23  tabase...      #
139b0 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73 4d 65  ..      set isMe
139c0 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79 44 62  mory [isMemoryDb
139d0 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20   $fileName].... 139e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 139f0 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 NOTE: Build the 13a00 66 75 6c 6c 20 70 61 74 68 20 74 6f 20 74 68 65 full path to the 13a10 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e database file n 13a20 61 6d 65 2e 20 20 46 6f 72 20 6e 6f 77 2c 20 61 ame. For now, a 13a30 6c 6c 20 74 65 73 74 0d 0a 20 20 20 20 20 20 23 ll test.. # 13a40 20 20 20 20 20 20 20 64 61 74 61 62 61 73 65 20 database 13a50 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64 files are stored 13a60 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72 in the temporar 13a70 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20 y directory... 13a80 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 13a90 7b 21 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 {!$isMemory && $13aa0 71 75 61 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d qualify} then {. 13ab0 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 69 6c . set fil 13ac0 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e eName [file join 13ad0 20 5b 67 65 74 44 61 74 61 62 61 73 65 44 69 72 [getDatabaseDir 13ae0 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 ectory] [file ta 13af0 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a il$fileName]]..
13b00 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
13b10 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
13b20 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 66  : Check if the f
13b30 69 6c 65 20 73 74 69 6c 6c 20 65 78 69 73 74 73  ile still exists
13b40 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
13b50 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f 72 79    if {!$isMemory 13b60 20 26 26 20 24 64 65 6c 65 74 65 20 26 26 20 5b &&$delete && [
13b70 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c  file exists $fil 13b80 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a eName]} then {.. 13b90 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13ba0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 # NOTE: Skip 13bb0 64 65 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 deleting databas 13bc0 65 20 66 69 6c 65 73 20 69 66 20 73 6f 6d 65 62 e files if someb 13bd0 6f 64 79 20 73 65 74 73 20 74 68 65 20 67 6c 6f ody sets the glo 13be0 62 61 6c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 bal.. # 13bf0 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 74 6f variable to 13c00 20 70 72 65 76 65 6e 74 20 69 74 2e 0d 0a 20 20 prevent it... 13c10 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13c20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 13c30 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 44 ts ::no(cleanupD 13c40 62 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d bFile)]} then {. 13c50 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 13c60 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 13c70 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 Attempt to delet 13c80 65 20 74 68 65 20 74 65 73 74 20 64 61 74 61 62 e the test datab 13c90 61 73 65 20 66 69 6c 65 20 6e 6f 77 2e 0d 0a 20 ase file now... 13ca0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 13cb0 20 20 20 20 20 20 69 66 20 7b 5b 73 65 74 20 63 if {[set c 13cc0 6f 64 65 20 5b 63 61 74 63 68 20 7b 66 69 6c 65 ode [catch {file 13cd0 20 64 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d delete$fileNam
13ce0 65 7d 20 65 72 72 6f 72 5d 5d 7d 20 74 68 65 6e  e} error]]} then
13cf0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
13d00 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  #..            #
13d10 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
13d20 77 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65  w failed to dele
13d30 74 65 20 74 68 65 20 66 69 6c 65 2c 20 72 65 70  te the file, rep
13d40 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20 20 20 20  ort why...
13d50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13d60 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 13d70 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 13d80 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 13d90 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 "==== 13da0 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 WARNING: failed 13db0 74 6f 20 64 65 6c 65 74 65 20 64 61 74 61 62 61 to delete databa 13dc0 73 65 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c se file \""$fil
13dd0 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20  eName \..
13de0 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75 72           "\" dur
13df0 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65 72 72  ing cleanup, err
13e00 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f  or: " \n\t $erro 13e10 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 r \n].. 13e20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c }.. } el 13e30 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 se {.. 13e40 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e #.. # N 13e50 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 20 77 OTE: Show that w 13e60 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 e skipped deleti 13e70 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a 20 20 ng the file... 13e80 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13e90 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 30 0d set code 0. 13ea0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 ... tpu 13eb0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
13ec0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
13ed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13ee0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 73  "==== WARNING: s
13ef0 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e 67 20  kipped deleting
13f00 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c 22  database file \"
13f10 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20  " $fileName \.. 13f20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 "\" 13f30 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c during cleanup\ 13f40 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a n"].. }.. 13f50 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 13f60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 13f70 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 # NOTE: The f 13f80 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 ile does not exi 13f90 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 st, success!.. 13fa0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13fb0 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 set code 0.. 13fc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 13fd0 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 turn$code..
13fe0 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
13ff0 65 74 75 70 44 62 49 6e 74 65 72 72 75 70 74 43  etupDbInterruptC
14000 61 6c 6c 62 61 63 6b 20 7b 20 63 68 61 6e 6e 65  allback { channe
14010 6c 20 6c 6f 67 20 7d 20 7b 0d 0a 20 20 20 20 20  l log } {..
14020 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 14030 22 2d 2d 2d 2d 20 73 65 74 74 69 6e 67 20 75 70 "---- setting up 14040 20 64 65 62 75 67 67 65 72 20 69 6e 74 65 72 72 debugger interr 14050 75 70 74 20 63 61 6c 6c 62 61 63 6b 2e 2e 2e 20 upt callback... 14060 22 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b ".... if {[ 14070 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 14080 20 73 65 74 20 3a 3a 65 6e 76 28 71 75 69 65 74 set ::env(quiet 14090 53 65 74 75 70 49 6e 74 65 72 70 72 65 74 65 72 SetupInterpreter 140a0 54 65 73 74 50 61 74 68 29 20 31 0d 0a 0d 0a 20 TestPath) 1.... 140b0 20 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20 20 try {.. 140c0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 140d0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 140e0 65 20 73 75 72 65 20 74 68 65 20 73 63 72 69 70 e sure the scrip 140f0 74 20 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 t debugger and t 14100 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte 14110 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20 20 rpreter.. 14120 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20 73 # are s 14130 65 74 75 70 20 61 6e 64 20 72 65 61 64 79 20 66 etup and ready f 14140 6f 72 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 20 or use... 14150 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 14160 64 65 62 75 67 20 73 65 74 75 70 20 74 72 75 65 debug setup true 14170 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 true.... 14180 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 14190 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 # NOTE: Load the 141a0 20 6e 65 63 65 73 73 61 72 79 20 70 61 63 6b 61 necessary packa 141b0 67 65 73 20 69 6e 74 6f 20 74 68 65 20 69 73 6f ges into the iso 141c0 6c 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 lated interprete 141d0 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d r... #. 141e0 0a 20 20 20 20 20 20 20 20 20 20 64 65 62 75 67 . debug 141f0 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20 eval {.. 14200 20 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 package req 14210 75 69 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 uire Eagle.. 14220 20 20 20 20 20 20 20 20 70 61 63 6b 61 67 65 20 package 14230 72 65 71 75 69 72 65 20 45 61 67 6c 65 2e 4c 69 require Eagle.Li 14240 62 72 61 72 79 0d 0a 20 20 20 20 20 20 20 20 20 brary.. 14250 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69 package requi 14260 72 65 20 45 61 67 6c 65 2e 54 65 73 74 0d 0a 20 re Eagle.Test.. 14270 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.... 14280 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 14290 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 70 # NOTE: Cop 142a0 79 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 y the necessary 142b0 76 61 72 69 61 62 6c 65 73 20 69 6e 74 6f 20 74 variables into t 142c0 68 65 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 he isolated inte 142d0 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 rpreter... 142e0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 142f0 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20 debug invoke 0 14300 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e set ::test_chann 14310 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e el$channel; # N
14320 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d  OTE: For [tputs]
14330 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 64 65 62  ...          deb
14340 75 67 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20  ug invoke 0 set
14350 3a 3a 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b  ::test_log $log; 14360 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c # NOTE: For [tl 14370 6f 67 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 og]..... 14380 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 14390 20 4e 4f 54 45 3a 20 49 6e 73 74 61 6c 6c 20 74 NOTE: Install t 143a0 68 65 20 63 61 6c 6c 62 61 63 6b 20 73 63 72 69 he callback scri 143b0 70 74 20 74 6f 20 62 65 20 65 76 61 6c 75 61 74 pt to be evaluat 143c0 65 64 20 69 6e 20 74 68 65 20 69 73 6f 6c 61 74 ed in the isolat 143d0 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ed.. # 143e0 20 20 20 20 20 20 69 6e 74 65 72 70 72 65 74 65 interprete 143f0 72 20 77 68 65 6e 20 74 68 69 73 20 69 6e 74 65 r when this inte 14400 72 70 72 65 74 65 72 20 69 73 20 69 6e 74 65 72 rpreter is inter 14410 72 75 70 74 65 64 20 62 79 20 73 63 72 69 70 74 rupted by script 14420 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 14430 20 20 20 20 63 61 6e 63 65 6c 6c 61 74 69 6f 6e cancellation 14440 2c 20 65 74 63 2e 0d 0a 20 20 20 20 20 20 20 20 , etc... 14450 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 64 #.. d 14460 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20 61 70 ebug callback ap 14470 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65 7d 20 ply {{sender e} 14480 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 {.. # 14490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 144a0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t 144b0 68 69 73 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 his callback is 144c0 6f 6e 65 20 74 68 61 74 20 77 65 20 63 61 72 65 one that we care 144d0 20 61 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 about... 144e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 144f0 20 20 20 20 69 66 20 7b 22 43 61 6e 63 65 6c 65 if {"Cancele 14500 64 22 20 69 6e 20 5b 73 70 6c 69 74 20 5b 24 65 d" in [split [$e
14510 20 49 6e 74 65 72 72 75 70 74 54 79 70 65 5d 20   InterruptType]
14520 22 2c 20 22 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  ", "]} then {..
14530 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
14540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20                #
14550 4e 4f 54 45 3a 20 4d 61 6b 65 20 73 75 72 65 20  NOTE: Make sure
14560 74 68 65 20 5b 6f 62 6a 65 63 74 5d 20 63 6f 6d  the [object] com
14570 6d 61 6e 64 20 69 73 20 61 76 61 69 6c 61 62 6c  mand is availabl
14580 65 2e 20 20 53 69 6e 63 65 0d 0a 20 20 20 20 20  e.  Since..
14590 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
145a0 20 74 68 69 73 20 69 73 20 61 6e 20 69 73 6f 6c   this is an isol
145b0 61 74 65 64 20 69 6e 74 65 72 70 72 65 74 65 72  ated interpreter
145c0 2c 20 63 68 65 63 6b 20 66 6f 72 20 69 74 20 74  , check for it t
145d0 68 65 20 68 61 72 64 0d 0a 20 20 20 20 20 20 20  he hard..
145e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 77         #       w
145f0 61 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay...
14600 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
14610 20 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68      if {[llength
14620 20 5b 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 20   [info commands
14630 6f 62 6a 65 63 74 5d 5d 20 3e 20 30 7d 20 74 68  object]] > 0} th
14640 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
14650 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14660 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
14670 20 49 74 65 72 61 74 65 20 74 68 72 6f 75 67 68   Iterate through
14680 20 61 6c 6c 20 64 61 74 61 62 61 73 65 20 63 6f   all database co
14690 6e 6e 65 63 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20  nnections known
146a0 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20  to the..
146b0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
146c0 70 61 72 65 6e 74 20 69 6e 74 65 72 70 72 65 74  parent interpret
146d0 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20  er...
146e0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
146f0 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66          object f
14700 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61  oreach -alias pa
14710 69 72 20 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b  ir [object invok
14720 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
14730 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  lic \..
14740 20 20 20 20 20 20 20 20 20 20 20 24 65 20 49 6e             $e In 14750 74 65 72 70 72 65 74 65 72 2e 63 6f 6e 6e 65 63 terpreter.connec 14760 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 tions] {.. 14770 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14790 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 # NOTE: Attempt 147a0 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e 79 20 53 to cancel any S 147b0 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 QL queries in pr 147c0 6f 67 72 65 73 73 20 6f 6e 0d 0a 20 20 20 20 20 ogress on.. 147d0 20 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 # 147e0 20 20 20 20 20 74 68 69 73 20 64 61 74 61 62 61 this databa 147f0 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a se connection... 14800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 14810 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 #.. 14820 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 14830 68 20 7b 24 70 61 69 72 20 56 61 6c 75 65 2e 43 h {$pair Value.C
14840 61 6e 63 65 6c 7d 20 65 72 72 6f 72 5d 7d 20 74  ancel} error]} t
14850 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14860 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
14870 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 14880 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 [appendArgs \n 14890 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 148a0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 148b0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 148c0 20 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 to cancel query 148d0 20 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 for " \.. 148e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 148f0 20 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 22 "connection \" 14900 22 20 5b 24 70 61 69 72 20 4b 65 79 5d 20 22 5c " [$pair Key] "\
14910 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74  ", error: " \n\t
14920 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
14930 20 20 20 20 20 20 20 20 20 20 20 20 24 65 72 72              $err 14940 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 14950 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 14960 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 } 14980 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 14990 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
149a0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
149b0 70 70 65 6e 64 41 72 67 73 20 5c 6e 20 5c 0d 0a  ppendArgs \n \..
149c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
149d0 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e      "==== WARNIN
149e0 47 3a 20 63 61 6e 6e 6f 74 20 63 61 6e 63 65 6c  G: cannot cancel
149f0 20 61 6e 79 20 71 75 65 72 69 65 73 3a 20 22 20   any queries: "
14a00 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
14a10 20 20 20 20 20 20 20 22 74 68 65 20 5c 22 6f 62         "the \"ob
14a20 6a 65 63 74 5c 22 20 63 6f 6d 6d 61 6e 64 20 69  ject\" command i
14a30 73 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 5c  s not available\
14a40 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
14a50 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
14a60 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
14a70 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 66 69 6e  }..        } fin
14a80 61 6c 6c 79 20 7b 0d 0a 20 20 20 20 20 20 20 20  ally {..
14a90 20 20 63 61 74 63 68 20 7b 75 6e 73 65 74 20 3a    catch {unset :
14aa0 3a 65 6e 76 28 71 75 69 65 74 53 65 74 75 70 49  :env(quietSetupI
14ab0 6e 74 65 72 70 72 65 74 65 72 54 65 73 74 50 61  nterpreterTestPa
14ac0 74 68 29 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d  th)}..        }.
14ad0 0a 20 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 20  .      } error]
14ae0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  == 0} then {..
14af0 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
14b00 69 6e 74 20 69 6e 74 65 72 72 75 70 74 43 61 6c  int interruptCal
14b10 6c 62 61 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d  lback.sqlite3...
14b20 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $14b30 63 68 61 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 channel yes\n.. 14b40 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 14b50 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
14b60 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
14b70 73 20 22 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20  s "no, error: "
14b80 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d  \n\t $error \n]. 14b90 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 14ba0 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 .... proc cle 14bb0 61 6e 75 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e anupFile { fileN 14bc0 61 6d 65 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 ame {collect tru 14bd0 65 7d 20 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d e} {force false} 14be0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 14bf0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 # NOTE: Att 14c00 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 61 6c empt to force al 14c10 6c 20 70 65 6e 64 69 6e 67 20 22 67 61 72 62 61 l pending "garba 14c20 67 65 22 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 ge" objects to b 14c30 65 20 63 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 e collected,.. 14c40 20 20 20 20 23 20 20 20 20 20 20 20 69 6e 63 6c # incl 14c50 75 64 69 6e 67 20 53 51 4c 69 74 65 20 73 74 61 uding SQLite sta 14c60 74 65 6d 65 6e 74 73 20 61 6e 64 20 62 61 63 6b tements and back 14c70 75 70 20 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 up objects; this 14c80 20 73 68 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 should allow.. 14c90 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 14ca0 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74 61 underlying data 14cb0 62 61 73 65 20 66 69 6c 65 20 74 6f 20 62 65 20 base file to be 14cc0 64 65 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 deleted... 14cd0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 63 6f #.. if {$co
14ce0 6c 6c 65 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  llect} then {..
14cf0 20 20 20 20 20 20 20 63 6f 6c 6c 65 63 74 47 61         collectGa
14d00 72 62 61 67 65 20 24 3a 3a 74 65 73 74 5f 63 68  rbage $::test_ch 14d10 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a annel.. }.. 14d20 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 14d30 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i 14d40 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c f the file still 14d50 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 exists... 14d60 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 66 69 #.. if {[fi 14d70 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c 65 4e le exists$fileN
14d80 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ame]} then {..
14d90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
14da0 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65   # NOTE: Skip de
14db0 6c 65 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65  leting test file
14dc0 73 20 69 66 20 73 6f 6d 65 62 6f 64 79 20 73 65  s if somebody se
14dd0 74 73 20 74 68 65 20 67 6c 6f 62 61 6c 20 76 61  ts the global va
14de0 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20  riable..
14df0 23 20 20 20 20 20 20 20 74 6f 20 70 72 65 76 65  #       to preve
14e00 6e 74 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20  nt it...
14e10 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  #..        if {$14e20 66 6f 72 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 force || ![info 14e30 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 exists ::no(clea 14e40 6e 75 70 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 nupFile)]} then 14e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a {.. #.. 14e60 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 # NOTE 14e70 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 65 6c : Attempt to del 14e80 65 74 65 20 74 68 65 20 74 65 73 74 20 66 69 6c ete the test fil 14e90 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 e now... 14ea0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 #.. i 14eb0 66 20 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 f {[set code [ca 14ec0 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 tch {file delete 14ed0 20 24 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f$fileName} erro
14ee0 72 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  r]]} then {..
14ef0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
14f00 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
14f10 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
14f20 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
14f30 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
14f40 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
14f50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
14f60 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan 14f70 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 14f80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 14f90 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 "==== WARNING 14fa0 3a 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 : failed to dele 14fb0 74 65 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 te test file \"" 14fc0 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20$fileName \..
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
14fe0 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70  " during cleanup
14ff0 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20  , error: " \n\t
15000 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20  $error \n].. 15010 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 15020 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 15030 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 15040 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 # NOTE: Show t 15050 68 61 74 20 77 65 20 73 6b 69 70 70 65 64 20 64 hat we skipped d 15060 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69 6c 65 eleting the file 15070 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 15080 20 20 20 20 20 20 20 20 20 20 73 65 74 20 63 6f set co 15090 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 de 0.... 150a0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
150b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
150c0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
150d0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49       "==== WARNI
150e0 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 6c 65  NG: skipped dele
150f0 74 69 6e 67 20 74 65 73 74 20 66 69 6c 65 20 5c  ting test file \
15100 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. 15110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c "\ 15120 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 " during cleanup 15130 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n"].. }. 15140 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d . } else {. 15150 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 15160 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 # NOTE: The 15170 66 69 6c 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 file does not ex 15180 69 73 74 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 ist, success!.. 15190 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 151a0 20 20 73 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 set code 0.. 151b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 151c0 65 74 75 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 eturn$code..
151d0 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
151e0 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 7b  collectGarbage {
151f0 20 63 68 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73   channel {millis
15200 65 63 6f 6e 64 73 20 31 30 30 30 7d 20 7b 71 75  econds 1000} {qu
15210 69 65 74 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20  iet true} } {..
15220 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
15230 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
15240 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
15250 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
15260 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
15270 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
15280 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
15290 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73  e..        } res
152a0 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ult] == 0} then
152b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
152c0 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 152d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 152e0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
152f0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
15300 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
15310 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20  - memory in use
15320 62 79 20 74 68 65 20 43 4c 52 20 62 65 66 6f 72  by the CLR befor
15330 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20  e collection...
15340 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
15350 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62       $result " b 15360 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 15370 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 15380 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 15390 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
153a0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
153b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
153c0 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61  ==== WARNING: fa
153d0 69 6c 65 64 20 74 6f 20 67 65 74 20 43 4c 52 20  iled to get CLR
153e0 6d 65 6d 6f 72 79 20 75 73 61 67 65 2c 20 65 72  memory usage, er
153f0 72 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20  ror: " \..
15400 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 15410 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 15420 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 15430 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23 23 ########## 15440 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15450 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15460 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15470 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d ###############. 15480 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 15490 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 65 61 74 # NOTE: Repeat 154a0 65 64 6c 79 20 61 74 74 65 6d 70 74 20 74 6f 20 edly attempt to 154b0 63 6f 6c 6c 65 63 74 20 67 61 72 62 61 67 65 20 collect garbage 154c0 75 6e 74 69 6c 20 74 68 65 20 61 6c 6c 6f 74 74 until the allott 154d0 65 64 20 6e 75 6d 62 65 72 0d 0a 20 20 20 20 20 ed number.. 154e0 20 23 20 20 20 20 20 20 20 6f 66 20 6d 69 6c 6c # of mill 154f0 69 73 65 63 6f 6e 64 73 20 68 61 73 20 65 6c 61 iseconds has ela 15500 70 73 65 64 2e 20 20 41 6c 77 61 79 73 20 61 74 psed. Always at 15510 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 63 74 tempt to collect 15520 20 67 61 72 62 61 67 65 0d 0a 20 20 20 20 20 20 garbage.. 15530 23 20 20 20 20 20 20 20 61 74 20 6c 65 61 73 74 # at least 15540 20 6f 6e 63 65 2e 0d 0a 20 20 20 20 20 20 23 0d once... #. 15550 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 15560 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 15570 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 and]} then {.. 15580 20 20 20 20 20 20 73 65 74 20 73 74 61 72 74 20 set start 15590 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d 0d [clock seconds]. 155a0 0a 20 20 20 20 20 20 20 20 73 65 74 20 73 74 6f . set sto 155b0 70 20 5b 65 78 70 72 20 7b 24 73 74 61 72 74 20 p [expr {$start
155c0 2b 20 28 24 6d 69 6c 6c 69 73 65 63 6f 6e 64 73  + ($milliseconds 155d0 20 2f 20 31 30 30 30 29 7d 5d 0d 0a 0d 0a 20 20 / 1000)}].... 155e0 20 20 20 20 20 20 64 6f 20 7b 0d 0a 20 20 20 20 do {.. 155f0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 15600 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d # NOTE: Attem 15610 70 74 20 74 6f 20 66 6f 72 63 65 20 61 20 66 75 pt to force a fu 15620 6c 6c 20 67 61 72 62 61 67 65 20 63 6f 6c 6c 65 ll garbage colle 15630 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 52 65 70 6f ction now. Repo 15640 72 74 20 61 6e 79 0d 0a 20 20 20 20 20 20 20 20 rt any.. 15650 20 20 23 20 20 20 20 20 20 20 65 72 72 6f 72 20 # error 15660 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e 74 65 that is encounte 15670 72 65 64 20 69 66 20 77 65 20 66 61 69 6c 2e 0d red if we fail.. 15680 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 15690 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 156a0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 156b0 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 object invoke 156c0 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 GC GetTotalMemor 156d0 79 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 y true.. 156e0 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e } error]} then 156f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 15700 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
15710 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
15720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
15730 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
15740 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65  led full garbage
15750 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72   collection, err
15760 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
15770 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65           \n\t $e 15780 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 15790 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 157a0 20 20 20 73 65 74 20 6e 6f 77 20 5b 63 6c 6f 63 set now [cloc 157b0 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 20 k seconds].. 157c0 20 20 20 20 7d 20 77 68 69 6c 65 20 7b 24 73 74 } while {$st
157d0 61 72 74 20 3c 3d 20 24 6e 6f 77 20 26 26 20 24  art <= $now &&$
157e0 6e 6f 77 20 3c 20 24 73 74 6f 70 7d 0d 0a 20 20  now < $stop}.. 157f0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # 15800 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15810 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15830 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 15840 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 ########.... 15850 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 if {[haveSQLit 15860 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 7d eObjectCommand]} 15870 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15880 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 if {[catch {.. 15890 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 object 158a0 69 6e 76 6f 6b 65 20 47 43 20 47 65 74 54 6f 74 invoke GC GetTot 158b0 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73 65 0d 0a alMemory false.. 158c0 20 20 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 } result 158d0 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. 158e0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
158f0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
15900 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
15910 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 15920 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 15930 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6d "---- m 15940 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 15950 74 68 65 20 43 4c 52 20 61 66 74 65 72 20 63 6f the CLR after co 15960 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 22 20 5c 0d llection... " \. 15970 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 15980 20 24 72 65 73 75 6c 74 20 22 20 62 79 74 65 73$result " bytes
15990 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
159a0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
159b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  e {..          t
159c0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 159d0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 159e0 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d "==== 159f0 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 WARNING: failed 15a00 20 74 6f 20 67 65 74 20 43 4c 52 20 6d 65 6d 6f to get CLR memo 15a10 72 79 20 75 73 61 67 65 2c 20 65 72 72 6f 72 3a ry usage, error: 15a20 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 " \.. 15a30 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
15a40 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d   \n]..        }.
15a50 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
15a60 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
15a70 53 51 4c 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e  SQLiteHandleCoun
15a80 74 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75  ts { channel {qu
15a90 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a  iet false} } {..
15aa0 20 20 20 20 20 20 73 65 74 20 72 65 73 75 6c 74        set result
15ab0 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20   [list]....
15ac0 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 74 65   if {[haveSQLite
15ad0 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d 20 26  ObjectCommand] &
15ae0 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e  & [haveConstrain
15af0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
15b00 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e     defineConstan
15b10 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
15b20 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c  Lite.COUNT_HANDL
15b30 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  E]} then {..
15b40 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
15b50 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20   NOTE: Add each
15b60 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
15b70 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73  count to the res
15b80 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20  ulting list...
15b90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
15ba0 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c   foreach name [l
15bb0 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f  ist connectionCo
15bc0 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75  unt statementCou
15bd0 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20  nt backupCount]
15be0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
15bf0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20  {[catch {..
15c00 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e         object in
15c10 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e  voke -flags +Non
15c20 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20  Public \..
15c30 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
15c40 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
15c50 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
15c60 20 24 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20   $name.. 15c70 20 20 7d 20 76 61 6c 75 65 5d 20 3d 3d 20 30 7d } value] == 0} 15c80 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 15c90 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
15ca0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
15cb0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 15cc0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 15cd0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 15ce0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 72 "---- cr 15cf0 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 6f itical handle co 15d00 75 6e 74 20 5c 22 22 20 24 6e 61 6d 65 20 22 5c unt \""$name "\
15d10 22 20 69 73 20 22 20 24 76 61 6c 75 65 20 5c 6e  " is " $value \n 15d20 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d ].. } 15d30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 15d40 6c 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20 24 lappend result$
15d50 76 61 6c 75 65 0d 0a 20 20 20 20 20 20 20 20 20  value..
15d60 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
15d70 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 15d80 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15d90 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. 15da0 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 15db0 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 15dc0 74 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c t critical handl 15dd0 65 20 63 6f 75 6e 74 20 5c 22 22 20 5c 0d 0a 20 e count \"" \.. 15de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
15df0 6e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a  name "\", error:
15e00 20 22 20 5c 6e 5c 74 20 24 76 61 6c 75 65 20 5c   " \n\t $value \ 15e10 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d n].. }. 15e20 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 15e30 20 20 7d 20 65 6c 73 65 69 66 20 7b 21 24 71 75 } elseif {!$qu
15e40 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
15e50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
15e60 23 20 4e 4f 54 45 3a 20 54 68 65 20 61 63 74 75  # NOTE: The actu
15e70 61 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73  al handle counts
15e80 20 61 72 65 20 6e 6f 74 20 61 76 61 69 6c 61 62   are not availab
15e90 6c 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 6a  le; therefore, j
15ea0 75 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ust..        #
15eb0 20 20 20 20 20 72 65 74 75 72 6e 20 61 6e 20 65       return an e
15ec0 6d 70 74 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20  mpty list...
15ed0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74      #..        t
15ee0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 15ef0 2d 2d 2d 20 63 72 69 74 69 63 61 6c 20 68 61 6e --- critical han 15f00 64 6c 65 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 dle counts unava 15f10 69 6c 61 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 ilable\n".. 15f20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu 15f30 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 rn$result..
15f40 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73  }.....    proc s
15f50 68 75 74 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20  hutdownSQLite {
15f60 63 68 61 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66  channel {force f
15f70 61 6c 73 65 7d 20 7b 71 75 69 65 74 20 66 61 6c  alse} {quiet fal
15f80 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
15f90 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
15fa0 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 53  Make sure that S
15fb0 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
15fc0 72 79 20 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79  ry is completely
15fd0 20 73 68 75 74 64 6f 77 6e 2e 20 20 54 68 69 73   shutdown.  This
15fe0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
15ff0 69 73 20 75 73 65 64 20 62 79 20 74 65 73 74 73  is used by tests
16000 20 74 68 61 74 20 63 68 61 6e 67 65 20 63 6f 6e   that change con
16010 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
16020 6e 73 20 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d  ns and/or those.
16030 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
16040 68 61 74 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65  hat need to make
16050 20 73 75 72 65 20 6c 6f 67 67 69 6e 67 20 69 73   sure logging is
16060 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 28 69 2e   initialized (i.
16070 65 2e 20 6a 75 73 74 20 69 6e 20 63 61 73 65 0d  e. just in case.
16080 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
16090 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
160a0 69 62 72 61 72 79 20 77 61 73 20 69 6e 69 74 69  ibrary was initi
160b0 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 70 72  alized in the pr
160c0 6f 63 65 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a  ocess prior to..
160d0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
160e0 65 20 53 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73  e SQLiteLog clas
160f0 73 20 62 65 69 6e 67 20 61 62 6c 65 20 74 6f 20  s being able to
16100 73 65 74 75 70 20 69 74 73 20 6c 6f 67 67 69 6e  setup its loggin
16110 67 20 63 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20  g callback)...
16120 20 20 20 20 23 20 20 20 20 20 20 20 4e 6f 72 6d      #       Norm
16130 61 6c 6c 79 2c 20 74 68 69 73 20 73 68 6f 75 6c  ally, this shoul
16140 64 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f 72  d only be perfor
16150 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69 73  med if SQLite is
16160 20 6c 6f 61 64 65 64 20 61 6e 64 0d 0a 20 20 20   loaded and..
16170 20 20 20 23 20 20 20 20 20 20 20 72 65 61 64 79     #       ready
16180 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 20   for use by the
16190 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20  test suite...
161a0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
161b0 24 66 6f 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c  $force || [isSQL 161c0 69 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 iteReady]} then 161d0 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 {.. #.. 161e0 20 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 # BUGFIX: 161f0 4d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 61 Make sure that a 16200 6e 79 20 22 6c 65 61 6b 65 64 22 20 74 72 61 6e ny "leaked" tran 16210 73 61 63 74 69 6f 6e 73 20 61 6e 64 2f 6f 72 20 sactions and/or 16220 63 6f 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 connections.. 16230 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 61 # a 16240 72 65 20 63 6c 65 61 6e 65 64 20 75 70 20 62 65 re cleaned up be 16250 66 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 fore calling the 16260 20 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e native shutdown 16270 20 66 75 6e 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 function... 16280 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 66 #.. f 16290 6f 72 65 61 63 68 20 74 72 61 6e 73 61 63 74 69 oreach transacti 162a0 6f 6e 20 5b 69 6e 66 6f 20 74 72 61 6e 73 61 63 on [info transac 162b0 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20 20 tions] {.. 162c0 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string 162d0 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20 20 match \.. 162e0 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44 61 System#Da 162f0 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74 65 ta#SQLite#SQLite 16300 54 72 61 6e 73 61 63 74 69 6f 6e 23 2a 20 24 74 Transaction#*$t
16310 72 61 6e 73 61 63 74 69 6f 6e 5d 7d 20 74 68 65  ransaction]} the
16320 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
16330 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20   if {[catch {..
16340 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
16350 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 72 6f 6c   transaction rol
16360 6c 62 61 63 6b 20 24 74 72 61 6e 73 61 63 74 69  lback $transacti 16370 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 on.. 16380 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 } error] == 0} t 16390 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 163a0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
163b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
163c0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
163d0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 163e0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 163f0 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d "--- 16400 2d 20 72 6f 6c 6c 65 64 20 62 61 63 6b 20 6c 65 - rolled back le 16410 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e aked transaction 16420 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 \"" \.. 16430 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61$tra
16440 6e 73 61 63 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a  nsaction \"\n]..
16450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
16460 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65  .            } e
16470 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  lse {..
16480 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 16490 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 164a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 164b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
164c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
164d0 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
164e0 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
164f0 64 20 74 6f 20 72 6f 6c 6c 62 61 63 6b 20 6c 65  d to rollback le
16500 61 6b 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  aked transaction
16510 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
16520 20 20 20 20 20 20 20 20 20 20 20 20 24 74 72 61              $tra 16530 6e 73 61 63 74 69 6f 6e 20 22 5c 22 2c 20 65 72 nsaction "\", er 16540 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 ror: " \n\t$err
16550 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  or \n]..
16560 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
16570 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
16580 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
16590 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 65 61 63  ..        foreac
165a0 68 20 64 62 20 5b 69 6e 66 6f 20 63 6f 6e 6e 65  h db [info conne
165b0 63 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20 20 20  ctions] {..
165c0 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
165d0 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20 20 20 20   match \..
165e0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 23 44          System#D
165f0 61 74 61 23 53 51 4c 69 74 65 23 53 51 4c 69 74  ata#SQLite#SQLit
16600 65 43 6f 6e 6e 65 63 74 69 6f 6e 23 2a 20 24 64  eConnection#* $d 16610 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 b]} then {.. 16620 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 16630 63 68 20 7b 73 71 6c 20 63 6c 6f 73 65 20 24 64 ch {sql close$d
16640 62 7d 20 65 72 72 6f 72 5d 20 3d 3d 20 30 7d 20  b} error] == 0}
16650 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
16660 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65        if {!$quie 16670 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 t} then {.. 16680 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 16690 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
166a0 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
166b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
166c0 2d 2d 20 63 6c 6f 73 65 64 20 6c 65 61 6b 65 64  -- closed leaked
166d0 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64   database \"" $d 166e0 62 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 b \"\n].. 166f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 16700 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 16710 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 16720 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
16730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
16740 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 16750 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 16760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 16770 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 16780 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 63 6c NG: failed to cl 16790 6f 73 65 20 6c 65 61 6b 65 64 20 64 61 74 61 62 ose leaked datab 167a0 61 73 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ase \"" \.. 167b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24$
167c0 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22  db "\", error: "
167d0 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d   \n\t $error \n] 167e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 167f0 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 16800 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 .. }.. 16810 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 16820 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 16830 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 20 BUGFIX: Before 16840 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61 74 69 calling the nati 16850 76 65 20 73 68 75 74 64 6f 77 6e 20 66 75 6e 63 ve shutdown func 16860 74 69 6f 6e 2c 20 6d 61 6b 65 20 73 75 72 65 20 tion, make sure 16870 62 6f 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 both.. # 16880 20 20 20 20 20 20 20 20 6f 66 20 74 68 65 20 50 of the P 16890 52 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 RAGMA related di 168a0 72 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 rectory names ar 168b0 65 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 e freed... 168c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 #.. che 168d0 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 ckForSQLiteDirec 168e0 74 6f 72 69 65 73 20 24 63 68 61 6e 6e 65 6c 20 tories$channel
168f0 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  true....
16900 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
16910 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69          object i
16920 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
16930 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
16940 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
16950 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
16960 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
16970 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77 6e  sqlite3_shutdown
16980 0d 0a 20 20 20 20 20 20 20 20 7d 20 72 65 73 75  ..        } resu
16990 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
169a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
169b0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 169c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 169d0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
169e0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
169f0 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
16a00 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68   call sqlite3_sh
16a10 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f 6b 3a 20  utdown()... ok:
16a20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20  " $result \n].. 16a30 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 16a40 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 16a50 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
16a60 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
16a70 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $16a80 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 16a90 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 16aa0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c "---- cal 16ab0 6c 20 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f l sqlite3_shutdo 16ac0 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 wn()... error: " 16ad0 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e \n\t$result \n
16ae0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
16af0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
16b00 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
16b10 20 20 70 72 6f 63 20 72 65 70 6f 72 74 53 51 4c    proc reportSQL
16b20 69 74 65 52 65 73 6f 75 72 63 65 73 20 7b 0d 0a  iteResources {..
16b30 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61 6e              chan
16b40 6e 65 6c 20 7b 71 75 69 65 74 20 66 61 6c 73 65  nel {quiet false
16b50 7d 20 7b 72 65 73 65 74 20 74 72 75 65 7d 20 7b  } {reset true} {
16b60 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 7d 20  collect true} }
16b70 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
16b80 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 61 76 61    # NOTE: If ava
16b90 69 6c 61 62 6c 65 2c 20 72 65 70 6f 72 74 20 6f  ilable, report o
16ba0 6e 20 28 61 6e 64 20 70 6f 73 73 69 62 6c 79 20  n (and possibly
16bb0 72 65 73 65 74 29 20 74 68 65 20 72 75 6e 74 69  reset) the runti
16bc0 6d 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  me..      #
16bd0 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    configuration
16be0 73 74 61 74 69 73 74 69 63 73 2e 0d 0a 20 20 20  statistics...
16bf0 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b     #..      if {
16c00 5b 68 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63  [haveSQLiteObjec
16c10 74 43 6f 6d 6d 61 6e 64 5d 20 26 26 20 5c 0d 0a  tCommand] && \..
16c20 20 20 20 20 20 20 20 20 20 20 5b 68 61 76 65 43            [haveC
16c30 6f 6e 73 74 72 61 69 6e 74 20 62 75 69 6c 64 43  onstraint buildC
16c40 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 44 65 62  onfiguration.Deb
16c50 75 67 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 0d  ug] && [catch {.
16c60 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object
16c70 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
16c80 6f 6e 50 75 62 6c 69 63 20 2d 61 6c 69 61 73 20  onPublic -alias
16c90 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  \..            S
16ca0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
16cb0 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  e.UnsafeNativeMe
16cc0 74 68 6f 64 73 20 73 65 74 74 69 6e 67 52 65 61  thods settingRea
16cd0 64 43 6f 75 6e 74 73 0d 0a 20 20 20 20 20 20 7d  dCounts..      }
16ce0 20 73 65 74 74 69 6e 67 52 65 61 64 43 6f 75 6e   settingReadCoun
16cf0 74 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  ts] == 0} then {
16d00 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e 61  ..        set na
16d10 6d 65 43 6f 75 6e 74 20 5b 24 73 65 74 74 69 6e  meCount [$settin 16d20 67 52 65 61 64 43 6f 75 6e 74 73 20 43 6f 75 6e gReadCounts Coun 16d30 74 5d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 t].. set 16d40 76 61 6c 75 65 43 6f 75 6e 74 20 30 0d 0a 0d 0a valueCount 0.... 16d50 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 16d60 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 oreach -alias pa 16d70 69 72 20 24 73 65 74 74 69 6e 67 52 65 61 64 43 ir$settingReadC
16d80 6f 75 6e 74 73 20 7b 0d 0a 20 20 20 20 20 20 20  ounts {..
16d90 20 20 20 69 6e 63 72 20 76 61 6c 75 65 43 6f 75     incr valueCou
16da0 6e 74 20 5b 24 70 61 69 72 20 56 61 6c 75 65 5d  nt [$pair Value] 16db0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 16dc0 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
16dd0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
16de0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 16df0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 16e00 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 16e10 2d 2d 20 73 65 74 74 69 6e 67 20 5c 22 22 20 5b -- setting \"" [ 16e20 24 70 61 69 72 20 4b 65 79 5d 20 22 5c 22 20 77$pair Key] "\" w
16e30 61 73 20 72 65 61 64 20 22 20 5c 0d 0a 20 20 20  as read " \..
16e40 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 24 70               [$p 16e50 61 69 72 20 56 61 6c 75 65 5d 20 22 20 74 69 6d air Value] " tim 16e60 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 es\n"].. 16e70 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 16e80 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24 72 .. if {$r
16e90 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  eset} then {..
16ea0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
16eb0 63 68 20 7b 24 73 65 74 74 69 6e 67 52 65 61 64  ch {$settingRead 16ec0 43 6f 75 6e 74 73 20 43 6c 65 61 72 7d 20 65 72 Counts Clear} er 16ed0 72 6f 72 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 ror] == 0} then 16ee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 16ef0 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
16f00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
16f10 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 16f20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. 16f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 16f40 20 20 22 2d 2d 2d 2d 20 72 65 73 65 74 20 73 65 "---- reset se 16f50 74 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 tting statistics 16f60 20 66 6f 72 20 74 68 65 20 70 72 65 76 69 6f 75 for the previou 16f70 73 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 s " \.. 16f80 20 20 20 20 20 20 20 20 20 24 6e 61 6d 65 43 6f$nameCo
16f90 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20  unt " names and
16fa0 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 22 20  " $valueCount " 16fb0 76 61 6c 75 65 73 20 72 65 61 64 5c 6e 22 5d 0d values read\n"]. 16fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 16fd0 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 } else 16fe0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 16ff0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
17000 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
17010 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
17020 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
17030 6c 65 64 20 74 6f 20 72 65 73 65 74 20 73 65 74  led to reset set
17040 74 69 6e 67 20 73 74 61 74 69 73 74 69 63 73 20  ting statistics
17050 66 6f 72 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  for " \..
17060 20 20 20 20 20 20 20 20 20 22 74 68 65 20 70 72           "the pr
17070 65 76 69 6f 75 73 20 22 20 24 6e 61 6d 65 43 6f  evious " $nameCo 17080 75 6e 74 20 22 20 6e 61 6d 65 73 20 61 6e 64 20 unt " names and 17090 22 20 24 76 61 6c 75 65 43 6f 75 6e 74 20 5c 0d "$valueCount \.
170a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
170b0 20 22 20 76 61 6c 75 65 73 20 72 65 61 64 2c 20   " values read,
170c0 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65  error: " \n\t $e 170d0 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 rror \n].. 170e0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d }.. } 170f0 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 17100 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51 4c 69 if {[haveSQLi 17110 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e 64 5d teObjectCommand] 17120 20 26 26 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 && [haveConstra 17130 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 int \.. 17140 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 defineConst 17150 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e ant.System.Data. 17160 53 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 56 SQLite.INTEROP_V 17170 49 52 54 55 41 4c 5f 54 41 42 4c 45 5d 20 26 26 IRTUAL_TABLE] && 17180 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 68 \.. [h 17190 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5c 0d aveConstraint \. 171a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64 . d 171b0 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 efineConstant.Sy 171c0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 171d0 2e 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 .TRACK_MEMORY_BY 171e0 54 45 53 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 TES]} then {.. 171f0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
17200 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
17210 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 17220 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72 72 65 6e nel "---- curren 17230 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 t memory in use 17240 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e by SQLiteMemory. 17250 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d .. ".. }. 17260 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b ... if {[ 17270 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 17280 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 object invoke 17290 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c -flags +NonPubl 172a0 69 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ic \.. 172b0 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e System.Data. 172c0 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d SQLite.SQLiteMem 172d0 6f 72 79 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 ory bytesAllocat 172e0 65 64 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 ed.. } me 172f0 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e mory] == 0} then 17300 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 {.. if 17310 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
17320 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
17330 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 17340 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
17350 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20  y " bytes\n"]..
17360 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
17370 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
17380 20 20 20 20 20 20 20 20 73 65 74 20 6d 65 6d 6f          set memo
17390 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20  ry unknown....
173a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 173b0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 173c0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
173d0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
173e0 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d  rgs $memory \n]. 173f0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 17400 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 17410 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
17420 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
17430 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 17440 20 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d "---- maximum m 17450 65 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 emory in use by 17460 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 2e 2e 20 SQLiteMemory... 17470 22 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a ".. }.... 17480 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 17490 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 174a0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 174b0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 174c0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 174d0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 174e0 69 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 ite.SQLiteMemory 174f0 20 6d 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c maximumBytesAll 17500 6f 63 61 74 65 64 0d 0a 20 20 20 20 20 20 20 20 ocated.. 17510 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 } memory] == 0} 17520 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 17530 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
17540 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
17550 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 17560 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
17570 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
17580 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
17590 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
175a0 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
175b0 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a  memory unknown..
175c0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
175d0 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 175e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 175f0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
17600 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 17610 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 17620 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 17630 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 17640 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 {!$quiet} then
17650 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
17660 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 17670 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 17680 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2e n use by SQLite. 17690 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d .. ".. }... 176a0 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 . if {[have 176b0 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d SQLiteObjectComm 176c0 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 and]} then {.. 176d0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 176e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 {.. ob 176f0 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla 17700 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. 17710 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 . S 17720 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 17730 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 e.UnsafeNativeMe 17740 74 68 6f 64 73 20 73 71 6c 69 74 65 33 5f 6d 65 thods sqlite3_me 17750 6d 6f 72 79 5f 75 73 65 64 0d 0a 20 20 20 20 20 mory_used.. 17760 20 20 20 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 } memory] == 17770 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 17780 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
17790 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
177a0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 177b0 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs 177c0 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73$memory " bytes
177d0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
177e0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73  }..        } els
177f0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  e {..          #
17800 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
17810 54 45 3a 20 4d 61 79 62 65 20 74 68 65 20 53 51  TE: Maybe the SQ
17820 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
17830 79 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65  y is unavailable
17840 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ?..          #..
17850 20 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 65            set me
17860 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
17870 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24            if {!$17880 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 quiet} then {.. 17890 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 178a0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
178b0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 178c0 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a ].. }.. 178d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 178e0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 } else {.. 178f0 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 17900 61 76 61 69 6c 61 62 6c 65 0d 0a 0d 0a 20 20 20 available.... 17910 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
17920 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
17930 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 17940 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
17950 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20  memory \n]..
17960 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a      }..      }..
17970 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 75  ..      set resu
17980 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 20 4e 4f  lt $memory; # NO 17990 54 45 3a 20 52 65 74 75 72 6e 20 6d 65 6d 6f 72 TE: Return memor 179a0 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f 75 72 20 y in-use to our 179b0 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20 20 20 20 caller..... 179c0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
179d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  en {..        tp
179e0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d  uts $channel "-- 179f0 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65 6d 6f 72 -- maximum memor 17a00 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c 69 y in use by SQLi 17a10 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 7d te... ".. } 17a20 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 68 .... if {[h 17a30 61 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 aveSQLiteObjectC 17a40 6f 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d ommand]} then {. 17a50 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 . if {[ca 17a60 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 tch {.. 17a70 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d object invoke - 17a80 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 flags +NonPublic 17a90 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 17aa0 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 System.Data.SQ 17ab0 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 76 Lite.UnsafeNativ 17ac0 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 20 eMethods \.. 17ad0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 sqlite 17ae0 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 3_memory_highwat 17af0 65 72 20 30 0d 0a 20 20 20 20 20 20 20 20 7d 20 er 0.. } 17b00 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 memory] == 0} th 17b10 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 17b20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
17b30 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
17b40 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 17b50 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d [appendArgs$mem
17b60 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d 0d  ory " bytes\n"].
17b70 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
17b80 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
17b90 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
17ba0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d         # NOTE: M
17bb0 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 65 20  aybe the SQLite
17bc0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 73 20  core library is
17bd0 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a 20 20  unavailable?..
17be0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
17bf0 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20       set memory
17c00 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20  unknown....
17c10 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 17c20 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 17c30 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
17c40 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
17c50 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20   $memory \n].. 17c60 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 17c70 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 17c80 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 se {.. se 17c90 74 20 6d 65 6d 6f 72 79 20 75 6e 61 76 61 69 6c t memory unavail 17ca0 61 62 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 able.... 17cb0 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 if {!$quiet} the
17cc0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74  n {..          t
17cd0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 17ce0 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 ppendArgs$memor
17cf0 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d  y \n]..        }
17d00 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
17d10 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74 7d     if {$collect} 17d20 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 17d30 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 20 collectGarbage 17d40 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 20$channel..
17d50 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21  }....      if {!
17d60 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 17d70 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
17d80 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75 72  hannel "---- cur
17d90 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20 75  rent memory in u
17da0 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e 2e  se by the CLR...
17db0 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   "..      }....
17dc0 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 53 51       if {[haveSQ
17dd0 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d 6d 61 6e  LiteObjectComman
17de0 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  d]} then {..
17df0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
17e00 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
17e10 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 74  ct invoke GC Get
17e20 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c 73  TotalMemory fals
17e30 65 0d 0a 20 20 20 20 20 20 20 20 7d 20 6d 65 6d  e..        } mem
17e40 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ory] == 0} then
17e50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if
17e60 7b 5b 73 74 72 69 6e 67 20 69 73 20 69 6e 74 65  {[string is inte
17e70 67 65 72 20 2d 73 74 72 69 63 74 20 24 6d 65 6d  ger -strict $mem 17e80 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ory]} then {.. 17e90 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
17ea0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
17eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75               tpu
17ec0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70  ts $channel [app 17ed0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 endArgs$memory
17ee0 22 20 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20  " bytes\n"]..
17ef0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
17f00 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
17f10 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20              set
17f20 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a  memory invalid..
17f30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
17f40 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20   {!$quiet} then 17f50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 17f60 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
17f70 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 17f80 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 17f90 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 17fa0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 }.. } e 17fb0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 lse {.. 17fc0 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e set memory unkn 17fd0 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 own.... 17fe0 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
17ff0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
18000 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 18010 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
18020 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mory \n]..
18030 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
18040 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
18050 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65  ..        set me
18060 6d 6f 72 79 20 75 6e 61 76 61 69 6c 61 62 6c 65  mory unavailable
18070 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b  ....        if {
18080 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 18090 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 180a0 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
180b0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 5c 6e  dArgs $memory \n 180c0 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. 180d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 }.... r 180e0 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 eturn$result..
180f0 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
18100 63 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65  c checkForSQLite
18110 44 69 72 65 63 74 6f 72 69 65 73 20 7b 20 63 68  Directories { ch
18120 61 6e 6e 65 6c 20 7b 72 65 73 65 74 20 66 61 6c  annel {reset fal
18130 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
18140 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
18150 43 68 65 63 6b 20 69 66 20 74 68 65 20 73 71 6c  Check if the sql
18160 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64  ite3_win32_set_d
18170 69 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f  irectory functio
18180 6e 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d  n is available..
18190 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
181a0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5c  tputs $channel \ 181b0 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d .. "--- 181c0 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20 66 - checking for f 181d0 75 6e 63 74 69 6f 6e 20 73 71 6c 69 74 65 33 5f unction sqlite3_ 181e0 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 win32_set_direct 181f0 6f 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 ory... ".... 18200 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18210 45 3a 20 54 68 69 73 20 63 61 6c 6c 20 74 6f 20 E: This call to 18220 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 18230 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 18240 66 75 6e 63 74 69 6f 6e 20 75 73 65 73 20 74 68 function uses th 18250 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 18260 20 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 20 30 invalid value 0 18270 20 66 6f 72 20 74 68 65 20 66 69 72 73 74 20 61 for the first a 18280 72 67 75 6d 65 6e 74 2e 20 20 54 68 69 73 20 63 rgument. This c 18290 6f 64 65 20 69 73 20 64 65 73 69 67 6e 65 64 0d ode is designed. 182a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 182b0 6f 20 63 68 65 63 6b 20 69 66 20 63 61 6c 6c 69 o check if calli 182c0 6e 67 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 ng the function 182d0 77 69 6c 6c 20 72 61 69 73 65 20 61 6e 20 65 78 will raise an ex 182e0 63 65 70 74 69 6f 6e 20 28 69 2e 65 2e 0d 0a 20 ception (i.e... 182f0 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 18300 20 61 63 74 75 61 6c 20 72 65 73 75 6c 74 20 6f actual result o 18310 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 64 f the function d 18320 6f 65 73 20 6e 6f 74 20 6d 61 74 74 65 72 20 61 oes not matter a 18330 73 20 6c 6f 6e 67 20 61 73 20 6e 6f 0d 0a 20 20 s long as no.. 18340 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 # dire 18350 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64 ctory is changed 18360 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 )... #.. 18370 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d if {[catch {. 18380 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 . object 18390 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 183a0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 183b0 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 183c0 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 183d0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 183e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 .. sq 183f0 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f lite3_win32_set_ 18400 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c 6c directory 0 null 18410 0d 0a 20 20 20 20 20 20 7d 5d 20 3d 3d 20 30 7d .. }] == 0} 18420 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 18430 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 18440 54 45 3a 20 43 61 6c 6c 69 6e 67 20 74 68 65 20 TE: Calling the 18450 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 sqlite3_win32_se 18460 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e 63 t_directory func 18470 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 tion does not.. 18480 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63 # c 18490 61 75 73 65 20 61 6e 20 65 78 63 65 70 74 69 6f ause an exceptio 184a0 6e 3b 20 74 68 65 72 65 66 6f 72 65 2c 20 69 74 n; therefore, it 184b0 20 6d 75 73 74 20 62 65 20 61 76 61 69 6c 61 62 must be availab 184c0 6c 65 20 28 69 2e 65 2e 0d 0a 20 20 20 20 20 20 le (i.e... 184d0 20 20 23 20 20 20 20 20 20 20 65 76 65 6e 20 74 # even t 184e0 68 6f 75 67 68 20 69 74 20 73 68 6f 75 6c 64 20 hough it should 184f0 72 65 74 75 72 6e 20 61 20 66 61 69 6c 75 72 65 return a failure 18500 20 72 65 74 75 72 6e 20 63 6f 64 65 20 69 6e 20 return code in 18510 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 this.. # 18520 20 20 20 20 20 20 63 61 73 65 29 2e 0d 0a 20 20 case)... 18530 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 18540 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 73 addConstraint s 18550 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 18560 5f 64 69 72 65 63 74 6f 72 79 0d 0a 0d 0a 20 20 _directory.... 18570 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
18580 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 0d 0a 20 20  nnel yes\n....
18590 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
185a0 20 23 20 4e 4f 54 45 3a 20 44 6f 65 73 20 6f 75   # NOTE: Does ou
185b0 72 20 63 61 6c 6c 65 72 20 77 61 6e 74 20 74 6f  r caller want to
185c0 20 72 65 73 65 74 20 74 68 65 20 64 69 72 65 63   reset the direc
185d0 74 6f 72 69 65 73 3f 0d 0a 20 20 20 20 20 20 20  tories?..
185e0 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   #..        if {
185f0 24 72 65 73 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $reset} then {.. 18600 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 18610 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e # NOTE: N 18620 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 ow make sure the 18630 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 database and te 18640 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 mporary director 18650 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 ies are.. 18660 20 20 20 23 20 20 20 20 20 20 20 72 65 73 65 74 # reset 18670 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 their default v 18680 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f alues, which sho 18690 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 uld be null for 186a0 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 both... 186b0 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 # Since t 186c0 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 he sqlite3_win32 186d0 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 _set_directory f 186e0 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 6c unction is avail 186f0 61 62 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 able,.. 18700 20 23 20 20 20 20 20 20 20 75 73 65 20 69 74 2e # use it. 18710 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 18720 20 20 20 20 20 20 20 20 20 66 6f 72 20 7b 73 65 for {se 18730 74 20 69 6e 64 65 78 20 31 7d 20 7b 24 69 6e 64 t index 1} {$ind
18740 65 78 20 3c 20 33 7d 20 7b 69 6e 63 72 20 69 6e  ex < 3} {incr in
18750 64 65 78 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20  dex} {..
18760 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
18770 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
18780 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66  object invoke -f
18790 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20  lags +NonPublic
187a0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
187b0 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61       System.Data
187c0 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61  .SQLite.UnsafeNa
187d0 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20  tiveMethods \..
187e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
187f0 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
18800 65 74 5f 64 69 72 65 63 74 6f 72 79 20 24 69 6e  et_directory $in 18810 64 65 78 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 dex null.. 18820 20 20 20 20 20 20 7d 20 72 65 73 75 6c 74 5d 20 } result] 18830 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 18840 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 18850 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
18860 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
18870 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
18880 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 77  - call sqlite3_w
18890 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f  in32_set_directo
188a0 72 79 28 22 20 24 69 6e 64 65 78 20 5c 0d 0a 20  ry(" $index \.. 188b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 188c0 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a ", null)... ok: 188d0 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a "$result \n]..
188e0 20 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c              } el
188f0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
18900 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 18910 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 18920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 18930 20 20 20 20 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 "---- call s 18940 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 qlite3_win32_set 18950 5f 64 69 72 65 63 74 6f 72 79 28 22 20 24 69 6e _directory("$in
18960 64 65 78 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  dex \..
18970 20 20 20 20 20 20 20 20 20 22 2c 20 6e 75 6c 6c           ", null
18980 29 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c 6e  )... error: " \n
18990 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 189a0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 189b0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 }.. 189c0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 }.. } e 189d0 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 lse {.. t 189e0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f puts$channel no
189f0 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  \n....        #.
18a00 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
18a10 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 72   Does our caller
18a20 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 74   want to reset t
18a30 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f 20  he directories?
18a40 20 54 68 69 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a   This can only..
18a50 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18a60 62 65 20 70 65 72 66 6f 72 6d 65 64 20 69 66 20  be performed if
18a70 53 51 4c 69 74 65 20 69 73 20 6c 6f 61 64 65 64  SQLite is loaded
18a80 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
18a90 73 65 20 62 79 20 74 68 65 20 74 65 73 74 0d 0a  se by the test..
18aa0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
18ab0 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 20 20  suite...
18ac0 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 24  #..        if {$18ad0 72 65 73 65 74 20 26 26 20 5b 69 73 53 51 4c 69 reset && [isSQLi 18ae0 74 65 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b teReady]} then { 18af0 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 18b00 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 18b10 20 4e 6f 77 20 6d 61 6b 65 20 73 75 72 65 20 74 Now make sure t 18b20 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 he database and 18b30 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 temporary direct 18b40 6f 72 69 65 73 20 61 72 65 0d 0a 20 20 20 20 20 ories are.. 18b50 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 # res 18b60 65 74 20 74 68 65 69 72 20 64 65 66 61 75 6c 74 et their default 18b70 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 values, which s 18b80 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f hould be null fo 18b90 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 20 20 20 r both... 18ba0 20 20 20 23 20 20 20 20 20 20 20 53 69 6e 63 65 # Since 18bb0 20 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e the sqlite3_win 18bc0 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 32_set_directory 18bd0 20 66 75 6e 63 74 69 6f 6e 20 64 6f 65 73 20 6e function does n 18be0 6f 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 ot.. # 18bf0 20 20 20 20 20 20 61 70 70 65 61 72 20 74 6f 20 appear to 18c00 62 65 20 61 76 61 69 6c 61 62 6c 65 2c 20 75 73 be available, us 18c10 65 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 e the associated 18c20 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 PRAGMA commands 18c30 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 18c40 20 20 20 20 69 6e 73 74 65 61 64 2e 0d 0a 20 20 instead... 18c50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 18c60 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 72 foreach dir 18c70 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 ectory [list dat 18c80 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 a_store_director 18c90 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 y temp_store_dir 18ca0 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 ectory] {.. 18cb0 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 20 5b set sql [ 18cc0 61 70 70 65 6e 64 41 72 67 73 20 22 50 52 41 47 appendArgs "PRAG 18cd0 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 MA "$directory
18ce0 22 20 3d 20 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20  " = \"\";"]....
18cf0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b             if {[
18d00 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53 71  catch {executeSq
18d10 6c 20 24 73 71 6c 7d 20 72 65 73 75 6c 74 5d 20  l $sql} result] 18d20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 18d30 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 18d40 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
18d50 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
18d60 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
18d70 2d 20 65 78 65 63 75 74 65 20 50 52 41 47 4d 41  - execute PRAGMA
18d80 20 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e   " $directory ". 18d90 2e 2e 20 6f 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 .. ok: \"" \.. 18da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 18db0 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20$result \"\n]..
18dc0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73             } els
18dd0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
18de0 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 18df0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 18e00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 18e10 20 20 20 22 2d 2d 2d 2d 20 65 78 65 63 75 74 65 "---- execute 18e20 20 50 52 41 47 4d 41 20 22 20 24 64 69 72 65 63 PRAGMA "$direc
18e30 74 6f 72 79 20 22 2e 2e 2e 20 65 72 72 6f 72 3a  tory "... error:
18e40 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   " \..
18e50 20 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 72 65          \n\t $re 18e60 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 sult \n].. 18e70 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 18e80 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 18e90 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 18ea0 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 18eb0 45 3a 20 46 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 E: Finally, show 18ec0 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c the current val 18ed0 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 ue of the databa 18ee0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79 se and temporary 18ef0 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 18f00 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20 54 68 directories. Th 18f10 69 73 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 70 is can only be p 18f20 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 erformed if SQLi 18f30 74 65 20 69 73 20 6c 6f 61 64 65 64 0d 0a 20 20 te is loaded.. 18f40 20 20 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 # and 18f50 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 79 ready for use by 18f60 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e the test suite. 18f70 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 18f80 20 69 66 20 7b 5b 69 73 53 51 4c 69 74 65 52 65 if {[isSQLiteRe 18f90 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ady]} then {.. 18fa0 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 64 69 foreach di 18fb0 72 65 63 74 6f 72 79 20 5b 6c 69 73 74 20 64 61 rectory [list da 18fc0 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f ta_store_directo 18fd0 72 79 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 ry temp_store_di 18fe0 72 65 63 74 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 rectory] {.. 18ff0 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
19000 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
19010 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
19020 22 20 24 64 69 72 65 63 74 6f 72 79 20 22 2e 2e  " $directory ".. 19030 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 . "].... 19040 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65 6e set sql [appen 19050 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22 20 dArgs "PRAGMA " 19060 24 64 69 72 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a$directory \;]..
19070 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
19080 5b 63 61 74 63 68 20 7b 65 78 65 63 75 74 65 53  [catch {executeS
19090 71 6c 20 24 73 71 6c 20 73 63 61 6c 61 72 7d 20  ql $sql scalar} 190a0 72 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 result] == 0} th 190b0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 190c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
190d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 6f 6b   [appendArgs "ok
190e0 3a 20 5c 22 22 20 24 72 65 73 75 6c 74 20 5c 22  : \"" $result \" 190f0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 19100 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 19110 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
19120 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
19130 22 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24  "error: " \n\t $19140 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 19150 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 19160 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. }.. 19170 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc 19180 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 loadSQLiteTestSe 19190 74 74 69 6e 67 73 20 7b 20 63 68 61 6e 6e 65 6c ttings { channel 191a0 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7b 71 75 {suffix ""} {qu 191b0 69 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a iet false} } {.. 191c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 191d0 20 4e 4f 54 45 3a 20 53 6b 69 70 20 6c 6f 61 64 NOTE: Skip load 191e0 69 6e 67 20 74 68 65 20 73 65 74 74 69 6e 67 73 ing the settings 191f0 20 69 66 20 74 68 65 69 72 20 75 73 61 67 65 20 if their usage 19200 68 61 73 20 62 65 65 6e 20 64 69 73 61 62 6c 65 has been disable 19210 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 d... #.. 19220 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 if {![info ex 19230 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 ists ::no(sqlite 19240 54 65 73 74 53 65 74 74 69 6e 67 73 29 5d 7d 20 TestSettings)]} 19250 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 19260 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 19270 45 3a 20 4c 6f 61 64 20 63 75 73 74 6f 6d 20 70 E: Load custom p 19280 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 er-user and/or p 19290 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 er-host test set 192a0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 tings now... 192b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 #.. i 192c0 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 192d0 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 ::tcl_platform(u 192e0 73 65 72 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ser)]} then {.. 192f0 20 20 20 20 20 20 20 20 20 73 65 74 20 75 73 65 set use 19300 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 19310 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 e [file join [ge 19320 74 43 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 tCommonDirectory 19330 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ] \.. 19340 20 20 20 5b 61 70 70 65 6e 64 41 72 67 73 20 73 [appendArgs s 19350 65 74 74 69 6e 67 73 20 24 73 75 66 66 69 78 20 ettings$suffix
19360 2e 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  . $::tcl_platfor 19370 6d 28 75 73 65 72 29 20 2e 65 61 67 6c 65 5d 5d m(user) .eagle]] 19380 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 19390 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 {[file exists$
193a0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65  userSettingsFile
193b0 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  Name]} then {..
193c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
193d0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 193e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp 193f0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
19400 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
19410 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
19420 2d 2d 2d 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d  --- loading per-
19430 75 73 65 72 20 74 65 73 74 20 73 65 74 74 69 6e  user test settin
19440 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20  gs file \"" \..
19450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19460 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69   $userSettingsFi 19470 6c 65 4e 61 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d leName \"...\n]. 19480 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 19490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 194a0 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 {[catch {.. 194b0 20 20 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 upleve 194c0 6c 20 31 20 5b 6c 69 73 74 20 73 6f 75 72 63 65 l 1 [list source 194d0 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
194e0 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
194f0 20 20 20 20 20 7d 20 65 72 72 6f 72 5d 7d 20 74       } error]} t
19500 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
19510 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74       if {!$quiet 19520 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 19530 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 19540 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
19550 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
19560 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d              "===
19570 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65  = WARNING: faile
19580 64 20 74 6f 20 6c 6f 61 64 20 70 65 72 2d 75 73  d to load per-us
19590 65 72 20 73 65 74 74 69 6e 67 73 20 66 69 6c 65  er settings file
195a0 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20   \"" \..
195b0 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73 65              $use 195c0 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d rSettingsFileNam 195d0 65 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 e "\", error: " 195e0 5c 6e 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d \n\t$error \n].
195f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
19600 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
19610 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
19620 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
19630 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 19640 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 19650 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
19660 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
19670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
19680 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
19690 64 20 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73  d loading per-us
196a0 65 72 20 74 65 73 74 20 73 65 74 74 69 6e 67 73  er test settings
196b0 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20   file \"" \..
196c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 24                 $196d0 75 73 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 userSettingsFile 196e0 4e 61 6d 65 20 22 5c 22 2c 20 69 74 20 64 6f 65 Name "\", it doe 196f0 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d s not exist\n"]. 19700 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a . }.. 19710 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 19720 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 19730 20 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############## 19740 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 19750 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 19760 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 19770 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 #########.... 19780 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 if {[info e 19790 78 69 73 74 73 20 3a 3a 74 63 6c 5f 70 6c 61 74 xists ::tcl_plat 197a0 66 6f 72 6d 28 68 6f 73 74 29 5d 7d 20 74 68 65 form(host)]} the 197b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 n {.. s 197c0 65 74 20 68 6f 73 74 53 65 74 74 69 6e 67 73 46 et hostSettingsF 197d0 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ileName [file jo 197e0 69 6e 20 5b 67 65 74 43 6f 6d 6d 6f 6e 44 69 72 in [getCommonDir 197f0 65 63 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 ectory] \.. 19800 20 20 20 20 20 20 20 20 20 5b 61 70 70 65 6e 64 [append 19810 41 72 67 73 20 73 65 74 74 69 6e 67 73 20 24 73 Args settings$s
19820 75 66 66 69 78 20 2e 20 24 3a 3a 74 63 6c 5f 70  uffix . $::tcl_p 19830 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 20 2e 65 latform(host) .e 19840 61 67 6c 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 agle]].... 19850 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 if {[file ex 19860 69 73 74 73 20 24 68 6f 73 74 53 65 74 74 69 6e ists$hostSettin
19870 67 73 46 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65  gsFileName]} the
19880 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
19890 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68   if {!$quiet} th 198a0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 198b0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
198c0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
198d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
198e0 20 20 20 20 22 2d 2d 2d 2d 20 6c 6f 61 64 69 6e      "---- loadin
198f0 67 20 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20  g per-host test
19900 73 65 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22  settings file \"
19910 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
19920 20 20 20 20 20 20 20 24 68 6f 73 74 53 65 74 74         $hostSett 19930 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5c 22 2e ingsFileName \". 19940 2e 2e 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 ..\n].. 19950 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 19960 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 19970 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 19980 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 uplevel 1 [list 19990 73 6f 75 72 63 65 20 24 68 6f 73 74 53 65 74 74 source$hostSett
199a0 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d 0d 0a 20  ingsFileName]..
199b0 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 72 72             } err
199c0 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  or]} then {..
199d0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
199e0 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 199f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 19a00 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
19a10 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
19a20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a30 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
19a40 20 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20   failed to load
19a50 70 65 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67  per-host setting
19a60 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20  s file \"" \..
19a70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
19a80 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46    $hostSettingsF 19a90 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 ileName "\", err 19aa0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f or: " \n\t$erro
19ab0 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  r \n]..
19ac0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
19ad0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
19ae0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
19af0 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69         if {!$qui 19b00 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 et} then {.. 19b10 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 19b20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64$channel [append
19b30 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
19b40 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
19b50 73 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20  skipped loading
19b60 70 65 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65  per-host test se
19b70 74 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20  ttings file \""
19b80 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
19b90 20 20 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e       $hostSettin 19ba0 67 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 gsFileName "\", 19bb0 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 it does not exis 19bc0 74 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 t\n"].. 19bd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 19be0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 19bf0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 19c00 0a 20 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c . proc runSQL 19c10 69 74 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 iteTestPrologue 19c20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 {} {.. #.. 19c30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 19c40 70 20 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 p running our cu 19c50 73 74 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 stom prologue if 19c60 20 74 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 the main one ha 19c70 73 20 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 s been.. # 19c80 20 20 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a skipped... 19c90 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 19ca0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 19cb0 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 ::no(prologue.e 19cc0 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a agle)]} then {.. 19cd0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 19ce0 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 # NOTE: Load 19cf0 74 68 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 the "before-cons 19d00 74 72 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 traints" custom 19d10 70 65 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 per-user and/or 19d20 70 65 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 per-host.. 19d30 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73 # test s 19d40 65 74 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 ettings now... 19d50 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 19d60 20 75 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 uplevel 1 [list 19d70 20 6c 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 loadSQLiteTestS 19d80 65 74 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f ettings$::test_
19d90 63 68 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d  channel .before]
19da0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
19db0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43         # NOTE: C
19dc0 68 65 63 6b 20 69 66 20 74 68 65 20 5b 6f 62 6a  heck if the [obj
19dd0 65 63 74 5d 20 63 6f 6d 6d 61 6e 64 20 69 73 20  ect] command is
19de0 61 76 61 69 6c 61 62 6c 65 3b 20 69 66 20 6e 6f  available; if no
19df0 74 2c 20 61 64 64 20 73 6f 6d 65 0d 0a 20 20 20  t, add some..
19e00 20 20 20 20 20 23 20 20 20 20 20 20 20 73 68 69       #       shi
19e10 6d 73 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 74  ms to make the t
19e20 65 73 74 20 73 75 69 74 65 20 72 75 6e 20 73 6d  est suite run sm
19e30 6f 6f 74 68 65 72 2e 0d 0a 20 20 20 20 20 20 20  oother...
19e40 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63   #..        chec
19e50 6b 46 6f 72 53 51 4c 69 74 65 4f 62 6a 65 63 74  kForSQLiteObject
19e60 43 6f 6d 6d 61 6e 64 20 24 3a 3a 74 65 73 74 5f  Command $::test_ 19e70 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 19e80 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 19e90 4e 4f 54 45 3a 20 44 65 74 65 72 6d 69 6e 65 20 NOTE: Determine 19ea0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 the names of the 19eb0 20 6e 61 74 69 76 65 20 70 6c 61 74 66 6f 72 6d native platform 19ec0 20 61 6e 64 20 61 72 63 68 69 74 65 63 74 75 72 and architectur 19ed0 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 19ee0 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 19ef0 6f 72 6d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 orm [getBuildPla 19f00 74 66 6f 72 6d 20 74 72 75 65 5d 0d 0a 20 20 20 tform true].. 19f10 20 20 20 20 20 73 65 74 20 61 72 63 68 69 74 65 set archite 19f20 63 74 75 72 65 20 5b 61 72 63 68 69 74 65 63 74 cture [architect 19f30 75 72 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 24 ureForPlatform$
19f40 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
19f50 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
19f60 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65  # NOTE: Show the
19f70 20 70 6c 61 74 66 6f 72 6d 20 61 6e 64 20 61 72   platform and ar
19f80 63 68 69 74 65 63 74 75 72 65 20 75 73 65 64 20  chitecture used
19f90 74 6f 20 68 65 6c 70 20 6c 6f 63 61 74 65 20 74  to help locate t
19fa0 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  he..        #
19fb0 20 20 20 20 6e 61 74 69 76 65 20 62 75 69 6c 64      native build
19fc0 20 66 69 6c 65 73 2e 0d 0a 20 20 20 20 20 20 20   files...
19fd0 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   #..        tput
19fe0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 19ff0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1a000 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 1a010 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20 -- platform for 1a020 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20 locating native 1a030 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c build files is \ 1a040 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 "" \.. 1a050 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22 5c 6e$platform \"\n
1a060 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 75  ]....        tpu
1a070 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1a080 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 1a090 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 1a0a0 2d 2d 2d 20 61 72 63 68 69 74 65 63 74 75 72 65 --- architecture 1a0b0 20 66 6f 72 20 6c 6f 63 61 74 69 6e 67 20 6e 61 for locating na 1a0c0 74 69 76 65 20 62 75 69 6c 64 20 66 69 6c 65 73 tive build files 1a0d0 20 69 73 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 is \"" \.. 1a0e0 20 20 20 20 20 20 20 24 61 72 63 68 69 74 65 63$architec
1a0f0 74 75 72 65 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20  ture \"\n]....
1a100 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a110 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61   # NOTE: Build a
1a120 20 6c 69 73 74 20 6f 66 20 63 6f 6e 66 69 67 75   list of configu
1a130 72 61 74 69 6f 6e 20 66 69 6c 65 73 20 74 68 61  ration files tha
1a140 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20 20  t we handle...
1a150 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
1a160 20 73 65 74 20 63 6f 6e 66 69 67 46 69 6c 65 4e   set configFileN
1a170 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20  ames [list \..
1a180 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
1a190 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c  .Data.SQLite.dll
1a1a0 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20 20  .config]....
1a1b0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
1a1c0 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20 61 20 6c   NOTE: Build a l
1a1d0 69 73 74 20 6f 66 20 61 75 78 69 6c 69 61 72 79  ist of auxiliary
1a1e0 20 4d 61 6e 61 67 65 64 20 44 65 62 75 67 67 69   Managed Debuggi
1a1f0 6e 67 20 41 73 73 69 73 74 61 6e 74 73 20 28 4d  ng Assistants (M
1a200 44 41 29 0d 0a 20 20 20 20 20 20 20 20 23 20 20  DA)..        #
1a210 20 20 20 20 20 63 6f 6e 66 69 67 75 72 61 74 69       configurati
1a220 6f 6e 20 66 69 6c 65 73 20 74 68 61 74 20 77 65  on files that we
1a230 20 68 61 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20   handle...
1a240 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74    #..        set
1a250 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61   mdaConfigFileNa
1a260 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
1a270 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 53 68           EagleSh
1a280 65 6c 6c 33 32 2e 65 78 65 2e 6d 64 61 2e 63 6f  ell32.exe.mda.co
1a290 6e 66 69 67 20 49 6e 73 74 61 6c 6c 65 72 2e 65  nfig Installer.e
1a2a0 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 5c 0d  xe.mda.config \.
1a2b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 73  .            tes
1a2c0 74 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  t.exe.mda.config
1a2d0 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64   testlinq.exe.md
1a2e0 61 2e 63 6f 6e 66 69 67 20 5c 0d 0a 20 20 20 20  a.config \..
1a2f0 20 20 20 20 20 20 20 20 74 65 73 74 65 66 36 2e          testef6.
1a300 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 5d 0d  exe.mda.config].
1a310 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1a320 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
1a330 69 6c 64 20 74 68 65 20 6c 69 73 74 20 6f 66 20  ild the list of
1a340 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20 74  external files t
1a350 68 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 20 20  hat we handle.
1a360 53 6f 6d 65 20 6f 66 0d 0a 20 20 20 20 20 20 20  Some of..
1a370 20 23 20 20 20 20 20 20 20 74 68 65 73 65 20 66   #       these f
1a380 69 6c 65 73 20 6d 61 79 20 62 65 20 6e 61 74 69  iles may be nati
1a390 76 65 20 61 6e 64 2f 6f 72 20 6d 61 6e 61 67 65  ve and/or manage
1a3a0 64 20 61 73 73 65 6d 62 6c 69 65 73 20 74 68 61  d assemblies tha
1a3b0 74 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23  t are..        #
1a3c0 20 20 20 20 20 20 20 72 65 71 75 69 72 65 64 20         required
1a3d0 74 6f 20 70 65 72 66 6f 72 6d 20 76 61 72 69 6f  to perform vario
1a3e0 75 73 20 74 65 73 74 73 2e 0d 0a 20 20 20 20 20  us tests...
1a3f0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
1a400 74 20 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61  t externalFileNa
1a410 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a 20 20 20  mes [list \..
1a420 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a           [file j
1a430 6f 69 6e 20 45 6e 74 69 74 79 46 72 61 6d 65 77  oin EntityFramew
1a440 6f 72 6b 20 6c 69 62 20 5b 73 74 72 69 6e 67 20  ork lib [string
1a450 6d 61 70 20 5b 6c 69 73 74 20 46 78 20 22 22 5d  map [list Fx ""]
1a460 20 5b 73 74 72 69 6e 67 20 5c 0d 0a 20 20 20 20   [string \..
1a470 20 20 20 20 20 20 20 20 6d 61 70 20 5b 6c 69 73          map [lis
1a480 74 20 6e 65 74 46 78 34 35 31 20 6e 65 74 46 78  t netFx451 netFx
1a490 34 35 5d 20 5b 67 65 74 42 75 69 6c 64 4e 65 74  45] [getBuildNet
1a4a0 46 78 5d 5d 5d 20 45 6e 74 69 74 79 46 72 61 6d  Fx]]] EntityFram
1a4b0 65 77 6f 72 6b 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20  ework.dll]]....
1a4c0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a4d0 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 6c 64 20    # NOTE: Build
1a4e0 74 68 65 20 6c 69 73 74 20 6f 66 20 6e 61 74 69  the list of nati
1a4f0 76 65 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65  ve assembly file
1a500 73 20 74 68 61 74 20 77 65 20 68 61 6e 64 6c 65  s that we handle
1a510 2e 20 20 54 68 65 0d 0a 20 20 20 20 20 20 20 20  .  The..
1a520 23 20 20 20 20 20 20 20 72 65 61 73 6f 6e 20 74  #       reason t
1a530 68 65 20 22 53 79 73 74 65 6d 2e 44 61 74 61 2e  he "System.Data.
1a540 53 51 4c 69 74 65 2e 64 6c 6c 22 20 66 69 6c 65  SQLite.dll" file
1a550 20 69 73 20 69 6e 63 6c 75 64 65 64 20 68 65 72   is included her
1a560 65 20 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  e is..        #
1a570 20 20 20 20 20 20 62 65 63 61 75 73 65 20 69 74        because it
1a580 20 63 6f 75 6c 64 20 62 65 20 74 68 65 20 6d 69   could be the mi
1a590 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
1a5a0 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  y...        #..
1a5b0 20 20 20 20 20 20 20 73 65 74 20 6e 61 74 69 76         set nativ
1a5c0 65 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73 74  eFileNames [list
1a5d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1a5e0 73 71 6c 69 74 65 33 2e 64 6c 6c 20 53 51 4c 69  sqlite3.dll SQLi
1a5f0 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 53  te.Interop.dll S
1a600 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
1a610 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20 20  e.dll]....
1a620 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1a630 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20 6c  OTE: Build the l
1a640 69 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61  ist of managed a
1a650 73 73 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68  ssembly files th
1a660 61 74 20 77 65 20 68 61 6e 64 6c 65 2e 0d 0a 20  at we handle...
1a670 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1a680 20 20 73 65 74 20 6d 61 6e 61 67 65 64 46 69 6c    set managedFil
1a690 65 4e 61 6d 65 73 20 5b 6c 69 73 74 20 5c 0d 0a  eNames [list \..
1a6a0 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
1a6b0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64  em.Data.SQLite.d
1a6c0 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  ll System.Data.S
1a6d0 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 20 5c  QLite.Linq.dll \
1a6e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 79  ..            Sy
1a6f0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
1a700 2e 45 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20  .EF6.dll]....
1a710 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1a720 23 20 4e 4f 54 45 3a 20 52 65 6d 6f 76 65 20 61  # NOTE: Remove a
1a730 6e 79 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69  ny test constrai
1a740 6e 74 73 20 74 68 61 74 20 72 65 66 65 72 20 74  nts that refer t
1a750 6f 20 74 68 65 20 6e 61 74 69 76 65 20 61 6e 64  o the native and
1a760 2f 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 20 20  /or..        #
1a770 20 20 20 20 20 6d 61 6e 61 67 65 64 20 61 73 73       managed ass
1a780 65 6d 62 6c 79 20 66 69 6c 65 73 20 74 68 61 74  embly files that
1a790 20 77 65 20 68 61 6e 64 6c 65 20 75 6e 6c 65 73   we handle unles
1a7a0 73 20 66 6f 72 62 69 64 64 65 6e 20 66 72 6f 6d  s forbidden from
1a7b0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1a7c0 20 20 64 6f 69 6e 67 20 73 6f 2e 0d 0a 20 20 20    doing so...
1a7d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1a7e0 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
1a7f0 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 52 65 6d  s ::no(sqliteRem
1a800 6f 76 65 43 6f 6e 73 74 72 61 69 6e 74 73 29 5d  oveConstraints)]
1a810 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1a820 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65      foreach file
1a830 4e 61 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65  Name $configFile 1a840 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 Names {.. 1a850 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 1a860 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 1a870 73 20 66 69 6c 65 5f 20 24 66 69 6c 65 4e 61 6d s file_$fileNam
1a880 65 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  e]..          }.
1a890 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72  ...          for
1a8a0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d  each fileName $m 1a8b0 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 daConfigFileName 1a8c0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 1a8d0 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 1a8e0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 1a8f0 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
1a900 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1a910 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1a920 20 66 69 6c 65 4e 61 6d 65 20 24 65 78 74 65 72   fileName $exter 1a930 6e 61 6c 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a nalFileNames {.. 1a940 20 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f remo 1a950 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 veConstraint [ap 1a960 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5b pendArgs file_ [ 1a970 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e file tail$fileN
1a980 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 20 20 20  ame]]..
1a990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....
1a9a0 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65  foreach fileName
1a9b0 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65   $nativeFileName 1a9c0 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s {.. 1a9d0 20 72 65 6d 6f 76 65 43 6f 6e 73 74 72 61 69 6e removeConstrain 1a9e0 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 t [appendArgs fi 1a9f0 6c 65 5f 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a le_$fileName]..
1aa00 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
1aa10 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
1aa20 20 66 69 6c 65 4e 61 6d 65 20 24 6d 61 6e 61 67   fileName $manag 1aa30 65 64 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 edFileNames {.. 1aa40 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 1aa50 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 eConstraint [app 1aa60 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 24 66 endArgs file_$f
1aa70 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20  ileName]..
1aa80 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1aa90 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
1aaa0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1aab0 6b 69 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44  kip all System.D
1aac0 61 74 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74  ata.SQLite relat
1aad0 65 64 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67  ed file handling
1aae0 20 28 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20   (deleting,..
1aaf0 20 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70       #       cop
1ab00 79 69 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e  ying, and loadin
1ab10 67 29 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  g) if instructed
1ab20 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1ab30 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f        if {![info
1ab40 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c   exists ::no(sql
1ab50 69 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  iteFiles)]} then
1ab60 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
1ab70 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
1ab80 45 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74  E: Skip trying t
1ab90 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 66 69 6c  o delete any fil
1aba0 65 73 20 69 66 20 69 6e 73 74 72 75 63 74 65 64  es if instructed
1abb0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
1abc0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1abd0 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1abe0 28 64 65 6c 65 74 65 53 71 6c 69 74 65 46 69 6c  (deleteSqliteFil
1abf0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
1ac00 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b            if {![
1ac10 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f  info exists ::no
1ac20 28 64 65 6c 65 74 65 53 71 6c 69 74 65 43 6f 6e  (deleteSqliteCon
1ac30 66 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  figFiles)]} then
1ac40 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1ac50 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61    foreach fileNa
1ac60 6d 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61  me $configFileNa 1ac70 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 mes {.. 1ac80 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 1ac90 42 69 6e 61 72 79 46 69 6c 65 20 24 66 69 6c 65 BinaryFile$file
1aca0 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20  Name..
1acb0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
1acc0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....
1acd0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1ace0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
1acf0 65 53 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46  eSqliteExternalF
1ad00 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a  iles)]} then {..
1ad10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f                fo
1ad20 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24  reach fileName $1ad30 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d mdaConfigFileNam 1ad40 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 es {.. 1ad50 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42 tryDeleteB 1ad60 75 69 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 uildFile$fileNa
1ad70 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  me..
1ad80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1ad90 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1ada0 65 4e 61 6d 65 20 24 65 78 74 65 72 6e 61 6c 46  eName $externalF 1adb0 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 ileNames {.. 1adc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 tryD 1add0 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 eleteBinaryFile 1ade0 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20$fileName..
1adf0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
1ae00 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1ae10 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69           if {![i
1ae20 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28  nfo exists ::no(
1ae30 64 65 6c 65 74 65 53 71 6c 69 74 65 4e 61 74 69  deleteSqliteNati
1ae40 76 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  veFiles)]} then
1ae50 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
1ae60 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
1ae70 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53 71  ts ::no(deleteSq
1ae80 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c 65  liteImplicitFile
1ae90 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  s)]} then {..
1aea0 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72               for
1aeb0 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e  each fileName $n 1aec0 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b ativeFileNames { 1aed0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1aee0 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 1aef0 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 0d embly$fileName.
1af00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1af10 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
1af20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1af30 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20       if {![info
1af40 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65  exists ::no(dele
1af50 74 65 53 71 6c 69 74 65 4e 6f 6e 49 6d 70 6c 69  teSqliteNonImpli
1af60 63 69 74 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e  citFiles)]} then
1af70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1af80 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1af90 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
1afa0 65 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46  eSqlitePlatformF
1afb0 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20  iles)] && \..
1afc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1afd0 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20   [string length
1afe0 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20  $platform] > 0} 1aff0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1b000 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 foreac 1b010 68 20 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 h fileName$nati
1b020 76 65 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20  veFileNames {..
1b030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
1b040 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
1b050 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24  mbly $fileName$
1b060 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20  platform..
1b070 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1b080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
1b090 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....
1b0a0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65      if {![info e
1b0b0 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74  xists ::no(delet
1b0c0 65 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 74  eSqliteArchitect
1b0d0 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d  ureFiles)] && \.
1b0e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1b0f0 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e       [string len
1b100 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 72  gth $architectur 1b110 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a e] > 0} then {.. 1b120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b130 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 1b140 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 me$nativeFileNa
1b150 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
1b160 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65             tryDe
1b170 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69  leteAssembly $fi 1b180 6c 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 leName$architec
1b190 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20  ture..
1b1a0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
1b1b0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..
1b1c0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
1b1d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1b1e0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b              if {
1b1f0 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  ![info exists ::
1b200 6e 6f 28 64 65 6c 65 74 65 53 71 6c 69 74 65 4d  no(deleteSqliteM
1b210 61 6e 61 67 65 64 46 69 6c 65 73 29 5d 7d 20 74  anagedFiles)]} t
1b220 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b230 20 20 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c       foreach fil
1b240 65 4e 61 6d 65 20 24 6d 61 6e 61 67 65 64 46 69  eName $managedFi 1b250 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 1b260 20 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 tryDe 1b270 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 24 66 69 leteAssembly$fi
1b280 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20  leName..
1b290 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
1b2a0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
1b2b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....
1b2c0 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
1b2d0 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20  NOTE: Check for
1b2e0 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22  the "autoSelect"
1b2f0 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e   runtime option.
1b300 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20    If present,..
1b310 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1b320 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f   attempt to auto
1b330 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74  matically select
1b340 20 74 68 65 20 66 69 72 73 74 20 61 76 61 69 6c   the first avail
1b350 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20  able..
1b360 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f  #       build (o
1b370 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20  r "release") of
1b380 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65  SQLite and Syste
1b390 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20  m.Data.SQLite..
1b3a0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
1b3b0 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68   for use with th
1b3c0 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20  e test suite...
1b3d0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
1b3e0 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75        if {[hasRu
1b3f0 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f  ntimeOption auto
1b400 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d  Select]} then {.
1b410 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if
1b420 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74  {![checkForSQLit
1b430 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f  eBuilds $::test_ 1b440 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74 channel true]} t 1b450 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1b460 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c checkForSQL 1b470 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 iteReleases$::t
1b480 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65  est_channel true
1b490 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1b4a0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
1b4b0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1b4c0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
1b4d0 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65  kip trying to ve
1b4e0 72 69 66 79 20 74 68 65 20 62 75 69 6c 64 20 64  rify the build d
1b4f0 69 72 65 63 74 6f 72 79 20 69 66 20 69 6e 73 74  irectory if inst
1b500 72 75 63 74 65 64 3b 0d 0a 20 20 20 20 20 20 20  ructed;..
1b510 20 20 20 23 20 20 20 20 20 20 20 6f 74 68 65 72     #       other
1b520 77 69 73 65 2c 20 6d 61 6b 65 20 73 75 72 65 20  wise, make sure
1b530 69 74 20 61 63 74 75 61 6c 6c 79 20 65 78 69 73  it actually exis
1b540 74 73 20 6f 72 20 68 61 6c 74 20 74 68 65 20 65  ts or halt the e
1b550 6e 74 69 72 65 0d 0a 20 20 20 20 20 20 20 20 20  ntire..
1b560 20 23 20 20 20 20 20 20 20 74 65 73 74 69 6e 67   #       testing
1b570 20 70 72 6f 63 65 73 73 20 69 66 20 69 74 20 64   process if it d
1b580 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 2e 0d 0a  oes not exist...
1b590 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1b5a0 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66         if {![inf
1b5b0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 76 65  o exists ::no(ve
1b5c0 72 69 66 79 42 75 69 6c 64 44 69 72 65 63 74 6f  rifyBuildDirecto
1b5d0 72 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ry)]} then {..
1b5e0 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
1b5f0 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a           # NOTE:
1b600 20 41 74 20 74 68 69 73 20 70 6f 69 6e 74 2c 20   At this point,
1b610 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
1b620 6f 72 79 20 4d 55 53 54 20 65 78 69 73 74 20 61  ory MUST exist a
1b630 73 20 61 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s a..
1b640 20 23 20 20 20 20 20 20 20 76 61 6c 69 64 20 64   #       valid d
1b650 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65  irectory for the
1b660 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
1b670 20 74 6f 20 63 6f 6e 74 69 6e 75 65 2e 0d 0a 20   to continue...
1b680 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1b690 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 69            set di
1b6a0 72 65 63 74 6f 72 79 20 5b 67 65 74 42 75 69 6c  rectory [getBuil
1b6b0 64 44 69 72 65 63 74 6f 72 79 5d 0d 0a 0d 0a 20  dDirectory]....
1b6c0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21             if {!
1b6d0 5b 66 69 6c 65 20 65 78 69 73 74 73 20 24 64 69  [file exists $di 1b6e0 72 65 63 74 6f 72 79 5d 20 7c 7c 20 5c 0d 0a 20 rectory] || \.. 1b6f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 21 ! 1b700 5b 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 [file isdirector 1b710 79 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 y$directory]} t
1b720 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1b730 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1b740 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4a 75        # NOTE: Ju
1b750 73 74 20 70 72 69 6f 72 20 74 6f 20 61 63 74 75  st prior to actu
1b760 61 6c 6c 79 20 68 61 6c 74 69 6e 67 20 74 68 65  ally halting the
1b770 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73   testing process
1b780 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..
1b790 20 23 20 20 20 20 20 20 20 61 64 64 20 61 6e 20   #       add an
1b7a0 65 72 72 6f 72 20 74 6f 20 74 68 65 20 74 65 73  error to the tes
1b7b0 74 20 6c 6f 67 20 66 69 6c 65 2e 0d 0a 20 20 20  t log file...
1b7c0 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1b7d0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1b7e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1b7f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1b800 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1b810 20 20 20 22 2d 2d 2d 2d 20 63 6f 75 6c 64 20 6e "---- could n 1b820 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c 64 20 ot verify build 1b830 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20 24 64 directory \""$d
1b840 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20 20 20  irectory \..
1b850 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5c                "\
1b860 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 20 68  ", all testing h
1b870 61 6c 74 65 64 5c 6e 22 5d 0d 0a 0d 0a 20 20 20  alted\n"]....
1b880 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20             #..
1b890 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1b8a0 54 45 3a 20 52 61 69 73 69 6e 67 20 61 20 73 63  TE: Raising a sc
1b8b0 72 69 70 74 20 65 72 72 6f 72 20 66 72 6f 6d 20  ript error from
1b8c0 74 68 69 73 20 70 6f 69 6e 74 20 73 68 6f 75 6c  this point shoul
1b8d0 64 20 68 61 6c 74 0d 0a 20 20 20 20 20 20 20 20  d halt..
1b8e0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68        #       th
1b8f0 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 73  e testing proces
1b900 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...
1b910 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
1b920 20 20 20 65 72 72 6f 72 20 5b 61 70 70 65 6e 64     error [append
1b930 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
1b940 20 20 20 20 20 20 20 20 20 20 22 63 6f 75 6c 64            "could
1b950 20 6e 6f 74 20 76 65 72 69 66 79 20 62 75 69 6c   not verify buil
1b960 64 20 64 69 72 65 63 74 6f 72 79 20 5c 22 22 20  d directory \""
1b970 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 1b980 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1b990 22 5c 22 2c 20 61 6c 6c 20 74 65 73 74 69 6e 67 "\", all testing 1b9a0 20 68 61 6c 74 65 64 22 5d 0d 0a 20 20 20 20 20 halted"].. 1b9b0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1b9c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 1b9d0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 1b9e0 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 # NOTE: Skip try 1b9f0 69 6e 67 20 74 6f 20 63 6f 70 79 20 61 6e 79 20 ing to copy any 1ba00 66 69 6c 65 73 20 69 66 20 69 6e 73 74 72 75 63 files if instruc 1ba10 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 ted... 1ba20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 #.. if 1ba30 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {![info exists : 1ba40 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 46 69 :no(copySqliteFi 1ba50 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 les)]} then {.. 1ba60 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1ba70 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1ba80 6f 28 63 6f 70 79 53 71 6c 69 74 65 43 6f 6e 66 o(copySqliteConf 1ba90 69 67 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20 igFiles)]} then 1baa0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1bab0 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d foreach fileNam 1bac0 65 20 24 63 6f 6e 66 69 67 46 69 6c 65 4e 61 6d e$configFileNam
1bad0 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  es {..
1bae0 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 69        tryCopyBui
1baf0 6c 64 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65  ldFile $fileName 1bb00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bb10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d }.. } 1bb20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 1bb30 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 if {![info exist 1bb40 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 s ::no(copySqlit 1bb50 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29 5d eExternalFiles)] 1bb60 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1bb70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1bb80 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1bb90 20 43 6f 70 79 20 74 68 65 20 4d 61 6e 61 67 65 Copy the Manage 1bba0 64 20 44 65 62 75 67 67 69 6e 67 20 41 73 73 69 d Debugging Assi 1bbb0 73 74 61 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e stants (MDA) con 1bbc0 66 69 67 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 figuration.. 1bbd0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 # 1bbe0 20 20 66 69 6c 65 20 66 6f 72 20 74 68 65 20 45 file for the E 1bbf0 61 67 6c 65 20 73 68 65 6c 6c 20 74 6f 20 74 68 agle shell to th 1bc00 65 20 62 75 69 6c 64 20 6f 75 74 70 75 74 20 64 e build output d 1bc10 69 72 65 63 74 6f 72 79 2c 0d 0a 20 20 20 20 20 irectory,.. 1bc20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1bc30 20 77 68 69 6c 65 20 75 73 69 6e 67 20 65 61 63 while using eac 1bc40 68 20 6f 66 20 74 68 65 20 6e 61 6d 65 73 20 6f h of the names o 1bc50 66 20 74 68 65 20 76 61 72 69 6f 75 73 20 6c 65 f the various le 1bc60 67 61 63 79 20 74 65 73 74 0d 0a 20 20 20 20 20 gacy test.. 1bc70 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 1bc80 20 65 78 65 63 75 74 61 62 6c 65 73 2e 20 20 54 executables. T 1bc90 68 69 73 20 77 69 6c 6c 20 68 65 6c 70 20 74 6f his will help to 1bca0 20 6d 61 6b 65 20 73 75 72 65 20 74 68 61 74 20 make sure that 1bcb0 61 6c 6c 20 74 68 65 0d 0a 20 20 20 20 20 20 20 all the.. 1bcc0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6c # l 1bcd0 65 67 61 63 79 20 74 65 73 74 73 20 72 75 6e 20 egacy tests run 1bce0 77 69 74 68 20 65 78 61 63 74 6c 79 20 74 68 65 with exactly the 1bcf0 20 73 61 6d 65 20 73 65 74 20 6f 66 20 4d 61 6e same set of Man 1bd00 61 67 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20 aged.. 1bd10 20 20 20 20 23 20 20 20 20 20 20 20 44 65 62 75 # Debu 1bd20 67 67 69 6e 67 20 41 73 73 69 73 74 61 6e 74 73 gging Assistants 1bd30 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d 0a 20 20 configured... 1bd40 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 1bd50 20 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 for 1bd60 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 6d each fileName$m
1bd70 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65  daConfigFileName
1bd80 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s {..
1bd90 20 20 20 20 20 74 72 79 43 6f 70 79 42 69 6e 61       tryCopyBina
1bda0 72 79 46 69 6c 65 20 45 61 67 6c 65 53 68 65 6c  ryFile EagleShel
1bdb0 6c 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67  l.exe.mda.config
1bdc0 20 22 22 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20   "" $fileName.. 1bdd0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. 1bde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bdf0 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 #.. 1be00 20 23 20 4e 4f 54 45 3a 20 43 6f 70 79 20 74 68 # NOTE: Copy th 1be10 65 20 65 78 74 65 72 6e 61 6c 20 62 69 6e 61 72 e external binar 1be20 69 65 73 2c 20 69 66 20 61 6e 79 2c 20 74 6f 20 ies, if any, to 1be30 74 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 68 the directory th 1be40 61 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 at.. 1be50 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 # contai 1be60 6e 73 20 74 68 65 20 45 61 67 6c 65 20 73 68 65 ns the Eagle she 1be70 6c 6c 2e 20 20 54 68 69 73 20 69 73 20 74 79 70 ll. This is typ 1be80 69 63 61 6c 6c 79 20 75 73 65 64 20 74 6f 20 6d ically used to m 1be90 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ake.. 1bea0 20 20 20 23 20 20 20 20 20 20 20 73 75 72 65 20 # sure 1beb0 61 73 73 65 6d 62 6c 69 65 73 20 72 65 66 65 72 assemblies refer 1bec0 65 6e 63 65 64 20 62 79 20 74 68 65 20 6f 6e 65 enced by the one 1bed0 73 20 62 65 69 6e 67 20 74 65 73 74 65 64 20 61 s being tested a 1bee0 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 re.. 1bef0 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 # availa 1bf00 62 6c 65 20 64 75 72 69 6e 67 20 74 68 65 20 74 ble during the t 1bf10 65 73 74 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d esting process.. 1bf20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1bf30 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1bf40 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 foreach fileName 1bf50 20 24 65 78 74 65 72 6e 61 6c 46 69 6c 65 4e 61$externalFileNa
1bf60 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  mes {..
1bf70 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 45 78         tryCopyEx
1bf80 74 65 72 6e 61 6c 46 69 6c 65 20 24 66 69 6c 65  ternalFile $file 1bf90 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 20 20 Name.. 1bfa0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1bfb0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1bfc0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1bfd0 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 xists ::no(copyS 1bfe0 71 6c 69 74 65 4e 61 74 69 76 65 46 69 6c 65 73 qliteNativeFiles 1bff0 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 1c000 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 1c010 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 # NOT 1c020 45 3a 20 49 66 20 74 68 65 20 74 65 73 74 20 70 E: If the test p 1c030 6c 61 74 66 6f 72 6d 20 69 73 20 6c 69 6b 65 6c latform is likel 1c040 79 20 74 68 65 20 64 65 66 61 75 6c 74 20 66 6f y the default fo 1c050 72 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 r this.. 1c060 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6d 61 # ma 1c070 63 68 69 6e 65 2c 20 61 6c 73 6f 20 74 72 79 20 chine, also try 1c080 74 6f 20 63 6f 70 79 20 74 68 65 20 6e 61 74 69 to copy the nati 1c090 76 65 20 66 69 6c 65 73 20 74 6f 20 74 68 65 0d ve files to the. 1c0a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 1c0b0 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 6c 6f binary lo 1c0c0 63 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20 20 cation... 1c0d0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1c0e0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e if {![in 1c0f0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 fo exists ::no(c 1c100 6f 70 79 53 71 6c 69 74 65 49 6d 70 6c 69 63 69 opySqliteImplici 1c110 74 46 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 tFiles)] && \.. 1c120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1c130 20 5b 69 73 44 65 66 61 75 6c 74 42 75 69 6c 64 [isDefaultBuild 1c140 50 6c 61 74 66 6f 72 6d 20 74 72 75 65 5d 7d 20 Platform true]} 1c150 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c160 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 foreach 1c170 66 69 6c 65 4e 61 6d 65 20 24 6e 61 74 69 76 65 fileName$native
1c180 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20  FileNames {..
1c190 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
1c1a0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 24  ryCopyAssembly $1c1b0 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 fileName.. 1c1c0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1c1d0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.... 1c1e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 if 1c1f0 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 1c200 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69 74 65 4e ::no(copySqliteN 1c210 6f 6e 49 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 onImplicitFiles) 1c220 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 1c230 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1c240 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1c250 6f 28 63 6f 70 79 53 71 6c 69 74 65 50 6c 61 74 o(copySqlitePlat 1c260 66 6f 72 6d 46 69 6c 65 73 29 5d 20 26 26 20 5c formFiles)] && \ 1c270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c280 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1c290 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 ngth$platform]
1c2a0 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
1c2b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
1c2c0 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 6d 65 20  oreach fileName
1c2d0 24 6e 61 74 69 76 65 46 69 6c 65 4e 61 6d 65 73  $nativeFileNames 1c2e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c2f0 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 tryCopyA 1c300 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d ssembly$fileNam
1c310 65 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20 20  e $platform.. 1c320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d } 1c330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c340 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 1c350 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 1c360 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63 6f o exists ::no(co 1c370 70 79 53 71 6c 69 74 65 41 72 63 68 69 74 65 63 pySqliteArchitec 1c380 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 20 5c tureFiles)] && \ 1c390 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1c3a0 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1c3b0 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
1c3c0 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
1c3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c3e0 20 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e     foreach fileN
1c3f0 61 6d 65 20 24 6e 61 74 69 76 65 46 69 6c 65 4e  ame $nativeFileN 1c400 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 ames {.. 1c410 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 tryC 1c420 6f 70 79 41 73 73 65 6d 62 6c 79 20 24 66 69 6c opyAssembly$fil
1c430 65 4e 61 6d 65 20 24 61 72 63 68 69 74 65 63 74  eName $architect 1c440 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ure.. 1c450 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 1c460 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 }.. 1c470 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. 1c480 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1c490 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1c4a0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1c4b0 6f 28 63 6f 70 79 53 71 6c 69 74 65 4d 61 6e 61 o(copySqliteMana 1c4c0 67 65 64 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e gedFiles)]} then 1c4d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c4e0 20 20 66 6f 72 65 61 63 68 20 66 69 6c 65 4e 61 foreach fileNa 1c4f0 6d 65 20 24 6d 61 6e 61 67 65 64 46 69 6c 65 4e me$managedFileN
1c500 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20  ames {..
1c510 20 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 41          tryCopyA
1c520 73 73 65 6d 62 6c 79 20 24 66 69 6c 65 4e 61 6d  ssembly $fileNam 1c530 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 e.. 1c540 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 }.. 1c550 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1c560 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 .. #.. 1c570 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a # NOTE: 1c580 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 Skip trying to 1c590 6c 6f 61 64 20 61 6e 79 20 66 69 6c 65 73 20 69 load any files i 1c5a0 66 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a 20 f instructed... 1c5b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 1c5c0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1c5d0 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 1c5e0 64 53 71 6c 69 74 65 46 69 6c 65 73 29 5d 7d 20 dSqliteFiles)]} 1c5f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c600 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1c610 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 xists ::no(loadS 1c620 71 6c 69 74 65 49 6d 70 6c 69 63 69 74 46 69 6c qliteImplicitFil 1c630 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 es)]} then {.. 1c640 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c tryL 1c650 6f 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 oadAssembly Syst 1c660 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 em.Data.SQLite.d 1c670 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 ll.. 1c680 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 }.... 1c690 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 1c6a0 74 73 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 ts ::no(loadSqli 1c6b0 74 65 4c 69 6e 71 46 69 6c 65 73 29 5d 7d 20 74 teLinqFiles)]} t 1c6c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 1c6d0 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 tryLoadAsse 1c6e0 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 mbly System.Data 1c6f0 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c .SQLite.Linq.dll 1c700 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 1c710 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 ... i 1c720 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 f {![info exists 1c730 20 3a 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 ::no(loadSqlite 1c740 45 66 36 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e Ef6Files)]} then 1c750 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1c760 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c tryLoadAssembl 1c770 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 y System.Data.SQ 1c780 4c 69 74 65 2e 45 46 36 2e 64 6c 6c 0d 0a 20 20 Lite.EF6.dll.. 1c790 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }.... 1c7a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 if {! 1c7b0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e [info exists ::n 1c7c0 6f 28 6c 6f 61 64 53 71 6c 69 74 65 4e 6f 6e 49 o(loadSqliteNonI 1c7d0 6d 70 6c 69 63 69 74 46 69 6c 65 73 29 5d 7d 20 mplicitFiles)]} 1c7e0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 1c7f0 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f if {![info 1c800 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 6c 6f 61 exists ::no(loa 1c810 64 53 71 6c 69 74 65 50 6c 61 74 66 6f 72 6d 46 dSqlitePlatformF 1c820 69 6c 65 73 29 5d 20 26 26 20 5c 0d 0a 20 20 20 iles)] && \.. 1c830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b [ 1c840 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 string length$p
1c850 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68  latform] > 0} th
1c860 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
1c870 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73        tryLoadAss
1c880 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
1c890 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c  a.SQLite.dll $pl 1c8a0 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 atform.. 1c8b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1c8c0 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 if {![i 1c8d0 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 nfo exists ::no( 1c8e0 6c 6f 61 64 53 71 6c 69 74 65 41 72 63 68 69 74 loadSqliteArchit 1c8f0 65 63 74 75 72 65 46 69 6c 65 73 29 5d 20 26 26 ectureFiles)] && 1c900 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1c910 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 [string le 1c920 6e 67 74 68 20 24 61 72 63 68 69 74 65 63 74 75 ngth$architectu
1c930 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d  re] > 0} then {.
1c940 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1c950 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79   tryLoadAssembly
1c960 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
1c970 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 69 74 65  ite.dll $archite 1c980 63 74 75 72 65 0d 0a 20 20 20 20 20 20 20 20 20 cture.. 1c990 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1c9a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 1c9b0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1c9c0 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 1c9d0 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1c9e0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1c9f0 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1ca00 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
1ca10 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
1ca20 6e 20 6f 66 20 5c 22 73 71 6c 69 74 65 33 2e 64  n of \"sqlite3.d
1ca30 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20  ll\"... " \..
1ca40 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65             [file
1ca50 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e   version [getBin
1ca60 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69  aryFileName sqli
1ca70 74 65 33 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20  te3.dll]] \n]..
1ca80 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1ca90 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
1caa0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1cab0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 test_channel [ap 1cac0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 1cad0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 1cae0 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 file version of 1caf0 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 \"SQLite.Interop 1cb00 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 .dll\"... " \.. 1cb10 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 [fi 1cb20 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 le version [getB 1cb30 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51 inaryFileName SQ 1cb40 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c Lite.Interop.dll 1cb50 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 ]] \n].. 1cb60 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 1cb70 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1cb80 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1cb90 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1cba0 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1cbb0 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65     "---- file ve
1cbc0 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65  rsion of \"Syste
1cbd0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1cbe0 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  l\"... " \..
1cbf0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
1cc00 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
1cc10 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65  ryFileName Syste
1cc20 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
1cc30 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20  l]] \n]..
1cc40 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61   }....        ca
1cc50 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  tch {..
1cc60 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1cc70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1cc80 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 1cc90 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 "---- file v 1cca0 65 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 ersion of \"Syst 1ccb0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 1ccc0 69 6e 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c inq.dll\"... " \ 1ccd0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1cce0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 [file version [g 1ccf0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 1cd00 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 1cd10 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c ite.Linq.dll]] \ 1cd20 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d n].. }... 1cd30 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 1cd40 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1cd50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1cd60 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1cd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
1cd80 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
1cd90 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61  n of \"System.Da
1cda0 74 61 2e 53 51 4c 69 74 65 2e 45 46 36 2e 64 6c  ta.SQLite.EF6.dl
1cdb0 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a 20 20 20 20  l\"... " \..
1cdc0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
1cdd0 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69 6e 61  version [getBina
1cde0 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65  ryFileName Syste
1cdf0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45 46  m.Data.SQLite.EF
1ce00 36 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20  6.dll]] \n]..
1ce10 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1ce20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65    if {[string le
1ce30 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20  ngth $platform] 1ce40 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 1ce50 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a catch {.. 1ce60 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1ce70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1ce80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1ce90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1cea0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73   "---- file vers
1ceb0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74  ion of \"" $plat 1cec0 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 form \.. 1ced0 20 20 20 20 20 20 20 20 22 2f 73 71 6c 69 74 65 "/sqlite 1cee0 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 3.dll\"... " [fi 1cef0 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 le version \.. 1cf00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 [g 1cf10 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 1cf20 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 70 6c sqlite3.dll$pl
1cf30 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20  atform]] \n]..
1cf40 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
1cf50 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
1cf60 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
1cf70 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 1cf80 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 1cf90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1cfa0 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 "---- file vers 1cfb0 69 6f 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 ion of \""$plat
1cfc0 66 6f 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20  form \..
1cfd0 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69 74 65          "/SQLite
1cfe0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e  .Interop.dll\"..
1cff0 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f  . " [file versio
1d000 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n \..
1d010 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46       [getBinaryF
1d020 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49  ileName SQLite.I
1d030 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 74  nterop.dll $plat 1d040 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 form]] \n].. 1d050 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1d060 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 catch {.. 1d070 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 1d080 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1d090 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
1d0a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
1d0b0 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f  ---- file versio
1d0c0 6e 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f  n of \"" $platfo 1d0d0 72 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 rm \.. 1d0e0 20 20 20 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 "/System.D 1d0f0 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 ata.SQLite.dll\" 1d100 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73 ... " [file vers 1d110 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 ion \.. 1d120 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72 [getBinar 1d130 79 46 69 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d yFileName System 1d140 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c .Data.SQLite.dll 1d150 20 24 70 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d$platform]] \n]
1d160 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
1d170 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
1d180 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20      if {[string
1d190 6c 65 6e 67 74 68 20 24 61 72 63 68 69 74 65 63  length $architec 1d1a0 74 75 72 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 ture] > 0} then 1d1b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 {.. cat 1d1c0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1d1d0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f tputs$::test_
1d1e0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41  channel [appendA
1d1f0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
1d200 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c         "---- fil
1d210 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22  e version of \""
1d220 20 24 61 72 63 68 69 74 65 63 74 75 72 65 20 5c   $architecture \ 1d230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 1d240 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 6c 6c 5c "/sqlite3.dll\ 1d250 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 "... " [file ver 1d260 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 sion \.. 1d270 20 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 [getBina 1d280 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 6c 69 74 ryFileName sqlit 1d290 65 33 2e 64 6c 6c 20 24 61 72 63 68 69 74 65 63 e3.dll$architec
1d2a0 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20  ture]] \n]..
1d2b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
1d2c0 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20       catch {..
1d2d0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d2e0 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1d2f0 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 1d300 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1d310 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f ---- file versio 1d320 6e 20 6f 66 20 5c 22 22 20 24 61 72 63 68 69 74 n of \""$archit
1d330 65 63 74 75 72 65 20 5c 0d 0a 20 20 20 20 20 20  ecture \..
1d340 20 20 20 20 20 20 20 20 20 20 22 2f 53 51 4c 69            "/SQLi
1d350 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22  te.Interop.dll\"
1d360 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 76 65 72 73  ... " [file vers
1d370 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ion \..
1d380 20 20 20 20 20 20 20 5b 67 65 74 42 69 6e 61 72         [getBinar
1d390 79 46 69 6c 65 4e 61 6d 65 20 53 51 4c 69 74 65  yFileName SQLite
1d3a0 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 61 72  .Interop.dll $ar 1d3b0 63 68 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d chitecture]] \n] 1d3c0 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d .. }... 1d3d0 0a 20 20 20 20 20 20 20 20 20 20 63 61 74 63 68 . catch 1d3e0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d3f0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1d400 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
1d410 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s \..
1d420 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20       "---- file
1d430 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 22 20 24  version of \"" $1d440 61 72 63 68 69 74 65 63 74 75 72 65 20 5c 0d 0a architecture \.. 1d450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d460 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 "/System.Data.SQ 1d470 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 Lite.dll\"... " 1d480 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c 0d [file version \. 1d490 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 1d4a0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e [getBinaryFileN 1d4b0 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e ame System.Data. 1d4c0 53 51 4c 69 74 65 2e 64 6c 6c 20 24 61 72 63 68 SQLite.dll$arch
1d4d0 69 74 65 63 74 75 72 65 5d 5d 20 5c 6e 5d 0d 0a  itecture]] \n]..
1d4e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1d4f0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
1d500 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1d510 4f 54 45 3a 20 47 72 61 62 20 74 68 65 20 6c 69  OTE: Grab the li
1d520 73 74 20 6f 66 20 6d 61 6e 61 67 65 64 20 61 73  st of managed as
1d530 73 65 6d 62 6c 69 65 73 20 66 6f 72 20 74 68 65  semblies for the
1d540 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
1d550 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1d560 20 20 61 6e 64 20 72 65 70 6f 72 74 20 6f 6e 20    and report on
1d570 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  the System.Data.
1d580 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f  SQLite related o
1d590 6e 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  nes...        #.
1d5a0 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
1d5b0 76 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f  veSQLiteObjectCo
1d5c0 6d 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a  mmand]} then {..
1d5d0 20 20 20 20 20 20 20 20 20 20 73 65 74 20 61 73            set as
1d5e0 73 65 6d 62 6c 69 65 73 20 5b 6f 62 6a 65 63 74  semblies [object
1d5f0 20 69 6e 76 6f 6b 65 20 41 70 70 44 6f 6d 61 69   invoke AppDomai
1d600 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e 20  n.CurrentDomain
1d610 47 65 74 41 73 73 65 6d 62 6c 69 65 73 5d 0d 0a  GetAssemblies]..
1d620 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
1d630 63 74 20 66 6f 72 65 61 63 68 20 61 73 73 65 6d  ct foreach assem
1d640 62 6c 79 20 24 61 73 73 65 6d 62 6c 69 65 73 20  bly $assemblies 1d650 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 {.. i 1d660 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 f {[string match 1d670 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 \{System.Data.S 1d680 51 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 QLite*$assembly
1d690 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
1d6a0 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $1d6b0 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 1d6c0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 1d6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 1d6e0 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 "---- found load 1d6f0 65 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24 ed assembly: "$
1d700 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20  assembly \n]..
1d710 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
1d720 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1d730 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
1d740 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
1d750 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 1d760 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 channel \.. 1d770 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 "---- d 1d780 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 73 20 efine constants 1d790 66 6f 72 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 for \"System.Dat 1d7a0 61 2e 53 51 4c 69 74 65 5c 22 2e 2e 2e 20 22 0d a.SQLite\"... ". 1d7b0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 1d7c0 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 1d7d0 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e object in 1d7e0 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 1d7f0 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 1d800 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d System 1d810 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c .Data.SQLite.SQL 1d820 69 74 65 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 ite3 DefineConst 1d830 61 6e 74 73 0d 0a 20 20 20 20 20 20 20 20 20 20 ants.. 1d840 7d 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 } defineConstant 1d850 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d s] == 0} then {. 1d860 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 1d870 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
1d880 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5b  el [appendArgs [
1d890 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c 73 6f 72  formatList [lsor
1d8a0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
1d8b0 20 20 20 20 20 24 64 65 66 69 6e 65 43 6f 6e 73       $defineCons 1d8c0 74 61 6e 74 73 5d 20 3c 6e 6f 6e 65 3e 5d 20 5c tants] <none>] \ 1d8d0 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 n].. } 1d8e0 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. 1d8f0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1d900 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77  t_channel unknow
1d910 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d  n\n..          }
1d920 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
1d930 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d 0a         catch {..
1d940 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
1d950 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 1d960 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1d970 20 22 2d 2d 2d 2d 20 73 6f 75 72 63 65 20 76 65 "---- source ve 1d980 72 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 rsion of \"Syste 1d990 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c m.Data.SQLite.dl 1d9a0 6c 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 l\"... ".... 1d9b0 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 1d9c0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 {.. 1d9d0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 1d9e0 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 1d9f0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1da00 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 1da10 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e 6e QLite.SQLiteConn 1da20 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72 56 ection ProviderV 1da30 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 ersion.. 1da40 20 20 7d 20 76 65 72 73 69 6f 6e 5d 20 3d 3d 20 } version] == 1da50 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 1da60 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 1da70 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
1da80 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
1da90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
1daa0 73 65 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c  set version null
1dab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
1dac0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1dad0 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1dae0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
1daf0 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a 20 20 20  version \n]..
1db00 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
1db10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75  .            tpu
1db20 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 1db30 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 el unknown\n.. 1db40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1db50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 1db60 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 catch {.. 1db70 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1db80 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20  _channel \..
1db90 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
1dba0 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20  source checkout
1dbb0 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61  of \"System.Data
1dbc0 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e  .SQLite.dll\"...
1dbd0 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   "....
1dbe0 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20  if {[catch {..
1dbf0 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
1dc00 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b   invoke -flags +
1dc10 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20  NonPublic \..
1dc20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73               Sys
1dc30 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1dc40 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1dc50 20 50 72 6f 76 69 64 65 72 53 6f 75 72 63 65 49   ProviderSourceI
1dc60 64 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 20 73  d..          } s
1dc70 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
1dc80 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
1dc90 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
1dca0 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d  ength $sourceId] 1dcb0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 1dcc0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 1dcd0 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a sourceId null.. 1dce0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 1dcf0 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 1dd00 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1dd10 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 6f   [appendArgs $so 1dd20 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 urceId \n].. 1dd30 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 1dd40 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1dd50 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1dd60 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
1dd70 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
1dd80 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
1dd90 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1dda0 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69  : Check the avai
1ddb0 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e  lable builds (an
1ddc0 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66  d "releases") of
1ddd0 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20   SQLite and..
1dde0 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73       #       Sys
1ddf0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
1de00 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
1de10 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
1de20 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 1de30 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 1de40 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 1de50 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
1de60 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
1de70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1de80 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20  # NOTE: Now, we
1de90 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20  need to know if
1dea0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
1deb0 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c  library is avail
1dec0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
1ded0 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61        (i.e. beca
1dee0 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d  use the managed-
1def0 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  only System.Data
1df00 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79  .SQLite assembly
1df10 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20   can..        #
1df20 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f        load witho
1df30 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20  ut it; however,
1df40 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79  it cannot do any
1df50 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74  thing useful wit
1df60 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20  hout..        #
1df70 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77        it).  If w
1df80 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20  e are using the
1df90 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
1dfa0 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61  bly and we alrea
1dfb0 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  dy..        #
1dfc0 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62      found it (ab
1dfd0 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c  ove), this shoul
1dfe0 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64  d always succeed
1dff0 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1e000 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
1e010 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74  LiteLibrary $::t 1e020 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 1e030 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1e040 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 1e050 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e if the SQLite in 1e060 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 terop assembly i 1e070 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 s available... 1e080 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1e090 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 checkForSQLiteI 1e0a0 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 nterop$::test_c
1e0b0 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
1e0c0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
1e0d0 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53  OTE: Check the S
1e0e0 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61  QLite database a
1e0f0 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
1e100 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20  ectories...
1e110 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
1e120 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
1e130 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f  ctories $::test_ 1e140 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 1e150 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1e160 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 1e170 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61 determine if va 1e180 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 rious compile-ti 1e190 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 me options neede 1e1a0 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 d for.. # 1e1b0 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73 test cons 1e1c0 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61 traints were ena 1e1d0 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 1e1e0 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 aged assembly. 1e1f0 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 There.. # 1e200 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20 are some 1e210 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 1e220 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61 ions that must a 1e230 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e lso have been en 1e240 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23 abled.. # 1e250 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69 for the i 1e260 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 1e270 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65 in order to be e 1e280 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74 ffective. For t 1e290 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 hose.. # 1e2a0 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 options, i 1e2b0 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 t will be assume 1e2c0 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e d that it was en 1e2d0 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e abled for the in 1e2e0 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 terop.. # 1e2f0 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly 1e300 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 if it was enable 1e310 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 d for the manage 1e320 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 d assembly... 1e330 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e340 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f foreach defineCo 1e350 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a nstant [list \.. 1e360 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 CHEC 1e370 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 K_STATE COUNT_HA 1e380 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52 NDLE DEBUG INTER 1e390 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 OP_CODEC INTEROP 1e3a0 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 _DEBUG \.. 1e3b0 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 INTEROP_EX 1e3c0 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e TENSION_FUNCTION 1e3d0 53 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 S INTEROP_INCLUD 1e3e0 45 5f 43 45 52 4f 44 20 5c 0d 0a 20 20 20 20 20 E_CEROD \.. 1e3f0 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 49 INTEROP_I 1e400 4e 43 4c 55 44 45 5f 45 58 54 52 41 20 49 4e 54 NCLUDE_EXTRA INT 1e410 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 EROP_INCLUDE_SEE 1e420 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 INTEROP_INCLUDE 1e430 5f 5a 49 50 56 46 53 20 5c 0d 0a 20 20 20 20 20 _ZIPVFS \.. 1e440 20 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 4c INTEROP_L 1e450 45 47 41 43 59 5f 43 4c 4f 53 45 20 49 4e 54 45 EGACY_CLOSE INTE 1e460 52 4f 50 5f 4c 4f 47 20 49 4e 54 45 52 4f 50 5f ROP_LOG INTEROP_ 1e470 54 45 53 54 5f 45 58 54 45 4e 53 49 4f 4e 20 5c TEST_EXTENSION \ 1e480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49 4e .. IN 1e490 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 TEROP_VIRTUAL_TA 1e4a0 42 4c 45 20 4e 45 54 5f 32 30 20 4e 45 54 5f 33 BLE NET_20 NET_3 1e4b0 35 20 4e 45 54 5f 34 30 20 4e 45 54 5f 34 35 20 5 NET_40 NET_45 1e4c0 4e 45 54 5f 34 35 31 20 5c 0d 0a 20 20 20 20 20 NET_451 \.. 1e4d0 20 20 20 20 20 20 20 4e 45 54 5f 43 4f 4d 50 41 NET_COMPA 1e4e0 43 54 5f 32 30 20 50 4c 41 54 46 4f 52 4d 5f 43 CT_20 PLATFORM_C 1e4f0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 20 OMPACTFRAMEWORK 1e500 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56 45 5f 4c PRELOAD_NATIVE_L 1e510 49 42 52 41 52 59 20 5c 0d 0a 20 20 20 20 20 20 IBRARY \.. 1e520 20 20 20 20 20 20 52 45 54 41 52 47 45 54 41 42 RETARGETAB 1e530 4c 45 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 LE SQLITE_STANDA 1e540 52 44 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 RD THROW_ON_DISP 1e550 4f 53 45 44 20 54 52 41 43 45 20 5c 0d 0a 20 20 OSED TRACE \.. 1e560 20 20 20 20 20 20 20 20 20 20 54 52 41 43 45 5f TRACE_ 1e570 43 4f 4e 4e 45 43 54 49 4f 4e 20 54 52 41 43 45 CONNECTION TRACE 1e580 5f 44 45 54 45 43 54 49 4f 4e 20 54 52 41 43 45 _DETECTION TRACE 1e590 5f 48 41 4e 44 4c 45 20 54 52 41 43 45 5f 50 52 _HANDLE TRACE_PR 1e5a0 45 4c 4f 41 44 20 5c 0d 0a 20 20 20 20 20 20 20 ELOAD \.. 1e5b0 20 20 20 20 20 54 52 41 43 45 5f 53 48 41 52 45 TRACE_SHARE 1e5c0 44 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45 4e D TRACE_STATEMEN 1e5d0 54 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 20 T TRACE_WARNING 1e5e0 54 52 41 43 4b 5f 4d 45 4d 4f 52 59 5f 42 59 54 TRACK_MEMORY_BYT 1e5f0 45 53 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ES \.. 1e600 20 20 55 53 45 5f 45 4e 54 49 54 59 5f 46 52 41 USE_ENTITY_FRA 1e610 4d 45 57 4f 52 4b 5f 36 20 55 53 45 5f 49 4e 54 MEWORK_6 USE_INT 1e620 45 52 4f 50 5f 44 4c 4c 20 55 53 45 5f 50 52 45 EROP_DLL USE_PRE 1e630 50 41 52 45 5f 56 32 20 57 49 4e 44 4f 57 53 5d PARE_V2 WINDOWS] 1e640 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d {.. #. 1e650 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 . # NOT 1e660 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 E: Check if the 1e670 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 1e680 69 6f 6e 20 69 73 20 6c 69 73 74 65 64 20 69 6e ion is listed in 1e690 20 74 68 65 20 6c 69 73 74 20 6f 66 0d 0a 20 20 the list of.. 1e6a0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 1e6b0 22 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 "define constant 1e6c0 73 22 20 6b 65 70 74 20 74 72 61 63 6b 20 6f 66 s" kept track of 1e6d0 20 62 79 20 74 68 65 20 6d 61 6e 61 67 65 64 20 by the managed 1e6e0 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20 20 assembly... 1e6f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e700 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 checkForSQLite 1e710 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 20 24 DefineConstant$
1e720 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24  ::test_channel $1e730 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 0d 0a defineConstant.. 1e740 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 1e750 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1e760 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 # NOTE: Check if 1e770 20 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 the System.Data 1e780 2e 53 51 4c 69 74 65 20 70 72 6f 76 69 64 65 72 .SQLite provider 1e790 20 77 61 73 20 63 6f 6d 70 69 6c 65 64 20 77 69 was compiled wi 1e7a0 74 68 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 th.. # 1e7b0 20 20 20 20 73 75 70 70 6f 72 74 20 66 6f 72 20 support for 1e7c0 61 6e 79 20 65 6e 63 72 79 70 74 65 64 20 64 61 any encrypted da 1e7d0 74 61 62 61 73 65 73 2e 0d 0a 20 20 20 20 20 20 tabases... 1e7e0 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 #.. if 1e7f0 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 {[haveConstraint 1e800 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 1e810 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 defineConsta 1e820 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 nt.System.Data.S 1e830 51 4c 69 74 65 2e 49 4e 54 45 52 4f 50 5f 43 4f QLite.INTEROP_CO 1e840 44 45 43 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 DEC] || \.. 1e850 20 20 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 [haveCons 1e860 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 traint \.. 1e870 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 define 1e880 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d 2e Constant.System. 1e890 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 45 Data.SQLite.INTE 1e8a0 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 5d ROP_INCLUDE_SEE] 1e8b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 1e8c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 1e8d0 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 61 64 # NOTE: Yes, ad 1e8e0 64 20 67 65 6e 65 72 69 63 20 63 6f 6e 73 74 72 d generic constr 1e8f0 61 69 6e 74 20 66 6f 72 20 75 73 65 20 62 79 20 aint for use by 1e900 74 68 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d the test suite.. 1e910 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 . #.. 1e920 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 addConst 1e930 72 61 69 6e 74 20 53 79 73 74 65 6d 2e 44 61 74 raint System.Dat 1e940 61 2e 53 51 4c 69 74 65 2e 45 6e 63 72 79 70 74 a.SQLite.Encrypt 1e950 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ion.. }.. 1e960 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1e970 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che 1e980 63 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 ck the current b 1e990 75 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69 uild year. Basi 1e9a0 63 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 cally, this indi 1e9b0 63 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23 cates.. # 1e9c0 20 20 20 20 20 20 20 77 68 69 63 68 20 76 65 72 which ver 1e9d0 73 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 sion of MSBuild 1e9e0 61 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 and/or Visual St 1e9f0 75 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f udio was used to 1ea00 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 1ea10 20 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 compile the as 1ea20 73 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 sembly binaries 1ea30 75 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 under test... 1ea40 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1ea50 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1ea60 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
1ea70 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b       "---- check
1ea80 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44  ing for System.D
1ea90 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64  ata.SQLite build
1eaa0 20 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20   year... "....
1eab0 20 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b        set year [
1eac0 67 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20  getBuildYear]..
1ead0 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72         addConstr
1eae0 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73  aint [appendArgs
1eaf0 20 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61   buildYear. $yea 1eb00 72 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 r].. tput 1eb10 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1eb20 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22  l [appendArgs \"
1eb30 20 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a   $year \"\n].... 1eb40 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1eb50 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b # NOTE: Check 1eb60 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 the current bui 1eb70 6c 64 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 ld .NET Framewor 1eb80 6b 2e 20 20 42 61 73 69 63 61 6c 6c 79 2c 20 74 k. Basically, t 1eb90 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 his.. # 1eba0 20 20 20 20 20 69 6e 64 69 63 61 74 65 73 20 77 indicates w 1ebb0 68 69 63 68 20 76 65 72 73 69 6f 6e 20 6f 66 20 hich version of 1ebc0 74 68 65 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f the .NET Framewo 1ebd0 72 6b 20 69 73 20 62 65 69 6e 67 0d 0a 20 20 20 rk is being.. 1ebe0 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 # use 1ebf0 64 20 62 79 20 74 68 65 20 61 73 73 65 6d 62 6c d by the assembl 1ec00 79 20 62 69 6e 61 72 69 65 73 20 75 6e 64 65 72 y binaries under 1ec10 20 74 65 73 74 2e 0d 0a 20 20 20 20 20 20 20 20 test... 1ec20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 1ec30 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1ec40 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1ec50 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
1ec60 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
1ec70 51 4c 69 74 65 20 62 75 69 6c 64 20 2e 4e 45 54  QLite build .NET
1ec80 20 46 72 61 6d 65 77 6f 72 6b 2e 2e 2e 20 22 0d   Framework... ".
1ec90 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e  ...        set n
1eca0 65 74 46 78 20 5b 67 65 74 42 75 69 6c 64 4e 65  etFx [getBuildNe
1ecb0 74 46 78 5d 0d 0a 20 20 20 20 20 20 20 20 61 64  tFx]..        ad
1ecc0 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
1ecd0 65 6e 64 41 72 67 73 20 62 75 69 6c 64 46 72 61  endArgs buildFra
1ece0 6d 65 77 6f 72 6b 2e 20 24 6e 65 74 46 78 5d 0d  mework. $netFx]. 1ecf0 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
1ed00 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
1ed10 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20 24 6e  appendArgs \" $n 1ed20 65 74 46 78 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20 20 etFx \"\n].... 1ed30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 1ed40 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 74 # NOTE: Check t 1ed50 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c 64 he current build 1ed60 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 configuration. 1ed70 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f 72 This should nor 1ed80 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 23 mally.. # 1ed90 20 20 20 20 20 20 20 62 65 20 65 69 74 68 65 72 be either 1eda0 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c "Debug" or "Rel 1edb0 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 20 ease"... 1edc0 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 #.. tputs 1edd0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1ede0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
1edf0 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
1ee00 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53  or System.Data.S
1ee10 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e 66  QLite build conf
1ee20 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d 0a  iguration... "..
1ee30 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
1ee40 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65 74  nfiguration [get
1ee50 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
1ee60 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64 64  on]..        add
1ee70 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
1ee80 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e 66  ndArgs buildConf
1ee90 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e 66  iguration. $conf 1eea0 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 20 iguration].. 1eeb0 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 tputs$::tes
1eec0 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
1eed0 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69 67  dArgs \" $config 1eee0 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a 0d uration \"\n]... 1eef0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1ef00 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 20 # NOTE: Try 1ef10 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74 65 to setup an inte 1ef20 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 75 rrupt callback u 1ef30 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74 20 sing the script 1ef40 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 20 debugger.. 1ef50 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 77 # that w 1ef60 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 53 ill cancel all S 1ef70 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 72 QL queries in pr 1ef80 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 64 ogress for all d 1ef90 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 atabase.. 1efa0 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 # connect 1efb0 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 ions known to th 1efc0 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e 0d is interpreter.. 1efd0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 1efe0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 1eff0 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 74 xists ::no(sqlit 1f000 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 eInterruptCallba 1f010 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ck)]} then {.. 1f020 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62 49 setupDbI 1f030 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b nterruptCallback 1f040 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
1f050 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20 20   $::test_log.. 1f060 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 1f070 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 1f080 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 NOTE: Check for 1f090 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74 69 the native runti 1f0a0 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 68 me option, which 1f0b0 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 61 would mean we a 1f0c0 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 re.. # 1f0d0 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d 69 using the mi 1f0e0 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c xed-mode assembl 1f0f0 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 y... #.. 1f100 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 52 checkForR 1f110 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a 3a untimeOption$::
1f120 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61 74  test_channel nat
1f130 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  ive....        #
1f140 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1f150 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20 74  : Check if the t
1f160 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64  est suite should
1f170 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62 65   count the numbe
1f180 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e 73  r of connections
1f190 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1f1a0 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20 22    "opened" and "
1f1b0 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68 65  closed" from the
1f1c0 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65 72   pool when deter
1f1d0 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73 74  mining if a test
1f1e0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1f1f0 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61 62    passed.  Disab
1f200 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76 69  ling this behavi
1f210 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73 20  or is sometimes
1f220 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e 0d  necessary (e.g..
1f230 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
1f240 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c 65   during the rele
1f250 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63  ase testing proc
1f260 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68 65  ess) because the
1f270 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d 0a  re are several..
1f280 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
1f290 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79 20  tests that rely
1f2a0 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20 66  on the "opened f
1f2b0 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74 20  rom pool" count
1f2c0 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a 20  being greater..
1f2d0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
1f2e0 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73 65  han zero.  These
1f2f0 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c 20   tests may fail
1f300 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d 64  due to the non-d
1f310 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20 20  eterministic..
1f320 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
1f330 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43 4c  havior of the CL
1f340 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e 20  R GC, even when
1f350 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67 20  there is no bug
1f360 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20 20  in the code..
1f370 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65 69       #       bei
1f380 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20 20  ng tested...
1f390 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63      #..        c
1f3a0 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f 70  heckForRuntimeOp
1f3b0 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68 61  tion $::test_cha 1f3c0 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e 74 nnel noPoolCount 1f3d0 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a s.... #.. 1f3e0 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 1f3f0 43 68 65 63 6b 20 69 66 20 74 68 65 20 74 65 73 Check if the tes 1f400 74 20 73 75 69 74 65 20 73 68 6f 75 6c 64 20 75 t suite should u 1f410 73 65 20 73 68 61 72 65 64 2d 63 61 63 68 65 20 se shared-cache 1f420 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 mode... # 1f430 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 .. checkF 1f440 6f 72 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 orRuntimeOption 1f450 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
1f460 73 68 61 72 65 64 43 61 63 68 65 0d 0a 0d 0a 20  sharedCache....
1f470 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1f480 20 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74    # NOTE: Report
1f490 20 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73   the resource us
1f4a0 61 67 65 20 70 72 69 6f 72 20 74 6f 20 72 75 6e  age prior to run
1f4b0 6e 69 6e 67 20 61 6e 79 20 74 65 73 74 73 2e 0d  ning any tests..
1f4c0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
1f4d0 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74 65      reportSQLite
1f4e0 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65 73  Resources $::tes 1f4f0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 t_channel.... 1f500 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 1f510 23 20 4e 4f 54 45 3a 20 47 72 61 62 20 74 68 65 # NOTE: Grab the 1f520 20 6c 69 73 74 20 6f 66 20 6e 61 74 69 76 65 20 list of native 1f530 6d 6f 64 75 6c 65 73 20 66 6f 72 20 74 68 65 20 modules for the 1f540 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 20 current process 1f550 61 6e 64 0d 0a 20 20 20 20 20 20 20 20 23 20 20 and.. # 1f560 20 20 20 20 20 72 65 70 6f 72 74 20 6f 6e 20 74 report on t 1f570 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 he System.Data.S 1f580 51 4c 69 74 65 20 72 65 6c 61 74 65 64 20 6f 6e QLite related on 1f590 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a es... #.. 1f5a0 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 if {[hav 1f5b0 65 53 51 4c 69 74 65 4f 62 6a 65 63 74 43 6f 6d eSQLiteObjectCom 1f5c0 6d 61 6e 64 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 mand]} then {.. 1f5d0 20 20 20 20 20 20 20 20 20 73 65 74 20 6d 6f 64 set mod 1f5e0 75 6c 65 73 20 5b 6f 62 6a 65 63 74 20 69 6e 76 ules [object inv 1f5f0 6f 6b 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 oke \.. 1f600 20 20 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 System.Diag 1f610 6e 6f 73 74 69 63 73 2e 50 72 6f 63 65 73 73 2e nostics.Process. 1f620 47 65 74 43 75 72 72 65 6e 74 50 72 6f 63 65 73 GetCurrentProces 1f630 73 20 4d 6f 64 75 6c 65 73 5d 0d 0a 0d 0a 20 20 s Modules].... 1f640 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 object f 1f650 6f 72 65 61 63 68 20 2d 61 6c 69 61 73 20 6d 6f oreach -alias mo 1f660 64 75 6c 65 20 24 6d 6f 64 75 6c 65 73 20 7b 0d dule$modules {.
1f670 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
1f680 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
1f690 54 45 3a 20 54 68 65 20 6d 6f 64 75 6c 65 20 66  TE: The module f
1f6a0 69 6c 65 20 6e 61 6d 65 20 68 65 72 65 20 6d 75  ile name here mu
1f6b0 73 74 20 62 65 20 6e 6f 72 6d 61 6c 69 7a 65 64  st be normalized
1f6c0 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ...            #
1f6d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 65  ..            se
1f6e0 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c 65  t fileName [file
1f6f0 20 6e 6f 72 6d 61 6c 69 7a 65 20 5b 24 6d 6f 64   normalize [$mod 1f700 75 6c 65 20 46 69 6c 65 4e 61 6d 65 5d 5d 0d 0a ule FileName]].. 1f710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 1f720 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20 {[string match 1f730 2d 6e 6f 63 61 73 65 20 2a 2f 73 71 6c 69 74 65 -nocase */sqlite 1f740 33 2e 64 6c 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 3.dll$fileName]
1f750 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
1f760 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a          tputs $: 1f770 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 :test_channel [a 1f780 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 1f790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 1f7a0 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c 6f 61 64 65 ---- found loade 1f7b0 64 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 20 d SQLite native 1f7c0 6c 69 62 72 61 72 79 20 6d 6f 64 75 6c 65 3a 20 library module: 1f7d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 1f7e0 20 20 20 20 20 20 20 24 66 69 6c 65 4e 61 6d 65$fileName
1f7f0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1f800 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 73 74 72    } elseif {[str
1f810 69 6e 67 20 6d 61 74 63 68 20 5c 0d 0a 20 20 20  ing match \..
1f820 20 20 20 20 20 20 20 20 20 20 20 20 20 2d 6e 6f               -no
1f830 63 61 73 65 20 2a 2f 53 51 4c 69 74 65 2e 49 6e  case */SQLite.In
1f840 74 65 72 6f 70 2e 64 6c 6c 20 24 66 69 6c 65 4e  terop.dll $fileN 1f850 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ame]} then {.. 1f860 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 1f870 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1f880 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
1f890 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
1f8a0 20 20 20 22 2d 2d 2d 2d 20 66 6f 75 6e 64 20 6c     "---- found l
1f8b0 6f 61 64 65 64 20 53 51 4c 69 74 65 20 69 6e 74  oaded SQLite int
1f8c0 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 6d 6f  erop assembly mo
1f8d0 64 75 6c 65 3a 20 22 20 5c 0d 0a 20 20 20 20 20  dule: " \..
1f8e0 20 20 20 20 20 20 20 20 20 20 20 20 20 24 66 69               $fi 1f8f0 6c 65 4e 61 6d 65 20 5c 6e 5d 0d 0a 20 20 20 20 leName \n].. 1f900 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 }.. 1f910 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 }.. 1f920 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74 }.... cat 1f930 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. 1f940 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 tputs$::test_ch
1f950 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
1f960 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d         "---- com
1f970 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e  pile-time option
1f980 73 20 66 6f 72 20 53 51 4c 69 74 65 20 63 6f 72  s for SQLite cor
1f990 65 20 6c 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a  e library... "..
1f9a0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1f9b0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1f9c0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1f9d0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1f9e0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1f9f0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1fa00 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
1fa10 74 65 33 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c  te3 SQLiteCompil
1fa20 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20 20  eOptions..
1fa30 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70 74      } compileOpt
1fa40 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  ions] == 0} then
1fa50 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
1fa60 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 1fa70 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 1fa80 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b 6c s [formatList [l 1fa90 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 sort \.. 1faa0 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c 65$compile
1fab0 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e 5d  Options] <none>]
1fac0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
1fad0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
1fae0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 1faf0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b 6e est_channel unkn 1fb00 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 own\n.. 1fb10 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d }.. }... 1fb20 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b . catch { 1fb30 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 .. tput 1fb40 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
1fb50 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
1fb60 20 20 20 22 2d 2d 2d 2d 20 63 6f 6d 70 69 6c 65     "---- compile
1fb70 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 66 6f  -time options fo
1fb80 72 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70  r SQLite interop
1fb90 20 61 73 73 65 6d 62 6c 79 2e 2e 2e 20 22 0d 0a   assembly... "..
1fba0 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
1fbb0 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20  [catch {..
1fbc0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
1fbd0 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
1fbe0 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
1fbf0 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
1fc00 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69  Data.SQLite.SQLi
1fc10 74 65 33 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69  te3 InteropCompi
1fc20 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 20  leOptions..
1fc30 20 20 20 20 20 7d 20 63 6f 6d 70 69 6c 65 4f 70       } compileOp
1fc40 74 69 6f 6e 73 5d 20 3d 3d 20 30 7d 20 74 68 65  tions] == 0} the
1fc50 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
1fc60 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c 1fc70 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 1fc80 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74 20 5b gs [formatList [ 1fc90 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20 20 20 lsort \.. 1fca0 20 20 20 20 20 20 20 20 20 24 63 6f 6d 70 69 6c$compil
1fcb0 65 4f 70 74 69 6f 6e 73 5d 20 3c 6e 6f 6e 65 3e  eOptions] <none>
1fcc0 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20  ] \n]..
1fcd0 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
1fce0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a         tputs $:: 1fcf0 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 75 6e 6b test_channel unk 1fd00 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20 20 20 20 nown\n.. 1fd10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a }.. }.. 1fd20 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1fd30 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f # NOTE: Sho 1fd40 77 20 74 68 65 20 61 63 74 69 76 65 20 74 65 73 w the active tes 1fd50 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e 0d 0a t constraints... 1fd60 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 1fd70 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
1fd80 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
1fd90 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e 73 74  Args "---- const
1fda0 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 20 20  raints: " \..
1fdb0 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d 61 74           [format
1fdc0 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 65 74  List [lsort [get
1fdd0 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 3c 6e  Constraints]] <n
1fde0 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 20 20  one>] \n]....
1fdf0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1fe00 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 68 65  # NOTE: Save the
1fe10 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74   test constraint
1fe20 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 72  s for use by thr
1fe30 65 61 64 73 20 63 72 65 61 74 65 64 20 69 6e 20  eads created in
1fe40 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 23 20  this..        #
1fe50 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 69 6f        applicatio
1fe60 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 73 20  n domain.  This
1fe70 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 65 63  is necessary bec
1fe80 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 61 67  ause all the Eag
1fe90 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  le..        #
1fea0 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 65 78      "test contex
1feb0 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 69  t" information i
1fec0 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d 0a 20  s per-thread...
1fed0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1fee0 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
1fef0 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74  sts ::test_const
1ff00 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 7b 0d  raints]} then {.
1ff10 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a  .          set :
1ff20 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 6e 74  :test_constraint
1ff30 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 74 73  s $::eagle_tests 1ff40 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d 0a 20 (constraints).. 1ff50 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 1ff60 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1ff70 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68 65 20 NOTE: Load the 1ff80 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61 69 6e "after-constrain 1ff90 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72 2d 75 ts" custom per-u 1ffa0 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68 ser and/or per-h 1ffb0 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 ost.. # 1ffc0 20 20 20 20 20 74 65 73 74 20 73 65 74 74 69 6e test settin 1ffd0 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 gs now... 1ffe0 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70 6c 65 #.. uple 1fff0 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f 61 64 vel 1 [list load 20000 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e SQLiteTestSettin 20010 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e gs$::test_chann
20020 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a 20 20  el .after]....
20030 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
20040 20 23 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65   # NOTE: If nece
20050 73 73 61 72 79 2c 20 65 6e 61 62 6c 65 20 73 68  ssary, enable sh
20060 61 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20  ared-cache mode
20070 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  now...        #.
20080 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61  .        if {[ha
20090 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73  sRuntimeOption s
200a0 68 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65  haredCache]} the
200b0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  n {..          e
200c0 6e 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65  nableSharedCache
200d0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 200e0 20 74 72 75 65 0d 0a 20 20 20 20 20 20 20 20 7d true.. } 200f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 .... #.. 20100 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 20110 68 6f 77 20 77 68 65 6e 20 6f 75 72 20 74 65 73 how when our tes 20120 74 73 20 61 63 74 75 61 6c 6c 79 20 62 65 67 61 ts actually bega 20130 6e 20 28 6e 6f 77 29 2e 0d 0a 20 20 20 20 20 20 n (now)... 20140 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 #.. tpu 20150 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
20160 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
20170 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d  ..            "-
20180 2d 2d 2d 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  --- System.Data.
20190 53 51 4c 69 74 65 20 74 65 73 74 73 20 62 65 67  SQLite tests beg
201a0 61 6e 20 61 74 20 22 20 5c 0d 0a 20 20 20 20 20  an at " \..
201b0 20 20 20 20 20 20 20 5b 63 6c 6f 63 6b 20 66 6f         [clock fo
201c0 72 6d 61 74 20 5b 63 6c 6f 63 6b 20 73 65 63 6f  rmat [clock seco
201d0 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  nds]] \n]..
201e0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20   }..    }.....
201f0 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74 65    proc runSQLite
20200 54 65 73 74 46 69 6c 65 73 50 72 6f 6c 6f 67 75  TestFilesPrologu
20210 65 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70  e {} {..      up
20220 6c 65 76 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20  level 1 {..
20230 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
20240 4e 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 20  NOTE: Setup the
20250 76 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 72  variables that r
20260 65 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 69  efer to the vari
20270 6f 75 73 20 6e 6f 6e 2d 64 61 74 61 20 66 69 6c  ous non-data fil
20280 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  es..        #
20290 20 20 20 20 72 65 71 75 69 72 65 64 20 62 79 20      required by
202a0 74 68 65 20 74 65 73 74 73 20 69 6e 20 74 68 69  the tests in thi
202b0 73 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20  s file...
202c0 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
202d0 65 6e 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44  entityFrameworkD
202e0 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20  llFile \..
202f0 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 46        [getBuildF
20300 69 6c 65 4e 61 6d 65 20 45 6e 74 69 74 79 46 72  ileName EntityFr
20310 61 6d 65 77 6f 72 6b 2e 64 6c 6c 5d 0d 0a 0d 0a  amework.dll]....
20320 20 20 20 20 20 20 20 20 73 65 74 20 69 6e 73 74          set inst
20330 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5b 67 65  allerExeFile [ge
20340 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 49  tBuildFileName I
20350 6e 73 74 61 6c 6c 65 72 2e 65 78 65 5d 0d 0a 20  nstaller.exe]..
20360 20 20 20 20 20 20 20 73 65 74 20 73 71 6c 69 74         set sqlit
20370 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65  eDesignerDllFile
20380 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
20390 6d 65 20 53 51 4c 69 74 65 2e 44 65 73 69 67 6e  me SQLite.Design
203a0 65 72 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20  er.dll]....
203b0 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74     set systemDat
203c0 61 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 20 5c  aSQLiteDllFile \
203d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
203e0 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
203f0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
20400 74 65 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20  te.dll]....
20410 20 20 20 73 65 74 20 73 79 73 74 65 6d 44 61 74     set systemDat
20420 61 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69  aSQLiteLinqDllFi
20430 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  le \..
20440 20 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e    [getBuildFileN
20450 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  ame System.Data.
20460 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5d  SQLite.Linq.dll]
20470 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
20480 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 65  systemDataSQLite
20490 45 66 36 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20  Ef6DllFile \..
204a0 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 75            [getBu
204b0 69 6c 64 46 69 6c 65 4e 61 6d 65 20 53 79 73 74  ildFileName Syst
204c0 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 45  em.Data.SQLite.E
204d0 46 36 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 20  F6.dll]....
204e0 20 20 20 73 65 74 20 74 65 73 74 45 78 65 46 69     set testExeFi
204f0 6c 65 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65  le [getBuildFile
20500 4e 61 6d 65 20 74 65 73 74 2e 65 78 65 5d 0d 0a  Name test.exe]..
20510 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
20520 4c 69 6e 71 45 78 65 46 69 6c 65 20 5b 67 65 74  LinqExeFile [get
20530 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 74 65  BuildFileName te
20540 73 74 6c 69 6e 71 2e 65 78 65 5d 0d 0a 20 20 20  stlinq.exe]..
20550 20 20 20 20 20 73 65 74 20 74 65 73 74 45 66 36       set testEf6
20560 45 78 65 46 69 6c 65 20 5b 67 65 74 42 75 69 6c  ExeFile [getBuil
20570 64 46 69 6c 65 4e 61 6d 65 20 74 65 73 74 65 66  dFileName testef
20580 36 2e 65 78 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  6.exe]....
20590 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
205a0 4f 54 45 3a 20 53 65 74 75 70 20 74 68 65 20 76  OTE: Setup the v
205b0 61 72 69 61 62 6c 65 73 20 74 68 61 74 20 72 65  ariables that re
205c0 66 65 72 20 74 6f 20 74 68 65 20 76 61 72 69 6f  fer to the vario
205d0 75 73 20 64 61 74 61 20 66 69 6c 65 73 0d 0a 20  us data files..
205e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 72         #       r
205f0 65 71 75 69 72 65 64 20 62 79 20 74 68 65 20 74  equired by the t
20600 65 73 74 73 20 69 6e 20 74 68 69 73 20 66 69 6c  ests in this fil
20610 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
20620 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74 4c         set testL
20630 69 6e 71 4f 75 74 46 69 6c 65 20 5b 66 69 6c 65  inqOutFile [file
20640 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c   nativename [fil
20650 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20  e join \..
20660 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65        [getSQLite
20670 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 74 65  TestDataPath] te
20680 73 74 6c 69 6e 71 2e 6f 75 74 5d 5d 0d 0a 0d 0a  stlinq.out]]....
20690 20 20 20 20 20 20 20 20 73 65 74 20 6e 6f 72 74          set nort
206a0 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 5b 66  hwindEfDbFile [f
206b0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
206c0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
206d0 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 64           [file d
206e0 69 72 6e 61 6d 65 20 5b 66 69 6c 65 20 64 69 72  irname [file dir
206f0 6e 61 6d 65 20 5b 67 65 74 53 51 4c 69 74 65 54  name [getSQLiteT
20700 65 73 74 44 61 74 61 50 61 74 68 5d 5d 5d 20 5c  estDataPath]]] \
20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65  ..            te
20720 73 74 6c 69 6e 71 20 6e 6f 72 74 68 77 69 6e 64  stlinq northwind
20730 45 46 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20  EF.db]]....
20740 20 20 20 73 65 74 20 6e 6f 6e 57 61 6c 44 62 46     set nonWalDbF
20750 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ile [file native
20760 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
20770 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b  \..            [
20780 67 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74  getSQLiteTestDat
20790 61 50 61 74 68 5d 20 6e 6f 6e 57 61 6c 2e 64 62  aPath] nonWal.db
207a0 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
207b0 74 20 77 61 6c 44 62 46 69 6c 65 20 5b 66 69 6c  t walDbFile [fil
207c0 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
207d0 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
207e0 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69 74         [getSQLit
207f0 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20 77  eTestDataPath] w
20800 61 6c 2e 64 62 5d 5d 0d 0a 0d 0a 20 20 20 20 20  al.db]]....
20810 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
20820 4e 4f 54 45 3a 20 54 68 65 20 76 61 72 69 6f 75  NOTE: The variou
20830 73 20 69 6e 73 74 61 6c 6c 2f 75 6e 69 6e 73 74  s install/uninst
20840 61 6c 6c 20 6c 6f 67 20 66 69 6c 65 73 20 75 73  all log files us
20850 65 64 20 74 6f 20 74 65 73 74 20 74 68 65 0d 0a  ed to test the..
20860 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
20870 64 65 73 69 67 6e 2d 74 69 6d 65 20 63 6f 6d 70  design-time comp
20880 6f 6e 65 6e 74 20 69 6e 73 74 61 6c 6c 65 72 2e  onent installer.
20890 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
208a0 20 20 20 20 20 73 65 74 20 74 65 73 74 49 6e 73       set testIns
208b0 74 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c  tallVs2005LogFil
208c0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
208d0 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
208e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
208f0 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
20900 61 74 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54  ath] Installer_T
20910 65 73 74 5f 56 73 32 30 30 35 2e 6c 6f 67 5d 5d  est_Vs2005.log]]
20920 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20  ....        set
20930 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30  testInstallVs200
20940 38 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e  8LogFile [file n
20950 61 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20  ativename [file
20960 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20  join \..
20970 20 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65      [getSQLiteTe
20980 73 74 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74  stDataPath] Inst
20990 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30  aller_Test_Vs200
209a0 38 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  8.log]]....
209b0 20 20 20 73 65 74 20 74 65 73 74 49 6e 73 74 61     set testInsta
209c0 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20  llVs2010LogFile
209d0 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65  [file nativename
209e0 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20   [file join \..
209f0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 53             [getS
20a00 51 4c 69 74 65 54 65 73 74 44 61 74 61 50 61 74  QLiteTestDataPat
20a10 68 5d 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73  h] Installer_Tes
20a20 74 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a  t_Vs2010.log]]..
20a30 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65  ..        set te
20a40 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c  stInstallVs2012L
20a50 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
20a60 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
20a70 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
20a80 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
20a90 44 61 74 61 50 61 74 68 5d 20 49 6e 73 74 61 6c  DataPath] Instal
20aa0 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 31 32 2e  ler_Test_Vs2012.
20ab0 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  log]]....
20ac0 20 73 65 74 20 74 65 73 74 49 6e 73 74 61 6c 6c   set testInstall
20ad0 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5b 66  Vs2013LogFile [f
20ae0 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b  ile nativename [
20af0 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20  file join \..
20b00 20 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c           [getSQL
20b10 69 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d  iteTestDataPath]
20b20 20 49 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74 5f   Installer_Test_
20b30 56 73 32 30 31 33 2e 6c 6f 67 5d 5d 0d 0a 0d 0a  Vs2013.log]]....
20b40 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73 74          set test
20b50 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c  UninstallVs2005L
20b60 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61 74  ogFile [file nat
20b70 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f  ivename [file jo
20b80 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  in \..
20b90 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73 74    [getSQLiteTest
20ba0 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73 74  DataPath] Uninst
20bb0 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30 30  aller_Test_Vs200
20bc0 35 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20  5.log]]....
20bd0 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e 73     set testUnins
20be0 74 61 6c 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c  tallVs2008LogFil
20bf0 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61  e [file nativena
20c00 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c 0d  me [file join \.
20c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67 65  .            [ge
20c20 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61 50  tSQLiteTestDataP
20c30 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65 72  ath] Uninstaller
20c40 5f 54 65 73 74 5f 56 73 32 30 30 38 2e 6c 6f 67  _Test_Vs2008.log
20c50 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65  ]]....        se
20c60 74 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56  t testUninstallV
20c70 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 5b 66 69  s2010LogFile [fi
20c80 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66  le nativename [f
20c90 69 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20  ile join \..
20ca0 20 20 20 20 20 20 20 20 5b 67 65 74 53 51 4c 69          [getSQLi
20cb0 74 65 54 65 73 74 44 61 74 61 50 61 74 68 5d 20  teTestDataPath]
20cc0 55 6e 69 6e 73 74 61 6c 6c 65 72 5f 54 65 73 74  Uninstaller_Test
20cd0 5f 56 73 32 30 31 30 2e 6c 6f 67 5d 5d 0d 0a 0d  _Vs2010.log]]...
20ce0 0a 20 20 20 20 20 20 20 20 73 65 74 20 74 65 73  .        set tes
20cf0 74 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32  tUninstallVs2012
20d00 4c 6f 67 46 69 6c 65 20 5b 66 69 6c 65 20 6e 61  LogFile [file na
20d10 74 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a  tivename [file j
20d20 6f 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  oin \..
20d30 20 20 20 5b 67 65 74 53 51 4c 69 74 65 54 65 73     [getSQLiteTes
20d40 74 44 61 74 61 50 61 74 68 5d 20 55 6e 69 6e 73  tDataPath] Unins
20d50 74 61 6c 6c 65 72 5f 54 65 73 74 5f 56 73 32 30  taller_Test_Vs20
20d60 31 32 2e 6c 6f 67 5d 5d 0d 0a 0d 0a 20 20 20 20  12.log]]....
20d70 20 20 20 20 73 65 74 20 74 65 73 74 55 6e 69 6e      set testUnin
20d80 73 74 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69  stallVs2013LogFi
20d90 6c 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e  le [file nativen
20da0 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5c  ame [file join \
20db0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 67  ..            [g
20dc0 65 74 53 51 4c 69 74 65 54 65 73 74 44 61 74 61  etSQLiteTestData
20dd0 50 61 74 68 5d 20 55 6e 69 6e 73 74 61 6c 6c 65  Path] Uninstalle
20de0 72 5f 54 65 73 74 5f 56 73 32 30 31 33 2e 6c 6f  r_Test_Vs2013.lo
20df0 67 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23  g]]....        #
20e00 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
20e20 23 23 23 23 23 23 23 23 23 23 23 23 23 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 0d 0a 0d 0a 20 20 20 20 20 20  ######....
20e50 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
20e60 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
20e70 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
20e80 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
20e90 69 6c 20 24 65 6e 74 69 74 79 46 72 61 6d 65 77  il $entityFramew 20ea0 6f 72 6b 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 74 orkDllFile]]]} t 20eb0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 20ec0 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 checkForFile$t
20ed0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 65 6e 74  est_channel $ent 20ee0 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c 46 ityFrameworkDllF 20ef0 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 20f00 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 20f10 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 20f20 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 20f30 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 20f40 5b 66 69 6c 65 20 74 61 69 6c 20 24 69 6e 73 74 [file tail$inst
20f50 61 6c 6c 65 72 45 78 65 46 69 6c 65 5d 5d 5d 7d  allerExeFile]]]}
20f60 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
20f70 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20     checkForFile
20f80 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 69  $test_channel$i
20f90 6e 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20  nstallerExeFile
20fa0 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65 0d 0a 20  Installer.exe..
20fb0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
20fc0 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
20fd0 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
20fe0 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
20ff0 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
21000 74 61 69 6c 20 24 73 71 6c 69 74 65 44 65 73 69  tail $sqliteDesi 21010 67 6e 65 72 44 6c 6c 46 69 6c 65 5d 5d 5d 7d 20 gnerDllFile]]]} 21020 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 21030 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 checkForFile$
21040 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 73 71  test_channel $sq 21050 6c 69 74 65 44 65 73 69 67 6e 65 72 44 6c 6c 46 liteDesignerDllF 21060 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a ile.. }.. 21070 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b .. if {![ 21080 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b haveConstraint [ 21090 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f appendArgs file_ 210a0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 210b0 5b 66 69 6c 65 20 74 61 69 6c 20 24 73 79 73 74 [file tail$syst
210c0 65 6d 44 61 74 61 53 51 4c 69 74 65 44 6c 6c 46  emDataSQLiteDllF
210d0 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ile]]]} then {..
210e0 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46            checkF
210f0 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61  orFile $test_cha 21100 6e 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 nnel$systemData
21110 53 51 4c 69 74 65 44 6c 6c 46 69 6c 65 0d 0a 20  SQLiteDllFile..
21120 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....
21130 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f      if {![haveCo
21140 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64  nstraint [append
21150 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20  Args file_ \..
21160 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20            [file
21170 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 74 61  tail $systemData 21180 53 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c SQLiteLinqDllFil 21190 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 e]]]} then {.. 211a0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 211b0 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e File$test_chann
211c0 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 51  el $systemDataSQ 211d0 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 0d LiteLinqDllFile. 211e0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 211f0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 21200 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 21210 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 21220 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 21230 65 20 74 61 69 6c 20 24 73 79 73 74 65 6d 44 61 e tail$systemDa
21240 74 61 53 51 4c 69 74 65 45 66 36 44 6c 6c 46 69  taSQLiteEf6DllFi
21250 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
21260 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
21270 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 21280 6e 65 6c 20 24 73 79 73 74 65 6d 44 61 74 61 53 nel$systemDataS
21290 51 4c 69 74 65 45 66 36 44 6c 6c 46 69 6c 65 0d  QLiteEf6DllFile.
212a0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
212b0 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
212c0 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
212d0 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
212e0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
212f0 65 20 74 61 69 6c 20 24 74 65 73 74 45 78 65 46  e tail $testExeF 21300 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 21310 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 21320 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
21330 6e 6e 65 6c 20 24 74 65 73 74 45 78 65 46 69 6c  nnel $testExeFil 21340 65 20 74 65 73 74 2e 65 78 65 0d 0a 20 20 20 20 e test.exe.. 21350 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 21360 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 if {![haveConst 21370 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 raint [appendArg 21380 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 s file_ \.. 21390 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 69 [file tai 213a0 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 46 69 l$testLinqExeFi
213b0 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
213c0 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
213d0 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 213e0 6e 65 6c 20 24 74 65 73 74 4c 69 6e 71 45 78 65 nel$testLinqExe
213f0 46 69 6c 65 20 74 65 73 74 6c 69 6e 71 2e 65 78  File testlinq.ex
21400 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
21410 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
21420 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
21430 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
21440 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
21450 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74 45 66  ile tail $testEf 21460 36 45 78 65 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6ExeFile]]]} the 21470 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63 n {.. c 21480 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73 heckForFile$tes
21490 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 45  t_channel $testE 214a0 66 36 45 78 65 46 69 6c 65 20 74 65 73 74 65 66 f6ExeFile testef 214b0 36 2e 65 78 65 0d 0a 20 20 20 20 20 20 20 20 7d 6.exe.. } 214c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b .... if { 214d0 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 ![haveConstraint 214e0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c [appendArgs fil 214f0 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 e_ \.. 21500 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 [file tail$te
21510 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 5d 5d 5d  stLinqOutFile]]]
21520 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
21530 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65      checkForFile
21540 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24   $test_channel$
21550 74 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 0d  testLinqOutFile.
21560 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
21570 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65        if {![have
21580 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65  Constraint [appe
21590 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a  ndArgs file_ \..
215a0 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
215b0 65 20 74 61 69 6c 20 24 6e 6f 72 74 68 77 69 6e  e tail $northwin 215c0 64 45 66 44 62 46 69 6c 65 5d 5d 5d 7d 20 74 68 dEfDbFile]]]} th 215d0 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 215e0 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 checkForFile$te
215f0 73 74 5f 63 68 61 6e 6e 65 6c 20 24 6e 6f 72 74  st_channel $nort 21600 68 77 69 6e 64 45 66 44 62 46 69 6c 65 0d 0a 20 hwindEfDbFile.. 21610 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 21620 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f if {![haveCo 21630 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 nstraint [append 21640 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 Args file_ \.. 21650 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 [file 21660 74 61 69 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 tail$nonWalDbFi
21670 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  le]]]} then {..
21680 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f           checkFo
21690 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e  rFile $test_chan 216a0 6e 65 6c 20 24 6e 6f 6e 57 61 6c 44 62 46 69 6c nel$nonWalDbFil
216b0 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  e..        }....
216c0 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61          if {![ha
216d0 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70  veConstraint [ap
216e0 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c  pendArgs file_ \
216f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
21700 69 6c 65 20 74 61 69 6c 20 24 77 61 6c 44 62 46  ile tail $walDbF 21710 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a ile]]]} then {.. 21720 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 checkF 21730 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 61 orFile$test_cha
21740 6e 6e 65 6c 20 24 77 61 6c 44 62 46 69 6c 65 0d  nnel $walDbFile. 21750 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 21760 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 21770 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 21780 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 21790 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 217a0 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
217b0 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65  allVs2005LogFile
217c0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
217d0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
217e0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 217f0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
21800 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2005LogFile..
21810 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21820 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
21830 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21840 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
21850 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
21860 69 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56  il $testInstallV 21870 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d 5d 7d s2008LogFile]]]} 21880 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 21890 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c 65 20 checkForFile 218a0 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 24 74$test_channel $t 218b0 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 estInstallVs2008 218c0 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 20 20 20 20 LogFile.. 218d0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 }.... if 218e0 20 7b 21 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 {![haveConstrai 218f0 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20 66 nt [appendArgs f 21900 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ile_ \.. 21910 20 20 20 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 [file tail$
21920 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31  testInstallVs201
21930 30 4c 6f 67 46 69 6c 65 5d 5d 5d 7d 20 74 68 65  0LogFile]]]} the
21940 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 63  n {..          c
21950 68 65 63 6b 46 6f 72 46 69 6c 65 20 24 74 65 73  heckForFile $tes 21960 74 5f 63 68 61 6e 6e 65 6c 20 24 74 65 73 74 49 t_channel$testI
21970 6e 73 74 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46  nstallVs2010LogF
21980 69 6c 65 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ile..        }..
21990 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b  ..        if {![
219a0 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 20 5b  haveConstraint [
219b0 61 70 70 65 6e 64 41 72 67 73 20 66 69 6c 65 5f  appendArgs file_
219c0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
219d0 5b 66 69 6c 65 20 74 61 69 6c 20 24 74 65 73 74  [file tail $test 219e0 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c 6f 67 InstallVs2012Log 219f0 46 69 6c 65 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d File]]]} then {. 21a00 0a 20 20 20 20 20 20 20 20 20 20 63 68 65 63 6b . check 21a10 46 6f 72 46 69 6c 65 20 24 74 65 73 74 5f 63 68 ForFile$test_ch
21a20 61 6e 6e 65 6c 20 24 74 65 73 74 49 6e 73 74 61  annel $testInsta 21a30 6c 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 0d llVs2012LogFile. 21a40 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... 21a50 20 20 20 20 20 20 69 66 20 7b 21 5b 68 61 76 65 if {![have 21a60 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70 65 Constraint [appe 21a70 6e 64 41 72 67 73 20 66 69 6c 65 5f 20 5c 0d 0a ndArgs file_ \.. 21a80 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c [fil 21a90 65 20 74 61 69 6c 20 24 74 65 73 74 49 6e 73 74 e tail$testInst
21aa0 61 6c 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65  allVs2013LogFile
21ab0 5d 5d 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  ]]]} then {..
21ac0 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46         checkForF
21ad0 69 6c 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65  ile $test_channe 21ae0 6c 20 24 74 65 73 74 49 6e 73 74 61 6c 6c 56 73 l$testInstallVs
21af0 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2013LogFile..
21b00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21b10 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
21b20 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21b30 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
21b40 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
21b50 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 21b60 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 5d 5d lVs2005LogFile]] 21b70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21b80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 21b90 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
21ba0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 21bb0 32 30 30 35 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2005LogFile.. 21bc0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21bd0 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 21be0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 21bf0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 21c00 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 21c10 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
21c20 6c 56 73 32 30 30 38 4c 6f 67 46 69 6c 65 5d 5d  lVs2008LogFile]]
21c30 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
21c40 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
21c50 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 21c60 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
21c70 32 30 30 38 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2008LogFile..
21c80 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21c90 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
21ca0 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21cb0 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
21cc0 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
21cd0 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 21ce0 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 5d 5d lVs2010LogFile]] 21cf0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21d00 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 21d10 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
21d20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 21d30 32 30 31 30 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2010LogFile.. 21d40 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 21d50 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73 if {![haveCons 21d60 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 traint [appendAr 21d70 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20 gs file_ \.. 21d80 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61 [file ta 21d90 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c il$testUninstal
21da0 6c 56 73 32 30 31 32 4c 6f 67 46 69 6c 65 5d 5d  lVs2012LogFile]]
21db0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
21dc0 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c       checkForFil
21dd0 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  e $test_channel 21de0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73$testUninstallVs
21df0 32 30 31 32 4c 6f 67 46 69 6c 65 0d 0a 20 20 20  2012LogFile..
21e00 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
21e10 20 20 69 66 20 7b 21 5b 68 61 76 65 43 6f 6e 73    if {![haveCons
21e20 74 72 61 69 6e 74 20 5b 61 70 70 65 6e 64 41 72  traint [appendAr
21e30 67 73 20 66 69 6c 65 5f 20 5c 0d 0a 20 20 20 20  gs file_ \..
21e40 20 20 20 20 20 20 20 20 5b 66 69 6c 65 20 74 61          [file ta
21e50 69 6c 20 24 74 65 73 74 55 6e 69 6e 73 74 61 6c  il $testUninstal 21e60 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 5d 5d lVs2013LogFile]] 21e70 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 21e80 20 20 20 20 20 63 68 65 63 6b 46 6f 72 46 69 6c checkForFil 21e90 65 20 24 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 e$test_channel
21ea0 24 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73  $testUninstallVs 21eb0 32 30 31 33 4c 6f 67 46 69 6c 65 0d 0a 20 20 20 2013LogFile.. 21ec0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d }.. }. 21ed0 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 . }..... p 21ee0 72 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 roc runSQLiteTes 21ef0 74 46 69 6c 65 73 45 70 69 6c 6f 67 75 65 20 7b tFilesEpilogue { 21f00 7d 20 7b 0d 0a 20 20 20 20 20 20 75 70 6c 65 76 } {.. uplev 21f10 65 6c 20 31 20 7b 0d 0a 20 20 20 20 20 20 20 20 el 1 {.. 21f20 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 21f30 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 21f40 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 21f50 32 30 31 33 4c 6f 67 46 69 6c 65 20 74 65 73 74 2013LogFile test 21f60 55 6e 69 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c UninstallVs2012L 21f70 6f 67 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 ogFile \.. 21f80 20 20 20 20 20 20 74 65 73 74 55 6e 69 6e 73 74 testUninst 21f90 61 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 allVs2010LogFile 21fa0 20 74 65 73 74 55 6e 69 6e 73 74 61 6c 6c 56 73 testUninstallVs 21fb0 32 30 30 38 4c 6f 67 46 69 6c 65 20 5c 0d 0a 20 2008LogFile \.. 21fc0 20 20 20 20 20 20 20 20 20 20 20 74 65 73 74 55 testU 21fd0 6e 69 6e 73 74 61 6c 6c 56 73 32 30 30 35 4c 6f ninstallVs2005Lo 21fe0 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 6c gFile testInstal 21ff0 6c 56 73 32 30 31 33 4c 6f 67 46 69 6c 65 20 5c lVs2013LogFile \ 22000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 65 .. te 22010 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 31 32 4c stInstallVs2012L 22020 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 61 ogFile testInsta 22030 6c 6c 56 73 32 30 31 30 4c 6f 67 46 69 6c 65 20 llVs2010LogFile 22040 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 22050 65 73 74 49 6e 73 74 61 6c 6c 56 73 32 30 30 38 estInstallVs2008 22060 4c 6f 67 46 69 6c 65 20 74 65 73 74 49 6e 73 74 LogFile testInst 22070 61 6c 6c 56 73 32 30 30 35 4c 6f 67 46 69 6c 65 allVs2005LogFile 22080 0d 0a 0d 0a 20 20 20 20 20 20 20 20 75 6e 73 65 .... unse 22090 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e 20 5c 0d t -nocomplain \. 220a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 6f 72 . nor 220b0 74 68 77 69 6e 64 45 66 44 62 46 69 6c 65 20 74 thwindEfDbFile t 220c0 65 73 74 4c 69 6e 71 4f 75 74 46 69 6c 65 20 5c estLinqOutFile \ 220d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77 61 .. wa 220e0 6c 44 62 46 69 6c 65 20 6e 6f 6e 57 61 6c 44 62 lDbFile nonWalDb 220f0 46 69 6c 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20 File.... 22100 75 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 unset -nocomplai 22110 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n \.. 22120 20 74 65 73 74 45 66 36 45 78 65 46 69 6c 65 20 testEf6ExeFile 22130 74 65 73 74 4c 69 6e 71 45 78 65 46 69 6c 65 20 testLinqExeFile 22140 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 \.. t 22150 65 73 74 45 78 65 46 69 6c 65 20 73 79 73 74 65 estExeFile syste 22160 6d 44 61 74 61 53 51 4c 69 74 65 45 66 36 44 6c mDataSQLiteEf6Dl 22170 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 20 20 20 lFile \.. 22180 20 20 20 20 20 73 79 73 74 65 6d 44 61 74 61 53 systemDataS 22190 51 4c 69 74 65 4c 69 6e 71 44 6c 6c 46 69 6c 65 QLiteLinqDllFile 221a0 20 73 79 73 74 65 6d 44 61 74 61 53 51 4c 69 74 systemDataSQLit 221b0 65 44 6c 6c 46 69 6c 65 20 5c 0d 0a 20 20 20 20 eDllFile \.. 221c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 44 65 sqliteDe 221d0 73 69 67 6e 65 72 44 6c 6c 46 69 6c 65 20 69 6e signerDllFile in 221e0 73 74 61 6c 6c 65 72 45 78 65 46 69 6c 65 20 5c stallerExeFile \ 221f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6e .. en 22200 74 69 74 79 46 72 61 6d 65 77 6f 72 6b 44 6c 6c tityFrameworkDll 22210 46 69 6c 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 File.. }.. 22220 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro 22230 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 45 c runSQLiteTestE 22240 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20 pilogue {} {.. 22250 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 22260 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69 6e OTE: Skip runnin 22270 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70 69 g our custom epi 22280 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61 69 logue if the mai 22290 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d 0a n one has been.. 222a0 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 6b # sk 222b0 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d ipped... #. 222c0 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 . if {![inf 222d0 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 o exists ::no(ep 222e0 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 ilogue.eagle)]} 222f0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 22300 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 22310 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75 72 E: Show when our 22320 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79 20 tests actually 22330 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20 20 ended (now)... 22340 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 22350 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 tputs$::test_c
22360 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
22370 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
22380 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e 44    "---- System.D
22390 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 73  ata.SQLite tests
223a0 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a 20   ended at " \..
223b0 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f 63             [cloc
223c0 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b 20  k format [clock
223d0 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a 0d  seconds]] \n]...
223e0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
223f0 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
22400 20 74 68 65 20 22 65 70 69 6c 6f 67 75 65 22 20   the "epilogue"
22410 63 75 73 74 6f 6d 20 70 65 72 2d 75 73 65 72 20  custom per-user
22420 61 6e 64 2f 6f 72 20 70 65 72 2d 68 6f 73 74 20  and/or per-host
22430 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 20  test..        #
22440 20 20 20 20 20 20 73 65 74 74 69 6e 67 73 20 6e        settings n
22450 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
22460 20 20 20 20 20 20 20 20 75 70 6c 65 76 65 6c 20          uplevel
22470 31 20 5b 6c 69 73 74 20 6c 6f 61 64 53 51 4c 69  1 [list loadSQLi
22480 74 65 54 65 73 74 53 65 74 74 69 6e 67 73 20 24  teTestSettings $22490 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 2e ::test_channel . 224a0 65 70 69 6c 6f 67 75 65 5d 0d 0a 0d 0a 20 20 20 epilogue].... 224b0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 224c0 23 20 42 55 47 46 49 58 3a 20 42 65 66 6f 72 65 # BUGFIX: Before 224d0 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 66 69 checking the fi 224e0 6e 61 6c 20 72 65 73 6f 75 72 63 65 73 20 69 6e nal resources in 224f0 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 2c 20 use by SQLite, 22500 6d 61 6b 65 0d 0a 20 20 20 20 20 20 20 20 23 20 make.. # 22510 20 20 20 20 20 20 20 20 73 75 72 65 20 62 6f 74 sure bot 22520 68 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 h of the PRAGMA 22530 72 65 6c 61 74 65 64 20 64 69 72 65 63 74 6f 72 related director 22540 79 20 6e 61 6d 65 73 20 61 72 65 20 66 72 65 65 y names are free 22550 64 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 d... #.. 22560 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 checkForS 22570 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 65 73 QLiteDirectories 22580 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
22590 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 20 20 20   true....
225a0 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
225b0 54 45 3a 20 41 6c 73 6f 20 72 65 70 6f 72 74 20  TE: Also report
225c0 74 68 65 20 72 65 73 6f 75 72 63 65 20 75 73 61  the resource usa
225d0 67 65 20 61 66 74 65 72 20 72 75 6e 6e 69 6e 67  ge after running
225e0 20 74 68 65 20 74 65 73 74 73 2e 0d 0a 20 20 20   the tests...
225f0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
22600 72 65 70 6f 72 74 53 51 4c 69 74 65 52 65 73 6f  reportSQLiteReso
22610 75 72 63 65 73 20 24 3a 3a 74 65 73 74 5f 63 68  urces $::test_ch 22620 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20 20 annel.... 22630 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 22640 54 45 3a 20 52 65 70 6f 72 74 20 74 68 65 20 63 TE: Report the c 22650 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20 63 ritical handle c 22660 6f 75 6e 74 73 20 61 66 74 65 72 20 72 75 6e 6e ounts after runn 22670 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e 0d 0a ing the tests... 22680 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 22690 20 20 20 67 65 74 53 51 4c 69 74 65 48 61 6e 64 getSQLiteHand 226a0 6c 65 43 6f 75 6e 74 73 20 24 3a 3a 74 65 73 74 leCounts$::test
226b0 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20  _channel....
226c0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
226d0 20 4e 4f 54 45 3a 20 49 66 20 6e 65 63 65 73 73   NOTE: If necess
226e0 61 72 79 2c 20 64 69 73 61 62 6c 65 20 73 68 61  ary, disable sha
226f0 72 65 64 2d 63 61 63 68 65 20 6d 6f 64 65 20 6e  red-cache mode n
22700 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ow...        #..
22710 20 20 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73          if {[has
22720 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 73 68  RuntimeOption sh
22730 61 72 65 64 43 61 63 68 65 5d 7d 20 74 68 65 6e  aredCache]} then
22740 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6e   {..          en
22750 61 62 6c 65 53 68 61 72 65 64 43 61 63 68 65 20  ableSharedCache
22760 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  \$::test_channel
22770 66 61 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 7d  false..        }
22780 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
22790 0d 0a 0c 0d 0a 20 20 20 20 23 23 23 23 23 23 23  .....    #######
227a0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
227e0 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23  ####..    ######
227f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22800 23 23 23 23 23 23 23 20 45 4e 44 20 45 61 67 6c  ####### END Eagl
22810 65 20 4f 4e 4c 59 20 23 23 23 23 23 23 23 23 23  e ONLY #########
22820 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22830 23 23 23 23 23 0d 0a 20 20 20 20 23 23 23 23 23  #####..    #####
22840 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22850 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22860 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22870 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
22880 23 23 23 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20  ######..  }....
22890 20 23 0d 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61   #..  # NOTE: Sa
228a0 76 65 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74  ve the name of t
228b0 68 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e  he directory con
228c0 74 61 69 6e 69 6e 67 20 74 68 69 73 20 66 69 6c  taining this fil
228d0 65 2e 0d 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21  e...  #..  if {!
228e0 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 63 6f 6d  [info exists com
228f0 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20  mon_directory]}
22900 74 68 65 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20  then {..    set
22910 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79  common_directory
22920 20 5b 66 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b   [file dirname [
22930 69 6e 66 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20  info script]]..
22940 20 7d 0d 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e   }....  #..  # N
22950 4f 54 45 3a 20 50 72 6f 76 69 64 65 20 74 68 65  OTE: Provide the
22960 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
22970 69 74 65 20 74 65 73 74 20 70 61 63 6b 61 67 65  ite test package
22980 20 74 6f 20 74 68 65 20 69 6e 74 65 72 70 72 65   to the interpre
22990 74 65 72 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63  ter...  #..  pac
229a0 6b 61 67 65 20 70 72 6f 76 69 64 65 20 53 79 73  kage provide Sys
229b0 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
229c0 54 65 73 74 20 31 2e 30 0d 0a 7d 0d 0a           Test 1.0..}..