System.Data.SQLite
Hex Artifact Content
Not logged in

## Artifact 26674e2a325dc8ffdaa03182a3d2f71ec71f4b2b:

• File Tests/common.eagle — part of check-in [9e3b23cb78] at 2013-12-27 07:41:37 on branch refactorNativeLibraryPreLoader — Update the Eagle core script library and test suite infrastructure to better support testing the native library pre-loading code. (user: mistachkin size: 97338) [more...]

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 70 72 6f 63 20 67 65 74 42 75 69 6c 64 59    proc getBuildY
0fd0: 65 61 72 73 20 7b 7d 20 7b 0d 0a 20 20 20 20 20  ears {} {..
0fe0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
0ff0: 3a 20 53 65 65 20 69 66 20 74 68 65 20 6c 69 73  : See if the lis
1000: 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 73 20  t of test years
1010: 68 61 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64  has been overrid
1020: 64 65 6e 20 62 79 20 74 68 65 20 75 73 65 72 0d  den by the user.
1030: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 28  .      #       (
1040: 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d  e.g. on the comm
1050: 61 6e 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20  and line)...
1060: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b    #..      if {[
1070: 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65  info exists ::te
1080: 73 74 5f 79 65 61 72 73 5d 20 26 26 20 5b 6c 6c  st_years] && [ll
1090: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 79 65  ength $::test_ye 10a0: 61 72 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b ars] > 0} then { 10b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 10c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 # NOTE: Use 10d0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c the specified l 10e0: 69 73 74 20 6f 66 20 74 65 73 74 20 79 65 61 72 ist of test year 10f0: 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 s... #.. 1100: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a return$:
1110: 3a 74 65 73 74 5f 79 65 61 72 73 0d 0a 20 20 20  :test_years..
1120: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
1130: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1140: 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20  # NOTE: Use the
1150: 64 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20  default list of
1160: 74 65 73 74 20 79 65 61 72 73 2e 0d 0a 20 20 20  test years...
1170: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1180: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 32 30 30  return [list 200
1190: 35 20 32 30 30 38 20 32 30 31 30 20 32 30 31 32  5 2008 2010 2012
11a0: 20 32 30 31 33 5d 0d 0a 20 20 20 20 20 20 7d 0d   2013]..      }.
11b0: 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70  .    }.....    p
11c0: 72 6f 63 20 67 65 74 42 75 69 6c 64 50 6c 61 74  roc getBuildPlat
11d0: 66 6f 72 6d 20 7b 20 6e 61 74 69 76 65 20 7d 20  form { native }
11e0: 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  {..      if {[in
11f0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74  fo exists ::test
1200: 5f 70 6c 61 74 66 6f 72 6d 5d 20 26 26 20 5c 0d  _platform] && \.
1210: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69  .          [stri
1220: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73  ng length $::tes 1230: 74 5f 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30 7d t_platform] > 0} 1240: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 1250: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1260: 54 45 3a 20 55 73 65 20 74 68 65 20 73 70 65 63 TE: Use the spec 1270: 69 66 69 65 64 20 74 65 73 74 20 70 6c 61 74 66 ified test platf 1280: 6f 72 6d 2e 20 20 49 66 20 74 68 69 73 20 76 61 orm. If this va 1290: 72 69 61 62 6c 65 20 69 73 20 6e 6f 74 20 73 65 riable is not se 12a0: 74 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 t,.. # 12b0: 20 20 20 20 74 68 65 20 64 65 66 61 75 6c 74 20 the default 12c0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 62 61 value will be ba 12d0: 73 65 64 20 6f 6e 20 74 68 65 20 6d 61 63 68 69 sed on the machi 12e0: 6e 65 20 61 72 63 68 69 74 65 63 74 75 72 65 2e ne architecture. 12f0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 1300: 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 return [exp 1310: 72 20 7b 24 6e 61 74 69 76 65 20 3f 20 24 3a 3a r {$native ? $:: 1320: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 3a 20 test_platform : 1330: 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c ""}].. } el 1340: 73 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 seif {[info exis 1350: 74 73 20 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e ts ::test_machin 1360: 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 e] && \.. 1370: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 1380: 68 20 24 3a 3a 74 65 73 74 5f 6d 61 63 68 69 6e h$::test_machin
1390: 65 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  e] > 0} then {..
13a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
13b0: 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e     # NOTE: For n
13c0: 61 74 69 76 65 20 62 75 69 6c 64 73 2c 20 72 65  ative builds, re
13d0: 74 75 72 6e 20 74 68 65 20 70 6c 61 74 66 6f 72  turn the platfor
13e0: 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73 70 6f 6e  m name correspon
13f0: 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20 20 20 20  ding to..
1400: 20 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73   #       the tes
1410: 74 20 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74  t machine archit
1420: 65 63 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73  ecture; otherwis
1430: 65 2c 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70  e, return an emp
1440: 74 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  ty..        #
1450: 20 20 20 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20      string...
1460: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
1470: 72 65 74 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e  return [expr {$n 1480: 61 74 69 76 65 20 3f 20 5b 6d 61 63 68 69 6e 65 ative ? [machine 1490: 54 6f 50 6c 61 74 66 6f 72 6d 20 24 3a 3a 74 65 ToPlatform$::te
14a0: 73 74 5f 6d 61 63 68 69 6e 65 5d 20 3a 20 22 22  st_machine] : ""
14b0: 7d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  }]..      } else
14c0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
14d0: 20 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28   ::tcl_platform(
14e0: 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e 20  machine)]} then
14f0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
1500: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
1510: 72 20 6e 61 74 69 76 65 20 62 75 69 6c 64 73 2c  r native builds,
1520: 20 72 65 74 75 72 6e 20 74 68 65 20 70 6c 61 74   return the plat
1530: 66 6f 72 6d 20 6e 61 6d 65 20 63 6f 72 72 65 73  form name corres
1540: 70 6f 6e 64 69 6e 67 20 74 6f 0d 0a 20 20 20 20  ponding to..
1550: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
1560: 6d 61 63 68 69 6e 65 20 61 72 63 68 69 74 65 63  machine architec
1570: 74 75 72 65 3b 20 6f 74 68 65 72 77 69 73 65 2c  ture; otherwise,
1580: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79   return an empty
1590: 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 20 20   string...
15a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
15b0: 75 72 6e 20 5b 65 78 70 72 20 7b 24 6e 61 74 69  urn [expr {$nati 15c0: 76 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 ve ? \.. 15d0: 20 20 20 20 5b 6d 61 63 68 69 6e 65 54 6f 50 6c [machineToPl 15e0: 61 74 66 6f 72 6d 20 24 3a 3a 74 63 6c 5f 70 6c atform$::tcl_pl
15f0: 61 74 66 6f 72 6d 28 6d 61 63 68 69 6e 65 29 5d  atform(machine)]
1600: 20 3a 20 22 22 7d 5d 0d 0a 20 20 20 20 20 20 7d   : ""}]..      }
1610: 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20   else {..
1620: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
1630: 54 45 3a 20 4e 6f 20 6d 61 63 68 69 6e 65 20 61  TE: No machine a
1640: 72 63 68 69 74 65 63 74 75 72 65 20 69 73 20 61  rchitecture is a
1650: 76 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e  vailable, return
1660: 20 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67   an empty string
1670: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
1680: 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d        return "".
1690: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
16a0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
16b0: 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74 69  BuildConfigurati
16c0: 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23  on {} {..      #
16d0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
16e0: 53 65 65 20 69 66 20 74 68 65 20 22 63 6f 6e 66  See if the "conf
16f0: 69 67 75 72 61 74 69 6f 6e 22 20 73 65 74 74 69  iguration" setti
1700: 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65 72  ng has been over
1710: 72 69 64 64 65 6e 20 62 79 20 74 68 65 0d 0a 20  ridden by the..
1720: 20 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65       #       use
1730: 72 20 28 65 2e 67 2e 20 6f 6e 20 74 68 65 20 63  r (e.g. on the c
1740: 6f 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54  ommand line).  T
1750: 68 69 73 20 68 65 6c 70 73 20 63 6f 6e 74 72 6f  his helps contro
1760: 6c 20 65 78 61 63 74 6c 79 0d 0a 20 20 20 20 20  l exactly..
1770: 20 23 20 20 20 20 20 20 20 77 68 69 63 68 20 73   #       which s
1780: 65 74 20 6f 66 20 62 69 6e 61 72 69 65 73 20 77  et of binaries w
1790: 65 20 61 72 65 20 74 65 73 74 69 6e 67 20 28 69  e are testing (i
17a0: 2e 65 2e 20 74 68 6f 73 65 20 62 75 69 6c 74 20  .e. those built
17b0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
17c0: 20 20 20 20 20 20 22 44 65 62 75 67 22 20 6f 72        "Debug" or
17d0: 20 22 52 65 6c 65 61 73 65 22 20 62 75 69 6c 64   "Release" build
17e0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 29   configurations)
17f0: 2e 20 20 54 6f 20 6f 76 65 72 72 69 64 65 20 74  .  To override t
1800: 68 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20  his..      #
1810: 20 20 20 76 61 6c 75 65 20 76 69 61 20 74 68 65     value via the
1820: 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65   command line, e
1830: 6e 74 65 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73  nter a command s
1840: 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20 6f 66  imilar to one of
1850: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
1860: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61  the following (a
1870: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
1880: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1890: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
18a0: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
18b0: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
18c0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 44  _configuration D
18d0: 65 62 75 67 22 0d 0a 20 20 20 20 20 20 23 20 20  ebug"..      #
18e0: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
18f0: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
1900: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
1910: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
1920: 65 6c 6c 2e 65 78 65 20 2d 61 6e 79 49 6e 69 74  ell.exe -anyInit
1930: 69 61 6c 69 7a 65 20 22 73 65 74 20 74 65 73 74  ialize "set test
1940: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 52  _configuration R
1950: 65 6c 65 61 73 65 22 0d 0a 20 20 20 20 20 20 23  elease"..      #
1960: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
1970: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
1980: 6c 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  le..      #..
1990: 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c 65     #       Eagle
19a0: 53 68 65 6c 6c 2e 65 78 65 20 2d 66 69 6c 65 20  Shell.exe -file
19b0: 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61  .\path\to\all.ea
19c0: 67 6c 65 20 2d 70 72 65 54 65 73 74 0d 0a 20 20  gle -preTest..
19d0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 22 75      #         "u
19e0: 6e 73 65 74 20 2d 6e 6f 63 6f 6d 70 6c 61 69 6e  nset -nocomplain
19f0: 20 74 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74   test_configurat
1a00: 69 6f 6e 22 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ion"..      #..
1a10: 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65       if {[info e
1a20: 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e  xists ::test_con
1a30: 66 69 67 75 72 61 74 69 6f 6e 5d 20 26 26 20 5c  figuration] && \
1a40: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
1a50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 65  ing length $::te 1a60: 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e st_configuration 1a70: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. 1a80: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 1a90: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 # NOTE: Use th 1aa0: 65 20 73 70 65 63 69 66 69 65 64 20 74 65 73 74 e specified test 1ab0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e 20 configuration. 1ac0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c The default val 1ad0: 75 65 20 75 73 65 64 0d 0a 20 20 20 20 20 20 20 ue used.. 1ae0: 20 23 20 20 20 20 20 20 20 66 6f 72 20 74 68 69 # for thi 1af0: 73 20 76 61 72 69 61 62 6c 65 20 69 73 20 74 79 s variable is ty 1b00: 70 69 63 61 6c 6c 79 20 22 52 65 6c 65 61 73 65 pically "Release 1b10: 22 2c 20 61 73 20 73 65 74 20 62 79 20 74 68 65 ", as set by the 1b20: 20 74 65 73 74 0d 0a 20 20 20 20 20 20 20 20 23 test.. # 1b30: 20 20 20 20 20 20 20 73 75 69 74 65 20 69 74 73 suite its 1b40: 65 6c 66 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d elf... #. 1b50: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 1b60: 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75 72$::test_configur
1b70: 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 7d 20 65  ation..      } e
1b80: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
1b90: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
1ba0: 3a 20 4e 6f 72 6d 61 6c 6c 79 2c 20 77 65 20 77  : Normally, we w
1bb0: 69 6c 6c 20 6e 65 76 65 72 20 68 69 74 20 74 68  ill never hit th
1bc0: 69 73 20 63 61 73 65 20 62 65 63 61 75 73 65 20  is case because
1bd0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
1be0: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
1bf0: 20 20 74 65 73 74 20 63 6f 6e 66 69 67 75 72 61    test configura
1c00: 74 69 6f 6e 20 76 61 72 69 61 62 6c 65 20 69 73  tion variable is
1c10: 20 61 6c 77 61 79 73 20 73 65 74 20 62 79 20 74   always set by t
1c20: 68 65 20 74 65 73 74 20 73 75 69 74 65 0d 0a 20  he test suite..
1c30: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
1c40: 74 73 65 6c 66 3b 20 68 6f 77 65 76 65 72 2c 20  tself; however,
1c50: 69 74 20 63 61 6e 20 62 65 20 6f 76 65 72 72 69  it can be overri
1c60: 64 64 65 6e 20 75 73 69 6e 67 20 74 68 65 20 75  dden using the u
1c70: 6e 73 65 74 20 63 6f 6d 6d 61 6e 64 0d 0a 20 20  nset command..
1c80: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 66 72        #       fr
1c90: 6f 6d 20 74 68 65 20 2d 70 72 65 54 65 73 74 20  om the -preTest
1ca0: 6f 70 74 69 6f 6e 20 74 6f 20 74 68 65 20 74 65  option to the te
1cb0: 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20  st suite...
1cc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65     #..        re
1cd0: 74 75 72 6e 20 24 3a 3a 65 61 67 6c 65 5f 70 6c  turn $::eagle_pl 1ce0: 61 74 66 6f 72 6d 28 63 6f 6e 66 69 67 75 72 61 atform(configura 1cf0: 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 7d 0d 0a tion).. }.. 1d00: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 1d10: 6f 63 20 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 oc getBuildConfi 1d20: 67 75 72 61 74 69 6f 6e 73 20 7b 7d 20 7b 0d 0a gurations {} {.. 1d30: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 1d40: 20 4e 4f 54 45 3a 20 53 65 65 20 69 66 20 74 68 NOTE: See if th 1d50: 65 20 6c 69 73 74 20 6f 66 20 74 65 73 74 20 63 e list of test c 1d60: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 20 68 61 onfigurations ha 1d70: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 s been overridde 1d80: 6e 20 62 79 0d 0a 20 20 20 20 20 20 23 20 20 20 n by.. # 1d90: 20 20 20 20 74 68 65 20 75 73 65 72 20 28 65 2e the user (e. 1da0: 67 2e 20 6f 6e 20 74 68 65 20 63 6f 6d 6d 61 6e g. on the comman 1db0: 64 20 6c 69 6e 65 29 2e 0d 0a 20 20 20 20 20 20 d line)... 1dc0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e #.. if {[in 1dd0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 74 fo exists ::test 1de0: 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73 5d _configurations] 1df0: 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 && \.. 1e00: 20 5b 6c 6c 65 6e 67 74 68 20 24 3a 3a 74 65 73 [llength$::tes
1e10: 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 73  t_configurations
1e20: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20  ] > 0} then {..
1e30: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
1e40: 20 20 23 20 4e 4f 54 45 3a 20 55 73 65 20 74 68    # NOTE: Use th
1e50: 65 20 73 70 65 63 69 66 69 65 64 20 6c 69 73 74  e specified list
1e60: 20 6f 66 20 74 65 73 74 20 63 6f 6e 66 69 67 75   of test configu
1e70: 72 61 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20  rations...
1e80: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
1e90: 75 72 6e 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66  urn $::test_conf 1ea0: 69 67 75 72 61 74 69 6f 6e 73 0d 0a 20 20 20 20 igurations.. 1eb0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. 1ec0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 1ed0: 20 4e 4f 54 45 3a 20 55 73 65 20 74 68 65 20 64 NOTE: Use the d 1ee0: 65 66 61 75 6c 74 20 6c 69 73 74 20 6f 66 20 74 efault list of t 1ef0: 65 73 74 20 63 6f 6e 66 69 67 75 72 61 74 69 6f est configuratio 1f00: 6e 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ns... #.. 1f10: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 1f20: 6c 69 73 74 20 44 65 62 75 67 20 52 65 6c 65 61 list Debug Relea 1f30: 73 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 se].. }.. 1f40: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 }..... proc 1f50: 20 67 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 getBuildBaseDir 1f60: 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 ectory {} {.. 1f70: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f #.. # NO 1f80: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74 TE: Figure out t 1f90: 68 65 20 62 61 73 65 20 64 69 72 65 63 74 6f 72 he base director 1fa0: 79 20 77 68 65 72 65 20 61 6c 6c 20 74 68 65 20 y where all the 1fb0: 62 75 69 6c 64 73 20 73 68 6f 75 6c 64 20 62 65 builds should be 1fc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 1fd0: 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20 77 located. This w 1fe0: 69 6c 6c 20 62 65 20 74 68 65 20 64 69 72 65 63 ill be the direc 1ff0: 74 6f 72 79 20 74 68 61 74 20 63 6f 6e 74 61 69 tory that contai 2000: 6e 73 20 74 68 65 20 61 63 74 75 61 6c 0d 0a 20 ns the actual.. 2010: 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75 69 # bui 2020: 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74 ld output direct 2030: 6f 72 79 20 28 65 2e 67 2e 20 70 61 72 65 6e 74 ory (e.g. parent 2040: 20 6f 66 20 22 62 69 6e 22 29 2e 0d 0a 20 20 20 of "bin")... 2050: 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b #.. if { 2060: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 62 [info exists ::b 2070: 75 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 uild_base_direct 2080: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 2090: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 20a0: 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 62 61 73 gth$::build_bas
20b0: 65 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30  e_directory] > 0
20c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
20d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
20e0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f  OTE: The locatio
20f0: 6e 20 6f 66 20 74 68 65 20 62 75 69 6c 64 20 62  n of the build b
2100: 61 73 65 20 64 69 72 65 63 74 6f 72 79 20 68 61  ase directory ha
2110: 73 20 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65  s been overridde
2120: 6e 3b 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  n;..        #
2130: 20 20 20 20 74 68 65 72 65 66 6f 72 65 2c 20 75      therefore, u
2140: 73 65 20 69 74 20 76 65 72 62 61 74 69 6d 2e 0d  se it verbatim..
2150: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
2160: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 62 75      return $::bu 2170: 69 6c 64 5f 62 61 73 65 5f 64 69 72 65 63 74 6f ild_base_directo 2180: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 2190: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 if {[info exists 21a0: 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 72 65 63 74 ::common_direct 21b0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 21c0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 21d0: 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69 gth$::common_di
21e0: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68  rectory] > 0} th
21f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  en {..        #.
2200: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
2210: 20 4e 65 78 74 2c 20 66 61 6c 6c 62 61 63 6b 20   Next, fallback
2220: 74 6f 20 74 68 65 20 70 61 72 65 6e 74 20 64 69  to the parent di
2230: 72 65 63 74 6f 72 79 20 6f 66 20 74 68 65 20 6f  rectory of the o
2240: 6e 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ne containing..
2250: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74         #       t
2260: 68 69 73 20 66 69 6c 65 20 28 69 2e 65 2e 20 22  his file (i.e. "
2270: 63 6f 6d 6d 6f 6e 2e 65 61 67 6c 65 22 29 2c 20  common.eagle"),
2280: 69 66 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20  if available...
2290: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
22a0: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64    return [file d
22b0: 69 72 6e 61 6d 65 20 24 3a 3a 63 6f 6d 6d 6f 6e  irname $::common 22c0: 5f 64 69 72 65 63 74 6f 72 79 5d 0d 0a 20 20 20 _directory].. 22d0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e } elseif {[in 22e0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 70 61 74 68 fo exists ::path 22f0: 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 ] && \.. 2300: 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 [string length 2310: 20 24 3a 3a 70 61 74 68 5d 20 3e 20 30 7d 20 74$::path] > 0} t
2320: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
2330: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
2340: 3a 20 46 69 6e 61 6c 6c 79 2c 20 66 61 6c 6c 62  : Finally, fallb
2350: 61 63 6b 20 74 6f 20 74 68 65 20 70 61 72 65 6e  ack to the paren
2360: 74 20 64 69 72 65 63 74 6f 72 79 20 6f 66 20 74  t directory of t
2370: 68 65 20 45 61 67 6c 65 54 65 73 74 0d 0a 20 20  he EagleTest..
2380: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 61        #       pa
2390: 74 68 2e 20 20 54 68 65 20 45 61 67 6c 65 54 65  th.  The EagleTe
23a0: 73 74 20 70 61 63 6b 61 67 65 20 67 75 61 72 61  st package guara
23b0: 6e 74 65 65 73 20 74 68 61 74 20 74 68 69 73 20  ntees that this
23c0: 76 61 72 69 61 62 6c 65 0d 0a 20 20 20 20 20 20  variable..
23d0: 20 20 23 20 20 20 20 20 20 20 77 69 6c 6c 20 62    #       will b
23e0: 65 20 73 65 74 20 74 6f 20 74 68 65 20 64 69 72  e set to the dir
23f0: 65 63 74 6f 72 79 20 63 6f 6e 74 61 69 6e 69 6e  ectory containin
2400: 67 20 74 68 65 20 66 69 72 73 74 20 66 69 6c 65  g the first file
2410: 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 23 20 20   to..        #
2420: 20 20 20 20 20 65 78 65 63 75 74 65 20 74 68 65       execute the
2430: 20 5b 72 75 6e 54 65 73 74 50 72 6f 6c 6f 67 75   [runTestPrologu
2440: 65 5d 20 73 63 72 69 70 74 20 6c 69 62 72 61 72  e] script librar
2450: 79 20 70 72 6f 63 65 64 75 72 65 2e 0d 0a 20 20  y procedure...
2460: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
2470: 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 64 69   return [file di
2480: 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 0d 0a  rname $::path].. 2490: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 24a0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 24b0: 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 20 70 61 # NOTE: No pa 24c0: 74 68 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c th is available, 24d0: 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 79 return an empty 24e0: 20 73 74 72 69 6e 67 2e 20 20 54 68 69 73 20 70 string. This p 24f0: 6f 69 6e 74 0d 0a 20 20 20 20 20 20 20 20 23 20 oint.. # 2500: 20 20 20 20 20 20 73 68 6f 75 6c 64 20 6e 6f 74 should not 2510: 20 62 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 be reached... 2520: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 2530: 20 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 return "".. 2540: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 }.. }..... 2550: 20 20 20 70 72 6f 63 20 69 73 4d 69 78 65 64 4d proc isMixedM 2560: 6f 64 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 odeAssembly { fi 2570: 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20 leName {varName 2580: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 ""} } {.. # 2590: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: 25a0: 46 69 72 73 74 2c 20 6d 61 6b 65 20 73 75 72 65 First, make sure 25b0: 20 74 68 65 20 74 65 73 74 20 73 75 69 74 65 20 the test suite 25c0: 69 6e 66 72 61 73 74 72 75 63 74 75 72 65 20 69 infrastructure i 25d0: 73 20 61 6c 6c 6f 77 65 64 20 74 6f 0d 0a 20 20 s allowed to.. 25e0: 20 20 20 20 23 20 20 20 20 20 20 20 75 73 65 20 # use 25f0: 74 68 65 20 5b 65 78 65 63 5d 20 63 6f 6d 6d 61 the [exec] comma 2600: 6e 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 nd... #.. 2610: 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 2620: 78 69 73 74 73 20 3a 3a 6e 6f 28 65 78 65 63 29 xists ::no(exec) 2630: 5d 20 26 26 20 21 5b 69 6e 66 6f 20 65 78 69 73 ] && ![info exis 2640: 74 73 20 3a 3a 6e 6f 28 63 6f 72 46 6c 61 67 73 ts ::no(corFlags 2650: 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 2660: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 2670: 20 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 6c 6f NOTE: If the lo 2680: 63 61 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61 cation of CorFla 2690: 67 73 20 69 73 20 70 72 65 73 65 6e 74 20 69 6e gs is present in 26a0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 the environment 26b0: 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 ,.. # 26c0: 20 20 20 75 73 65 20 69 74 3b 20 6f 74 68 65 72 use it; other 26d0: 77 69 73 65 20 61 73 73 75 6d 65 20 69 74 20 69 wise assume it i 26e0: 73 20 69 6e 20 74 68 65 20 50 41 54 48 2e 0d 0a s in the PATH... 26f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 2700: 20 20 20 73 65 74 20 63 6f 72 46 6c 61 67 73 20 set corFlags 2710: 5b 65 78 70 72 20 7b 0d 0a 20 20 20 20 20 20 20 [expr {.. 2720: 20 20 20 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 [info exists 2730: 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 67 73 29 5d ::env(CorFlags)] 2740: 20 3f 20 24 3a 3a 65 6e 76 28 43 6f 72 46 6c 61 ?$::env(CorFla
2750: 67 73 29 20 3a 20 22 43 6f 72 46 6c 61 67 73 22  gs) : "CorFlags"
2760: 0d 0a 20 20 20 20 20 20 20 20 7d 5d 0d 0a 0d 0a  ..        }]....
2770: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
2780: 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d     # NOTE: Attem
2790: 70 74 20 74 6f 20 65 78 65 63 75 74 65 20 43 6f  pt to execute Co
27a0: 72 46 6c 61 67 73 20 6f 6e 20 74 68 65 20 73 70  rFlags on the sp
27b0: 65 63 69 66 69 65 64 20 66 69 6c 65 2e 0d 0a 20  ecified file...
27c0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
27d0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
27e0: 20 20 20 20 20 20 20 20 20 20 65 78 65 63 20 2d            exec -
27f0: 2d 20 24 63 6f 72 46 6c 61 67 73 20 5b 66 69 6c  - $corFlags [fil 2800: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 24 66 69 e nativename$fi
2810: 6c 65 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 20  leName]..
2820: 20 7d 20 65 78 65 63 5d 20 3d 3d 20 30 7d 20 74   } exec] == 0} t
2830: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
2840: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20   #..          #
2850: 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 65 73 74  NOTE: If request
2860: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
2870: 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 65 74  , attempt to det
2880: 65 72 6d 69 6e 65 20 74 68 65 0d 0a 20 20 20 20  ermine the..
2890: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70 6c        #       pl
28a0: 61 74 66 6f 72 6d 20 66 6f 72 20 74 68 65 20 73  atform for the s
28b0: 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 61 73  pecified file as
28c0: 20 77 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 20 20   well...
28d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69    #..          i
28e0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
28f0: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d  h $varName] > 0} 2900: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 2910: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2920: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 74 6f 72 # NOTE: Stor 2930: 65 20 74 68 65 20 70 6c 61 74 66 6f 72 6d 20 69 e the platform i 2940: 6e 20 74 68 65 20 6e 61 6d 65 64 20 76 61 72 69 n the named vari 2950: 61 62 6c 65 20 69 6e 20 74 68 65 0d 0a 20 20 20 able in the.. 2960: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 2970: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 20 context of our 2980: 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 20 caller... 2990: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 29a0: 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 upvar 1$var
29b0: 4e 61 6d 65 20 70 6c 61 74 66 6f 72 6d 0d 0a 0d  Name platform...
29c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
29d0: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f              # NO
29e0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
29f0: 78 74 72 61 63 74 20 74 68 65 20 50 45 20 6c 69  xtract the PE li
2a00: 6e 65 20 66 72 6f 6d 20 74 68 65 20 63 61 70 74  ne from the capt
2a10: 75 72 65 64 0d 0a 20 20 20 20 20 20 20 20 20 20  ured..
2a20: 20 20 23 20 20 20 20 20 20 20 6f 75 74 70 75 74    #       output
2a30: 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c 75 65  .  If this value
2a40: 20 69 73 20 22 50 45 33 32 22 20 6f 72 20 22 50   is "PE32" or "P
2a50: 45 33 32 2b 22 2c 20 74 68 65 0d 0a 20 20 20 20  E32+", the..
2a60: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2a70: 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 69 73  assembly file is
2a80: 20 33 32 2d 62 69 74 20 6f 72 20 36 34 2d 62 69   32-bit or 64-bi
2a90: 74 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 3b  t, respectively;
2aa0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20  ..            #
2ab0: 20 20 20 20 20 20 6f 74 68 65 72 77 69 73 65 2c        otherwise,
2ac0: 20 69 74 73 20 74 79 70 65 20 69 73 20 75 6e 6b   its type is unk
2ad0: 6e 6f 77 6e 2e 0d 0a 20 20 20 20 20 20 20 20 20  nown...
2ae0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
2af0: 20 20 73 65 74 20 70 61 74 74 65 72 6e 20 7b 5e    set pattern {^
2b00: 50 45 20 20 20 20 20 20 20 20 3a 20 28 50 45 33  PE        : (PE3
2b10: 32 7c 50 45 33 32 5c 2b 29 5c 73 2b 24 7d 0d 0a  2|PE32\+)\s+$}.. 2b20: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 .. if 2b30: 20 7b 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 20 {[regexp -line 2b40: 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 65 --$pattern $exe 2b50: 63 20 64 75 6d 6d 79 20 70 65 33 32 5d 7d 20 74 c dummy pe32]} t 2b60: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 2b70: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 2b80: 20 20 20 20 20 20 23 20 48 41 43 4b 3a 20 54 68 # HACK: Th 2b90: 69 73 20 5b 73 77 69 74 63 68 5d 20 61 73 73 75 is [switch] assu 2ba0: 6d 65 73 20 74 68 61 74 20 33 32 2d 62 69 74 20 mes that 32-bit 2bb0: 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 65 0d executables are. 2bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 2bd0: 20 20 20 20 20 20 20 61 6c 77 61 79 73 20 78 38 always x8 2be0: 36 20 61 6e 64 20 74 68 61 74 20 36 34 2d 62 69 6 and that 64-bi 2bf0: 74 20 65 78 65 63 75 74 61 62 6c 65 73 20 61 72 t executables ar 2c00: 65 20 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 e always.. 2c10: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 # 2c20: 78 36 34 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 x64... 2c30: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 2c40: 20 20 20 20 20 73 77 69 74 63 68 20 2d 65 78 61 switch -exa 2c50: 63 74 20 2d 2d 20 24 70 65 33 32 20 7b 0d 0a 20 ct --$pe32 {..
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
2c70: 45 33 32 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  E32 {..
2c80: 20 20 20 20 20 20 20 20 20 73 65 74 20 70 6c 61           set pla
2c90: 74 66 6f 72 6d 20 57 69 6e 33 32 0d 0a 20 20 20  tform Win32..
2ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2cc0: 50 45 33 32 2b 20 7b 0d 0a 20 20 20 20 20 20 20  PE32+ {..
2cd0: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 70             set p
2ce0: 6c 61 74 66 6f 72 6d 20 78 36 34 0d 0a 20 20 20  latform x64..
2cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
2d10: 64 65 66 61 75 6c 74 20 7b 0d 0a 20 20 20 20 20  default {..
2d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74               set
2d30: 20 70 6c 61 74 66 6f 72 6d 20 22 22 0d 0a 20 20   platform ""..
2d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
2d50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
2d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 20  ..            }
2d70: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20  else {..
2d80: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
2d90: 72 6d 20 22 22 0d 0a 20 20 20 20 20 20 20 20 20  rm ""..
2da0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
2db0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23  }....          #
2dc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
2dd0: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 65  TE: Attempt to e
2de0: 78 74 72 61 63 74 20 74 68 65 20 49 4c 4f 4e 4c  xtract the ILONL
2df0: 59 20 6c 69 6e 65 20 66 72 6f 6d 20 74 68 65 20  Y line from the
2e00: 63 61 70 74 75 72 65 64 0d 0a 20 20 20 20 20 20  captured..
2e10: 20 20 20 20 23 20 20 20 20 20 20 20 6f 75 74 70      #       outp
2e20: 75 74 2e 20 20 49 66 20 74 68 69 73 20 76 61 6c  ut.  If this val
2e30: 75 65 20 69 73 20 7a 65 72 6f 2c 20 74 68 65 20  ue is zero, the
2e40: 73 70 65 63 69 66 69 65 64 20 66 69 6c 65 20 6d  specified file m
2e50: 75 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ust..          #
2e60: 20 20 20 20 20 20 20 62 65 20 61 20 6d 69 78 65         be a mixe
2e70: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 3b  d-mode assembly;
2e80: 20 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 63   otherwise, it c
2e90: 6f 6e 74 61 69 6e 73 20 6f 6e 6c 79 0d 0a 20 20  ontains only..
2ea0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
2eb0: 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f 6e 65 6e  managed componen
2ec0: 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  ts...          #
2ed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
2ee0: 70 61 74 74 65 72 6e 20 7b 5e 49 4c 4f 4e 4c 59  pattern {^ILONLY
2ef0: 20 20 20 20 3a 20 28 30 7c 31 29 5c 73 2b 24 7d      : (0|1)\s+$} 2f00: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 .... if 2f10: 20 7b 21 5b 72 65 67 65 78 70 20 2d 6c 69 6e 65 {![regexp -line 2f20: 20 2d 2d 20 24 70 61 74 74 65 72 6e 20 24 65 78 --$pattern $ex 2f30: 65 63 20 64 75 6d 6d 79 20 69 6c 4f 6e 6c 79 5d ec dummy ilOnly] 2f40: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 2f50: 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c return fal 2f60: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d se.. }. 2f70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 ... if 2f80: 7b 21 24 69 6c 4f 6e 6c 79 7d 20 74 68 65 6e 20 {!$ilOnly} then
2f90: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  {..            r
2fa0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
2fb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..
2fc0: 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }....
2fd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
2fe0: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 74 65 73  NOTE: If the tes
2ff0: 74 20 73 75 69 74 65 20 63 61 6e 6e 6f 74 20 75  t suite cannot u
3000: 73 65 20 5b 65 78 65 63 5d 20 6f 72 20 65 78 65  se [exec] or exe
3010: 63 75 74 69 6f 6e 20 6f 66 20 43 6f 72 46 6c 61  cution of CorFla
3020: 67 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  gs..      #
3030: 20 20 66 61 69 6c 65 64 2c 20 72 65 74 75 72 6e    failed, return
3040: 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 20 20 23   false...      #
3050: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 66  ..      return f
3060: 61 6c 73 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a  alse..    }.....
3070: 20 20 20 20 70 72 6f 63 20 69 73 42 75 69 6c 64      proc isBuild
3080: 41 76 61 69 6c 61 62 6c 65 20 7b 20 6e 61 74 69  Available { nati
3090: 76 65 20 64 69 72 65 63 74 6f 72 79 20 7b 76 61  ve directory {va
30a0: 72 4e 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20  rName ""} } {..
30b0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
30c0: 4e 4f 54 45 3a 20 42 75 69 6c 64 20 74 68 65 20  NOTE: Build the
30d0: 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20  fully qualified
30e0: 66 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68  file name for th
30f0: 65 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62  e primary assemb
3100: 6c 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ly..      #
3110: 20 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65    containing the
3120: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
3130: 69 74 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70  ite managed comp
3140: 6f 6e 65 6e 74 73 2e 20 20 49 74 0d 0a 20 20 20  onents.  It..
3150: 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 6c     #       shoul
3160: 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61 74 20  d be noted that
3170: 74 68 69 73 20 61 73 73 65 6d 62 6c 79 20 66 69  this assembly fi
3180: 6c 65 20 6d 61 79 20 61 6c 73 6f 20 63 6f 6e 74  le may also cont
3190: 61 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23  ain the..      #
31a0: 20 20 20 20 20 20 20 6e 61 74 69 76 65 20 63 6f         native co
31b0: 6d 70 6f 6e 65 6e 74 73 2c 20 69 66 20 61 20 6e  mponents, if a n
31c0: 61 74 69 76 65 20 62 75 69 6c 64 20 69 73 20 69  ative build is i
31d0: 6e 20 75 73 65 2e 0d 0a 20 20 20 20 20 20 23 0d  n use...      #.
31e0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
31f0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65  ame [file native
3200: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  name [file join
3210: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20  $directory \.. 3220: 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 3230: 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5d 5d ata.SQLite.dll]] 3240: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b .... if {![ 3250: 66 69 6c 65 20 65 78 69 73 74 73 20 24 66 69 6c file exists$fil
3260: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
3270: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
3280: 61 6c 73 65 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  alse..      }...
3290: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
32a0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20  # NOTE: Attempt
32b0: 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
32c0: 20 64 65 74 65 63 74 20 69 66 20 74 68 65 20 70   detect if the p
32d0: 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c 79 0d  rimary assembly.
32e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
32f0: 6f 6e 74 61 69 6e 73 20 61 6e 79 20 6e 61 74 69  ontains any nati
3300: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2c 20 69  ve components, i
3310: 66 20 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20  f necessary...
3320: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
3330: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20  {[string length
3340: 24 6e 61 74 69 76 65 5d 20 3d 3d 20 30 7d 20 74  $native] == 0} t 3350: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 hen {.. i 3360: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 f {[string lengt 3370: 68 20 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d h$varName] > 0}
3380: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
3390: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e     upvar 1 $varN 33a0: 61 6d 65 20 24 76 61 72 4e 61 6d 65 0d 0a 20 20 ame$varName..
33b0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
33c0: 20 20 20 73 65 74 20 6e 61 74 69 76 65 20 5b 69     set native [i
33d0: 73 4d 69 78 65 64 4d 6f 64 65 41 73 73 65 6d 62  sMixedModeAssemb
33e0: 6c 79 20 24 66 69 6c 65 4e 61 6d 65 20 24 76 61  ly $fileName$va
33f0: 72 4e 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d  rName]..      }.
3400: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3410: 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68 65    # NOTE: If the
3420: 20 70 72 69 6d 61 72 79 20 61 73 73 65 6d 62 6c   primary assembl
3430: 79 20 61 6c 73 6f 20 63 6f 6e 74 61 69 6e 73 20  y also contains
3440: 74 68 65 20 6e 61 74 69 76 65 20 63 6f 6d 70 6f  the native compo
3450: 6e 65 6e 74 73 2c 0d 0a 20 20 20 20 20 20 23 20  nents,..      #
3460: 20 20 20 20 20 20 77 65 20 68 61 76 65 20 65 76        we have ev
3470: 65 72 79 74 68 69 6e 67 20 77 65 20 6e 65 65 64  erything we need
3480: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
3490: 20 20 69 66 20 7b 24 6e 61 74 69 76 65 7d 20 74    if {$native} t 34a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 34b0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 34c0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 34d0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 # NOTE: Bu 34e0: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75 ild the fully qu 34f0: 61 6c 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d alified file nam 3500: 65 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 6f e for the intero 3510: 70 20 61 73 73 65 6d 62 6c 79 0d 0a 20 20 20 20 p assembly.. 3520: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 # contai 3530: 6e 69 6e 67 20 74 68 65 20 53 79 73 74 65 6d 2e ning the System. 3540: 44 61 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 Data.SQLite nati 3550: 76 65 20 63 6f 6d 70 6f 6e 65 6e 74 73 2e 20 20 ve components. 3560: 49 66 20 74 68 69 73 0d 0a 20 20 20 20 20 20 23 If this.. # 3570: 20 20 20 20 20 20 20 66 69 6c 65 20 65 78 69 73 file exis 3580: 74 73 2c 20 77 65 20 73 68 6f 75 6c 64 20 68 61 ts, we should ha 3590: 76 65 20 65 76 65 72 79 74 68 69 6e 67 20 77 65 ve everything we 35a0: 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d need... #. 35b0: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e . set fileN 35c0: 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 69 76 65 ame [file native 35d0: 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 name [file join 35e0: 24 64 69 72 65 63 74 6f 72 79 20 5c 0d 0a 20 20$directory \..
35f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 2e 49          SQLite.I
3600: 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a 0d 0a  nterop.dll]]....
3610: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20        if {[file
3620: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 3630: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 3640: 20 20 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a return true.. 3650: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 3660: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE 3670: 3a 20 42 75 69 6c 64 20 74 68 65 20 66 75 6c 6c : Build the full 3680: 79 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 y qualified file 3690: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 53 51 name for the SQ 36a0: 4c 69 74 65 20 63 6f 72 65 0d 0a 20 20 20 20 20 Lite core.. 36b0: 20 23 20 20 20 20 20 20 20 6c 69 62 72 61 72 79 # library 36c0: 2e 20 20 49 66 20 74 68 69 73 20 66 69 6c 65 20 . If this file 36d0: 65 78 69 73 74 73 2c 20 77 65 20 73 68 6f 75 6c exists, we shoul 36e0: 64 20 68 61 76 65 20 65 76 65 72 79 74 68 69 6e d have everythin 36f0: 67 20 77 65 0d 0a 20 20 20 20 20 20 23 20 20 20 g we.. # 3700: 20 20 20 20 6e 65 65 64 2e 0d 0a 20 20 20 20 20 need... 3710: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 66 69 #.. set fi 3720: 6c 65 4e 61 6d 65 20 5b 66 69 6c 65 20 6e 61 74 leName [file nat 3730: 69 76 65 6e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f ivename [file jo 3740: 69 6e 20 24 64 69 72 65 63 74 6f 72 79 20 5c 0d in$directory \.
3750: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
3760: 65 33 2e 64 6c 6c 5d 5d 0d 0a 0d 0a 20 20 20 20  e3.dll]]....
3770: 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73    if {[file exis
3780: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74  ts $fileName]} t 3790: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 hen {.. r 37a0: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 eturn true.. 37b0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a }.... #.. 37c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4f 6e # NOTE: On 37d0: 65 20 6f 72 20 6d 6f 72 65 20 6e 61 74 69 76 65 e or more native 37e0: 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 6e 65 65 64 components need 37f0: 65 64 20 62 79 20 53 79 73 74 65 6d 2e 44 61 74 ed by System.Dat 3800: 61 2e 53 51 4c 69 74 65 0d 0a 20 20 20 20 20 20 a.SQLite.. 3810: 23 20 20 20 20 20 20 20 61 72 65 20 6d 69 73 73 # are miss 3820: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ing... #.. 3830: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals 3840: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... 3850: 20 70 72 6f 63 20 69 73 52 65 6c 65 61 73 65 41 proc isReleaseA 3860: 76 61 69 6c 61 62 6c 65 20 7b 20 64 69 72 65 63 vailable { direc 3870: 74 6f 72 79 20 7b 76 61 72 4e 61 6d 65 20 22 22 tory {varName "" 3880: 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 } } {.. if 3890: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 38a0: 24 76 61 72 4e 61 6d 65 5d 20 3e 20 30 7d 20 74$varName] > 0} t
38b0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 75  hen {..        u
38c0: 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20  pvar 1 $varName 38d0: 24 76 61 72 4e 61 6d 65 0d 0a 20 20 20 20 20 20$varName..
38e0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  }....      retur
38f0: 6e 20 5b 69 73 42 75 69 6c 64 41 76 61 69 6c 61  n [isBuildAvaila
3900: 62 6c 65 20 22 22 20 24 64 69 72 65 63 74 6f 72  ble "" $director 3910: 79 20 24 76 61 72 4e 61 6d 65 5d 0d 0a 20 20 20 y$varName]..
3920: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
3930: 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65 63 74 6f  joinBuildDirecto
3940: 72 79 20 7b 20 6e 61 74 69 76 65 20 70 61 74 68  ry { native path
3950: 20 79 65 61 72 20 70 6c 61 74 66 6f 72 6d 20 63   year platform c
3960: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 7d 20 7b  onfiguration } {
3970: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
3980: 20 23 20 4e 4f 54 45 3a 20 46 69 67 75 72 65 20   # NOTE: Figure
3990: 6f 75 74 20 61 6e 64 20 74 68 65 6e 20 72 65 74  out and then ret
39a0: 75 72 6e 20 74 68 65 20 66 75 6c 6c 79 20 71 75  urn the fully qu
39b0: 61 6c 69 66 69 65 64 20 70 61 74 68 20 74 6f 20  alified path to
39c0: 74 68 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20  the build..
39d0: 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f   #       directo
39e0: 72 79 20 62 61 73 65 64 20 6f 6e 20 61 6c 6c 20  ry based on all
39f0: 74 68 65 20 61 72 67 75 6d 65 6e 74 73 20 70 72  the arguments pr
3a00: 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63 61  ovided by our ca
3a10: 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  ller...      #..
3a20: 20 20 20 20 20 20 69 66 20 7b 24 6e 61 74 69 76        if {$nativ 3a30: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 e} then {.. 3a40: 20 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 return [file 3a50: 6a 6f 69 6e 20 24 70 61 74 68 20 62 69 6e 20 24 join$path bin $3a60: 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20 24 year$platform $3a70: 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a configuration].. 3a80: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 3a90: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 3aa0: 66 69 6c 65 20 6a 6f 69 6e 20 24 70 61 74 68 20 file join$path
3ab0: 62 69 6e 20 24 79 65 61 72 20 24 63 6f 6e 66 69  bin $year$confi
3ac0: 67 75 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20  guration bin]..
3ad0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
3ae0: 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42 75  ..    proc getBu
3af0: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 7b 7d 20  ildDirectory {}
3b00: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  {..      #..
3b10: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
3b20: 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72 75   the "native" ru
3b30: 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61 73  ntime option has
3b40: 20 62 65 65 6e 20 73 65 74 2e 20 20 49 66 20 73   been set.  If s
3b50: 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20 20 20 20  o, use the..
3b60: 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63 74    #       direct
3b70: 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78 65  ory for the mixe
3b80: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20  d-mode assembly
3b90: 28 61 2e 6b 2e 61 2e 20 74 68 65 20 6e 61 74 69  (a.k.a. the nati
3ba0: 76 65 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20  ve interop..
3bb0: 20 20 23 20 20 20 20 20 20 20 61 73 73 65 6d 62    #       assemb
3bc0: 6c 79 29 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20  ly).  To enable
3bd0: 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61 20  this option via
3be0: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65  the command line
3bf0: 2c 20 65 6e 74 65 72 20 61 0d 0a 20 20 20 20 20  , enter a..
3c00: 20 23 20 20 20 20 20 20 20 63 6f 6d 6d 61 6e 64   #       command
3c10: 20 73 69 6d 69 6c 61 72 20 74 6f 20 6f 6e 65 20   similar to one
3c20: 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  of the following
3c30: 20 28 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e   (all on one lin
3c40: 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  e):..      #..
3c50: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
3c60: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74  eShell.exe -init
3c70: 69 61 6c 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f  ialize -runtimeO
3c80: 70 74 69 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20  ption native..
3c90: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 2d 66      #         -f
3ca0: 69 6c 65 20 2e 5c 70 61 74 68 5c 74 6f 5c 61 6c  ile .\path\to\al
3cb0: 6c 2e 65 61 67 6c 65 0d 0a 20 20 20 20 20 20 23  l.eagle..      #
3cc0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
3cd0: 54 6f 20 65 6e 61 62 6c 65 20 74 68 69 73 20 6f  To enable this o
3ce0: 70 74 69 6f 6e 20 76 69 61 20 74 68 65 20 63 6f  ption via the co
3cf0: 6d 6d 61 6e 64 20 6c 69 6e 65 20 70 72 69 6f 72  mmand line prior
3d00: 20 74 6f 20 74 68 65 20 22 62 65 74 61 20 31 36   to the "beta 16
3d10: 22 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  "..      #
3d20: 20 72 65 6c 65 61 73 65 20 6f 66 20 45 61 67 6c   release of Eagl
3d30: 65 2c 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  e, the following
3d40: 20 63 6f 6d 6d 61 6e 64 20 6d 75 73 74 20 62 65   command must be
3d50: 20 75 73 65 64 20 69 6e 73 74 65 61 64 0d 0a 20   used instead..
3d60: 20 20 20 20 20 23 20 20 20 20 20 20 20 28 61 6c       #       (al
3d70: 73 6f 20 61 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69  so all on one li
3d80: 6e 65 29 3a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ne):..      #..
3d90: 20 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67       #       Eag
3da0: 6c 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69  leShell.exe -ini
3db0: 74 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69  tialize -postIni
3dc0: 74 69 61 6c 69 7a 65 0d 0a 20 20 20 20 20 20 23  tialize..      #
3dd0: 20 20 20 20 20 20 20 20 20 22 6f 62 6a 65 63 74           "object
3de0: 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72 70 72 65   invoke Interpre
3df0: 74 65 72 2e 47 65 74 41 63 74 69 76 65 20 41 64  ter.GetActive Ad
3e00: 64 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  dRuntimeOption n
3e10: 61 74 69 76 65 22 0d 0a 20 20 20 20 20 20 23 20  ative"..      #
3e20: 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c          -file .\
3e30: 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c  path\to\all.eagl
3e40: 65 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  e..      #..
3e50: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
3e60: 74 73 20 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63  ts ::build_direc
3e70: 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20  tory] && \..
3e80: 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65        [string le
3e90: 6e 67 74 68 20 24 3a 3a 62 75 69 6c 64 5f 64 69  ngth $::build_di 3ea0: 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 rectory] > 0} th 3eb0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 3ec0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 3ed0: 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 The location of 3ee0: 20 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 the build direc 3ef0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76 tory has been ov 3f00: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20 erridden;.. 3f10: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65 # there 3f20: 66 6f 72 65 2c 20 75 73 65 20 69 74 20 76 65 72 fore, use it ver 3f30: 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20 20 20 batim... 3f40: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 3f50: 6e 20 24 3a 3a 62 75 69 6c 64 5f 64 69 72 65 63 n$::build_direc
3f60: 74 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c  tory..      } el
3f70: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d  se {..        #.
3f80: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
3f90: 20 49 66 20 74 68 65 20 22 6e 61 74 69 76 65 22   If the "native"
3fa0: 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20   runtime option
3fb0: 69 73 20 73 65 74 2c 20 74 68 65 20 6d 69 78 65  is set, the mixe
3fc0: 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 0d  d-mode assembly.
3fd0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
3fe0: 20 69 73 20 62 65 69 6e 67 20 74 65 73 74 65 64   is being tested
3ff0: 2e 20 20 49 6e 20 74 68 61 74 20 63 61 73 65 2c  .  In that case,
4000: 20 74 68 65 20 70 61 74 68 20 74 6f 20 74 68 65   the path to the
4010: 20 62 75 69 6c 64 20 64 69 72 65 63 74 6f 72 79   build directory
4020: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4030: 20 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74    will contain t
4040: 68 65 20 70 6c 61 74 66 6f 72 6d 20 6e 61 6d 65  he platform name
4050: 20 61 6e 64 20 61 6c 6c 20 74 68 65 20 62 69 6e   and all the bin
4060: 61 72 69 65 73 20 75 6e 64 65 72 20 74 65 73 74  aries under test
4070: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4080: 20 20 73 68 6f 75 6c 64 20 62 65 20 70 72 65 73    should be pres
4090: 65 6e 74 20 69 6e 20 74 68 61 74 20 64 69 72 65  ent in that dire
40a0: 63 74 6f 72 79 2e 20 20 49 66 20 74 68 65 20 22  ctory.  If the "
40b0: 6e 61 74 69 76 65 22 20 72 75 6e 74 69 6d 65 0d  native" runtime.
40c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
40d0: 20 6f 70 74 69 6f 6e 20 69 73 20 6e 6f 74 20 73   option is not s
40e0: 65 74 2c 20 74 68 65 20 62 75 69 6c 64 20 64 69  et, the build di
40f0: 72 65 63 74 6f 72 79 20 77 69 6c 6c 20 62 65 20  rectory will be
4100: 63 6f 6e 73 69 64 65 72 65 64 20 74 6f 20 62 65  considered to be
4110: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4120: 20 20 22 70 6c 61 74 66 6f 72 6d 2d 6e 65 75 74    "platform-neut
4130: 72 61 6c 22 2c 20 77 69 74 68 20 74 68 65 20 6e  ral", with the n
4140: 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69 6f 6e  otable exception
4150: 20 6f 66 20 61 6e 79 20 6e 61 74 69 76 65 0d 0a   of any native..
4160: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4170: 61 73 73 65 6d 62 6c 79 20 28 65 2e 67 2e 20 22  assembly (e.g. "
4180: 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64  SQLite.Interop.d
4190: 6c 6c 22 29 20 63 6f 70 69 65 64 20 74 68 65 72  ll") copied ther
41a0: 65 20 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20  e during the..
41b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
41c0: 69 6c 64 20 70 72 6f 63 65 73 73 20 69 74 73 65  ild process itse
41d0: 6c 66 2e 20 20 49 66 20 74 68 65 20 62 75 69 6c  lf.  If the buil
41e0: 64 20 70 72 6f 63 65 73 73 20 73 6f 6d 65 68 6f  d process someho
41f0: 77 20 64 6f 65 73 20 6e 6f 74 0d 0a 20 20 20 20  w does not..
4200: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79      #       copy
4210: 20 74 68 65 20 6e 61 74 69 76 65 20 61 73 73 65   the native asse
4220: 6d 62 6c 79 20 66 6f 72 20 74 68 69 73 20 70 6c  mbly for this pl
4230: 61 74 66 6f 72 6d 2c 20 6d 6f 73 74 20 6f 66 20  atform, most of
4240: 74 68 65 20 74 65 73 74 73 0d 0a 20 20 20 20 20  the tests..
4250: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68     #       in th
4260: 65 20 73 75 69 74 65 20 77 69 6c 6c 20 73 69 6d  e suite will sim
4270: 70 6c 79 20 62 65 20 73 6b 69 70 70 65 64 2e 20  ply be skipped.
4280: 20 47 65 6e 65 72 61 6c 6c 79 20 73 70 65 61 6b   Generally speak
4290: 69 6e 67 2c 20 74 68 65 72 65 0d 0a 20 20 20 20  ing, there..
42a0: 20 20 20 20 23 20 20 20 20 20 20 20 61 72 65 20      #       are
42b0: 74 77 6f 20 77 61 79 73 20 74 6f 20 62 75 69 6c  two ways to buil
42c0: 64 20 74 68 65 20 62 69 6e 61 72 69 65 73 20 77  d the binaries w
42d0: 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20 74 6f  hen preparing to
42e0: 20 72 75 6e 20 74 68 65 0d 0a 20 20 20 20 20 20   run the..
42f0: 20 20 23 20 20 20 20 20 20 20 74 65 73 74 20 73    #       test s
4300: 75 69 74 65 3a 0d 0a 20 20 20 20 20 20 20 20 23  uite:..        #
4310: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4320: 20 20 31 2e 20 42 75 69 6c 64 20 74 68 65 20 73    1. Build the s
4330: 65 70 61 72 61 74 65 20 6d 61 6e 61 67 65 64 20  eparate managed
4340: 61 6e 64 20 6e 61 74 69 76 65 20 61 73 73 65 6d  and native assem
4350: 62 6c 69 65 73 20 75 73 69 6e 67 20 73 6f 6d 65  blies using some
4360: 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
4370: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 73 69       commands si
4380: 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20 20 20 20 20  milar to:..
4390: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
43a0: 20 20 20 20 20 20 20 20 20 62 75 69 6c 64 2e 62           build.b
43b0: 61 74 20 24 7b 43 6f 6e 66 69 67 75 72 61 74 69  at ${Configurati 43c0: 6f 6e 7d 4d 61 6e 61 67 65 64 4f 6e 6c 79 20 24 on}ManagedOnly$
43d0: 7b 50 6c 61 74 66 6f 72 6d 7d 0d 0a 20 20 20 20  {Platform}..
43e0: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 62      #          b
43f0: 75 69 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69  uild.bat ${Confi 4400: 67 75 72 61 74 69 6f 6e 7d 4e 61 74 69 76 65 4f guration}NativeO 4410: 6e 6c 79 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 0d nly${Platform}.
4420: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
4430: 20 20 20 20 23 20 20 20 20 20 20 20 20 20 20 57      #          W
4440: 68 65 72 65 20 24 7b 43 6f 6e 66 69 67 75 72 61  here ${Configura 4450: 74 69 6f 6e 7d 20 69 73 20 65 69 74 68 65 72 20 tion} is either 4460: 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 6c 65 "Debug" or "Rele 4470: 61 73 65 22 20 61 6e 64 0d 0a 20 20 20 20 20 20 ase" and.. 4480: 20 20 23 20 20 20 20 20 20 20 20 20 20 24 7b 50 #${P
4490: 6c 61 74 66 6f 72 6d 7d 20 69 73 20 65 69 74 68  latform} is eith
44a0: 65 72 20 22 57 69 6e 33 32 22 20 6f 72 20 22 78  er "Win32" or "x
44b0: 36 34 22 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  64"...        #.
44c0: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
44d0: 20 32 2e 20 42 75 69 6c 64 20 74 68 65 20 6d 69   2. Build the mi
44e0: 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c  xed-mode assembl
44f0: 79 20 75 73 69 6e 67 20 61 20 63 6f 6d 6d 61 6e  y using a comman
4500: 64 20 73 69 6d 69 6c 61 72 20 74 6f 3a 0d 0a 20  d similar to:..
4510: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
4520: 20 20 23 20 20 20 20 20 20 20 20 20 20 62 75 69    #          bui
4530: 6c 64 2e 62 61 74 20 24 7b 43 6f 6e 66 69 67 75  ld.bat ${Configu 4540: 72 61 74 69 6f 6e 7d 20 24 7b 50 6c 61 74 66 6f ration}${Platfo
4550: 72 6d 7d 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  rm}..        #..
4560: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
4570: 20 20 20 57 68 65 72 65 20 24 7b 43 6f 6e 66 69     Where ${Confi 4580: 67 75 72 61 74 69 6f 6e 7d 20 69 73 20 65 69 74 guration} is eit 4590: 68 65 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 her "Debug" or " 45a0: 52 65 6c 65 61 73 65 22 20 61 6e 64 0d 0a 20 20 Release" and.. 45b0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20 # 45c0: 20 24 7b 50 6c 61 74 66 6f 72 6d 7d 20 69 73 20${Platform} is
45d0: 65 69 74 68 65 72 20 22 57 69 6e 33 32 22 20 6f  either "Win32" o
45e0: 72 20 22 78 36 34 22 2e 20 20 49 66 20 74 68 69  r "x64".  If thi
45f0: 73 20 63 6f 6d 6d 61 6e 64 20 69 73 0d 0a 20 20  s command is..
4600: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 20 20        #
4610: 20 75 73 65 64 2c 20 76 61 72 69 6f 75 73 20 74   used, various t
4620: 65 73 74 73 20 74 68 61 74 20 72 65 71 75 69 72  ests that requir
4630: 65 20 73 75 70 70 6c 65 6d 65 6e 74 61 72 79 20  e supplementary
4640: 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20 20 20  managed..
4650: 20 23 20 20 20 20 20 20 20 20 20 20 61 73 73 65   #          asse
4660: 6d 62 6c 69 65 73 20 28 65 2e 67 2e 20 4c 49 4e  mblies (e.g. LIN
4670: 51 29 20 6d 61 79 20 62 65 20 73 6b 69 70 70 65  Q) may be skippe
4680: 64 20 75 6e 6c 65 73 73 20 74 68 6f 73 65 20 62  d unless those b
4690: 69 6e 61 72 69 65 73 0d 0a 20 20 20 20 20 20 20  inaries..
46a0: 20 23 20 20 20 20 20 20 20 20 20 20 61 72 65 20   #          are
46b0: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 63 6f 70  subsequently cop
46c0: 69 65 64 20 69 6e 74 6f 20 74 68 65 20 63 6f 72  ied into the cor
46d0: 72 65 63 74 20 64 69 72 65 63 74 6f 72 79 20 28  rect directory (
46e0: 69 2e 65 2e 20 62 79 0d 0a 20 20 20 20 20 20 20  i.e. by..
46f0: 20 23 20 20 20 20 20 20 20 20 20 20 22 74 65 73   #          "tes
4700: 74 5f 61 6c 6c 2e 62 61 74 22 29 2e 0d 0a 20 20  t_all.bat")...
4710: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
4720: 20 23 20 20 20 20 20 20 20 4e 6f 74 65 20 74 68   #       Note th
4730: 61 74 20 61 6c 6c 20 6f 66 20 74 68 65 20 62 75  at all of the bu
4740: 69 6c 64 20 63 6f 6d 6d 61 6e 64 73 20 61 62 6f  ild commands abo
4750: 76 65 20 77 69 6c 6c 20 64 65 66 61 75 6c 74 20  ve will default
4760: 74 6f 20 75 73 69 6e 67 0d 0a 20 20 20 20 20 20  to using..
4770: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 6c 61    #       the la
4780: 74 65 73 74 20 76 65 72 73 69 6f 6e 20 6f 66 20  test version of
4790: 4d 53 42 75 69 6c 64 20 61 76 61 69 6c 61 62 6c  MSBuild availabl
47a0: 65 20 61 6e 64 20 74 68 65 20 22 74 65 73 74 5f  e and the "test_
47b0: 79 65 61 72 22 20 6d 61 79 0d 0a 20 20 20 20 20  year" may..
47c0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 65 64 20     #       need
47d0: 74 6f 20 62 65 20 61 64 6a 75 73 74 65 64 20 61  to be adjusted a
47e0: 63 63 6f 72 64 69 6e 67 6c 79 20 74 6f 20 61 63  ccordingly to ac
47f0: 74 75 61 6c 6c 79 20 72 75 6e 20 74 68 65 20 74  tually run the t
4800: 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20  est suite...
4810: 20 20 20 20 23 20 20 20 20 20 20 20 52 65 66 65      #       Refe
4820: 72 20 74 6f 20 74 68 65 20 63 6f 6d 6d 65 6e 74  r to the comment
4830: 73 20 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65  s in [getBuildYe
4840: 61 72 5d 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66  ar] for more inf
4850: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 0d 0a 20 20 20  ormation on..
4860: 20 20 20 20 20 23 20 20 20 20 20 20 20 68 6f 77       #       how
4870: 20 74 6f 20 73 65 74 20 74 68 69 73 20 76 61 72   to set this var
4880: 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20  iable...
4890: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6e  #..        set n
48a0: 61 74 69 76 65 20 5b 68 61 73 52 75 6e 74 69 6d  ative [hasRuntim
48b0: 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 0d  eOption native].
48c0: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
48d0: 6e 20 5b 6a 6f 69 6e 42 75 69 6c 64 44 69 72 65  n [joinBuildDire
48e0: 63 74 6f 72 79 20 24 6e 61 74 69 76 65 20 5b 67  ctory $native [g 48f0: 65 74 42 75 69 6c 64 42 61 73 65 44 69 72 65 63 etBuildBaseDirec 4900: 74 6f 72 79 5d 20 5c 0d 0a 20 20 20 20 20 20 20 tory] \.. 4910: 20 20 20 20 20 5b 67 65 74 42 75 69 6c 64 59 65 [getBuildYe 4920: 61 72 5d 20 5b 67 65 74 42 75 69 6c 64 50 6c 61 ar] [getBuildPla 4930: 74 66 6f 72 6d 20 24 6e 61 74 69 76 65 5d 20 5b tform$native] [
4940: 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72  getBuildConfigur
4950: 61 74 69 6f 6e 5d 5d 0d 0a 20 20 20 20 20 20 7d  ation]]..      }
4960: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
4970: 70 72 6f 63 20 67 65 74 52 65 6c 65 61 73 65 56  proc getReleaseV
4980: 65 72 73 69 6f 6e 20 7b 7d 20 7b 0d 0a 20 20 20  ersion {} {..
4990: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
49a0: 54 45 3a 20 46 69 67 75 72 65 20 6f 75 74 20 74  TE: Figure out t
49b0: 68 65 20 72 65 6c 65 61 73 65 20 76 65 72 73 69  he release versi
49c0: 6f 6e 20 66 6f 72 20 75 73 65 20 77 69 74 68 20  on for use with
49d0: 74 68 65 20 62 75 69 6c 64 20 64 69 72 65 63 74  the build direct
49e0: 6f 72 79 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ory..      #
49f0: 20 20 20 77 68 65 6e 20 63 68 65 63 6b 69 6e 67     when checking
4a00: 20 66 6f 72 20 61 76 61 69 6c 61 62 6c 65 20 72   for available r
4a10: 65 6c 65 61 73 65 73 2e 0d 0a 20 20 20 20 20 20  eleases...
4a20: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
4a30: 66 6f 20 65 78 69 73 74 73 20 3a 3a 72 65 6c 65  fo exists ::rele
4a40: 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 26 26 20  ase_version] &&
4a50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
4a60: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 72  ring length $::r 4a70: 65 6c 65 61 73 65 5f 76 65 72 73 69 6f 6e 5d 20 elease_version] 4a80: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 > 0} then {.. 4a90: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 4aa0: 23 20 4e 4f 54 45 3a 20 54 68 65 20 72 65 6c 65 # NOTE: The rele 4ab0: 61 73 65 20 76 65 72 73 69 6f 6e 20 68 61 73 20 ase version has 4ac0: 62 65 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b been overridden; 4ad0: 20 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 therefore, use 4ae0: 69 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 it.. # 4af0: 20 20 20 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 verbatim... 4b00: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 4b10: 20 20 72 65 74 75 72 6e 20 24 3a 3a 72 65 6c 65 return$::rele
4b20: 61 73 65 5f 76 65 72 73 69 6f 6e 0d 0a 20 20 20  ase_version..
4b30: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
4b40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
4b50: 23 20 4e 4f 54 45 3a 20 4e 6f 20 72 65 6c 65 61  # NOTE: No relea
4b60: 73 65 20 76 65 72 73 69 6f 6e 20 69 73 20 61 76  se version is av
4b70: 61 69 6c 61 62 6c 65 2c 20 72 65 74 75 72 6e 20  ailable, return
4b80: 61 6e 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e  an empty string.
4b90: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
4ba0: 20 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a       return ""..
4bb0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4bc0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 42  ...    proc getB
4bd0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 7b 20 66  uildFileName { f
4be0: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
4bf0: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
4c00: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
4c10: 3a 20 52 65 74 75 72 6e 73 20 74 68 65 20 73 70  : Returns the sp
4c20: 65 63 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d  ecified file nam
4c30: 65 20 61 73 20 69 66 20 69 74 20 77 65 72 65 20  e as if it were
4c40: 6c 6f 63 61 74 65 64 20 69 6e 20 74 68 65 0d 0a  located in the..
4c50: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 75        #       bu
4c60: 69 6c 64 20 64 69 72 65 63 74 6f 72 79 2c 20 64  ild directory, d
4c70: 69 73 63 61 72 64 69 6e 67 20 61 6e 79 20 64 69  iscarding any di
4c80: 72 65 63 74 6f 72 79 20 69 6e 66 6f 72 6d 61 74  rectory informat
4c90: 69 6f 6e 20 70 72 65 73 65 6e 74 0d 0a 20 20 20  ion present..
4ca0: 20 20 20 23 20 20 20 20 20 20 20 69 6e 20 74 68     #       in th
4cb0: 65 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 70  e file name as p
4cc0: 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20 63  rovided by our c
4cd0: 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d  aller...      #.
4ce0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66  .      return [f
4cf0: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
4d00: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c  ..          [fil
4d10: 65 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64  e join [getBuild
4d20: 44 69 72 65 63 74 6f 72 79 5d 20 24 70 6c 61 74  Directory] $plat 4d30: 66 6f 72 6d 20 5b 66 69 6c 65 20 74 61 69 6c 20 form [file tail 4d40: 24 66 69 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20$fileName]]]..
4d50: 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63    }.....    proc
4d60: 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 63 74   getBinaryDirect
4d70: 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20  ory {} {..
4d80: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
4d90: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20   This procedure
4da0: 72 65 74 75 72 6e 73 20 74 68 65 20 64 69 72 65  returns the dire
4db0: 63 74 6f 72 79 20 77 68 65 72 65 20 74 68 65 20  ctory where the
4dc0: 74 65 73 74 20 61 70 70 6c 69 63 61 74 69 6f 6e  test application
4dd0: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20  ..      #
4de0: 69 74 73 65 6c 66 20 28 69 2e 65 2e 20 74 68 65  itself (i.e. the
4df0: 20 45 61 67 6c 65 20 73 68 65 6c 6c 29 20 69 73   Eagle shell) is
4e00: 20 6c 6f 63 61 74 65 64 2e 20 20 54 68 69 73 20   located.  This
4e10: 77 69 6c 6c 20 62 65 20 75 73 65 64 20 61 73 0d  will be used as.
4e20: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74  .      #       t
4e30: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 66  he destination f
4e40: 6f 72 20 74 68 65 20 63 6f 70 69 65 64 20 53 79  or the copied Sy
4e50: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
4e60: 20 6e 61 74 69 76 65 20 61 6e 64 0d 0a 20 20 20   native and..
4e70: 20 20 20 23 20 20 20 20 20 20 20 6d 61 6e 61 67     #       manag
4e80: 65 64 20 61 73 73 65 6d 62 6c 69 65 73 20 28 69  ed assemblies (i
4e90: 2e 65 2e 20 62 65 63 61 75 73 65 20 74 68 69 73  .e. because this
4ea0: 20 69 73 20 6f 6e 65 20 6f 66 20 74 68 65 20 66   is one of the f
4eb0: 65 77 20 70 6c 61 63 65 73 0d 0a 20 20 20 20 20  ew places..
4ec0: 20 23 20 20 20 20 20 20 20 77 68 65 72 65 20 74   #       where t
4ed0: 68 65 20 43 4c 52 20 77 69 6c 6c 20 61 63 74 75  he CLR will actu
4ee0: 61 6c 6c 79 20 66 69 6e 64 20 61 6e 64 20 6c 6f  ally find and lo
4ef0: 61 64 20 74 68 65 6d 20 70 72 6f 70 65 72 6c 79  ad them properly
4f00: 29 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  )...      #..
4f10: 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69     if {[info exi
4f20: 73 74 73 20 3a 3a 62 69 6e 61 72 79 5f 64 69 72  sts ::binary_dir
4f30: 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20  ectory] && \..
4f40: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20          [string
4f50: 6c 65 6e 67 74 68 20 24 3a 3a 62 69 6e 61 72 79  length $::binary 4f60: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d _directory] > 0} 4f70: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 4f80: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO 4f90: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e TE: The location 4fa0: 20 6f 66 20 74 68 65 20 62 69 6e 61 72 79 20 64 of the binary d 4fb0: 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 65 irectory has bee 4fc0: 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 n overridden;.. 4fd0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 # t 4fe0: 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 herefore, use it 4ff0: 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 verbatim... 5000: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 #.. r 5010: 65 74 75 72 6e 20 24 3a 3a 62 69 6e 61 72 79 5f eturn$::binary_
5020: 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20  directory..
5030: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..
5040: 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f 20     return [info
5050: 62 69 6e 61 72 79 5d 0d 0a 20 20 20 20 20 20 7d  binary]..      }
5060: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
5070: 70 72 6f 63 20 67 65 74 42 69 6e 61 72 79 46 69  proc getBinaryFi
5080: 6c 65 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d  leName { fileNam
5090: 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22 22 7d 20  e {platform ""}
50a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
50b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75      # NOTE: Retu
50c0: 72 6e 73 20 74 68 65 20 73 70 65 63 69 66 69 65  rns the specifie
50d0: 64 20 66 69 6c 65 20 6e 61 6d 65 20 61 73 20 69  d file name as i
50e0: 66 20 69 74 20 77 65 72 65 20 6c 6f 63 61 74 65  f it were locate
50f0: 64 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20  d in the..
5100: 23 20 20 20 20 20 20 20 62 69 6e 61 72 79 20 64  #       binary d
5110: 69 72 65 63 74 6f 72 79 2c 20 64 69 73 63 61 72  irectory, discar
5120: 64 69 6e 67 20 61 6e 79 20 64 69 72 65 63 74 6f  ding any directo
5130: 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 70  ry information p
5140: 72 65 73 65 6e 74 0d 0a 20 20 20 20 20 20 23 20  resent..      #
5150: 20 20 20 20 20 20 69 6e 20 74 68 65 20 66 69 6c        in the fil
5160: 65 20 6e 61 6d 65 20 61 73 20 70 72 6f 76 69 64  e name as provid
5170: 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c 65 72  ed by our caller
5180: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
5190: 20 20 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e    return [file n
51a0: 61 74 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20  ativename \..
51b0: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
51c0: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
51d0: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 51e0: 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c [file tail$fil
51f0: 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 20 20 7d 0d  eName]]]..    }.
5200: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74  ....    proc get
5210: 43 6f 72 65 42 69 6e 61 72 79 46 69 6c 65 4e 61  CoreBinaryFileNa
5220: 6d 65 20 7b 20 7b 70 6c 61 74 66 6f 72 6d 20 22  me { {platform "
5230: 22 7d 20 7b 73 74 61 6e 64 61 72 64 20 66 61 6c  "} {standard fal
5240: 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23  se} } {..      #
5250: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
5260: 52 65 74 75 72 6e 73 20 74 68 65 20 66 75 6c 6c  Returns the full
5270: 20 70 61 74 68 20 66 6f 72 20 74 68 65 20 66 69   path for the fi
5280: 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  le containing th
5290: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 0d 0a 20  e SQLite core..
52a0: 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61 74       #       nat
52b0: 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f 64 65  ive library code
52c0: 20 66 6f 72 20 74 68 69 73 20 70 6c 61 74 66 6f   for this platfo
52d0: 72 6d 2e 20 20 46 69 72 73 74 2c 20 63 68 65 63  rm.  First, chec
52e0: 6b 20 61 6e 64 20 73 65 65 20 69 66 0d 0a 20 20  k and see if..
52f0: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20      #       the
5300: 53 51 4c 69 74 65 20 63 6f 72 65 20 6e 61 74 69  SQLite core nati
5310: 76 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 61  ve library has a
5320: 6c 72 65 61 64 79 20 62 65 65 6e 20 6c 6f 61 64  lready been load
5330: 65 64 2e 20 20 4e 65 78 74 2c 0d 0a 20 20 20 20  ed.  Next,..
5340: 20 20 23 20 20 20 20 20 20 20 66 61 6c 6c 62 61    #       fallba
5350: 63 6b 20 74 6f 20 77 68 61 74 20 74 68 65 20 66  ck to what the f
5360: 75 6c 6c 20 70 61 74 68 20 73 68 6f 75 6c 64 20  ull path should
5370: 62 65 2c 20 62 61 73 65 64 20 6f 6e 20 77 68 65  be, based on whe
5380: 74 68 65 72 20 74 68 65 0d 0a 20 20 20 20 20 20  ther the..
5390: 23 20 20 20 20 20 20 20 6d 69 78 65 64 2d 6d 6f  #       mixed-mo
53a0: 64 65 20 61 73 73 65 6d 62 6c 79 20 69 73 20 62  de assembly is b
53b0: 65 69 6e 67 20 75 73 65 64 20 61 6e 64 20 74 68  eing used and th
53c0: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 63 75  e name of the cu
53d0: 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 23 20 20  rrent..      #
53e0: 20 20 20 20 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a       platform...
53f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
5400: 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63  f {[catch {objec
5410: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
5420: 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20  +NonPublic \..
5430: 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74              Syst
5440: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55  em.Data.SQLite.U
5450: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5460: 64 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  ds \..
5470: 20 20 20 20 5f 53 51 4c 69 74 65 4e 61 74 69 76      _SQLiteNativ
5480: 65 4d 6f 64 75 6c 65 46 69 6c 65 4e 61 6d 65 7d  eModuleFileName}
5490: 20 66 69 6c 65 4e 61 6d 65 5d 20 3d 3d 20 30 20   fileName] == 0
54a0: 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  && \..
54b0: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $54c0: 66 69 6c 65 4e 61 6d 65 5d 20 3e 20 30 7d 20 74 fileName] > 0} t 54d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 hen {.. # 54e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 54f0: 3a 20 54 68 65 20 53 51 4c 69 74 65 20 63 6f 72 : The SQLite cor 5500: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 5510: 20 68 61 73 20 61 6c 72 65 61 64 79 20 62 65 65 has already bee 5520: 6e 20 6c 6f 61 64 65 64 20 76 69 61 0d 0a 20 20 n loaded via.. 5530: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 # th 5540: 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61 72 79 e native library 5550: 20 70 72 65 2d 6c 6f 61 64 65 72 2e 20 20 52 65 pre-loader. Re 5560: 74 75 72 6e 20 74 68 61 74 20 66 69 6c 65 20 6e turn that file n 5570: 61 6d 65 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 ame now... 5580: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret 5590: 75 72 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 urn$fileName..
55a0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
55b0: 69 66 20 7b 5b 68 61 73 52 75 6e 74 69 6d 65 4f  if {[hasRuntimeO
55c0: 70 74 69 6f 6e 20 6e 61 74 69 76 65 5d 7d 20 74  ption native]} t
55d0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
55e0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
55f0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 69 78  : Return the mix
5600: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79  ed-mode assembly
5610: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...
5620: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5630: 72 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74  return [file nat
5640: 69 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ivename \..
5650: 20 20 20 20 20 20 20 5b 66 69 6c 65 20 6a 6f 69         [file joi
5660: 6e 20 5b 67 65 74 42 69 6e 61 72 79 44 69 72 65  n [getBinaryDire
5670: 63 74 6f 72 79 5d 20 24 70 6c 61 74 66 6f 72 6d  ctory] $platform 5680: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 5690: 69 74 65 2e 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 ite.dll]].. 56a0: 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 61 6e } elseif {$stan
56b0: 64 61 72 64 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  dard} then {..
56c0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
56d0: 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20   # NOTE: Return
56e0: 74 68 65 20 6e 61 74 69 76 65 2d 6f 6e 6c 79 20  the native-only
56f0: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite
5700: 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61 6d  library file nam
5710: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  e...        #..
5720: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66         return [f
5730: 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5c  ile nativename \
5740: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66  ..            [f
5750: 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 69 6e  ile join [getBin
5760: 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 24 70  aryDirectory] $p 5770: 6c 61 74 66 6f 72 6d 20 73 71 6c 69 74 65 33 2e latform sqlite3. 5780: 64 6c 6c 5d 5d 0d 0a 20 20 20 20 20 20 7d 20 65 dll]].. } e 5790: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 57a0: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 57b0: 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 74 : Return the nat 57c0: 69 76 65 2d 6f 6e 6c 79 20 69 6e 74 65 72 6f 70 ive-only interop 57d0: 20 61 73 73 65 6d 62 6c 79 20 66 69 6c 65 20 6e assembly file n 57e0: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ame... #. 57f0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 . return 5800: 5b 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 [file nativename 5810: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 5820: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 42 [file join [getB 5830: 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79 5d 20 inaryDirectory] 5840: 24 70 6c 61 74 66 6f 72 6d 20 53 51 4c 69 74 65$platform SQLite
5850: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 5d 5d 0d 0a  .Interop.dll]]..
5860: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5870: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 43  ...    proc getC
5880: 6f 6d 6d 6f 6e 44 69 72 65 63 74 6f 72 79 20 7b  ommonDirectory {
5890: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
58a0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73      # NOTE: This
58b0: 20 70 72 6f 63 65 64 75 72 65 20 72 65 74 75 72   procedure retur
58c0: 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f 72 79  ns the directory
58d0: 20 77 68 65 72 65 20 74 68 65 20 74 65 73 74 20   where the test
58e0: 73 63 72 69 70 74 73 0d 0a 20 20 20 20 20 20 23  scripts..      #
58f0: 20 20 20 20 20 20 20 73 68 6f 75 6c 64 20 62 65         should be
5900: 20 6c 6f 63 61 74 65 64 2e 20 20 42 79 20 64 65   located.  By de
5910: 66 61 75 6c 74 2c 20 74 68 69 73 20 6a 75 73 74  fault, this just
5920: 20 72 65 74 75 72 6e 73 20 74 68 65 20 45 61 67   returns the Eag
5930: 6c 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  le..      #
5940: 20 20 62 69 6e 61 72 79 20 64 69 72 65 63 74 6f    binary directo
5950: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
5960: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78      if {[info ex
5970: 69 73 74 73 20 3a 3a 63 6f 6d 6d 6f 6e 5f 64 69  ists ::common_di
5980: 72 65 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20  rectory] && \..
5990: 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67           [string
59a0: 20 6c 65 6e 67 74 68 20 24 3a 3a 63 6f 6d 6d 6f   length $::commo 59b0: 6e 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 n_directory] > 0 59c0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 59d0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 59e0: 4f 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f OTE: The locatio 59f0: 6e 20 6f 66 20 74 68 65 20 63 6f 6d 6d 6f 6e 20 n of the common 5a00: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65 directory has be 5a10: 65 6e 20 73 65 74 3b 0d 0a 20 20 20 20 20 20 20 en set;.. 5a20: 20 23 20 20 20 20 20 20 20 74 68 65 72 65 66 6f # therefo 5a30: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 re, use it... 5a40: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 5a50: 72 65 74 75 72 6e 20 24 3a 3a 63 6f 6d 6d 6f 6e return$::common
5a60: 5f 64 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20  _directory..
5a70: 20 20 7d 20 65 6c 73 65 69 66 20 7b 5b 69 6e 66    } elseif {[inf
5a80: 6f 20 65 78 69 73 74 73 20 3a 3a 76 65 6e 64 6f  o exists ::vendo
5a90: 72 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 20  r_directory] &&
5aa0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74  \..          [st
5ab0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 76  ring length $::v 5ac0: 65 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 5d endor_directory] 5ad0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. 5ae0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 5af0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 6c 6f 63 # NOTE: The loc 5b00: 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 76 65 6e ation of the ven 5b10: 64 6f 72 20 64 69 72 65 63 74 6f 72 79 20 68 61 dor directory ha 5b20: 73 20 62 65 65 6e 20 73 65 74 3b 0d 0a 20 20 20 s been set;.. 5b30: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the 5b40: 72 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d refore, use it.. 5b50: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 5b60: 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 76 65 return$::ve
5b70: 6e 64 6f 72 5f 64 69 72 65 63 74 6f 72 79 0d 0a  ndor_directory..
5b80: 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 7b        } elseif {
5b90: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74  [info exists ::t
5ba0: 63 6c 5f 6c 69 62 72 61 72 79 5d 20 26 26 20 5c  cl_library] && \
5bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72  ..          [str
5bc0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 74 63  ing length $::tc 5bd0: 6c 5f 6c 69 62 72 61 72 79 5d 20 3e 20 30 20 26 l_library] > 0 & 5be0: 26 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b & \.. [ 5bf0: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory 5c00: 20 24 3a 3a 74 63 6c 5f 6c 69 62 72 61 72 79 5d$::tcl_library]
5c10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
5c20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
5c30: 4f 54 45 3a 20 54 68 65 20 76 61 72 69 61 62 6c  OTE: The variabl
5c40: 65 20 77 69 74 68 20 74 68 65 20 6c 6f 63 61 74  e with the locat
5c50: 69 6f 6e 20 6f 66 20 74 68 65 20 73 63 72 69 70  ion of the scrip
5c60: 74 20 6c 69 62 72 61 72 79 20 69 73 0d 0a 20 20  t library is..
5c70: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73 65        #       se
5c80: 74 20 61 6e 64 20 61 70 70 65 61 72 73 20 74 6f  t and appears to
5c90: 20 62 65 20 61 20 72 65 61 6c 20 64 69 72 65 63   be a real direc
5ca0: 74 6f 72 79 20 28 69 2e 65 2e 20 6e 6f 74 20 65  tory (i.e. not e
5cb0: 6d 62 65 64 64 65 64 0d 0a 20 20 20 20 20 20 20  mbedded..
5cc0: 20 23 20 20 20 20 20 20 20 77 69 74 68 69 6e 20   #       within
5cd0: 61 20 66 69 6c 65 29 3b 20 74 68 65 72 65 66 6f  a file); therefo
5ce0: 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20 20 20  re, use it...
5cf0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
5d00: 72 65 74 75 72 6e 20 24 3a 3a 74 63 6c 5f 6c 69  return $::tcl_li 5d10: 62 72 61 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 brary.. } e 5d20: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 lse {.. # 5d30: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 5d40: 3a 20 46 61 6c 6c 62 61 63 6b 20 74 6f 20 74 68 : Fallback to th 5d50: 65 20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 e directory cont 5d60: 61 69 6e 69 6e 67 20 74 68 65 20 65 78 65 63 75 aining the execu 5d70: 74 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 table... 5d80: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 #.. retur 5d90: 6e 20 5b 69 6e 66 6f 20 62 69 6e 61 72 79 5d 0d n [info binary]. 5da0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d . }.. }. 5db0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65 74 .... proc get 5dc0: 44 61 74 61 62 61 73 65 44 69 72 65 63 74 6f 72 DatabaseDirector 5dd0: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d y {} {.. #. 5de0: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 . # NOTE: T 5df0: 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 his procedure re 5e00: 74 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 turns the direct 5e10: 6f 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 ory where the te 5e20: 73 74 20 64 61 74 61 62 61 73 65 73 0d 0a 20 20 st databases.. 5e30: 20 20 20 20 23 20 20 20 20 20 20 20 73 68 6f 75 # shou 5e40: 6c 64 20 62 65 20 6c 6f 63 61 74 65 64 2e 20 20 ld be located. 5e50: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 By default, this 5e60: 20 6a 75 73 74 20 75 73 65 73 20 74 68 65 20 74 just uses the t 5e70: 65 6d 70 6f 72 61 72 79 0d 0a 20 20 20 20 20 20 emporary.. 5e80: 23 20 20 20 20 20 20 20 64 69 72 65 63 74 6f 72 # director 5e90: 79 20 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 y configured for 5ea0: 20 74 68 69 73 20 73 79 73 74 65 6d 2e 0d 0a 20 this system... 5eb0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 #.. if 5ec0: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists : 5ed0: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 5ee0: 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ory] && \.. 5ef0: 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e [string len 5f00: 67 74 68 20 24 3a 3a 64 61 74 61 62 61 73 65 5f gth$::database_
5f10: 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20  directory] > 0}
5f20: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
5f30: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
5f40: 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20  E: The location
5f50: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database
5f60: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
5f70: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
5f80: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
5f90: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
5fa0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
5fb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 5fc0: 3a 64 61 74 61 62 61 73 65 5f 64 69 72 65 63 74 :database_direct 5fd0: 6f 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 ory.. } els 5fe0: 65 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 eif {[info exist 5ff0: 73 20 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 65 s ::scratch_dire 6000: 63 74 6f 72 79 5d 20 26 26 20 5c 0d 0a 20 20 20 ctory] && \.. 6010: 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 6c [string l 6020: 65 6e 67 74 68 20 24 3a 3a 73 63 72 61 74 63 68 ength$::scratch
6030: 5f 64 69 72 65 63 74 6f 72 79 5d 20 3e 20 30 7d  _directory] > 0}
6040: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
6050: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
6060: 54 45 3a 20 54 68 65 20 6c 6f 63 61 74 69 6f 6e  TE: The location
6070: 20 6f 66 20 74 68 65 20 73 63 72 61 74 63 68 20   of the scratch
6080: 64 69 72 65 63 74 6f 72 79 20 68 61 73 20 62 65  directory has be
6090: 65 6e 20 6f 76 65 72 72 69 64 64 65 6e 3b 0d 0a  en overridden;..
60a0: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
60b0: 74 68 65 72 65 66 6f 72 65 2c 20 75 73 65 20 69  therefore, use i
60c0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  t...        #..
60d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a         return $: 60e0: 3a 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f :scratch_directo 60f0: 72 79 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 ry.. } else 6100: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 {.. retu 6110: 72 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 rn [getTemporary 6120: 50 61 74 68 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a Path].. }.. 6130: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 6140: 6f 63 20 67 65 74 54 65 6d 70 6f 72 61 72 79 44 oc getTemporaryD 6150: 69 72 65 63 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 irectory {} {.. 6160: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6170: 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 65 NOTE: This proce 6180: 64 75 72 65 20 72 65 74 75 72 6e 73 20 74 68 65 dure returns the 6190: 20 64 69 72 65 63 74 6f 72 79 20 77 68 65 72 65 directory where 61a0: 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 20 66 the temporary f 61b0: 69 6c 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 iles.. # 61c0: 20 20 20 20 73 68 6f 75 6c 64 20 62 65 20 6c 6f should be lo 61d0: 63 61 74 65 64 2e 20 20 42 79 20 64 65 66 61 75 cated. By defau 61e0: 6c 74 2c 20 74 68 69 73 20 6a 75 73 74 20 75 73 lt, this just us 61f0: 65 73 20 74 68 65 20 74 65 6d 70 6f 72 61 72 79 es the temporary 6200: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6210: 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 66 69 67 directory config 6220: 75 72 65 64 20 66 6f 72 20 74 68 69 73 20 73 79 ured for this sy 6230: 73 74 65 6d 2e 0d 0a 20 20 20 20 20 20 23 0d 0a stem... #.. 6240: 20 20 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 if {[info 6250: 65 78 69 73 74 73 20 3a 3a 74 65 6d 70 6f 72 61 exists ::tempora 6260: 72 79 5f 64 69 72 65 63 74 6f 72 79 5d 20 26 26 ry_directory] && 6270: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73 \.. [s 6280: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a tring length$::
6290: 74 65 6d 70 6f 72 61 72 79 5f 64 69 72 65 63 74  temporary_direct
62a0: 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  ory] > 0} then {
62b0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
62c0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65       # NOTE: The
62d0: 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20 74 68 65   location of the
62e0: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
62f0: 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f 76  tory has been ov
6300: 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20 20  erridden;..
6310: 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72 65     #       there
6320: 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a 20  fore, use it...
6330: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
6340: 20 20 72 65 74 75 72 6e 20 24 3a 3a 74 65 6d 70    return $::temp 6350: 6f 72 61 72 79 5f 64 69 72 65 63 74 6f 72 79 0d orary_directory. 6360: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 69 66 20 . } elseif 6370: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a {[info exists :: 6380: 73 63 72 61 74 63 68 5f 64 69 72 65 63 74 6f 72 scratch_director 6390: 79 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 20 y] && \.. 63a0: 20 20 20 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 [string lengt 63b0: 68 20 24 3a 3a 73 63 72 61 74 63 68 5f 64 69 72 h$::scratch_dir
63c0: 65 63 74 6f 72 79 5d 20 3e 20 30 7d 20 74 68 65  ectory] > 0} the
63d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  n {..        #..
63e0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
63f0: 54 68 65 20 6c 6f 63 61 74 69 6f 6e 20 6f 66 20  The location of
6400: 74 68 65 20 73 63 72 61 74 63 68 20 64 69 72 65  the scratch dire
6410: 63 74 6f 72 79 20 68 61 73 20 62 65 65 6e 20 6f  ctory has been o
6420: 76 65 72 72 69 64 64 65 6e 3b 0d 0a 20 20 20 20  verridden;..
6430: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 72      #       ther
6440: 65 66 6f 72 65 2c 20 75 73 65 20 69 74 2e 0d 0a  efore, use it...
6450: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
6460: 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 73 63 72     return $::scr 6470: 61 74 63 68 5f 64 69 72 65 63 74 6f 72 79 0d 0a atch_directory.. 6480: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 6490: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b return [ 64a0: 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74 68 getTemporaryPath 64b0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 ].. }.. 64c0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 }..... proc g 64d0: 65 74 54 65 73 74 4f 76 65 72 72 69 64 65 73 50 etTestOverridesP 64e0: 72 65 61 6d 62 6c 65 20 7b 20 7b 65 78 74 72 61 reamble { {extra 64f0: 56 61 72 4e 61 6d 65 73 20 22 22 7d 20 7d 20 7b VarNames ""} } { 6500: 0d 0a 20 20 20 20 20 20 73 65 74 20 76 61 72 4e .. set varN 6510: 61 6d 65 73 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 ames [list].... 6520: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # 6530: 4e 4f 54 45 3a 20 49 66 20 61 76 61 69 6c 61 62 NOTE: If availab 6540: 6c 65 2c 20 73 74 61 72 74 20 77 69 74 68 20 74 le, start with t 6550: 68 65 20 6d 61 73 74 65 72 20 6c 69 73 74 20 6f he master list o 6560: 66 20 74 65 73 74 20 6f 76 65 72 72 69 64 65 0d f test override. 6570: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 76 . # v 6580: 61 72 69 61 62 6c 65 73 2e 0d 0a 20 20 20 20 20 ariables... 6590: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 #.. if {[i 65a0: 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 65 73 nfo exists ::tes 65b0: 74 5f 6f 76 65 72 72 69 64 65 73 5d 20 26 26 20 t_overrides] && 65c0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 6c 6c \.. [ll 65d0: 65 6e 67 74 68 20 24 3a 3a 74 65 73 74 5f 6f 76 ength$::test_ov
65e0: 65 72 72 69 64 65 73 5d 20 3e 20 30 7d 20 74 68  errides] > 0} th
65f0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 65 76  en {..        ev
6600: 61 6c 20 6c 61 70 70 65 6e 64 20 76 61 72 4e 61  al lappend varNa
6610: 6d 65 73 20 24 3a 3a 74 65 73 74 5f 6f 76 65 72  mes $::test_over 6620: 72 69 64 65 73 0d 0a 20 20 20 20 20 20 7d 0d 0a rides.. }.. 6630: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. 6640: 20 23 20 4e 4f 54 45 3a 20 49 66 20 72 65 71 75 # NOTE: If requ 6650: 65 73 74 65 64 20 62 79 20 6f 75 72 20 63 61 6c ested by our cal 6660: 6c 65 72 2c 20 61 64 64 20 61 6e 79 20 61 64 64 ler, add any add 6670: 69 74 69 6f 6e 61 6c 20 76 61 72 69 61 62 6c 65 itional variable 6680: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 6690: 6e 61 6d 65 73 20 74 6f 20 63 6f 70 79 20 6e 6f names to copy no 66a0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. 66b0: 20 20 20 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 if {[llength 66c0: 24 65 78 74 72 61 56 61 72 4e 61 6d 65 73 5d 20$extraVarNames]
66d0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
66e0: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
66f0: 64 20 76 61 72 4e 61 6d 65 73 20 24 65 78 74 72  d varNames $extr 6700: 61 56 61 72 4e 61 6d 65 73 0d 0a 20 20 20 20 20 aVarNames.. 6710: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 }.... #.. 6720: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69 # NOTE: Bui 6730: 6c 64 20 74 68 65 20 73 63 72 69 70 74 20 66 72 ld the script fr 6740: 61 67 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 74 agment to be ret 6750: 75 72 6e 65 64 20 62 79 20 70 72 6f 63 65 73 73 urned by process 6760: 69 6e 67 20 65 61 63 68 0d 0a 20 20 20 20 20 20 ing each.. 6770: 23 20 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 # variable 6780: 20 6e 61 6d 65 20 61 6e 64 20 61 64 64 69 6e 67 name and adding 6790: 20 74 68 65 20 6e 65 63 65 63 65 73 73 61 72 79 the nececessary 67a0: 20 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 script fragment 67b0: 73 20 66 6f 72 0d 0a 20 20 20 20 20 20 23 20 20 s for.. # 67c0: 20 20 20 20 20 65 61 63 68 20 6f 6e 65 2e 0d 0a each one... 67d0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s 67e0: 65 74 20 72 65 73 75 6c 74 20 22 22 0d 0a 0d 0a et result "".... 67f0: 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 76 61 foreach va 6800: 72 4e 61 6d 65 20 24 76 61 72 4e 61 6d 65 73 20 rName$varNames
6810: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
6820: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
6830: 69 6c 64 20 74 68 65 20 71 75 61 6c 69 66 69 65  ild the qualifie
6840: 64 20 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c  d global variabl
6850: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 20  e name...
6860: 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   #..        set
6870: 66 75 6c 6c 56 61 72 4e 61 6d 65 20 5b 61 70 70  fullVarName [app
6880: 65 6e 64 41 72 67 73 20 3a 3a 20 24 76 61 72 4e  endArgs :: $varN 6890: 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 ame].... 68a0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 68b0: 45 3a 20 44 6f 65 73 20 74 68 65 20 76 61 72 69 E: Does the vari 68c0: 61 62 6c 65 20 65 78 69 73 74 20 69 6e 20 74 68 able exist in th 68d0: 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20 63 is interpreter c 68e0: 6f 6e 74 65 78 74 3f 0d 0a 20 20 20 20 20 20 20 ontext?.. 68f0: 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b #.. if { 6900: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 24 66 75 [info exists$fu
6910: 6c 6c 56 61 72 4e 61 6d 65 5d 7d 20 74 68 65 6e  llVarName]} then
6920: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d   {..          #.
6930: 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54  .          # NOT
6940: 45 3a 20 41 70 70 65 6e 64 20 61 20 73 63 72 69  E: Append a scri
6950: 70 74 20 66 72 61 67 6d 65 6e 74 20 74 6f 20 74  pt fragment to t
6960: 68 65 20 72 65 73 75 6c 74 20 74 68 61 74 20 77  he result that w
6970: 69 6c 6c 20 63 6f 72 72 65 63 74 6c 79 0d 0a 20  ill correctly..
6980: 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20           #
6990: 20 63 6f 70 79 20 61 6e 79 20 63 6f 6e 74 61 69   copy any contai
69a0: 6e 65 64 20 76 61 6c 75 65 20 74 6f 20 61 6e 6f  ned value to ano
69b0: 74 68 65 72 20 69 6e 74 65 72 70 72 65 74 65 72  ther interpreter
69c0: 20 63 6f 6e 74 65 78 74 2e 0d 0a 20 20 20 20 20   context...
69d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
69e0: 20 20 61 70 70 65 6e 64 20 72 65 73 75 6c 74 20    append result
69f0: 5c 6e 20 22 73 65 74 20 22 20 24 66 75 6c 6c 56  \n "set " $fullV 6a00: 61 72 4e 61 6d 65 20 22 20 5c 7b 22 20 5b 73 65 arName " \{" [se 6a10: 74 20 24 66 75 6c 6c 56 61 72 4e 61 6d 65 5d 20 t$fullVarName]
6a20: 5c 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  \}..        }..
6a30: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
6a40: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
6a50: 20 49 66 20 74 68 65 20 72 65 73 75 6c 74 20 63   If the result c
6a60: 6f 6e 74 61 69 6e 73 20 6f 6e 65 20 6f 72 20 6d  ontains one or m
6a70: 6f 72 65 20 73 63 72 69 70 74 20 66 72 61 67 6d  ore script fragm
6a80: 65 6e 74 73 2c 20 61 70 70 65 6e 64 20 61 0d 0a  ents, append a..
6a90: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 65        #       ne
6aa0: 77 6c 69 6e 65 2e 0d 0a 20 20 20 20 20 20 23 0d  wline...      #.
6ab0: 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69  .      if {[stri
6ac0: 6e 67 20 6c 65 6e 67 74 68 20 24 72 65 73 75 6c  ng length $resul 6ad0: 74 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a t] > 0} then {.. 6ae0: 20 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 72 append r 6af0: 65 73 75 6c 74 20 5c 6e 0d 0a 20 20 20 20 20 20 esult \n.. 6b00: 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 }.... retur 6b10: 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d n$result..    }
6b20: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 67 65  .....    proc ge
6b30: 74 41 70 70 44 6f 6d 61 69 6e 50 72 65 61 6d 62  tAppDomainPreamb
6b40: 6c 65 20 7b 20 7b 70 72 65 66 69 78 20 22 22 7d  le { {prefix ""}
6b50: 20 7b 73 75 66 66 69 78 20 22 22 7d 20 7d 20 7b   {suffix ""} } {
6b60: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
6b70: 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72   # NOTE: This pr
6b80: 6f 63 65 64 75 72 65 20 72 65 74 75 72 6e 73 20  ocedure returns
6b90: 61 20 74 65 73 74 20 73 65 74 75 70 20 73 63 72  a test setup scr
6ba0: 69 70 74 20 66 72 61 67 6d 65 6e 74 20 73 75 69  ipt fragment sui
6bb0: 74 61 62 6c 65 20 66 6f 72 0d 0a 20 20 20 20 20  table for..
6bc0: 20 23 20 20 20 20 20 20 20 65 76 61 6c 75 61 74   #       evaluat
6bd0: 69 6f 6e 20 62 79 20 61 6e 20 69 6e 74 65 72 70  ion by an interp
6be0: 72 65 74 65 72 20 63 72 65 61 74 65 64 20 69 6e  reter created in
6bf0: 20 61 6e 20 69 73 6f 6c 61 74 65 64 20 61 70 70   an isolated app
6c00: 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  lication..
6c10: 23 20 20 20 20 20 20 20 64 6f 6d 61 69 6e 2e 20  #       domain.
6c20: 20 54 68 65 20 73 63 72 69 70 74 20 66 72 61 67   The script frag
6c30: 6d 65 6e 74 20 62 65 69 6e 67 20 72 65 74 75 72  ment being retur
6c40: 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 72 72  ned will be surr
6c50: 6f 75 6e 64 65 64 20 62 79 0d 0a 20 20 20 20 20  ounded by..
6c60: 20 23 20 20 20 20 20 20 20 74 68 65 20 70 72 65   #       the pre
6c70: 66 69 78 20 61 6e 64 20 73 75 66 66 69 78 20 22  fix and suffix "
6c80: 73 63 72 69 70 74 20 66 72 61 67 6d 65 6e 74 73  script fragments
6c90: 22 20 73 70 65 63 69 66 69 65 64 20 62 79 20 6f  " specified by o
6ca0: 75 72 20 63 61 6c 6c 65 72 2c 0d 0a 20 20 20 20  ur caller,..
6cb0: 20 20 23 20 20 20 20 20 20 20 69 66 20 61 6e 79    #       if any
6cc0: 2e 20 20 54 68 65 20 65 6e 74 69 72 65 20 73 63  .  The entire sc
6cd0: 72 69 70 74 20 62 65 69 6e 67 20 72 65 74 75 72  ript being retur
6ce0: 6e 65 64 20 77 69 6c 6c 20 62 65 20 73 75 62 73  ned will be subs
6cf0: 74 69 74 75 74 65 64 20 76 69 61 0d 0a 20 20 20  tituted via..
6d00: 20 20 20 23 20 20 20 20 20 20 20 5b 73 75 62 73     #       [subs
6d10: 74 5d 2c 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  t], in the conte
6d20: 78 74 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72  xt of our caller
6d30: 2c 20 62 65 66 6f 72 65 20 62 65 69 6e 67 20 72  , before being r
6d40: 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 20 20  eturned...
6d50: 23 20 20 20 20 20 20 20 54 68 69 73 20 73 74 65  #       This ste
6d60: 70 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 73  p is necessary s
6d70: 6f 20 74 68 61 74 20 73 6f 6d 65 20 6c 69 6d 69  o that some limi
6d80: 74 65 64 20 63 6f 6e 74 65 78 74 20 69 6e 66 6f  ted context info
6d90: 72 6d 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20  rmation,..
6da0: 23 20 20 20 20 20 20 20 70 72 69 6d 61 72 69 6c  #       primaril
6db0: 79 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65  y related to the
6dc0: 20 74 65 73 74 69 6e 67 20 64 69 72 65 63 74 6f   testing directo
6dd0: 72 69 65 73 2c 20 63 61 6e 20 62 65 20 74 72 61  ries, can be tra
6de0: 6e 73 66 65 72 72 65 64 0d 0a 20 20 20 20 20 20  nsferred..
6df0: 23 20 20 20 20 20 20 20 74 6f 20 74 68 65 20 69  #       to the i
6e00: 6e 74 65 72 70 72 65 74 65 72 20 69 6e 20 74 68  nterpreter in th
6e10: 65 20 69 73 6f 6c 61 74 65 64 20 61 70 70 6c 69  e isolated appli
6e20: 63 61 74 69 6f 6e 20 64 6f 6d 61 69 6e 2c 20 6d  cation domain, m
6e30: 61 6b 69 6e 67 20 69 74 0d 0a 20 20 20 20 20 20  aking it..
6e40: 23 20 20 20 20 20 20 20 61 62 6c 65 20 74 6f 20  #       able to
6e50: 73 75 63 63 65 73 73 66 75 6c 6c 79 20 72 75 6e  successfully run
6e60: 20 74 65 73 74 73 20 74 68 61 74 20 72 65 71 75   tests that requ
6e70: 69 72 65 20 6f 6e 65 20 6f 72 20 6d 6f 72 65 20  ire one or more
6e80: 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  of the..      #
6e90: 20 20 20 20 20 20 66 69 6c 65 73 20 69 6e 20 6f        files in o
6ea0: 6e 65 20 6f 66 20 74 68 65 20 74 65 73 74 69 6e  ne of the testin
6eb0: 67 20 64 69 72 65 63 74 6f 72 69 65 73 2e 20 20  g directories.
6ec0: 43 61 6c 6c 65 72 73 20 73 68 6f 75 6c 64 20 6b  Callers should k
6ed0: 65 65 70 20 69 6e 0d 0a 20 20 20 20 20 20 23 20  eep in..      #
6ee0: 20 20 20 20 20 20 6d 69 6e 64 20 74 68 61 74 20        mind that
6ef0: 74 68 65 20 74 65 73 74 20 73 63 72 69 70 74 20  the test script
6f00: 66 72 61 67 6d 65 6e 74 20 62 65 69 6e 67 20 72  fragment being r
6f10: 65 74 75 72 6e 65 64 20 63 61 6e 6e 6f 74 20 72  eturned cannot r
6f20: 65 6c 79 20 6f 6e 0d 0a 20 20 20 20 20 20 23 20  ely on..      #
6f30: 20 20 20 20 20 20 61 6e 79 20 73 63 72 69 70 74        any script
6f40: 20 6c 69 62 72 61 72 79 20 70 72 6f 63 65 64 75   library procedu
6f50: 72 65 73 20 74 68 61 74 20 61 72 65 20 6e 6f 74  res that are not
6f60: 20 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65   provided by the
6f70: 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20 23 20   Eagle..      #
6f80: 20 20 20 20 20 20 6c 69 62 72 61 72 79 20 70 61        library pa
6f90: 63 6b 61 67 65 20 28 69 2e 65 2e 20 22 69 6e 69  ckage (i.e. "ini
6fa0: 74 2e 65 61 67 6c 65 22 29 2c 20 69 6e 63 6c 75  t.eagle"), inclu
6fb0: 64 69 6e 67 20 74 68 6f 73 65 20 70 72 6f 76 69  ding those provi
6fc0: 64 65 64 20 62 79 0d 0a 20 20 20 20 20 20 23 20  ded by..      #
6fd0: 20 20 20 20 20 20 74 68 65 20 45 61 67 6c 65 20        the Eagle
6fe0: 74 65 73 74 20 70 61 63 6b 61 67 65 2c 20 75 6e  test package, un
6ff0: 6c 65 73 73 20 74 68 65 20 66 69 6c 65 20 63 6f  less the file co
7000: 6e 74 61 69 6e 69 6e 67 20 74 68 65 6d 20 69 73  ntaining them is
7010: 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20 23   loaded..      #
7020: 20 20 20 20 20 20 20 6d 61 6e 75 61 6c 6c 79 20         manually
7030: 76 69 61 20 73 6f 6d 65 20 6f 74 68 65 72 20 6d  via some other m
7040: 65 63 68 61 6e 69 73 6d 20 28 65 2e 67 2e 20 62  echanism (e.g. b
7050: 79 20 69 6e 63 6c 75 64 69 6e 67 20 61 70 70 72  y including appr
7060: 6f 70 72 69 61 74 65 0d 0a 20 20 20 20 20 20 23  opriate..      #
7070: 20 20 20 20 20 20 20 5b 70 61 63 6b 61 67 65 20         [package
7080: 72 65 71 75 69 72 65 5d 20 6f 72 20 5b 73 6f 75  require] or [sou
7090: 72 63 65 5d 20 63 6f 6d 6d 61 6e 64 73 20 69 6e  rce] commands in
70a0: 20 74 68 65 20 70 72 65 66 69 78 20 6f 72 20 73   the prefix or s
70b0: 75 66 66 69 78 0d 0a 20 20 20 20 20 20 23 20 20  uffix..      #
70c0: 20 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67       script frag
70d0: 6d 65 6e 74 73 29 2e 20 20 41 6c 73 6f 2c 20 61  ments).  Also, a
70e0: 6c 6c 20 76 61 72 69 61 62 6c 65 20 72 65 66 65  ll variable refe
70f0: 72 65 6e 63 65 73 20 61 6e 64 20 61 6c 6c 20 6e  rences and all n
7100: 65 73 74 65 64 0d 0a 20 20 20 20 20 20 23 20 20  ested..      #
7110: 20 20 20 20 20 63 6f 6d 6d 61 6e 64 73 20 28 69       commands (i
7120: 2e 65 2e 20 74 68 6f 73 65 20 69 6e 20 73 71 75  .e. those in squ
7130: 61 72 65 20 62 72 61 63 6b 65 74 73 29 20 63 6f  are brackets) co
7140: 6e 74 61 69 6e 65 64 20 69 6e 20 74 68 65 20 66  ntained in the f
7150: 69 6e 61 6c 0d 0a 20 20 20 20 20 20 23 20 20 20  inal..      #
7160: 20 20 20 20 73 63 72 69 70 74 20 66 72 61 67 6d      script fragm
7170: 65 6e 74 20 77 69 6c 6c 20 65 6e 64 20 75 70 20  ent will end up
7180: 62 65 69 6e 67 20 65 76 61 6c 75 61 74 65 64 20  being evaluated
7190: 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f  in the context o
71a0: 66 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 20  f the..      #
71b0: 20 20 20 20 20 63 61 6c 6c 69 6e 67 20 69 6e 74       calling int
71c0: 65 72 70 72 65 74 65 72 20 61 6e 64 20 6e 6f 74  erpreter and not
71d0: 20 74 68 65 20 74 61 72 67 65 74 20 69 6e 74 65   the target inte
71e0: 72 70 72 65 74 65 72 20 63 72 65 61 74 65 64 20  rpreter created
71f0: 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  in the..      #
7200: 20 20 20 20 20 20 69 73 6f 6c 61 74 65 64 20 61        isolated a
7210: 70 70 6c 69 63 61 74 69 6f 6e 20 64 6f 6d 61 69  pplication domai
7220: 6e 20 75 6e 6c 65 73 73 20 74 68 65 20 64 6f 6c  n unless the dol
7230: 6c 61 72 20 73 69 67 6e 73 20 61 6e 64 2f 6f 72  lar signs and/or
7240: 20 73 71 75 61 72 65 0d 0a 20 20 20 20 20 20 23   square..      #
7250: 20 20 20 20 20 20 20 62 72 61 63 6b 65 74 73 20         brackets
7260: 61 72 65 20 73 70 65 63 69 61 6c 6c 79 20 71 75  are specially qu
7270: 6f 74 65 64 20 77 69 74 68 20 62 61 63 6b 73 6c  oted with backsl
7280: 61 73 68 65 73 2e 0d 0a 20 20 20 20 20 20 23 0d  ashes...      #.
7290: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 75  .      return [u
72a0: 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 73  plevel 1 [list s
72b0: 75 62 73 74 20 5b 61 70 70 65 6e 64 41 72 67 73  ubst [appendArgs
72c0: 20 24 70 72 65 66 69 78 20 7b 0d 0a 20 20 20 20   $prefix {.. 72d0: 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 6e 74 if {[hasRunt 72e0: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 72f0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 7300: 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f object invo 7310: 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72 2e 47 ke Interpreter.G 7320: 65 74 41 63 74 69 76 65 20 41 64 64 52 75 6e 74 etActive AddRunt 7330: 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69 76 65 imeOption native 7340: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 7350: 20 20 20 7d 20 5b 67 65 74 54 65 73 74 4f 76 65 } [getTestOve 7360: 72 72 69 64 65 73 50 72 65 61 6d 62 6c 65 20 5b rridesPreamble [ 7370: 6c 69 73 74 20 70 61 74 68 20 74 65 73 74 5f 63 list path test_c 7380: 68 61 6e 6e 65 6c 5d 5d 20 24 73 75 66 66 69 78 hannel]]$suffix
7390: 5d 5d 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20  ]]]..    }.....
73a0: 20 20 20 70 72 6f 63 20 74 72 79 43 6f 70 79 42     proc tryCopyB
73b0: 69 6e 61 72 79 46 69 6c 65 20 7b 20 66 69 6c 65  inaryFile { file
73c0: 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d 20 22  Name {platform "
73d0: 22 7d 20 7b 6e 65 77 46 69 6c 65 4e 61 6d 65 20  "} {newFileName
73e0: 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 73  ""} } {..      s
73f0: 65 74 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  et sourceFileNam
7400: 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65  e [getBinaryFile
7410: 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 20 24  Name $fileName$
7420: 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20 20 20  platform]....
7430: 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65 78     if {![file ex
7440: 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c 65  ists $sourceFile 7450: 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 Name]} then {.. 7460: 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
7470: 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
7480: 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
7490: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b          "---- sk
74a0: 69 70 70 65 64 20 63 6f 70 79 69 6e 67 20 62 69  ipped copying bi
74b0: 6e 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 73  nary file \"" $s 74c0: 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 5c 0d ourceFileName \. 74d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 . "\" 74e0: 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 , it does not ex 74f0: 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 ist\n"].... 7500: 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 return.. 7510: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b }.... if { 7520: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 [string length$
7530: 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e 20 30  newFileName] > 0
7540: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
7550: 20 20 73 65 74 20 74 61 72 67 65 74 46 69 6c 65    set targetFile
7560: 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46 69  Name [getBuildFi
7570: 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69 6c 65 4e  leName $newFileN 7580: 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a ame$platform]..
7590: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
75a0: 20 20 20 20 20 20 20 20 73 65 74 20 74 61 72 67          set targ
75b0: 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67 65 74 42  etFileName [getB
75c0: 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66 69  uildFileName $fi 75d0: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
75e0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  ]..      }....
75f0: 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b      if {[catch {
7600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
7610: 66 69 6c 65 20 63 6f 70 79 20 2d 66 6f 72 63 65  file copy -force
7620: 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65   $sourceFileName 7630: 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61 6d 65$targetFileName
7640: 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d  }] == 0} then {.
7650: 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24  .        tputs $7660: 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 7670: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 7680: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 7690: 63 6f 70 69 65 64 20 62 69 6e 61 72 79 20 66 69 copied binary fi 76a0: 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 le from \""$sou
76b0: 72 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20  rceFileName "\"
76c0: 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  to \"" \..
76d0: 20 20 20 20 20 20 24 74 61 72 67 65 74 46 69 6c        $targetFil 76e0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 eName \"\n].. 76f0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 7700: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
7710: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
7720: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
7730: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c        "---- fail
7740: 65 64 20 74 6f 20 63 6f 70 79 20 62 69 6e 61 72  ed to copy binar
7750: 79 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20  y file from \""
7760: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 7770: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 7780: 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 67 65 \" to \""$targe
7790: 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d  tFileName \"\n].
77a0: 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
77b0: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79  ....    proc try
77c0: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 7b 20  CopyBuildFile {
77d0: 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f  fileName {platfo
77e0: 72 6d 20 22 22 7d 20 7b 6e 65 77 46 69 6c 65 4e  rm ""} {newFileN
77f0: 61 6d 65 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20  ame ""} } {..
7800: 20 20 20 73 65 74 20 73 6f 75 72 63 65 46 69 6c     set sourceFil
7810: 65 4e 61 6d 65 20 5b 67 65 74 42 75 69 6c 64 46  eName [getBuildF
7820: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam 7830: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a e$platform]....
7840: 20 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65        if {![file
7850: 20 65 78 69 73 74 73 20 24 73 6f 75 72 63 65 46   exists $sourceF 7860: 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b ileName]} then { 7870: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs 7880: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
7890: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
78a0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
78b0: 20 73 6b 69 70 70 65 64 20 63 6f 70 79 69 6e 67   skipped copying
78c0: 20 62 75 69 6c 64 20 66 69 6c 65 20 5c 22 22 20   build file \""
78d0: 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20  $sourceFileName 78e0: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 \.. " 78f0: 5c 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 \", it does not 7900: 65 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 exist\n"].... 7910: 20 20 20 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 return.. 7920: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 }.... if 7930: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 7940: 20 24 6e 65 77 46 69 6c 65 4e 61 6d 65 5d 20 3e$newFileName] >
7950: 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20   0} then {..
7960: 20 20 20 20 73 65 74 20 74 61 72 67 65 74 46 69      set targetFi
7970: 6c 65 4e 61 6d 65 20 5b 67 65 74 42 69 6e 61 72  leName [getBinar
7980: 79 46 69 6c 65 4e 61 6d 65 20 24 6e 65 77 46 69  yFileName $newFi 7990: 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f 72 6d leName$platform
79a0: 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  ]..      } else
79b0: 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 74  {..        set t
79c0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5b 67  argetFileName [g
79d0: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
79e0: 20 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74   $fileName$plat
79f0: 66 6f 72 6d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  form]..      }..
7a00: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74  ..      if {[cat
7a10: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
7a20: 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d 66      file copy -f
7a30: 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65  orce $sourceFile 7a40: 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65 Name$targetFile
7a50: 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65  Name}] == 0} the
7a60: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
7a70: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 7a80: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 7a90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 7aa0: 2d 2d 2d 20 63 6f 70 69 65 64 20 62 75 69 6c 64 --- copied build 7ab0: 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22 22 20 24 file from \""$
7ac0: 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20 22  sourceFileName "
7ad0: 5c 22 20 74 6f 20 5c 22 22 20 5c 0d 0a 20 20 20  \" to \"" \..
7ae0: 20 20 20 20 20 20 20 20 20 24 74 61 72 67 65 74           $target 7af0: 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a FileName \"\n].. 7b00: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 7b10: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a tputs$:
7b20: 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61  :test_channel [a
7b30: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
7b40: 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66           "---- f
7b50: 61 69 6c 65 64 20 74 6f 20 63 6f 70 79 20 62 75  ailed to copy bu
7b60: 69 6c 64 20 66 69 6c 65 20 66 72 6f 6d 20 5c 22  ild file from \"
7b70: 22 20 24 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d  " $sourceFileNam 7b80: 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e \.. 7b90: 20 22 5c 22 20 74 6f 20 5c 22 22 20 24 74 61 72 "\" to \""$tar
7ba0: 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22 5c 6e  getFileName \"\n
7bb0: 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ]..      }..
7bc0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74  }.....    proc t
7bd0: 72 79 44 65 6c 65 74 65 42 69 6e 61 72 79 46 69  ryDeleteBinaryFi
7be0: 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70  le { fileName {p
7bf0: 6c 61 74 66 6f 72 6d 20 22 22 7d 20 7d 20 7b 0d  latform ""} } {.
7c00: 0a 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e  .      set fileN
7c10: 61 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ame [getBinaryFi
7c20: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName 7c30: 20 24 70 6c 61 74 66 6f 72 6d 5d 0d 0a 0d 0a 20$platform]....
7c40: 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20       if {![file
7c50: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName 7c60: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 7c70: 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
7c80: 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
7c90: 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20  Args \..
7ca0: 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70 65      "---- skippe
7cb0: 64 20 64 65 6c 65 74 69 6e 67 20 62 69 6e 61 72  d deleting binar
7cc0: 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65  y file \"" $file 7cd0: 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 Name \.. 7ce0: 20 20 20 20 22 5c 22 2c 20 69 74 20 64 6f 65 73 "\", it does 7cf0: 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22 5d 0d 0a not exist\n"].. 7d00: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e .. return 7d10: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 .. }.... 7d20: 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 66 if {[catch {f 7d30: 69 6c 65 20 64 65 6c 65 74 65 20 24 66 69 6c 65 ile delete$file
7d40: 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65  Name}] == 0} the
7d50: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75  n {..        tpu
7d60: 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ts $::test_chann 7d70: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c el [appendArgs \ 7d80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d .. "- 7d90: 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e 61 --- deleted bina 7da0: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c ry file \""$fil
7db0: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..
7dc0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
7dd0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 7de0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 7df0: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 7e00: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 61 69 6c "---- fail 7e10: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 62 69 6e ed to delete bin 7e20: 61 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 ary file \""$fi
7e30: 6c 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20  leName \"\n]..
7e40: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
7e50: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c  .    proc tryDel
7e60: 65 74 65 42 75 69 6c 64 46 69 6c 65 20 7b 20 66  eteBuildFile { f
7e70: 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72  ileName {platfor
7e80: 6d 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  m ""} } {..
7e90: 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67   set fileName [g
7ea0: 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20  etBuildFileName
7eb0: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
7ec0: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
7ed0: 20 7b 21 5b 66 69 6c 65 20 65 78 69 73 74 73 20   {![file exists
7ee0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 68 65 6e  $fileName]} then 7ef0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 {.. tput 7f00: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
7f10: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
7f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
7f30: 2d 2d 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74  -- skipped delet
7f40: 69 6e 67 20 62 75 69 6c 64 20 66 69 6c 65 20 5c  ing build file \
7f50: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. 7f60: 20 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c "\", 7f70: 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 it does not exi 7f80: 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 st\n"].... 7f90: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 20 20 return.. 7fa0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 7fb0: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65 catch {file dele 7fc0: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d te$fileName}] =
7fd0: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  = 0} then {..
7fe0: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 7ff0: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 8000: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 ndArgs \.. 8010: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 64 65 6c 65 "---- dele 8020: 74 65 64 20 62 75 69 6c 64 20 66 69 6c 65 20 5c ted build file \ 8030: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c ""$fileName \"\
8040: 6e 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65  n]..      } else
8050: 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74   {..        tput
8060: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe 8070: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. 8080: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d . "-- 8090: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 64 65 6c -- failed to del 80a0: 65 74 65 20 62 75 69 6c 64 20 66 69 6c 65 20 5c ete build file \ 80b0: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 22 5c ""$fileName \"\
80c0: 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n]..      }..
80d0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20   }.....    proc
80e0: 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20  tryCopyAssembly
80f0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7b 70 6c 61 74  { fileName {plat
8100: 66 6f 72 6d 20 22 22 7d 20 7b 70 64 62 20 74 72  form ""} {pdb tr
8110: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 74  ue} } {..      t
8120: 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
8130: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
8140: 6f 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  orm....      if
8150: 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20  {$pdb} then {.. 8160: 20 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75 tryCopyBu 8170: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41 ildFile [appendA 8180: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 8190: 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61 6d [file rootnam 81a0: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70 64 e$fileName] .pd
81b0: 62 5d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a 20 20  b] $platform.. 81c0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 81d0: 0a 20 20 20 20 70 72 6f 63 20 74 72 79 44 65 6c . proc tryDel 81e0: 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 eteAssembly { fi 81f0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d leName {platform 8200: 20 22 22 7d 20 7b 70 64 62 20 74 72 75 65 7d 20 ""} {pdb true} 8210: 7d 20 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 } {.. tryDe 8220: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 24 leteBinaryFile$
8230: 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66 6f  fileName $platfo 8240: 72 6d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b rm.... if { 8250: 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d 0a 20 20$pdb} then {..
8260: 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 42        tryDeleteB
8270: 69 6e 61 72 79 46 69 6c 65 20 5b 61 70 70 65 6e  inaryFile [appen
8280: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..
8290: 20 20 20 20 20 5b 66 69 6c 65 20 72 6f 6f 74 6e       [file rootn
82a0: 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e  ame $fileName] . 82b0: 70 64 62 5d 20 24 70 6c 61 74 66 6f 72 6d 0d 0a pdb]$platform..
82c0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
82d0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 79 4c  ...    proc tryL
82e0: 6f 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69  oadAssembly { fi
82f0: 6c 65 4e 61 6d 65 20 7b 70 6c 61 74 66 6f 72 6d  leName {platform
8300: 20 22 22 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20   ""} } {..
8310: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65  set fileName [ge
8320: 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20  tBinaryFileName
8330: 24 66 69 6c 65 4e 61 6d 65 20 24 70 6c 61 74 66  $fileName$platf
8340: 6f 72 6d 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  orm]....      if
8350: 20 7b 5b 63 61 74 63 68 20 7b 73 65 74 20 61 73   {[catch {set as
8360: 73 65 6d 62 6c 79 20 5c 0d 0a 20 20 20 20 20 20  sembly \..
8370: 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74 20          [object
8380: 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20 46  load -loadtype F
8390: 69 6c 65 20 2d 61 6c 69 61 73 20 24 66 69 6c 65  ile -alias $file 83a0: 4e 61 6d 65 5d 7d 5d 20 3d 3d 20 30 7d 20 74 68 Name]}] == 0} th 83b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d en {.. #. 83c0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 83d0: 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e 65 Now, add the ne 83e0: 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f 6e cessary test con 83f0: 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20 20 straint... 8400: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64 64 #.. add 8410: 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 Constraint [file 8420: 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 rootname [file 8430: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d tail$fileName]]
8440: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
8450: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 47         # NOTE: G
8460: 72 61 62 20 74 68 65 20 69 6d 61 67 65 20 72 75  rab the image ru
8470: 6e 74 69 6d 65 20 76 65 72 73 69 6f 6e 20 66 72  ntime version fr
8480: 6f 6d 20 74 68 65 20 61 73 73 65 6d 62 6c 79 20  om the assembly
8490: 62 65 63 61 75 73 65 0d 0a 20 20 20 20 20 20 20  because..
84a0: 20 23 20 20 20 20 20 20 20 73 65 76 65 72 61 6c   #       several
84b0: 20 74 65 73 74 73 20 72 65 6c 79 20 6f 6e 20 69   tests rely on i
84c0: 74 20 68 61 76 69 6e 67 20 61 20 63 65 72 74 61  t having a certa
84d0: 69 6e 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20  in value...
84e0: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 61 64     #..        ad
84f0: 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
8500: 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 74 61  endArgs [file ta
8510: 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 20 5f 20  il $fileName] _ 8520: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b \.. [ 8530: 24 61 73 73 65 6d 62 6c 79 20 49 6d 61 67 65 52$assembly ImageR
8540: 75 6e 74 69 6d 65 56 65 72 73 69 6f 6e 5d 5d 0d  untimeVersion]].
8550: 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
8560: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
8570: 74 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61  turn the full pa
8580: 74 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64  th of the loaded
8590: 20 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20   file...
85a0: 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  #..        retur
85b0: 6e 20 24 66 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  n $fileName.. 85c0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 }.... re 85d0: 74 75 72 6e 20 22 22 0d 0a 20 20 20 20 7d 0d 0a turn "".. }.. 85e0: 0c 0d 0a 20 20 20 20 70 72 6f 63 20 69 73 53 51 ... proc isSQ 85f0: 4c 69 74 65 52 65 61 64 79 20 7b 7d 20 7b 0d 0a LiteReady {} {.. 8600: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 8610: 20 4e 4f 54 45 3a 20 54 68 69 73 20 70 72 6f 63 NOTE: This proc 8620: 65 64 75 72 65 20 6d 75 73 74 20 72 65 74 75 72 edure must retur 8630: 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 6f 6e 6c 79 20 n non-zero only 8640: 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 6e 61 if the SQLite na 8650: 74 69 76 65 0d 0a 20 20 20 20 20 20 23 20 20 20 tive.. # 8660: 20 20 20 20 6c 69 62 72 61 72 79 20 61 6e 64 20 library and 8670: 74 68 65 20 53 79 73 74 65 6d 2e 44 61 74 61 2e the System.Data. 8680: 53 51 4c 69 74 65 20 6d 61 6e 61 67 65 64 20 61 SQLite managed a 8690: 73 73 65 6d 62 6c 79 20 61 72 65 20 6c 6f 61 64 ssembly are load 86a0: 65 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 ed.. # 86b0: 20 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 and ready for 86c0: 75 73 65 20 62 79 20 74 68 65 20 74 65 73 74 20 use by the test 86d0: 73 75 69 74 65 2e 20 20 43 75 72 72 65 6e 74 6c suite. Currentl 86e0: 79 2c 20 74 68 69 73 20 70 72 6f 63 65 64 75 72 y, this procedur 86f0: 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 e.. # 8700: 20 73 68 6f 75 6c 64 20 62 65 20 63 61 6c 6c 65 should be calle 8710: 64 20 6f 6e 6c 79 20 61 66 74 65 72 20 74 68 65 d only after the 8720: 20 5b 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c [tryLoadAssembl 8730: 79 5d 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 y] procedure has 8740: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 8750: 62 65 65 6e 20 63 61 6c 6c 65 64 20 74 6f 20 70 been called to p 8760: 72 6f 62 65 20 66 6f 72 20 74 68 65 20 53 79 73 robe for the Sys 8770: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 8780: 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79 managed assembly 8790: 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 .. # 87a0: 61 6e 64 20 74 68 65 20 5b 63 68 65 63 6b 46 6f and the [checkFo 87b0: 72 53 51 4c 69 74 65 5d 20 70 72 6f 63 65 64 75 rSQLite] procedu 87c0: 72 65 20 68 61 73 20 62 65 65 6e 20 63 61 6c 6c re has been call 87d0: 65 64 20 74 6f 20 70 72 6f 62 65 20 66 6f 72 0d ed to probe for. 87e0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 74 . # t 87f0: 68 65 20 53 51 4c 69 74 65 20 6e 61 74 69 76 65 he SQLite native 8800: 20 6c 69 62 72 61 72 79 3b 20 6f 74 68 65 72 77 library; otherw 8810: 69 73 65 2c 20 74 68 69 73 20 70 72 6f 63 65 64 ise, this proced 8820: 75 72 65 20 77 69 6c 6c 20 73 69 6d 70 6c 79 0d ure will simply. 8830: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 61 . # a 8840: 6c 77 61 79 73 20 72 65 74 75 72 6e 20 7a 65 72 lways return zer 8850: 6f 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 o... #.. 8860: 20 20 20 72 65 74 75 72 6e 20 5b 65 78 70 72 20 return [expr 8870: 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e 74 {[haveConstraint 8880: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 8890: 69 74 65 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 ite] && \.. 88a0: 20 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 [haveConstr 88b0: 61 69 6e 74 20 53 51 4c 69 74 65 5d 7d 5d 0d 0a aint SQLite]}].. 88c0: 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 }..... pr 88d0: 6f 63 20 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 oc matchMachine 88e0: 7b 20 70 6c 61 74 66 6f 72 6d 20 7d 20 7b 0d 0a { platform } {.. 88f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 8900: 20 4e 4f 54 45 3a 20 41 6e 20 65 6d 70 74 79 20 NOTE: An empty 8910: 73 74 72 69 6e 67 20 66 6f 72 20 74 68 65 20 70 string for the p 8920: 6c 61 74 66 6f 72 6d 20 6d 65 61 6e 73 20 74 68 latform means th 8930: 61 74 20 74 68 65 20 62 75 69 6c 64 20 69 73 20 at the build is 8940: 6e 6f 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 not.. # 8950: 20 20 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 61 [primarily] a 8960: 20 6e 61 74 69 76 65 20 62 75 69 6c 64 3b 20 74 native build; t 8970: 68 65 72 65 66 6f 72 65 2c 20 69 74 20 61 6c 77 herefore, it alw 8980: 61 79 73 20 6d 61 74 63 68 65 73 2e 0d 0a 20 20 ays matches... 8990: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if 89a0: 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 {[string length 89b0: 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30 7d$platform] == 0}
89c0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
89d0: 20 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20   return true..
89e0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
89f0: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
8a00: 44 6f 65 73 20 74 68 65 20 73 70 65 63 69 66 69  Does the specifi
8a10: 65 64 20 70 6c 61 74 66 6f 72 6d 20 6d 61 74 63  ed platform matc
8a20: 68 20 75 70 20 74 6f 20 74 68 65 20 63 75 72 72  h up to the curr
8a30: 65 6e 74 20 70 72 6f 63 65 73 73 3f 0d 0a 20 20  ent process?..
8a40: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
8a50: 7b 24 70 6c 61 74 66 6f 72 6d 20 65 71 20 5b 6d  {$platform eq [m 8a60: 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72 6d achineToPlatform 8a70: 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d$::tcl_platform
8a80: 28 6d 61 63 68 69 6e 65 29 5d 7d 20 74 68 65 6e  (machine)]} then
8a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
8aa0: 72 6e 20 74 72 75 65 0d 0a 20 20 20 20 20 20 7d  rn true..      }
8ab0: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
8ac0: 20 20 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 73     # NOTE: The s
8ad0: 70 65 63 69 66 69 65 64 20 70 6c 61 74 66 6f 72  pecified platfor
8ae0: 6d 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  m does not match
8af0: 20 75 70 20 77 69 74 68 20 74 68 65 20 70 6c 61   up with the pla
8b00: 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 23 20 20  tform..      #
8b10: 20 20 20 20 20 66 6f 72 20 74 68 65 20 63 75 72       for the cur
8b20: 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process...
8b30: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 72 65       #..      re
8b40: 74 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20  turn false..
8b50: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
8b60: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 42 75 69  heckForSQLiteBui
8b70: 6c 64 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73  lds { channel {s
8b80: 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 7b  elect false} } {
8b90: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
8ba0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66   # NOTE: Check f
8bb0: 6f 72 20 65 76 65 72 79 20 70 6f 73 73 69 62 6c  or every possibl
8bc0: 65 20 76 61 6c 69 64 20 63 6f 6d 62 69 6e 61 74  e valid combinat
8bd0: 69 6f 6e 20 6f 66 20 76 61 6c 75 65 73 20 75 73  ion of values us
8be0: 65 64 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 23  ed when..      #
8bf0: 20 20 20 20 20 20 20 6c 6f 63 61 74 69 6e 67 20         locating
8c00: 6f 75 74 20 74 68 65 20 62 75 69 6c 64 20 6f 75  out the build ou
8c10: 74 70 75 74 20 64 69 72 65 63 74 6f 72 79 2c 20  tput directory,
8c20: 73 68 6f 77 69 6e 67 20 65 61 63 68 20 61 76 61  showing each ava
8c30: 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20 20 23 20  ilable..      #
8c40: 20 20 20 20 20 20 62 75 69 6c 64 20 76 61 72 69        build vari
8c50: 61 74 69 6f 6e 20 61 6c 6f 6e 67 20 74 68 65 20  ation along the
8c60: 77 61 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  way...      #..
8c70: 20 20 20 20 20 66 6f 72 65 61 63 68 20 6e 61 74       foreach nat
8c80: 69 76 65 20 5b 6c 69 73 74 20 66 61 6c 73 65 20  ive [list false
8c90: 74 72 75 65 5d 20 7b 0d 0a 20 20 20 20 20 20 20  true] {..
8ca0: 20 66 6f 72 65 61 63 68 20 79 65 61 72 20 5b 67   foreach year [g
8cb0: 65 74 42 75 69 6c 64 59 65 61 72 73 5d 20 7b 0d  etBuildYears] {.
8cc0: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61  .          forea
8cd0: 63 68 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  ch configuration
8ce0: 20 5b 67 65 74 42 75 69 6c 64 43 6f 6e 66 69 67   [getBuildConfig
8cf0: 75 72 61 74 69 6f 6e 73 5d 20 7b 0d 0a 20 20 20  urations] {..
8d00: 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
8d10: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
8d20: 46 69 67 75 72 65 20 6f 75 74 20 74 68 65 20 65  Figure out the e
8d30: 66 66 65 63 74 69 76 65 20 62 75 69 6c 64 20 70  ffective build p
8d40: 6c 61 74 66 6f 72 6d 2e 20 20 54 68 69 73 20 69  latform.  This i
8d50: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  s..            #
8d60: 20 20 20 20 20 20 20 62 61 73 65 64 20 6f 6e 20         based on
8d70: 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 61  whether or not a
8d80: 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e 61 74   [primarily] nat
8d90: 69 76 65 20 62 75 69 6c 64 0d 0a 20 20 20 20 20  ive build..
8da0: 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69         #       i
8db0: 73 20 62 65 69 6e 67 20 75 73 65 64 2e 20 20 46  s being used.  F
8dc0: 6f 72 20 5b 70 72 69 6d 61 72 69 6c 79 5d 20 6e  or [primarily] n
8dd0: 6f 6e 2d 6e 61 74 69 76 65 20 62 75 69 6c 64 73  on-native builds
8de0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23  ,..            #
8df0: 20 20 20 20 20 20 20 74 68 69 73 20 77 69 6c 6c         this will
8e00: 20 62 65 20 61 6e 20 65 6d 70 74 79 20 73 74 72   be an empty str
8e10: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ing...
8e20: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 20    #..
8e30: 20 73 65 74 20 70 6c 61 74 66 6f 72 6d 20 5b 67   set platform [g
8e40: 65 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20  etBuildPlatform
8e50: 24 6e 61 74 69 76 65 5d 0d 0a 0d 0a 20 20 20 20  $native].... 8e60: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 tputs$c
8e70: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
8e80: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..
8e90: 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63        "---- chec
8ea0: 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e  king for System.
8eb0: 44 61 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c  Data.SQLite buil
8ec0: 64 20 5c 22 22 20 5b 65 78 70 72 20 5c 0d 0a 20  d \"" [expr \..
8ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8ee0: 24 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76  $native ? "nativ 8ef0: 65 2f 22 20 3a 20 22 22 7d 5d 20 5b 65 78 70 72 e/" : ""}] [expr 8f00: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 {[string length 8f10: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 8f20: 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e$platform] >
8f30: 20 30 20 3f 20 5b 61 70 70 65 6e 64 41 72 67 73   0 ? [appendArgs
8f40: 20 24 70 6c 61 74 66 6f 72 6d 20 2f 5d 20 3a 20   $platform /] : 8f50: 22 22 7d 5d 20 24 79 65 61 72 20 5c 0d 0a 20 20 ""}]$year \..
8f60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 20                /
8f70: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 22  $configuration " 8f80: 5c 22 2e 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 \"... "].... 8f90: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 8fa0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 # NOTE: B 8fb0: 75 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 uild the fully q 8fc0: 75 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f ualified directo 8fd0: 72 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 ry where the nec 8fe0: 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 essary.. 8ff0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6d 70 # comp 9000: 6f 6e 65 6e 74 73 20 66 6f 72 20 53 79 73 74 65 onents for Syste 9010: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 73 68 m.Data.SQLite sh 9020: 6f 75 6c 64 20 62 65 20 66 6f 75 6e 64 2e 0d 0a ould be found... 9030: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 9040: 20 20 20 20 20 20 20 20 20 20 20 73 65 74 20 64 set d 9050: 69 72 65 63 74 6f 72 79 20 5b 6a 6f 69 6e 42 75 irectory [joinBu 9060: 69 6c 64 44 69 72 65 63 74 6f 72 79 20 24 6e 61 ildDirectory$na
9070: 74 69 76 65 20 5c 0d 0a 20 20 20 20 20 20 20 20  tive \..
9080: 20 20 20 20 20 20 20 20 5b 67 65 74 42 75 69 6c          [getBuil
9090: 64 42 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20  dBaseDirectory]
90a0: 24 79 65 61 72 20 24 70 6c 61 74 66 6f 72 6d 20  $year$platform
90b0: 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 5d 0d  $configuration]. 90c0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 ... # 90d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 20 .. # 90e0: 4e 4f 54 45 3a 20 44 6f 20 74 68 65 20 6e 65 63 NOTE: Do the nec 90f0: 65 73 73 61 72 79 20 66 69 6c 65 73 20 65 78 69 essary files exi 9100: 73 74 3f 20 20 43 75 72 72 65 6e 74 6c 79 2c 20 st? Currently, 9110: 6e 6f 20 6f 74 68 65 72 20 73 74 65 70 73 0d 0a no other steps.. 9120: 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 # 9130: 20 20 20 20 61 72 65 20 74 61 6b 65 6e 20 74 6f are taken to 9140: 20 76 65 72 69 66 79 20 74 68 69 73 20 62 75 69 verify this bui 9150: 6c 64 20 69 73 20 61 63 74 75 61 6c 6c 79 20 76 ld is actually v 9160: 69 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 iable... 9170: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 9180: 20 20 20 69 66 20 7b 5b 69 73 42 75 69 6c 64 41 if {[isBuildA 9190: 76 61 69 6c 61 62 6c 65 20 24 6e 61 74 69 76 65 vailable$native
91a0: 20 24 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68   $directory]} th 91b0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 91c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 91d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 68 65 # NOTE: Whe 91e0: 6e 20 69 6e 20 22 73 65 6c 65 63 74 22 20 6d 6f n in "select" mo 91f0: 64 65 2c 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c de, automaticall 9200: 79 20 73 65 6c 65 63 74 20 74 68 65 20 66 69 72 y select the fir 9210: 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 st.. 9220: 20 20 23 20 20 20 20 20 20 20 61 76 61 69 6c 61 # availa 9230: 62 6c 65 20 62 75 69 6c 64 20 6f 66 20 53 79 73 ble build of Sys 9240: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 tem.Data.SQLite 9250: 61 6e 64 20 74 68 65 6e 20 72 65 74 75 72 6e 0d and then return. 9260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 9270: 20 20 20 20 20 20 20 69 6d 6d 65 64 69 61 74 65 immediate 9280: 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ly... 9290: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 92a0: 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 20 if {$select
92b0: 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65  && [matchMachine
92c0: 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65   $platform]} the 92d0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 92e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 92f0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 # NOTE: 9300: 4d 61 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 Manually overrid 9310: 65 20 61 6c 6c 20 74 68 65 20 62 75 69 6c 64 20 e all the build 9320: 64 69 72 65 63 74 6f 72 79 20 73 65 6c 65 63 74 directory select 9330: 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 ion.. 9340: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 6c # rel 9350: 61 74 65 64 20 74 65 73 74 20 73 65 74 74 69 6e ated test settin 9360: 67 73 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 66 gs in order to f 9370: 6f 72 63 65 20 74 68 69 73 20 62 75 69 6c 64 0d orce this build. 9380: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 9390: 20 23 20 20 20 20 20 20 20 6f 66 20 53 79 73 74 # of Syst 93a0: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 74 em.Data.SQLite t 93b0: 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 o be used... 93c0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 93d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o 93e0: 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 bject invoke Int 93f0: 65 72 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 erpreter.GetActi 9400: 76 65 20 5b 65 78 70 72 20 7b 24 6e 61 74 69 76 ve [expr {$nativ
9410: 65 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  e ? \..
9420: 20 20 20 20 20 20 20 20 20 20 20 22 41 64 64 52             "AddR
9430: 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 22 20 3a 20  untimeOption" :
9440: 22 52 65 6d 6f 76 65 52 75 6e 74 69 6d 65 4f 70  "RemoveRuntimeOp
9450: 74 69 6f 6e 22 7d 5d 20 20 6e 61 74 69 76 65 0d  tion"}]  native.
9460: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...
9470: 20 20 20 73 65 74 20 3a 3a 74 65 73 74 5f 79 65     set ::test_ye
9480: 61 72 20 24 79 65 61 72 0d 0a 20 20 20 20 20 20  ar $year.. 9490: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a set :: 94a0: 74 65 73 74 5f 70 6c 61 74 66 6f 72 6d 20 24 70 test_platform$p
94b0: 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20  latform..
94c0: 20 20 20 20 20 20 20 20 20 73 65 74 20 3a 3a 74           set ::t
94d0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
94e0: 6e 20 24 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  n $configuration 94f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 .... 9500: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
9510: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
9520: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9530: 20 20 20 20 20 20 22 79 65 73 2c 20 73 65 6c 65        "yes, sele
9540: 63 74 65 64 20 28 22 20 5b 65 78 70 72 20 7b 24  cted (" [expr {$9550: 6e 61 74 69 76 65 20 3f 20 22 6e 61 74 69 76 65 native ? "native 9560: 2f 22 20 3a 20 22 22 7d 5d 20 5c 0d 0a 20 20 20 /" : ""}] \.. 9570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9580: 20 5b 65 78 70 72 20 7b 5b 73 74 72 69 6e 67 20 [expr {[string 9590: 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72 6d length$platform
95a0: 5d 20 3e 20 30 20 3f 20 5b 61 70 70 65 6e 64 41  ] > 0 ? [appendA
95b0: 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  rgs \..
95c0: 20 20 20 20 20 20 20 20 20 20 20 24 70 6c 61 74             $plat 95d0: 66 6f 72 6d 20 2f 5d 20 3a 20 22 22 7d 5d 20 24 form /] : ""}]$
95e0: 79 65 61 72 20 2f 20 24 63 6f 6e 66 69 67 75 72  year / $configur 95f0: 61 74 69 6f 6e 20 22 29 5c 6e 22 5d 0d 0a 0d 0a ation ")\n"].... 9600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9610: 72 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 return true.. 9620: 20 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 } els 9630: 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 e {.. 9640: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
9650: 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20  nel yes\n..
9660: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
9670: 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
9680: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9690: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e  tputs $channel n 96a0: 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 o\n.. 96b0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d }.. }. 96c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 . }.. 96d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 }.... ret 96e0: 75 72 6e 20 66 61 6c 73 65 0d 0a 20 20 20 20 7d urn false.. } 96f0: 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 68 ..... proc ch 9700: 65 63 6b 46 6f 72 53 51 4c 69 74 65 52 65 6c 65 eckForSQLiteRele 9710: 61 73 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b ases { channel { 9720: 73 65 6c 65 63 74 20 66 61 6c 73 65 7d 20 7d 20 select false} } 9730: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. 9740: 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 9750: 66 6f 72 20 70 61 73 74 20 72 65 6c 65 61 73 65 for past release 9760: 73 20 6f 66 20 53 79 73 74 65 6d 2e 44 61 74 61 s of System.Data 9770: 2e 53 51 4c 69 74 65 20 69 6e 20 74 68 65 20 64 .SQLite in the d 9780: 69 72 65 63 74 6f 72 79 0d 0a 20 20 20 20 20 20 irectory.. 9790: 23 20 20 20 20 20 20 20 63 6f 6e 74 61 69 6e 65 # containe 97a0: 64 20 69 6e 20 74 68 65 20 22 53 79 73 74 65 6d d in the "System 97b0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 22 20 65 6e .Data.SQLite" en 97c0: 76 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 vironment variab 97d0: 6c 65 2c 20 69 66 0d 0a 20 20 20 20 20 20 23 20 le, if.. # 97e0: 20 20 20 20 20 20 70 72 65 73 65 6e 74 2e 0d 0a present... 97f0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 #.. i 9800: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists 9810: 3a 3a 65 6e 76 28 53 79 73 74 65 6d 2e 44 61 74 ::env(System.Dat 9820: 61 2e 53 51 4c 69 74 65 29 5d 20 26 26 20 5c 0d a.SQLite)] && \. 9830: 0a 20 20 20 20 20 20 20 20 20 20 5b 73 74 72 69 . [stri 9840: 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a 65 6e 76 ng length$::env
9850: 28 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c  (System.Data.SQL
9860: 69 74 65 29 5d 20 3e 20 30 7d 20 74 68 65 6e 20  ite)] > 0} then
9870: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
9880: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75        # NOTE: Bu
9890: 69 6c 64 20 74 68 65 20 66 75 6c 6c 79 20 71 75  ild the fully qu
98a0: 61 6c 69 66 69 65 64 20 64 69 72 65 63 74 6f 72  alified director
98b0: 79 20 77 68 65 72 65 20 74 68 65 20 6e 65 63 65  y where the nece
98c0: 73 73 61 72 79 0d 0a 20 20 20 20 20 20 20 20 23  ssary..        #
98d0: 20 20 20 20 20 20 20 63 6f 6d 70 6f 6e 65 6e 74         component
98e0: 73 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74  s for System.Dat
98f0: 61 2e 53 51 4c 69 74 65 20 73 68 6f 75 6c 64 20  a.SQLite should
9900: 62 65 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 20  be found...
9910: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 65     #..        se
9920: 74 20 64 69 72 65 63 74 6f 72 79 20 5b 66 69 6c  t directory [fil
9930: 65 20 6e 61 74 69 76 65 6e 61 6d 65 20 5b 66 69  e nativename [fi
9940: 6c 65 20 6a 6f 69 6e 20 5c 0d 0a 20 20 20 20 20  le join \..
9950: 20 20 20 20 20 20 20 24 3a 3a 65 6e 76 28 53 79         $::env(Sy 9960: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite 9970: 29 20 5b 67 65 74 52 65 6c 65 61 73 65 56 65 72 ) [getReleaseVer 9980: 73 69 6f 6e 5d 5d 5d 0d 0a 0d 0a 20 20 20 20 20 sion]]].... 9990: 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 tputs$channe
99a0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
99b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
99c0: 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 20  -- checking for
99d0: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
99e0: 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 20 5c  te release \"" \
99f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 24 64  ..            $d 9a00: 69 72 65 63 74 6f 72 79 20 22 5c 22 2e 2e 2e 20 irectory "\"... 9a10: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 "].... if 9a20: 20 7b 5b 69 73 52 65 6c 65 61 73 65 41 76 61 69 {[isReleaseAvai 9a30: 6c 61 62 6c 65 20 24 64 69 72 65 63 74 6f 72 79 lable$directory
9a40: 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e   platform]} then
9a50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   {..          if
9a60: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
9a70: 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3d 3d 20 30   $platform] == 0 9a80: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 9a90: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f set platfo 9aa0: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20 rm unknown.. 9ab0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 9ac0: 20 20 20 20 20 69 66 20 7b 24 73 65 6c 65 63 74 if {$select
9ad0: 20 26 26 20 5b 6d 61 74 63 68 4d 61 63 68 69 6e   && [matchMachin
9ae0: 65 20 24 70 6c 61 74 66 6f 72 6d 5d 7d 20 74 68  e $platform]} th 9af0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 en {.. 9b00: 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f 64 69 set ::build_di 9b10: 72 65 63 74 6f 72 79 20 24 64 69 72 65 63 74 6f rectory$directo
9b20: 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  ry....
9b30: 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 9b40: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 [appendArgs "ye 9b50: 73 2c 20 73 65 6c 65 63 74 65 64 20 28 22 20 24 s, selected ("$
9b60: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d  platform ")\n"].
9b70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
9b80: 65 74 75 72 6e 20 74 72 75 65 0d 0a 20 20 20 20  eturn true..
9b90: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
9ba0: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74              tput
9bb0: 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  s $channel [appe 9bc0: 6e 64 41 72 67 73 20 22 79 65 73 20 28 22 20 24 ndArgs "yes ("$
9bd0: 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e 22 5d 0d  platform ")\n"].
9be0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..
9bf0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
9c00: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
9c10: 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 0d  $channel no\n... 9c20: 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 . forea 9c30: 63 68 20 70 61 74 68 20 5b 6c 73 6f 72 74 20 2d ch path [lsort - 9c40: 64 65 63 72 65 61 73 69 6e 67 20 5b 66 69 6c 65 decreasing [file 9c50: 20 6c 69 73 74 20 24 64 69 72 65 63 74 6f 72 79 list$directory
9c60: 20 2a 5d 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20   *]] {..
9c70: 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 65 78      if {[file ex
9c80: 69 73 74 73 20 24 70 61 74 68 5d 20 26 26 20 5b  ists $path] && [ 9c90: 66 69 6c 65 20 69 73 64 69 72 65 63 74 6f 72 79 file isdirectory 9ca0: 20 24 70 61 74 68 5d 7d 20 74 68 65 6e 20 7b 0d$path]} then {.
9cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74  .              t
9cc0: 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 9cd0: 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 9ce0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 9cf0: 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66 6f ---- checking fo 9d00: 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 r System.Data.SQ 9d10: 4c 69 74 65 20 72 65 6c 65 61 73 65 20 5c 22 22 Lite release \"" 9d20: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 9d30: 20 20 20 20 20 20 24 70 61 74 68 20 22 5c 22 2e$path "\".
9d40: 2e 2e 20 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  .. "]....
9d50: 20 20 20 20 20 20 20 69 66 20 7b 5b 69 73 52 65         if {[isRe
9d60: 6c 65 61 73 65 41 76 61 69 6c 61 62 6c 65 20 24  leaseAvailable $9d70: 70 61 74 68 20 70 6c 61 74 66 6f 72 6d 5d 7d 20 path platform]} 9d80: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 9d90: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 if {[str 9da0: 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 ing length$plat
9db0: 66 6f 72 6d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  form] == 0} then
9dc0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
9dd0: 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 6f        set platfo
9de0: 72 6d 20 75 6e 6b 6e 6f 77 6e 0d 0a 20 20 20 20  rm unknown..
9df0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
9e00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
9e10: 20 69 66 20 7b 24 73 65 6c 65 63 74 20 26 26 20   if {$select && 9e20: 5b 6d 61 74 63 68 4d 61 63 68 69 6e 65 20 24 70 [matchMachine$p
9e30: 6c 61 74 66 6f 72 6d 5d 7d 20 74 68 65 6e 20 7b  latform]} then {
9e40: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
9e50: 20 20 20 20 73 65 74 20 3a 3a 62 75 69 6c 64 5f      set ::build_
9e60: 64 69 72 65 63 74 6f 72 79 20 24 70 61 74 68 0d  directory $path. 9e70: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 ... 9e80: 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e tputs$chan
9e90: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
9ea0: 22 79 65 73 2c 20 73 65 6c 65 63 74 65 64 20 28  "yes, selected (
9eb0: 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29 5c 6e  " $platform ")\n 9ec0: 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 "].... 9ed0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 return t 9ee0: 72 75 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 rue.. 9ef0: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 } else {.. 9f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 9f10: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
9f20: 5b 61 70 70 65 6e 64 41 72 67 73 20 22 79 65 73  [appendArgs "yes
9f30: 20 28 22 20 24 70 6c 61 74 66 6f 72 6d 20 22 29   (" $platform ") 9f40: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n"].. 9f50: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 }.. 9f60: 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 9f70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 9f80: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
9f90: 6e 6f 5c 6e 0d 0a 20 20 20 20 20 20 20 20 20 20  no\n..
9fa0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..
9fb0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
9fc0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..
9fd0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20      } else {..
9fe0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha 9ff0: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 nnel [appendArgs a000: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a010: 22 2d 2d 2d 2d 20 65 6e 76 69 72 6f 6e 6d 65 6e "---- environmen a020: 74 20 76 61 72 69 61 62 6c 65 20 5c 22 53 79 73 t variable \"Sys a030: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 5c tem.Data.SQLite\ a040: 22 20 69 73 20 6e 6f 74 20 22 20 5c 0d 0a 20 20 " is not " \.. a050: 20 20 20 20 20 20 20 20 20 20 22 73 65 74 2c 20 "set, a060: 73 6b 69 70 70 69 6e 67 20 63 68 65 63 6b 20 66 skipping check f a070: 6f 72 20 72 65 6c 65 61 73 65 73 2e 2e 2e 5c 6e or releases...\n a080: 22 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 "].. }.... a090: 20 20 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 return fals a0a0: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... a0b0: 20 70 72 6f 63 20 63 68 65 63 6b 46 6f 72 53 51 proc checkForSQ a0c0: 4c 69 74 65 4c 69 62 72 61 72 79 20 7b 20 63 68 LiteLibrary { ch a0d0: 61 6e 6e 65 6c 20 7d 20 7b 0d 0a 20 20 20 20 20 annel } {.. a0e0: 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
a0f0: 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20 66  "---- checking f
a100: 6f 72 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  or SQLite core l
a110: 69 62 72 61 72 79 2e 2e 2e 20 22 0d 0a 0d 0a 20  ibrary... "....
a120: 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20       if {[catch
a130: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..
a140: 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d   object invoke -
a150: 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63  flags +NonPublic
a160: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
a170: 69 74 65 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20  ite.SQLite3 \..
a180: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
a190: 69 74 65 56 65 72 73 69 6f 6e 7d 20 76 65 72 73  iteVersion} vers
a1a0: 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20  ion] == 0} then
a1b0: 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  {..        #..
a1c0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68        # NOTE: Ch
a1d0: 65 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72  eck if the retur
a1e0: 6e 65 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20  ned version was
a1f0: 6e 75 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61  null.  If so, ma
a200: 6b 65 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20  ke it easy..
a210: 20 20 20 20 23 20 20 20 20 20 20 20 74 6f 20 73      #       to s
a220: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d  pot...        #.
a230: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74  .        if {[st
a240: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72  ring length $ver a250: 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e sion] == 0} then a260: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se a270: 74 20 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a t version null.. a280: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... a290: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. a2a0: 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 # NOTE: Attempt a2b0: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos a2c0: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident a2d0: 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 ifier for the SQ a2e0: 4c 69 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 Lite.. # a2f0: 20 20 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 core libra a300: 72 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ry... #.. a310: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat a320: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. a330: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 object inv a340: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP a350: 75 62 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 ublic System.Dat a360: 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 a.SQLite.SQLite3 a370: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. a380: 20 20 20 20 53 51 4c 69 74 65 53 6f 75 72 63 65 SQLiteSource a390: 49 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 Id} sourceId]} t a3a0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. a3b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # a3c0: 4e 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 NOTE: We failed a3d0: 74 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 to query the Fos a3e0: 73 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 sil source ident a3f0: 69 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 ifier... a400: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 #.. s a410: 65 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e et sourceId unkn a420: 6f 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a own.. }.. a430: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. a440: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 # NOTE: Che a450: 63 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e ck if the return a460: 65 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 ed Fossil source a470: 20 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 identifier was a480: 6e 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 null. If.. a490: 20 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d # so, m a4a0: 61 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 ake it easy to s a4b0: 70 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d pot... #. a4c0: 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 . if {[st a4d0: 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 ring length$sou
a4e0: 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65  rceId] == 0} the
a4f0: 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73  n {..          s
a500: 65 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c  et sourceId null
a510: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
a520: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
a530: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74    # NOTE: Yes, t
a540: 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
a550: 69 62 72 61 72 79 20 61 70 70 65 61 72 73 20 74  ibrary appears t
a560: 6f 20 62 65 20 61 76 61 69 6c 61 62 6c 65 2e 0d  o be available..
a570: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
a580: 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e      addConstrain
a590: 74 20 53 51 4c 69 74 65 0d 0a 0d 0a 20 20 20 20  t SQLite....
a5a0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann a5b0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 el [appendArgs " a5c0: 79 65 73 20 28 22 20 24 76 65 72 73 69 6f 6e 20 yes ("$version
a5d0: 22 20 22 20 24 73 6f 75 72 63 65 49 64 20 22 29  " " $sourceId ") a5e0: 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 7d 20 65 6c \n"].. } el a5f0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 se {.. tp a600: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c uts$channel no\
a610: 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  n..      }..
a620: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63  }.....    proc c
a630: 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 6e 74  heckForSQLiteInt
a640: 65 72 6f 70 20 7b 20 63 68 61 6e 6e 65 6c 20 7d  erop { channel }
a650: 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20   {..      tputs
a660: 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63  $channel "---- c a670: 68 65 63 6b 69 6e 67 20 66 6f 72 20 53 51 4c 69 hecking for SQLi a680: 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d te interop assem a690: 62 6c 79 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 bly... ".... a6a0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a if {[catch {.. a6b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 ob a6c0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla a6d0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 53 79 gs +NonPublic Sy a6e0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 stem.Data.SQLite a6f0: 2e 53 51 4c 69 74 65 33 20 5c 0d 0a 20 20 20 20 .SQLite3 \.. a700: 20 20 20 20 20 20 20 20 20 20 49 6e 74 65 72 6f Intero a710: 70 56 65 72 73 69 6f 6e 7d 20 76 65 72 73 69 6f pVersion} versio a720: 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d n] == 0} then {. a730: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. a740: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec a750: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 k if the returne a760: 64 20 76 65 72 73 69 6f 6e 20 77 61 73 20 6e 75 d version was nu a770: 6c 6c 2e 20 20 49 66 20 73 6f 2c 20 6d 61 6b 65 ll. If so, make a780: 20 69 74 20 65 61 73 79 0d 0a 20 20 20 20 20 20 it easy.. a790: 20 20 23 20 20 20 20 20 20 20 74 6f 20 73 70 6f # to spo a7a0: 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 t... #.. a7b0: 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri a7c0: 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 72 73 69 ng length$versi
a7d0: 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  on] == 0} then {
a7e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
a7f0: 76 65 72 73 69 6f 6e 20 6e 75 6c 6c 0d 0a 20 20  version null..
a800: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
a810: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
a820: 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f  NOTE: Attempt to
a830: 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73 69   query the Fossi
a840: 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69 66  l source identif
a850: 69 65 72 20 66 6f 72 20 74 68 65 20 53 51 4c 69  ier for the SQLi
a860: 74 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  te..        #
a870: 20 20 20 20 63 6f 72 65 20 6c 69 62 72 61 72 79      core library
a880: 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
a890: 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
a8a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
a8b0: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b      object invok
a8c0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62  e -flags +NonPub
a8d0: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  lic System.Data.
a8e0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c  SQLite.SQLite3 \
a8f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
a900: 20 20 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49    InteropSourceI
a910: 64 7d 20 73 6f 75 72 63 65 49 64 5d 7d 20 74 68  d} sourceId]} th
a920: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
a930: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e  #..          # N
a940: 4f 54 45 3a 20 57 65 20 66 61 69 6c 65 64 20 74  OTE: We failed t
a950: 6f 20 71 75 65 72 79 20 74 68 65 20 46 6f 73 73  o query the Foss
a960: 69 6c 20 73 6f 75 72 63 65 20 69 64 65 6e 74 69  il source identi
a970: 66 69 65 72 2e 0d 0a 20 20 20 20 20 20 20 20 20  fier...
a980: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65   #..          se
a990: 74 20 73 6f 75 72 63 65 49 64 20 75 6e 6b 6e 6f  t sourceId unkno
a9a0: 77 6e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  wn..        }...
a9b0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
a9c0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63      # NOTE: Chec
a9d0: 6b 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65  k if the returne
a9e0: 64 20 46 6f 73 73 69 6c 20 73 6f 75 72 63 65 20  d Fossil source
a9f0: 69 64 65 6e 74 69 66 69 65 72 20 77 61 73 20 6e  identifier was n
aa00: 75 6c 6c 2e 20 20 49 66 0d 0a 20 20 20 20 20 20  ull.  If..
aa10: 20 20 23 20 20 20 20 20 20 20 73 6f 2c 20 6d 61    #       so, ma
aa20: 6b 65 20 69 74 20 65 61 73 79 20 74 6f 20 73 70  ke it easy to sp
aa30: 6f 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ot...        #..
aa40: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72          if {[str
aa50: 69 6e 67 20 6c 65 6e 67 74 68 20 24 73 6f 75 72  ing length $sour aa60: 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74 68 65 6e ceId] == 0} then aa70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 {.. se aa80: 74 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d t sourceId null. aa90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 . }.... aaa0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. aab0: 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 68 # NOTE: Yes, th aac0: 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72 6f 70 e SQLite interop aad0: 20 61 73 73 65 6d 62 6c 79 20 61 70 70 65 61 72 assembly appear aae0: 73 20 74 6f 20 62 65 20 61 76 61 69 6c 61 62 6c s to be availabl aaf0: 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. ab00: 20 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 addConstr ab10: 61 69 6e 74 20 53 51 4c 69 74 65 49 6e 74 65 72 aint SQLiteInter ab20: 6f 70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 70 op.... tp ab30: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
ab40: 70 65 6e 64 41 72 67 73 20 22 79 65 73 20 28 22  pendArgs "yes ("
ab50: 20 24 76 65 72 73 69 6f 6e 20 22 20 22 20 24 73   $version " "$s
ab60: 6f 75 72 63 65 49 64 20 22 29 5c 6e 22 5d 0d 0a  ourceId ")\n"]..
ab70: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
ab80: 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c ab90: 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 hannel no\n.. aba0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a }.. }..... abb0: 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo abc0: 72 53 51 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e rSQLiteDefineCon abd0: 73 74 61 6e 74 20 7b 20 63 68 61 6e 6e 65 6c 20 stant { channel abe0: 6e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 20 20 name } {.. abf0: 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
ac00: 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
ac10: 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 68          "---- ch
ac20: 65 63 6b 69 6e 67 20 66 6f 72 20 53 79 73 74 65  ecking for Syste
ac30: 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 20 64 65  m.Data.SQLite de
ac40: 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74 20 5c 22  fine constant \"
ac50: 22 20 24 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  " $name \.. ac60: 20 20 20 20 20 22 5c 22 2e 2e 2e 20 22 5d 0d 0a "\"... "].. ac70: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 .. if {[cat ac80: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 ch {.. ac90: 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76 6f 6b object invok aca0: 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 e -flags +NonPub acb0: 6c 69 63 20 53 79 73 74 65 6d 2e 44 61 74 61 2e lic System.Data. acc0: 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 33 20 5c SQLite.SQLite3 \ acd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ace0: 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 7d DefineConstants} acf0: 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 defineConstants ad00: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a ] == 0} then {.. ad10: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 6c 73 65 if {[lse ad20: 61 72 63 68 20 2d 65 78 61 63 74 20 2d 6e 6f 63 arch -exact -noc ad30: 61 73 65 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 ase$defineConst
ad40: 61 6e 74 73 20 24 6e 61 6d 65 5d 20 21 3d 20 2d  ants $name] != - ad50: 31 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 1} then {.. ad60: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. ad70: 20 20 23 20 4e 4f 54 45 3a 20 59 65 73 2c 20 74 # NOTE: Yes, t ad80: 68 69 73 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 his define const ad90: 61 6e 74 20 77 61 73 20 65 6e 61 62 6c 65 64 20 ant was enabled ada0: 77 68 65 6e 20 74 68 65 20 6d 61 6e 61 67 65 64 when the managed adb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # adc0: 20 20 20 20 61 73 73 65 6d 62 6c 79 20 77 61 73 assembly was add0: 20 63 6f 6d 70 69 6c 65 64 2e 0d 0a 20 20 20 20 compiled... ade0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. adf0: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74 addConstraint ae00: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 64 65 66 [appendArgs def ae10: 69 6e 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 ineConstant.Syst ae20: 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 20 em.Data.SQLite. ae30: 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20$name]....
ae40: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann ae50: 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 20 20 el yes\n.. ae60: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. ae70: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 tputs$cha
ae80: 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a 20 20 20 20 20  nnel no\n..
ae90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c     }..      } el
aea0: 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70  se {..        tp
aeb0: 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 65 72 72  uts $channel err aec0: 6f 72 5c 6e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 or\n.. }.. aed0: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f }..... pro aee0: 63 20 67 65 74 44 61 74 65 54 69 6d 65 46 6f 72 c getDateTimeFor aef0: 6d 61 74 20 7b 7d 20 7b 0d 0a 20 20 20 20 20 20 mat {} {.. af00: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: af10: 20 54 68 69 73 20 70 72 6f 63 65 64 75 72 65 20 This procedure af20: 73 69 6d 70 6c 79 20 72 65 74 75 72 6e 73 20 74 simply returns t af30: 68 65 20 22 64 65 66 61 75 6c 74 22 20 44 61 74 he "default" Dat af40: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 75 73 65 eTime format use af50: 64 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 d.. # af60: 20 62 79 20 74 68 65 20 74 65 73 74 20 73 75 69 by the test sui af70: 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 te... #.. af80: 20 20 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 if {[info ex af90: 69 73 74 73 20 3a 3a 64 61 74 65 74 69 6d 65 5f ists ::datetime_ afa0: 66 6f 72 6d 61 74 5d 20 26 26 20 5c 0d 0a 20 20 format] && \.. afb0: 20 20 20 20 20 20 20 20 5b 73 74 72 69 6e 67 20 [string afc0: 6c 65 6e 67 74 68 20 24 3a 3a 64 61 74 65 74 69 length$::dateti
afd0: 6d 65 5f 66 6f 72 6d 61 74 5d 20 3e 20 30 7d 20  me_format] > 0}
afe0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
aff0: 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
b000: 45 3a 20 52 65 74 75 72 6e 20 74 68 65 20 6d 61  E: Return the ma
b010: 6e 75 61 6c 6c 79 20 6f 76 65 72 72 69 64 64 65  nually overridde
b020: 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20  n value for the
b030: 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74 2e  DateTime format.
b040: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b050: 20 20 20 20 20 72 65 74 75 72 6e 20 24 3a 3a 64       return $::d b060: 61 74 65 74 69 6d 65 5f 66 6f 72 6d 61 74 0d 0a atetime_format.. b070: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. b080: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. b090: 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 # NOTE: Retur b0a0: 6e 20 61 6e 20 49 53 4f 38 36 30 31 20 44 61 74 n an ISO8601 Dat b0b0: 65 54 69 6d 65 20 66 6f 72 6d 61 74 20 63 6f 6d eTime format com b0c0: 70 61 74 69 62 6c 65 20 77 69 74 68 20 53 51 4c patible with SQL b0d0: 69 74 65 2c 0d 0a 20 20 20 20 20 20 20 20 23 20 ite,.. # b0e0: 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat b0f0: 61 2e 53 51 4c 69 74 65 2c 20 61 6e 64 20 73 75 a.SQLite, and su b100: 69 74 61 62 6c 65 20 66 6f 72 20 72 6f 75 6e 64 itable for round b110: 2d 74 72 69 70 70 69 6e 67 20 77 69 74 68 20 74 -tripping with t b120: 68 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 he.. # b130: 20 20 20 20 44 61 74 65 54 69 6d 65 20 63 6c 61 DateTime cla b140: 73 73 20 6f 66 20 74 68 65 20 66 72 61 6d 65 77 ss of the framew b150: 6f 72 6b 2e 20 20 49 66 20 74 68 69 73 20 76 61 ork. If this va b160: 6c 75 65 20 69 73 20 63 68 61 6e 67 65 64 2c 0d lue is changed,. b170: 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # b180: 20 76 61 72 69 6f 75 73 20 74 65 73 74 73 20 6d various tests m b190: 61 79 20 66 61 69 6c 2e 0d 0a 20 20 20 20 20 20 ay fail... b1a0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74 #.. ret b1b0: 75 72 6e 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 urn "yyyy-MM-dd b1c0: 48 48 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 HH:mm:ss.FFFFFFF b1d0: 4b 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 K".. }.. b1e0: 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 }..... proc b1f0: 65 6e 75 6d 65 72 61 62 6c 65 54 6f 4c 69 73 74 enumerableToList b200: 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d 20 { enumerable } b210: 7b 0d 0a 20 20 20 20 20 20 73 65 74 20 72 65 73 {.. set res b220: 75 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 ult [list].... b230: 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 if {[string b240: 6c 65 6e 67 74 68 20 24 65 6e 75 6d 65 72 61 62 length$enumerab
b250: 6c 65 5d 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75  le] == 0 || $enu b260: 6d 65 72 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c merable eq "null b270: 22 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 "} then {.. b280: 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c return$resul
b290: 74 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  t..      }....
b2a0: 20 20 20 20 6f 62 6a 65 63 74 20 66 6f 72 65 61      object forea
b2b0: 63 68 20 2d 61 6c 69 61 73 20 69 74 65 6d 20 24  ch -alias item $b2c0: 65 6e 75 6d 65 72 61 62 6c 65 20 7b 0d 0a 20 20 enumerable {.. b2d0: 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e if {[strin b2e0: 67 20 6c 65 6e 67 74 68 20 24 69 74 65 6d 5d 20 g length$item]
b2f0: 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  > 0} then {..
b300: 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72         lappend r
b310: 65 73 75 6c 74 20 5b 24 69 74 65 6d 20 54 6f 53  esult [$item ToS b320: 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20 20 20 20 tring].. b330: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 }.. }.... b340: 20 20 20 20 72 65 74 75 72 6e 20 24 72 65 73 75 return$resu
b350: 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20  lt..    }.....
b360: 20 20 70 72 6f 63 20 63 61 74 63 68 41 6e 64 52    proc catchAndR
b370: 65 74 75 72 6e 20 7b 20 73 63 72 69 70 74 20 7b  eturn { script {
b380: 73 74 61 63 6b 54 72 61 63 65 20 66 61 6c 73 65  stackTrace false
b390: 7d 20 7b 73 74 72 69 63 74 20 74 72 75 65 7d 20  } {strict true}
b3a0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
b3b0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c      # NOTE: Eval
b3c0: 75 61 74 65 20 74 68 65 20 73 63 72 69 70 74 20  uate the script
b3d0: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
b3e0: 63 61 6c 6c 65 72 20 69 6e 20 74 68 65 69 72 20  caller in their
b3f0: 63 6f 6e 74 65 78 74 2c 0d 0a 20 20 20 20 20 20  context,..
b400: 23 20 20 20 20 20 20 20 63 61 70 74 75 72 69 6e  #       capturin
b410: 67 20 62 6f 74 68 20 74 68 65 20 72 65 73 75 6c  g both the resul
b420: 74 20 61 6e 64 20 74 68 65 20 72 65 74 75 72 6e  t and the return
b430: 20 63 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d   code...      #.
b440: 0a 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20  .      set code
b450: 5b 63 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20  [catch {uplevel
b460: 31 20 24 73 63 72 69 70 74 7d 20 72 65 73 75 6c  1 $script} resul b470: 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 t].... #.. b480: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 69 64 # NOTE: Did b490: 20 74 68 65 20 73 63 72 69 70 74 20 70 72 6f 76 the script prov b4a0: 69 64 65 64 20 62 79 20 6f 75 72 20 63 61 6c 6c ided by our call b4b0: 65 72 20 4e 4f 54 20 72 61 69 73 65 20 61 6e 20 er NOT raise an b4c0: 65 72 72 6f 72 3f 0d 0a 20 20 20 20 20 20 23 0d error?.. #. b4d0: 0a 20 20 20 20 20 20 69 66 20 7b 24 73 74 72 69 . if {$stri
b4e0: 63 74 20 26 26 20 24 63 6f 64 65 20 3d 3d 20 30  ct && $code == 0 b4f0: 20 7c 7c 20 21 24 73 74 72 69 63 74 20 26 26 20 || !$strict &&
b500: 24 63 6f 64 65 20 21 3d 20 31 7d 20 74 68 65 6e  $code != 1} then b510: 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. b520: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S b530: 75 63 63 65 73 73 2e 20 20 52 65 74 75 72 6e 20 uccess. Return b540: 61 20 6c 69 73 74 20 77 69 74 68 20 74 68 65 20 a list with the b550: 72 65 74 75 72 6e 20 63 6f 64 65 20 61 6e 64 20 return code and b560: 74 68 65 20 72 65 73 75 6c 74 2e 0d 0a 20 20 20 the result... b570: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. b580: 72 65 74 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f return [list$co
b590: 64 65 20 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20  de $result].. b5a0: 20 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 73 74 } elseif {$st
b5b0: 61 63 6b 54 72 61 63 65 7d 20 74 68 65 6e 20 7b  ackTrace} then {
b5c0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b5d0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 61 69       # NOTE: Fai
b5e0: 6c 75 72 65 2e 20 20 4f 75 72 20 63 61 6c 6c 65  lure.  Our calle
b5f0: 72 20 77 61 6e 74 73 20 61 20 66 75 6c 6c 20 73  r wants a full s
b600: 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 20 61  tack trace (if a
b610: 70 70 6c 69 63 61 62 6c 65 29 2c 0d 0a 20 20 20  pplicable),..
b620: 20 20 20 20 20 23 20 20 20 20 20 20 20 72 65 74       #       ret
b630: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20  urn a list with
b640: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20  the return code
b650: 61 6e 64 20 74 68 65 20 72 65 73 75 6c 74 20 76  and the result v
b660: 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...
b670: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 72 65 74    #..        ret
b680: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20  urn [list $code b690: 24 72 65 73 75 6c 74 5d 0d 0a 20 20 20 20 20 20$result]..
b6a0: 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20  } else {..
b6b0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
b6c0: 4f 54 45 3a 20 46 61 69 6c 75 72 65 2e 20 20 4f  OTE: Failure.  O
b6d0: 75 72 20 63 61 6c 6c 65 72 20 64 6f 65 73 20 6e  ur caller does n
b6e0: 6f 74 20 77 61 6e 74 20 61 20 66 75 6c 6c 20 73  ot want a full s
b6f0: 74 61 63 6b 20 74 72 61 63 65 20 28 69 66 0d 0a  tack trace (if..
b700: 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
b710: 61 70 70 6c 69 63 61 62 6c 65 29 2c 20 72 65 74  applicable), ret
b720: 75 72 6e 20 61 20 6c 69 73 74 20 77 69 74 68 20  urn a list with
b730: 74 68 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2c  the return code,
b740: 20 74 68 65 20 65 72 72 6f 72 0d 0a 20 20 20 20   the error..
b750: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 64 65      #       code
b760: 20 66 6f 72 20 74 68 65 20 69 6e 74 65 72 70 72   for the interpr
b770: 65 74 65 72 2c 20 61 6e 64 20 74 68 65 20 65 72  eter, and the er
b780: 72 6f 72 20 6d 65 73 73 61 67 65 20 75 70 20 74  ror message up t
b790: 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 23  o the..        #
b7a0: 20 20 20 20 20 20 20 70 6f 69 6e 74 20 77 68 65         point whe
b7b0: 72 65 20 74 68 65 20 73 74 61 63 6b 20 74 72 61  re the stack tra
b7c0: 63 65 20 73 68 6f 75 6c 64 20 73 74 61 72 74 2e  ce should start.
b7d0: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
b7e0: 20 20 20 20 20 73 65 74 20 69 6e 64 65 78 20 5b       set index [
b7f0: 73 74 72 69 6e 67 20 66 69 72 73 74 20 22 20 20  string first "
b800: 20 61 74 20 22 20 24 72 65 73 75 6c 74 5d 3b 20   at " $result]; b810: 23 20 48 41 43 4b 3a 20 52 65 6c 69 61 62 6c 65 # HACK: Reliable b820: 3f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 ?.... ret b830: 75 72 6e 20 5b 6c 69 73 74 20 24 63 6f 64 65 20 urn [list$code
b840: 24 3a 3a 65 72 72 6f 72 43 6f 64 65 20 5b 65 78  $::errorCode [ex b850: 70 72 20 7b 24 69 6e 64 65 78 20 21 3d 20 2d 31 pr {$index != -1
b860: 20 3f 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20   ? \..
b870: 20 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 5b    [string trim [
b880: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 72 65  string range $re b890: 73 75 6c 74 20 30 20 24 69 6e 64 65 78 5d 5d 20 sult 0$index]]
b8a0: 3a 20 24 72 65 73 75 6c 74 7d 5d 5d 0d 0a 20 20  : $result}]].. b8b0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... b8c0: 0a 20 20 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c . proc compil b8d0: 65 43 53 68 61 72 70 57 69 74 68 20 7b 0d 0a 20 eCSharpWith {.. b8e0: 20 20 20 20 20 20 20 20 20 20 20 74 65 78 74 20 text b8f0: 6d 65 6d 6f 72 79 20 73 79 6d 62 6f 6c 73 20 73 memory symbols s b900: 74 72 69 63 74 20 72 65 73 75 6c 74 73 56 61 72 trict resultsVar b910: 4e 61 6d 65 20 65 72 72 6f 72 73 56 61 72 4e 61 Name errorsVarNa b920: 6d 65 20 66 69 6c 65 4e 61 6d 65 73 0d 0a 20 20 me fileNames.. b930: 20 20 20 20 20 20 20 20 20 20 61 72 67 73 20 7d args } b940: 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 {.. #.. b950: 20 20 20 23 20 4e 4f 54 45 3a 20 53 69 6e 63 65 # NOTE: Since b960: 20 77 65 20 61 72 65 20 67 6f 69 6e 67 20 74 6f we are going to b970: 20 75 73 65 20 74 68 69 73 20 6d 65 74 68 6f 64 use this method b980: 20 6e 61 6d 65 20 61 20 6c 6f 74 2c 20 61 73 73 name a lot, ass b990: 69 67 6e 20 69 74 20 74 6f 20 61 0d 0a 20 20 20 ign it to a.. b9a0: 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69 61 # varia b9b0: 62 6c 65 20 66 69 72 73 74 2e 0d 0a 20 20 20 20 ble first... b9c0: 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 61 #.. set a b9d0: 64 64 20 52 65 66 65 72 65 6e 63 65 64 41 73 73 dd ReferencedAss b9e0: 65 6d 62 6c 69 65 73 2e 41 64 64 0d 0a 0d 0a 20 emblies.Add.... b9f0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # ba00: 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68 65 NOTE: Create the ba10: 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74 6f base command to ba20: 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61 64 evaluate and ad ba30: 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20 73 d the property s ba40: 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 20 20 23 ettings.. # ba50: 20 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 that are ba60: 61 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 almost always ne ba70: 65 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 eded by our unit ba80: 20 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 tests (i.e. the ba90: 20 53 79 73 74 65 6d 0d 0a 20 20 20 20 20 20 23 System.. # baa0: 20 20 20 20 20 20 20 61 6e 64 20 53 79 73 74 65 and Syste bab0: 6d 2e 44 61 74 61 20 61 73 73 65 6d 62 6c 79 20 m.Data assembly bac0: 72 65 66 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 references)... bad0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 74 #.. set bae0: 20 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 5c command [list \ baf0: 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6d 70 .. comp bb00: 69 6c 65 43 53 68 61 72 70 20 24 74 65 78 74 20 ileCSharp$text
bb10: 24 6d 65 6d 6f 72 79 20 24 73 79 6d 62 6f 6c 73  $memory$symbols
bb20: 20 24 73 74 72 69 63 74 20 72 65 73 75 6c 74 73   $strict results bb30: 20 65 72 72 6f 72 73 20 5c 0d 0a 20 20 20 20 20 errors \.. bb40: 20 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d$add System
bb50: 2e 64 6c 6c 20 24 61 64 64 20 53 79 73 74 65 6d  .dll $add System bb60: 2e 44 61 74 61 2e 64 6c 6c 20 24 61 64 64 20 53 .Data.dll$add S
bb70: 79 73 74 65 6d 2e 54 72 61 6e 73 61 63 74 69 6f  ystem.Transactio
bb80: 6e 73 2e 64 6c 6c 20 5c 0d 0a 20 20 20 20 20 20  ns.dll \..
bb90: 20 20 20 20 24 61 64 64 20 53 79 73 74 65 6d 2e      $add System. bba0: 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a 20 20 20 20 Xml.dll].... bbb0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT bbc0: 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70 E: Add all the p bbd0: 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d rovided file nam bbe0: 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72 es as assembly r bbf0: 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20 eferences... bc00: 20 20 23 0d 0a 20 20 20 20 20 20 66 6f 72 65 61 #.. forea bc10: 63 68 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c ch fileName$fil
bc20: 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20  eNames {..
bc30: 20 20 6c 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e    lappend comman
bc40: 64 20 24 61 64 64 20 5b 67 65 74 42 69 6e 61 72  d $add [getBinar bc50: 79 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e yFileName$fileN
bc60: 61 6d 65 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d  ame]..      }...
bc70: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
bc80: 23 20 4e 4f 54 45 3a 20 41 64 64 20 74 68 65 20  # NOTE: Add the
bc90: 65 78 74 72 61 20 61 72 67 75 6d 65 6e 74 73 2c  extra arguments,
bca0: 20 69 66 20 61 6e 79 2c 20 74 6f 20 74 68 65 20   if any, to the
bcb0: 63 6f 6d 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75  command to evalu
bcc0: 61 74 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ate...      #..
bcd0: 20 20 20 20 20 65 76 61 6c 20 6c 61 70 70 65 6e       eval lappen
bce0: 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72 67 73 0d  d command $args. bcf0: 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. bd00: 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 # NOTE: Alias bd10: 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 the compiler loc bd20: 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 al results and e bd30: 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 rrors variables bd40: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20 to the.. # bd50: 20 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e variable n bd60: 61 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 ames provided by bd70: 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 our caller... bd80: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70 76 #.. upv bd90: 61 72 20 31 20 24 72 65 73 75 6c 74 73 56 61 72 ar 1$resultsVar
bda0: 4e 61 6d 65 20 72 65 73 75 6c 74 73 0d 0a 20 20  Name results..
bdb0: 20 20 20 20 75 70 76 61 72 20 31 20 24 65 72 72      upvar 1 $err bdc0: 6f 72 73 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 orsVarName error bdd0: 73 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 s.... #.. bde0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 76 61 6c # NOTE: Eval bdf0: 75 61 74 65 20 74 68 65 20 63 6f 6e 73 74 72 75 uate the constru be00: 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65 43 53 68 cted [compileCSh be10: 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20 61 6e 64 arp] command and be20: 20 72 65 74 75 72 6e 20 74 68 65 0d 0a 20 20 20 return the.. be30: 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75 6c # resul be40: 74 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 t... #.. be50: 20 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 eval$command
be60: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20  ..    }.....
be70: 70 72 6f 63 20 69 73 4d 65 6d 6f 72 79 44 62 20  proc isMemoryDb
be80: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
be90: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
bea0: 20 4e 4f 54 45 3a 20 49 73 20 74 68 65 20 73 70   NOTE: Is the sp
beb0: 65 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65  ecified database
bec0: 20 66 69 6c 65 20 6e 61 6d 65 20 72 65 61 6c 6c   file name reall
bed0: 79 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20 64  y an in-memory d
bee0: 61 74 61 62 61 73 65 3f 0d 0a 20 20 20 20 20 20  atabase?..
bef0: 23 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  #..      return
bf00: 5b 65 78 70 72 20 7b 24 66 69 6c 65 4e 61 6d 65  [expr {$fileName bf10: 20 65 71 20 22 3a 6d 65 6d 6f 72 79 3a 22 20 7c eq ":memory:" | bf20: 7c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b | \.. [ bf30: 73 74 72 69 6e 67 20 72 61 6e 67 65 20 24 66 69 string range$fi
bf40: 6c 65 4e 61 6d 65 20 30 20 31 32 5d 20 65 71 20  leName 0 12] eq
bf50: 22 66 69 6c 65 3a 3a 6d 65 6d 6f 72 79 3a 22 7d  "file::memory:"}
bf60: 5d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20  ]..    }.....
bf70: 20 70 72 6f 63 20 69 73 54 61 62 6c 65 49 6e 44   proc isTableInD
bf80: 62 20 7b 20 6e 61 6d 65 20 7b 76 61 72 4e 61 6d  b { name {varNam
bf90: 65 20 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  e db} } {..
bfa0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
bfb0: 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 73  : Refer to the s
bfc0: 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 6c  pecified variabl
bfd0: 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e  e (e.g. "db") in
bfe0: 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20   the context of
bff0: 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20  our..      #
c000: 20 20 20 63 61 6c 6c 65 72 2e 20 20 49 74 20 63     caller.  It c
c010: 6f 6e 74 61 69 6e 73 20 74 68 65 20 64 61 74 61  ontains the data
c020: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection
c030: 68 61 6e 64 6c 65 20 74 68 61 74 20 77 69 6c 6c  handle that will
c040: 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20   be..      #
c050: 20 20 20 75 73 65 64 20 74 6f 20 65 78 65 63 75     used to execu
c060: 74 65 20 74 68 65 20 71 75 65 72 79 20 75 73 65  te the query use
c070: 64 20 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 69  d to determine i
c080: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
c090: 65 20 69 73 0d 0a 20 20 20 20 20 20 23 20 20 20  e is..      #
c0a0: 20 20 20 20 70 72 65 73 65 6e 74 20 69 6e 20 74      present in t
c0b0: 68 61 74 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  hat database...
c0c0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 75 70       #..      up
c0d0: 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64  var 1 $varName d c0e0: 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 b.... #.. c0f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 45 78 65 63 # NOTE: Exec c100: 75 74 65 20 74 68 65 20 53 51 4c 20 71 75 65 72 ute the SQL quer c110: 79 20 61 67 61 69 6e 73 74 20 74 68 65 20 73 71 y against the sq c120: 6c 69 74 65 5f 6d 61 73 74 65 72 20 74 61 62 6c lite_master tabl c130: 65 20 74 6f 20 63 68 65 63 6b 20 69 66 0d 0a 20 e to check if.. c140: 20 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 # the c150: 20 6e 61 6d 65 64 20 74 61 62 6c 65 20 69 73 20 named table is c160: 70 72 65 73 65 6e 74 20 61 6e 64 20 72 65 74 75 present and retu c170: 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 69 rn non-zero if i c180: 74 20 69 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a t is... #.. c190: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65 78 return [ex c1a0: 70 72 20 7b 5b 73 71 6c 20 65 78 65 63 75 74 65 pr {[sql execute c1b0: 20 2d 65 78 65 63 75 74 65 20 73 63 61 6c 61 72 -execute scalar c1c0: 20 24 64 62 20 5c 0d 0a 20 20 20 20 20 20 20 20$db \..
c1d0: 20 20 22 53 45 4c 45 43 54 20 43 4f 55 4e 54 28    "SELECT COUNT(
c1e0: 2a 29 20 46 52 4f 4d 20 73 71 6c 69 74 65 5f 6d  *) FROM sqlite_m
c1f0: 61 73 74 65 72 20 57 48 45 52 45 20 74 79 70 65  aster WHERE type
c200: 20 3d 20 27 74 61 62 6c 65 27 20 41 4e 44 20 6e   = 'table' AND n
c210: 61 6d 65 20 3d 20 3f 3b 22 20 5c 0d 0a 20 20 20  ame = ?;" \..
c220: 20 20 20 20 20 20 20 5b 6c 69 73 74 20 70 61 72         [list par
c230: 61 6d 31 20 53 74 72 69 6e 67 20 24 6e 61 6d 65  am1 String $name c240: 5d 5d 20 3e 20 30 7d 5d 0d 0a 20 20 20 20 7d 0d ]] > 0}].. }. c250: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 74 72 69 .... proc tri c260: 6d 53 71 6c 20 7b 20 73 71 6c 20 7d 20 7b 0d 0a mSql { sql } {.. c270: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 72 65 return [re c280: 67 73 75 62 20 2d 61 6c 6c 20 2d 2d 20 7b 5c 73 gsub -all -- {\s c290: 2b 7d 20 5b 73 74 72 69 6e 67 20 74 72 69 6d 20 +} [string trim c2a0: 24 73 71 6c 5d 20 22 20 22 5d 0d 0a 20 20 20 20$sql] " "]..
c2b0: 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 65  }.....    proc e
c2c0: 78 65 63 75 74 65 53 71 6c 20 7b 20 73 71 6c 20  xecuteSql { sql
c2d0: 7b 65 78 65 63 75 74 65 20 6e 6f 6e 65 7d 20 7b  {execute none} {
c2e0: 66 69 6c 65 4e 61 6d 65 20 22 22 7d 20 7d 20 7b  fileName ""} } {
c2f0: 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72  ..      if {[str
c300: 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 69 6c 65  ing length $file c310: 4e 61 6d 65 5d 20 3d 3d 20 30 7d 20 74 68 65 6e Name] == 0} then c320: 20 7b 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 3a {set fileName : c330: 6d 65 6d 6f 72 79 3a 7d 0d 0a 20 20 20 20 20 20 memory:}.. c340: 73 65 74 75 70 44 62 20 24 66 69 6c 65 4e 61 6d setupDb$fileNam
c350: 65 20 22 22 20 22 22 20 22 22 20 22 22 20 22 22  e "" "" "" "" ""
c360: 20 66 61 6c 73 65 20 66 61 6c 73 65 20 66 61 6c   false false fal
c370: 73 65 20 66 61 6c 73 65 20 6d 65 6d 44 62 0d 0a  se false memDb..
c380: 0d 0a 20 20 20 20 20 20 74 72 79 20 7b 0d 0a 20  ..      try {..
c390: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 73         return [s
c3a0: 71 6c 20 65 78 65 63 75 74 65 20 2d 65 78 65 63  ql execute -exec
c3b0: 75 74 65 20 24 65 78 65 63 75 74 65 20 24 6d 65  ute $execute$me
c3c0: 6d 44 62 20 24 73 71 6c 5d 0d 0a 20 20 20 20 20  mDb $sql].. c3d0: 20 7d 20 66 69 6e 61 6c 6c 79 20 7b 0d 0a 20 20 } finally {.. c3e0: 20 20 20 20 20 20 63 6c 65 61 6e 75 70 44 62 20 cleanupDb c3f0: 24 66 69 6c 65 4e 61 6d 65 20 6d 65 6d 44 62 20$fileName memDb
c400: 66 61 6c 73 65 20 66 61 6c 73 65 0d 0a 20 20 20  false false..
c410: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a     }..    }.....
c420: 20 20 20 20 70 72 6f 63 20 73 65 74 75 70 44 62      proc setupDb
c430: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
c440: 66 69 6c 65 4e 61 6d 65 20 7b 6d 6f 64 65 20 22  fileName {mode "
c450: 22 7d 20 7b 64 61 74 65 54 69 6d 65 46 6f 72 6d  "} {dateTimeForm
c460: 61 74 20 22 22 7d 20 7b 64 61 74 65 54 69 6d 65  at ""} {dateTime
c470: 4b 69 6e 64 20 22 22 7d 20 7b 66 6c 61 67 73 20  Kind ""} {flags
c480: 22 22 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ""}..
c490: 20 7b 65 78 74 72 61 20 22 22 7d 20 7b 71 75 61   {extra ""} {qua
c4a0: 6c 69 66 79 20 74 72 75 65 7d 20 7b 64 65 6c 65  lify true} {dele
c4b0: 74 65 20 74 72 75 65 7d 20 7b 75 72 69 20 66 61  te true} {uri fa
c4c0: 6c 73 65 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  lse}..
c4d0: 20 20 7b 74 65 6d 70 6f 72 61 72 79 20 74 72 75    {temporary tru
c4e0: 65 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 20  e} {varName db}
c4f0: 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  } {..      #..
c500: 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 69 72 73      # NOTE: Firs
c510: 74 2c 20 73 65 65 20 69 66 20 6f 75 72 20 63 61  t, see if our ca
c520: 6c 6c 65 72 20 68 61 73 20 72 65 71 75 65 73 74  ller has request
c530: 65 64 20 61 6e 20 69 6e 2d 6d 65 6d 6f 72 79 20  ed an in-memory
c540: 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 20  database...
c550: 20 23 0d 0a 20 20 20 20 20 20 73 65 74 20 69 73   #..      set is
c560: 4d 65 6d 6f 72 79 20 5b 69 73 4d 65 6d 6f 72 79  Memory [isMemory
c570: 44 62 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  Db $fileName]... c580: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 . #.. c590: 23 20 4e 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c # NOTE: For now, c5a0: 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61 all test databa c5b0: 73 65 73 20 75 73 65 64 20 62 79 20 74 68 65 20 ses used by the c5c0: 74 65 73 74 20 73 75 69 74 65 20 61 72 65 20 70 test suite are p c5d0: 6c 61 63 65 64 0d 0a 20 20 20 20 20 20 23 20 20 laced.. # c5e0: 20 20 20 20 20 69 6e 74 6f 20 74 68 65 20 64 61 into the da c5f0: 74 61 62 61 73 65 20 64 69 72 65 63 74 6f 72 79 tabase directory c600: 2e 20 20 45 61 63 68 20 64 61 74 61 62 61 73 65 . Each database c610: 20 61 6e 64 20 72 65 6c 61 74 65 64 20 66 69 6c and related fil c620: 65 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 es.. # c630: 20 20 75 73 65 64 20 62 79 20 61 20 74 65 73 74 used by a test c640: 20 73 68 6f 75 6c 64 20 62 65 20 63 6c 65 61 6e should be clean c650: 65 64 20 75 70 20 62 79 20 74 68 61 74 20 74 65 ed up by that te c660: 73 74 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 st using the.. c670: 20 20 20 20 23 20 20 20 20 20 20 20 22 63 6c 65 # "cle c680: 61 6e 75 70 44 62 22 20 70 72 6f 63 65 64 75 72 anupDb" procedur c690: 65 2c 20 62 65 6c 6f 77 2e 0d 0a 20 20 20 20 20 e, below... c6a0: 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 #.. if {!$
c6b0: 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 71 75 61  isMemory && $qua c6c0: 6c 69 66 79 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 lify} then {.. c6d0: 20 20 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 set fileNa c6e0: 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 me [file join [g c6f0: 65 74 44 61 74 61 62 61 73 65 44 69 72 65 63 74 etDatabaseDirect c700: 6f 72 79 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 ory] [file tail c710: 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 20 20 20$fileName]]..
c720: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
c730: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42  .      # NOTE: B
c740: 79 20 64 65 66 61 75 6c 74 2c 20 64 65 6c 65 74  y default, delet
c750: 65 20 61 6e 79 20 70 72 65 2d 65 78 69 73 74 69  e any pre-existi
c760: 6e 67 20 64 61 74 61 62 61 73 65 20 77 69 74 68  ng database with
c770: 20 74 68 65 20 73 61 6d 65 20 66 69 6c 65 0d 0a   the same file..
c780: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 6e 61        #       na
c790: 6d 65 20 69 66 20 69 74 20 63 75 72 72 65 6e 74  me if it current
c7a0: 6c 79 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20  ly exists...
c7b0: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21    #..      if {!
c7c0: 24 69 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65  $isMemory &&$de
c7d0: 6c 65 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78  lete && [file ex
c7e0: 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ists $fileName]} c7f0: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. c800: 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f #.. # NO c810: 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 64 TE: Attempt to d c820: 65 6c 65 74 65 20 61 6e 79 20 70 72 65 2d 65 78 elete any pre-ex c830: 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 isting database c840: 77 69 74 68 20 74 68 65 20 73 61 6d 65 20 66 69 with the same fi c850: 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 le.. # c860: 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 name... c870: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if c880: 20 7b 5b 63 61 74 63 68 20 7b 66 69 6c 65 20 64 {[catch {file d c890: 65 6c 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d elete$fileName}
c8a0: 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d   error]} then {.
c8b0: 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20  .          #..
c8c0: 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20          # NOTE:
c8d0: 57 65 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65  We somehow faile
c8e0: 64 20 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20  d to delete the
c8f0: 66 69 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79  file, report why
c900: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
c910: 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
c920: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel c930: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. c940: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d 3d "== c950: 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c == WARNING: fail c960: 65 64 20 74 6f 20 64 65 6c 65 74 65 20 64 61 74 ed to delete dat c970: 61 62 61 73 65 20 66 69 6c 65 20 5c 22 22 20 24 abase file \""$
c980: 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20  fileName \..
c990: 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 75            "\" du
c9a0: 72 69 6e 67 20 73 65 74 75 70 2c 20 65 72 72 6f  ring setup, erro
c9b0: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error c9c0: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d \n].. }. c9d0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... c9e0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT c9f0: 45 3a 20 52 65 66 65 72 20 74 6f 20 74 68 65 20 E: Refer to the ca00: 73 70 65 63 69 66 69 65 64 20 76 61 72 69 61 62 specified variab ca10: 6c 65 20 28 65 2e 67 2e 20 22 64 62 22 29 20 69 le (e.g. "db") i ca20: 6e 20 74 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 n the context of ca30: 20 6f 75 72 0d 0a 20 20 20 20 20 20 23 20 20 20 our.. # ca40: 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 caller. The ca50: 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20 6f handle to the o ca60: 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20 77 pened database w ca70: 69 6c 6c 20 62 65 20 73 74 6f 72 65 64 20 74 68 ill be stored th ca80: 65 72 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 ere... #.. ca90: 20 20 20 20 20 75 70 76 61 72 20 31 20 24 76 61 upvar 1$va
caa0: 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20 20 20 20  rName db....
cab0: 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
cac0: 45 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e  E: Start buildin
cad0: 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  g the connection
cae0: 20 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e   string.  The on
caf0: 6c 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74  ly required port
cb00: 69 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20  ion..      #
cb10: 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63     of the connec
cb20: 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 73 20 74  tion string is t
cb30: 68 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20  he data source,
cb40: 77 68 69 63 68 20 63 6f 6e 74 61 69 6e 73 20 74  which contains t
cb50: 68 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  he..      #
cb60: 20 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20    database file
cb70: 6e 61 6d 65 20 69 74 73 65 6c 66 2e 20 20 49 66  name itself.  If
cb80: 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e 74   our caller want
cb90: 73 20 74 6f 20 75 73 65 20 61 20 55 52 49 20 61  s to use a URI a
cba0: 73 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  s..      #
cbb0: 20 74 68 65 20 64 61 74 61 20 73 6f 75 72 63 65   the data source
cbc0: 2c 20 75 73 65 20 74 68 65 20 46 75 6c 6c 55 72  , use the FullUr
cbd0: 69 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  i connection str
cbe0: 69 6e 67 20 70 72 6f 70 65 72 74 79 20 74 6f 0d  ing property to.
cbf0: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 70  .      #       p
cc00: 72 65 76 65 6e 74 20 74 68 65 20 64 61 74 61 20  revent the data
cc10: 73 6f 75 72 63 65 20 73 74 72 69 6e 67 20 66 72  source string fr
cc20: 6f 6d 20 62 65 69 6e 67 20 6d 61 6e 67 6c 65 64  om being mangled
cc30: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
cc40: 20 20 69 66 20 7b 24 75 72 69 7d 20 74 68 65 6e    if {$uri} then cc50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 {.. set cc60: 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 46 75 6c 6c connection {Full cc70: 55 72 69 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d Uri=${fileName}}
cc80: 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ..      } else {
cc90: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63 6f  ..        set co
cca0: 6e 6e 65 63 74 69 6f 6e 20 7b 44 61 74 61 20 53  nnection {Data S
ccb0: 6f 75 72 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65  ource=${fileName ccc0: 7d 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 }}.. }.... ccd0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # cce0: 4e 4f 54 45 3a 20 53 69 6e 63 65 20 74 68 69 73 NOTE: Since this ccf0: 20 70 72 6f 63 65 64 75 72 65 20 68 61 73 20 6e procedure has n cd00: 6f 20 73 70 65 63 69 61 6c 20 6b 6e 6f 77 6c 65 o special knowle cd10: 64 67 65 20 6f 66 20 77 68 61 74 20 74 68 65 20 dge of what the cd20: 64 65 66 61 75 6c 74 0d 0a 20 20 20 20 20 20 23 default.. # cd30: 20 20 20 20 20 20 20 73 65 74 74 69 6e 67 20 69 setting i cd40: 73 20 66 6f 72 20 74 68 65 20 54 6f 46 75 6c 6c s for the ToFull cd50: 50 61 74 68 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 Path connection cd60: 73 74 72 69 6e 67 20 70 72 6f 70 65 72 79 2c 20 string propery, cd70: 61 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 23 20 always.. # cd80: 20 20 20 20 20 20 61 64 64 20 74 68 65 20 76 61 add the va cd90: 6c 75 65 20 77 65 20 6b 6e 6f 77 20 61 62 6f 75 lue we know abou cda0: 74 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 t to the connect cdb0: 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 ion string... cdc0: 20 20 20 23 0d 0a 20 20 20 20 20 20 61 70 70 65 #.. appe cdd0: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b nd connection {; cde0: 54 6f 46 75 6c 6c 50 61 74 68 3d 24 7b 71 75 61 ToFullPath=${qua
cdf0: 6c 69 66 79 7d 7d 0d 0a 0d 0a 20 20 20 20 20 20  lify}}....
ce00: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  #..      # NOTE:
ce10: 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73   If our caller s
ce20: 70 65 63 69 66 69 65 64 20 61 20 6a 6f 75 72 6e  pecified a journ
ce30: 61 6c 20 6d 6f 64 65 2c 20 61 64 64 20 74 68 65  al mode, add the
ce40: 20 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69   necessary porti
ce50: 6f 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  on..      #
ce60: 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74    of the connect
ce70: 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d  ion string now..
ce80: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
ce90: 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67  if {[string leng
cea0: 74 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74  th $mode] > 0} t ceb0: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 61 hen {.. a cec0: 70 70 65 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e ppend connection ced0: 20 7b 3b 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d {;Journal Mode= cee0: 24 7b 6d 6f 64 65 7d 7d 0d 0a 20 20 20 20 20 20${mode}}..
cef0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  }....      #..
cf00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 6f      # NOTE: If o
cf10: 75 72 20 63 61 6c 6c 65 72 20 73 70 65 63 69 66  ur caller specif
cf20: 69 65 64 20 61 20 44 61 74 65 54 69 6d 65 20 66  ied a DateTime f
cf30: 6f 72 6d 61 74 2c 20 61 64 64 20 74 68 65 20 6e  ormat, add the n
cf40: 65 63 65 73 73 61 72 79 0d 0a 20 20 20 20 20 20  ecessary..
cf50: 23 20 20 20 20 20 20 20 70 6f 72 74 69 6f 6e 20  #       portion
cf60: 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
cf70: 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20  n string now...
cf80: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
cf90: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
cfa0: 20 24 64 61 74 65 54 69 6d 65 46 6f 72 6d 61 74   $dateTimeFormat cfb0: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. cfc0: 20 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f append co cfd0: 6e 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 nnection {;DateT cfe0: 69 6d 65 46 6f 72 6d 61 74 3d 24 7b 64 61 74 65 imeFormat=${date
cff0: 54 69 6d 65 46 6f 72 6d 61 74 7d 7d 0d 0a 20 20  TimeFormat}}..
d000: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23      }....      #
d010: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20  ..      # NOTE:
d020: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70  If our caller sp
d030: 65 63 69 66 69 65 64 20 61 20 44 61 74 65 54 69  ecified a DateTi
d040: 6d 65 4b 69 6e 64 2c 20 61 64 64 20 74 68 65 20  meKind, add the
d050: 6e 65 63 65 73 73 61 72 79 20 70 6f 72 74 69 6f  necessary portio
d060: 6e 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  n..      #
d070: 20 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   of the connecti
d080: 6f 6e 20 73 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a  on string now...
d090: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
d0a0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
d0b0: 68 20 24 64 61 74 65 54 69 6d 65 4b 69 6e 64 5d  h $dateTimeKind] d0c0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 > 0} then {.. d0d0: 20 20 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e append con d0e0: 6e 65 63 74 69 6f 6e 20 7b 3b 44 61 74 65 54 69 nection {;DateTi d0f0: 6d 65 4b 69 6e 64 3d 24 7b 64 61 74 65 54 69 6d meKind=${dateTim
d100: 65 4b 69 6e 64 7d 7d 0d 0a 20 20 20 20 20 20 7d  eKind}}..      }
d110: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
d120: 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 74 68     # NOTE: If th
d130: 65 72 65 20 61 72 65 20 61 6e 79 20 67 6c 6f 62  ere are any glob
d140: 61 6c 20 28 70 65 72 20 74 65 73 74 20 72 75 6e  al (per test run
d150: 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61  ) connection fla
d160: 67 73 20 63 75 72 72 65 6e 74 6c 79 0d 0a 20 20  gs currently..
d170: 20 20 20 20 23 20 20 20 20 20 20 20 73 65 74 2c      #       set,
d180: 20 75 73 65 20 74 68 65 6d 20 6e 6f 77 20 28 69   use them now (i
d190: 2e 65 2e 20 62 79 20 63 6f 6d 62 69 6e 69 6e 67  .e. by combining
d1a0: 20 74 68 65 6d 20 77 69 74 68 20 74 68 65 20 6f   them with the o
d1b0: 6e 65 73 20 66 6f 72 20 74 68 69 73 0d 0a 20 20  nes for this..
d1c0: 20 20 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e      #       conn
d1d0: 65 63 74 69 6f 6e 29 2e 0d 0a 20 20 20 20 20 20  ection)...
d1e0: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 69 6e  #..      if {[in
d1f0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 63 6f 6e 6e  fo exists ::conn
d200: 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 20 26 26  ection_flags] &&
d210: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 73   \..          [s
d220: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $:: d230: 63 6f 6e 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 connection_flags d240: 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 ] > 0} then {.. d250: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. d260: 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 28 # NOTE: Show ( d270: 61 6e 64 20 6c 6f 67 29 20 74 68 61 74 20 77 65 and log) that we d280: 20 64 65 74 65 63 74 65 64 20 73 6f 6d 65 20 67 detected some g d290: 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e lobal connection d2a0: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 20 flags... d2b0: 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput d2c0: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
d2d0: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
d2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d  .            "--
d2f0: 2d 2d 20 67 6c 6f 62 61 6c 20 63 6f 6e 6e 65 63  -- global connec
d300: 74 69 6f 6e 20 66 6c 61 67 73 20 64 65 74 65 63  tion flags detec
d310: 74 65 64 3a 20 22 20 24 3a 3a 63 6f 6e 6e 65 63  ted: " $::connec d320: 74 69 6f 6e 5f 66 6c 61 67 73 20 5c 6e 5d 0d 0a tion_flags \n].. d330: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. d340: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6d # NOTE: Com d350: 62 69 6e 65 20 61 6e 64 2f 6f 72 20 72 65 70 6c bine and/or repl d360: 61 63 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 ace the connecti d370: 6f 6e 20 66 6c 61 67 73 20 61 6e 64 20 74 68 65 on flags and the d380: 6e 20 73 68 6f 77 20 74 68 65 0d 0a 20 20 20 20 n show the.. d390: 20 20 20 20 23 20 20 20 20 20 20 20 6e 65 77 20 # new d3a0: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 20 20 value... d3b0: 23 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 66 #.. set f d3c0: 6c 61 67 73 20 5b 63 6f 6d 62 69 6e 65 46 6c 61 lags [combineFla d3d0: 67 73 20 24 66 6c 61 67 73 20 24 3a 3a 63 6f 6e gs$flags $::con d3e0: 6e 65 63 74 69 6f 6e 5f 66 6c 61 67 73 5d 0d 0a nection_flags].. d3f0: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 .. tputs d400: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
d410: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
d420: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
d430: 20 63 6f 6d 62 69 6e 65 64 20 63 6f 6e 6e 65 63   combined connec
d440: 74 69 6f 6e 20 66 6c 61 67 73 20 61 72 65 3a 20  tion flags are:
d450: 22 20 24 66 6c 61 67 73 20 5c 6e 5d 0d 0a 20 20  " $flags \n].. d460: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 }.... # d470: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d480: 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 73 70 If our caller sp d490: 65 63 69 66 69 65 64 20 73 6f 6d 65 20 53 51 4c ecified some SQL d4a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 iteConnectionFla d4b0: 67 73 2c 20 61 64 64 20 74 68 65 0d 0a 20 20 20 gs, add the.. d4c0: 20 20 20 23 20 20 20 20 20 20 20 6e 65 63 65 73 # neces d4d0: 73 61 72 79 20 70 6f 72 74 69 6f 6e 20 6f 66 20 sary portion of d4e0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 the connection s d4f0: 74 72 69 6e 67 20 6e 6f 77 2e 0d 0a 20 20 20 20 tring now... d500: 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b #.. if {[ d510: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 66 string length$f
d520: 6c 61 67 73 5d 20 3e 20 30 7d 20 74 68 65 6e 20  lags] > 0} then
d530: 7b 0d 0a 20 20 20 20 20 20 20 20 61 70 70 65 6e  {..        appen
d540: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b 46  d connection {;F
d550: 6c 61 67 73 3d 24 7b 66 6c 61 67 73 7d 7d 0d 0a  lags=${flags}}.. d560: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... d570: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d580: 3a 20 49 66 20 6f 75 72 20 63 61 6c 6c 65 72 20 : If our caller d590: 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78 74 specified an ext d5a0: 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74 68 ra payload to th d5b0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 e connection.. d5c0: 20 20 20 20 23 20 20 20 20 20 20 20 73 74 72 69 # stri d5d0: 6e 67 2c 20 61 70 70 65 6e 64 20 69 74 20 6e 6f ng, append it no d5e0: 77 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 w... #.. d5f0: 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c if {[string l d600: 65 6e 67 74 68 20 24 65 78 74 72 61 5d 20 3e 20 ength$extra] >
d610: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
d620: 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65 63     append connec
d630: 74 69 6f 6e 20 5c 3b 20 24 65 78 74 72 61 0d 0a  tion \; $extra.. d640: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... d650: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 #.. # NOTE d660: 3a 20 4f 70 65 6e 20 74 68 65 20 64 61 74 61 62 : Open the datab d670: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e ase connection n d680: 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74 68 65 20 ow, placing the d690: 6f 70 61 71 75 65 20 68 61 6e 64 6c 65 20 76 61 opaque handle va d6a0: 6c 75 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 lue.. # d6b0: 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72 69 into the vari d6c0: 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20 62 able specified b d6d0: 79 20 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 y our caller... d6e0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 65 #.. se d6f0: 74 20 64 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d t db [sql open - d700: 74 79 70 65 20 53 51 4c 69 74 65 20 5b 73 75 62 type SQLite [sub d710: 73 74 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d st$connection]]
d720: 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20  ....      #..
d730: 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f 6e 66 69     # NOTE: Confi
d740: 67 75 72 65 20 74 68 65 20 74 65 6d 70 6f 72 61  gure the tempora
d750: 72 79 20 64 69 72 65 63 74 6f 72 79 20 66 6f 72  ry directory for
d760: 20 74 68 65 20 6e 65 77 6c 79 20 6f 70 65 6e 65   the newly opene
d770: 64 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  d database..
d780: 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63    #       connec
d790: 74 69 6f 6e 20 6e 6f 77 20 75 6e 6c 65 73 73 20  tion now unless
d7a0: 6f 75 72 20 63 61 6c 6c 65 72 20 66 6f 72 62 69  our caller forbi
d7b0: 64 73 20 69 74 2e 0d 0a 20 20 20 20 20 20 23 0d  ds it...      #.
d7c0: 0a 20 20 20 20 20 20 69 66 20 7b 24 74 65 6d 70  .      if {$temp d7d0: 6f 72 61 72 79 20 26 26 20 21 5b 69 6e 66 6f 20 orary && ![info d7e0: 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 65 74 54 exists ::no(setT d7f0: 65 6d 70 6f 72 61 72 79 44 69 72 65 63 74 6f 72 emporaryDirector d800: 79 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 y)]} then {.. d810: 20 20 20 20 20 73 71 6c 20 65 78 65 63 75 74 65 sql execute d820: 20 24 64 62 20 5b 61 70 70 65 6e 64 41 72 67 73$db [appendArgs
d830: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
d840: 22 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f  "PRAGMA temp_sto
d850: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 5c  re_directory = \
d860: 22 22 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79  "" [getTemporary
d870: 44 69 72 65 63 74 6f 72 79 5d 20 5c 22 5c 3b 5d  Directory] \"\;]
d880: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....
d890: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
d8a0: 54 45 3a 20 41 6c 77 61 79 73 20 72 65 74 75 72  TE: Always retur
d8b0: 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
d8c0: 20 68 61 6e 64 6c 65 20 75 70 6f 6e 20 73 75 63   handle upon suc
d8d0: 63 65 73 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  cess...      #..
d8e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 64 62        return $db d8f0: 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 .. }..... d900: 70 72 6f 63 20 67 65 74 44 62 43 6f 6e 6e 65 63 proc getDbConnec d910: 74 69 6f 6e 20 7b 20 7b 76 61 72 4e 61 6d 65 20 tion { {varName d920: 64 62 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 db} } {.. # d930: 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 .. # NOTE: d940: 52 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 Refer to the spe d950: 63 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 cified variable d960: 28 65 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 (e.g. "db") in t d970: 68 65 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 he context of ou d980: 72 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 r.. # d990: 20 63 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 caller. The ha d9a0: 6e 64 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 ndle to the data d9b0: 62 61 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 base previously d9c0: 6f 70 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a opened via the.. d9d0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 # [s d9e0: 65 74 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 etupDb] procedur d9f0: 65 20 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 e should be stor da00: 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 ed there... da10: 20 23 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 #.. upvar da20: 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 1$varName db...
da30: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
da40: 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 72 65 74  # NOTE: This ret
da50: 75 72 6e 73 20 74 68 65 20 41 44 4f 2e 4e 45 54  urns the ADO.NET
da60: 20 49 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f   IDbConnection o
da70: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66  bject instance f
da80: 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 23 20  or the..      #
da90: 20 20 20 20 20 20 73 70 65 63 69 66 69 65 64 20        specified
daa0: 64 61 74 61 62 73 65 20 68 61 6e 64 6c 65 2e 20  databse handle.
dab0: 20 53 69 6e 63 65 20 67 65 74 74 69 6e 67 20 74   Since getting t
dac0: 68 69 73 20 6f 62 6a 65 63 74 20 72 65 6c 69 65  his object relie
dad0: 73 20 75 70 6f 6e 0d 0a 20 20 20 20 20 20 23 20  s upon..      #
dae0: 20 20 20 20 20 20 45 61 67 6c 65 20 69 6e 74 65        Eagle inte
daf0: 72 6e 61 6c 73 2c 20 67 72 65 61 74 20 63 61 72  rnals, great car
db00: 65 20 73 68 6f 75 6c 64 20 62 65 20 74 61 6b 65  e should be take
db10: 6e 20 74 6f 20 61 76 6f 69 64 20 64 69 73 70 6f  n to avoid dispo
db20: 73 69 6e 67 20 6f 66 0d 0a 20 20 20 20 20 20 23  sing of..      #
db30: 20 20 20 20 20 20 20 74 68 69 73 20 6f 62 6a 65         this obje
db40: 63 74 20 6f 72 20 6f 74 68 65 72 77 69 73 65 20  ct or otherwise
db50: 70 75 74 74 69 6e 67 20 69 74 20 69 6e 74 6f 20  putting it into
db60: 61 6e 20 69 6e 76 61 6c 69 64 20 73 74 61 74 65  an invalid state
db70: 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
db80: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
db90: 74 73 20 64 62 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ts db]} then {..
dba0: 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74          if {[cat
dbb0: 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
dbc0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
dbd0: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
dbe0: 75 62 6c 69 63 20 2d 6f 62 6a 65 63 74 66 6c 61  ublic -objectfla
dbf0: 67 73 20 2b 4e 6f 44 69 73 70 6f 73 65 20 5c 0d  gs +NoDispose \.
dc00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
dc10: 20 2d 61 6c 69 61 73 20 49 6e 74 65 72 70 72 65   -alias Interpre
dc20: 74 65 72 2e 47 65 74 41 63 74 69 76 65 2e 63 6f  ter.GetActive.co
dc30: 6e 6e 65 63 74 69 6f 6e 73 20 49 74 65 6d 20 24  nnections Item $dc40: 64 62 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 db} \.. dc50: 20 20 20 20 20 20 20 72 65 73 75 6c 74 5d 20 3d result] = dc60: 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 = 0} then {.. dc70: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. dc80: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 75 63 63 # NOTE: Succ dc90: 65 73 73 2c 20 72 65 74 75 72 6e 20 74 68 65 20 ess, return the dca0: 6f 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 opaque object ha dcb0: 6e 64 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 ndle... dcc0: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 #.. re dcd0: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20 turn$result..
dce0: 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a        } else {..
dcf0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20            #..
dd00: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46         # NOTE: F
dd10: 61 69 6c 75 72 65 2c 20 72 65 70 6f 72 74 20 77  ailure, report w
dd20: 68 79 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  hy...          #
dd30: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74  ..          tput
dd40: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65  s $::test_channe dd50: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d l [appendArgs \. dd60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 . " dd70: 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 ==== WARNING: fa dd80: 69 6c 65 64 20 74 6f 20 67 65 74 20 63 6f 6e 6e iled to get conn dd90: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 66 6f ection handle fo dda0: 72 20 64 61 74 61 62 61 73 65 20 5c 22 22 20 5c r database \"" \ ddb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. ddc0: 24 64 62 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20$db "\", error:
ddd0: 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 20 5c  " \n\t $result \ dde0: 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 n].. }.. ddf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c }.. }... de00: 0d 0a 20 20 20 20 70 72 6f 63 20 66 72 65 65 44 .. proc freeD de10: 62 43 6f 6e 6e 65 63 74 69 6f 6e 20 7b 20 7b 76 bConnection { {v de20: 61 72 4e 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f arName connectio de30: 6e 7d 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d n} } {.. #. de40: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 . # NOTE: R de50: 65 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 efer to the spec de60: 69 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 ified variable ( de70: 65 2e 67 2e 20 22 63 6f 6e 6e 65 63 74 69 6f 6e e.g. "connection de80: 22 29 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 20 ") in the.. de90: 20 23 20 20 20 20 20 20 20 63 6f 6e 74 65 78 74 # context dea0: 20 6f 66 20 6f 75 72 20 63 61 6c 6c 65 72 2e 20 of our caller. deb0: 20 54 68 65 20 6f 70 61 71 75 65 20 6f 62 6a 65 The opaque obje dec0: 63 74 20 68 61 6e 64 6c 65 20 66 6f 72 20 61 6e ct handle for an ded0: 20 41 44 4f 2e 4e 45 54 0d 0a 20 20 20 20 20 20 ADO.NET.. dee0: 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 # connecti def0: 6f 6e 20 70 72 65 76 69 6f 75 73 6c 79 20 72 65 on previously re df00: 74 75 72 6e 65 64 20 62 79 20 5b 67 65 74 44 62 turned by [getDb df10: 43 6f 6e 6e 65 63 74 69 6f 6e 5d 20 73 68 6f 75 Connection] shou df20: 6c 64 20 62 65 0d 0a 20 20 20 20 20 20 23 20 20 ld be.. # df30: 20 20 20 20 20 73 74 6f 72 65 64 20 74 68 65 72 stored ther df40: 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 e... #.. df50: 20 20 20 75 70 76 61 72 20 31 20 24 76 61 72 4e upvar 1$varN
df60: 61 6d 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  ame connection..
df70: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
df80: 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74   # NOTE: Attempt
df90: 20 74 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 6f   to remove the o
dfa0: 70 61 71 75 65 20 6f 62 6a 65 63 74 20 68 61 6e  paque object han
dfb0: 64 6c 65 20 66 72 6f 6d 20 74 68 65 20 69 6e 74  dle from the int
dfc0: 65 72 70 72 65 74 65 72 0d 0a 20 20 20 20 20 20  erpreter..
dfd0: 23 20 20 20 20 20 20 20 6e 6f 77 2e 20 20 54 68  #       now.  Th
dfe0: 69 73 20 5b 6f 62 6a 65 63 74 20 64 69 73 70 6f  is [object dispo
dff0: 73 65 5d 20 63 61 6c 6c 20 77 69 6c 6c 20 6e 6f  se] call will no
e000: 74 20 61 63 74 75 61 6c 6c 79 20 64 69 73 70 6f  t actually dispo
e010: 73 65 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20  se of the..
e020: 20 23 20 20 20 20 20 20 20 75 6e 64 65 72 6c 79   #       underly
e030: 69 6e 67 20 6f 62 6a 65 63 74 20 62 65 63 61 75  ing object becau
e040: 73 65 20 74 68 65 20 2b 4e 6f 44 69 73 70 6f 73  se the +NoDispos
e050: 65 20 66 6c 61 67 20 77 61 73 20 73 65 74 20 6f  e flag was set o
e060: 6e 20 69 74 0d 0a 20 20 20 20 20 20 23 20 20 20  n it..      #
e070: 20 20 20 20 64 75 72 69 6e 67 20 63 72 65 61 74      during creat
e080: 69 6f 6e 20 6f 66 20 74 68 65 20 6f 70 61 71 75  ion of the opaqu
e090: 65 20 6f 62 6a 65 63 74 20 68 61 6e 64 6c 65 2e  e object handle.
e0a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e0b0: 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74   if {[info exist
e0c0: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 5d 20 26 26  s connection] &&
e0d0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b 63   \..          [c
e0e0: 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 64 69 73  atch {object dis
e0f0: 70 6f 73 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e  pose $connection e100: 7d 20 65 72 72 6f 72 5d 7d 20 74 68 65 6e 20 7b } error]} then { e110: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e120: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20 # NOTE: We e130: 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74 somehow failed t e140: 6f 20 72 65 6d 6f 76 65 20 74 68 65 20 68 61 6e o remove the han e150: 64 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e dle, report why. e160: 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. e170: 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
e180: 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
e190: 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
e1a0: 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e        "==== WARN
e1b0: 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 72  ING: failed to r
e1c0: 65 6d 6f 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  emove connection
e1d0: 20 68 61 6e 64 6c 65 20 5c 22 22 20 24 63 6f 6e   handle \"" $con e1e0: 6e 65 63 74 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 nection \.. e1f0: 20 20 20 20 20 20 20 22 5c 22 2c 20 65 72 72 6f "\", erro e200: 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 r: " \n\t$error
e210: 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20   \n]..      }..
e220: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
e230: 63 20 61 64 64 44 62 43 6f 6e 6e 65 63 74 69 6f  c addDbConnectio
e240: 6e 20 7b 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b  n { connection {
e250: 76 61 72 4e 61 6d 65 20 64 62 7d 20 7d 20 7b 0d  varName db} } {.
e260: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..
e270: 23 20 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f  # NOTE: Refer to
e280: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 76   the specified v
e290: 61 72 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64  ariable (e.g. "d
e2a0: 62 22 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65  b") in the conte
e2b0: 78 74 20 6f 66 20 6f 75 72 0d 0a 20 20 20 20 20  xt of our..
e2c0: 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65 72 2e   #       caller.
e2d0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..
e2e0: 20 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d   upvar 1 $varNam e2f0: 65 20 64 62 0d 0a 0d 0a 20 20 20 20 20 20 23 0d e db.... #. e300: 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 . # NOTE: C e310: 72 65 61 74 65 20 61 20 63 6f 72 72 65 63 74 6c reate a correctl e320: 79 20 66 6f 72 6d 61 74 74 65 64 20 6e 61 6d 65 y formatted name e330: 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 for the databas e340: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 0d e connection to. e350: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 . # b e360: 65 20 61 64 64 65 64 20 74 6f 20 74 68 65 20 6c e added to the l e370: 69 73 74 20 6d 61 6e 61 67 65 64 20 62 79 20 74 ist managed by t e380: 68 65 20 45 61 67 6c 65 20 69 6e 74 65 72 70 72 he Eagle interpr e390: 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eter... #.. e3a0: 20 20 20 20 20 20 73 65 74 20 64 62 20 5b 6f 62 set db [ob e3b0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 ject invoke -fla e3c0: 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d gs +NonPublic \. e3d0: 0a 20 20 20 20 20 20 20 20 20 20 45 61 67 6c 65 . Eagle e3e0: 2e 5f 43 6f 6d 70 6f 6e 65 6e 74 73 2e 50 72 69 ._Components.Pri e3f0: 76 61 74 65 2e 46 6f 72 6d 61 74 4f 70 73 20 44 vate.FormatOps D e400: 61 74 61 62 61 73 65 4f 62 6a 65 63 74 4e 61 6d atabaseObjectNam e410: 65 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 0d e$connection \.
e420: 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
e430: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 5b 6f 62 6a  eConnection [obj
e440: 65 63 74 20 69 6e 76 6f 6b 65 20 49 6e 74 65 72  ect invoke Inter
e450: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
e460: 20 4e 65 78 74 49 64 5d 5d 0d 0a 0d 0a 20 20 20   NextId]]....
e470: 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f     #..      # NO
e480: 54 45 3a 20 41 64 64 20 74 68 65 20 64 61 74 61  TE: Add the data
e490: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection
e4a0: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75 72 20  provided by our
e4b0: 63 61 6c 6c 65 72 20 74 6f 20 74 68 65 20 6c 69  caller to the li
e4c0: 73 74 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  st..      #
e4d0: 20 20 6f 66 20 74 68 6f 73 65 20 6b 6e 6f 77 6e    of those known
e4e0: 20 74 6f 20 74 68 65 20 45 61 67 6c 65 20 69 6e   to the Eagle in
e4f0: 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20  terpreter...
e500: 20 20 23 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63    #..      objec
e510: 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20  t invoke -flags
e520: 2b 4e 6f 6e 50 75 62 6c 69 63 20 49 6e 74 65 72  +NonPublic Inter
e530: 70 72 65 74 65 72 2e 47 65 74 41 63 74 69 76 65  preter.GetActive
e540: 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 41 64 64  .connections Add
e550: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 64   \..          $d e560: 62 20 24 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 b$connection..
e570: 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72 6f     }.....    pro
e580: 63 20 63 6c 65 61 6e 75 70 44 62 20 7b 20 66 69  c cleanupDb { fi
e590: 6c 65 4e 61 6d 65 20 7b 76 61 72 4e 61 6d 65 20  leName {varName
e5a0: 64 62 7d 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75  db} {collect tru
e5b0: 65 7d 20 7b 71 75 61 6c 69 66 79 20 74 72 75 65  e} {qualify true
e5c0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  }..
e5d0: 20 20 20 20 20 20 20 20 7b 64 65 6c 65 74 65 20          {delete
e5e0: 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 20  true} } {..
e5f0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
e600: 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 66 6f 72  : Attempt to for
e610: 63 65 20 61 6c 6c 20 70 65 6e 64 69 6e 67 20 22  ce all pending "
e620: 67 61 72 62 61 67 65 22 20 6f 62 6a 65 63 74 73  garbage" objects
e630: 20 74 6f 20 62 65 20 63 6f 6c 6c 65 63 74 65 64   to be collected
e640: 2c 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20 20  ,..      #
e650: 20 69 6e 63 6c 75 64 69 6e 67 20 53 51 4c 69 74   including SQLit
e660: 65 20 73 74 61 74 65 6d 65 6e 74 73 20 61 6e 64  e statements and
e670: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 73 3b   backup objects;
e680: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c   this should all
e690: 6f 77 0d 0a 20 20 20 20 20 20 23 20 20 20 20 20  ow..      #
e6a0: 20 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    the underlying
e6b0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 74   database file t
e6c0: 6f 20 62 65 20 64 65 6c 65 74 65 64 2e 0d 0a 20  o be deleted...
e6d0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66       #..      if
e6e0: 20 7b 24 63 6f 6c 6c 65 63 74 7d 20 74 68 65 6e   {$collect} then e6f0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 6f 6c 6c {.. coll e700: 65 63 74 47 61 72 62 61 67 65 20 24 3a 3a 74 65 ectGarbage$::te
e710: 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20  st_channel..
e720: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a    }....      #..
e730: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65        # NOTE: Re
e740: 66 65 72 20 74 6f 20 74 68 65 20 73 70 65 63 69  fer to the speci
e750: 66 69 65 64 20 76 61 72 69 61 62 6c 65 20 28 65  fied variable (e
e760: 2e 67 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65  .g. "db") in the
e770: 20 63 6f 6e 74 65 78 74 20 6f 66 20 6f 75 72 0d   context of our.
e780: 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63  .      #       c
e790: 61 6c 6c 65 72 2e 20 20 54 68 65 20 68 61 6e 64  aller.  The hand
e7a0: 6c 65 20 74 6f 20 74 68 65 20 64 61 74 61 62 61  le to the databa
e7b0: 73 65 20 70 72 65 76 69 6f 75 73 6c 79 20 6f 70  se previously op
e7c0: 65 6e 65 64 20 76 69 61 20 74 68 65 0d 0a 20 20  ened via the..
e7d0: 20 20 20 20 23 20 20 20 20 20 20 20 5b 73 65 74      #       [set
e7e0: 75 70 44 62 5d 20 70 72 6f 63 65 64 75 72 65 20  upDb] procedure
e7f0: 73 68 6f 75 6c 64 20 62 65 20 73 74 6f 72 65 64  should be stored
e800: 20 74 68 65 72 65 2e 0d 0a 20 20 20 20 20 20 23   there...      #
e810: 0d 0a 20 20 20 20 20 20 75 70 76 61 72 20 31 20  ..      upvar 1
e820: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... e830: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # e840: 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65 20 NOTE: Close the e850: 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74 68 connection to th e860: 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e 20 e database now. e870: 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c 6c This should all e880: 6f 77 20 75 73 0d 0a 20 20 20 20 20 20 23 20 20 ow us.. # e890: 20 20 20 20 20 74 6f 20 64 65 6c 65 74 65 20 74 to delete t e8a0: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 he underlying da e8b0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 tabase file... e8c0: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20 #.. if e8d0: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 62 {[info exists db e8e0: 5d 20 26 26 20 5b 63 61 74 63 68 20 7b 73 71 6c ] && [catch {sql e8f0: 20 63 6c 6f 73 65 20 24 64 62 7d 20 65 72 72 6f close$db} erro
e900: 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  r]} then {..
e910: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
e920: 20 4e 4f 54 45 3a 20 57 65 20 73 6f 6d 65 68 6f   NOTE: We someho
e930: 77 20 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73  w failed to clos
e940: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 2c 20  e the database,
e950: 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a 20 20 20  report why...
e960: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
e970: 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch e980: 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg e990: 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 s \.. e9a0: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: e9b0: 66 61 69 6c 65 64 20 74 6f 20 63 6c 6f 73 65 20 failed to close e9c0: 64 61 74 61 62 61 73 65 20 5c 22 22 20 24 64 62 database \""$db
e9d0: 20 22 5c 22 2c 20 65 72 72 6f 72 3a 20 22 20 5c   "\", error: " \
e9e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e  ..            \n
e9f0: 5c 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20  \t $error \n].. ea00: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... ea10: 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a #.. # NOTE: ea20: 20 46 69 72 73 74 2c 20 73 65 65 20 69 66 20 6f First, see if o ea30: 75 72 20 63 61 6c 6c 65 72 20 68 61 73 20 72 65 ur caller has re ea40: 71 75 65 73 74 65 64 20 61 6e 20 69 6e 2d 6d 65 quested an in-me ea50: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 2e 0d 0a mory database... ea60: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 73 #.. s ea70: 65 74 20 69 73 4d 65 6d 6f 72 79 20 5b 69 73 4d et isMemory [isM ea80: 65 6d 6f 72 79 44 62 20 24 66 69 6c 65 4e 61 6d emoryDb$fileNam
ea90: 65 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  e]....      #..
eaa0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 42 75 69       # NOTE: Bui
eab0: 6c 64 20 74 68 65 20 66 75 6c 6c 20 70 61 74 68  ld the full path
eac0: 20 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65   to the database
ead0: 20 66 69 6c 65 20 6e 61 6d 65 2e 20 20 46 6f 72   file name.  For
eae0: 20 6e 6f 77 2c 20 61 6c 6c 20 74 65 73 74 0d 0a   now, all test..
eaf0: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 64 61        #       da
eb00: 74 61 62 61 73 65 20 66 69 6c 65 73 20 61 72 65  tabase files are
eb10: 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 74   stored in the t
eb20: 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f  emporary directo
eb30: 72 79 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20  ry...      #..
eb40: 20 20 20 20 69 66 20 7b 21 24 69 73 4d 65 6d 6f      if {!$isMemo eb50: 72 79 20 26 26 20 24 71 75 61 6c 69 66 79 7d 20 ry &&$qualify}
eb60: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
eb70: 73 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69  set fileName [fi
eb80: 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 44 61 74 61  le join [getData
eb90: 62 61 73 65 44 69 72 65 63 74 6f 72 79 5d 20 5b  baseDirectory] [
eba0: 66 69 6c 65 20 74 61 69 6c 20 24 66 69 6c 65 4e  file tail $fileN ebb0: 61 6d 65 5d 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a ame]].. }.. ebc0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 .. #.. ebd0: 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 # NOTE: Check i ebe0: 66 20 74 68 65 20 66 69 6c 65 20 73 74 69 6c 6c f the file still ebf0: 20 65 78 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 exists... ec00: 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 24 69 #.. if {!$i
ec10: 73 4d 65 6d 6f 72 79 20 26 26 20 24 64 65 6c 65  sMemory && $dele ec20: 74 65 20 26 26 20 5b 66 69 6c 65 20 65 78 69 73 te && [file exis ec30: 74 73 20 24 66 69 6c 65 4e 61 6d 65 5d 7d 20 74 ts$fileName]} t
ec40: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  hen {..        #
ec50: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
ec60: 3a 20 53 6b 69 70 20 64 65 6c 65 74 69 6e 67 20  : Skip deleting
ec70: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 69  database files i
ec80: 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20  f somebody sets
ec90: 74 68 65 20 67 6c 6f 62 61 6c 0d 0a 20 20 20 20  the global..
eca0: 20 20 20 20 23 20 20 20 20 20 20 20 76 61 72 69      #       vari
ecb0: 61 62 6c 65 20 74 6f 20 70 72 65 76 65 6e 74 20  able to prevent
ecc0: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
ecd0: 20 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e          if {![in
ece0: 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 63  fo exists ::no(c
ecf0: 6c 65 61 6e 75 70 44 62 46 69 6c 65 29 5d 7d 20  leanupDbFile)]}
ed00: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
ed10: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23    #..          #
ed20: 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74   NOTE: Attempt t
ed30: 6f 20 64 65 6c 65 74 65 20 74 68 65 20 74 65 73  o delete the tes
ed40: 74 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  t database file
ed50: 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  now...
ed60: 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
ed70: 7b 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63  {[set code [catc
ed80: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $ed90: 66 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d fileName} error] eda0: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. edb0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. edc0: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 # NOTE: We edd0: 20 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 somehow failed ede0: 74 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 to delete the fi edf0: 6c 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d le, report why.. ee00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a . #.. ee10: 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput ee20: 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
ee30: 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d  l [appendArgs \.
ee40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .
ee50: 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20   "==== WARNING:
ee60: 66 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65  failed to delete
ee70: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 5c   database file \
ee80: 22 22 20 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a  "" $fileName \.. ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 eea0: 22 5c 22 20 64 75 72 69 6e 67 20 63 6c 65 61 6e "\" during clean eeb0: 75 70 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c up, error: " \n\ eec0: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20 t$error \n]..
eed0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
eee0: 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
eef0: 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
ef00: 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77      # NOTE: Show
ef10: 20 74 68 61 74 20 77 65 20 73 6b 69 70 70 65 64   that we skipped
ef20: 20 64 65 6c 65 74 69 6e 67 20 74 68 65 20 66 69   deleting the fi
ef30: 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  le...          #
ef40: 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
ef50: 63 6f 64 65 20 30 0d 0a 0d 0a 20 20 20 20 20 20  code 0....
ef60: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes ef70: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e t_channel [appen ef80: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. ef90: 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 "==== WAR efa0: 4e 49 4e 47 3a 20 73 6b 69 70 70 65 64 20 64 65 NING: skipped de efb0: 6c 65 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 leting database efc0: 66 69 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 file \""$fileNa
efd0: 6d 65 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  me \..
efe0: 20 20 20 20 22 5c 22 20 64 75 72 69 6e 67 20 63      "\" during c
eff0: 6c 65 61 6e 75 70 5c 6e 22 5d 0d 0a 20 20 20 20  leanup\n"]..
f000: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65      }..      } e
f010: 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23  lse {..        #
f020: 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
f030: 3a 20 54 68 65 20 66 69 6c 65 20 64 6f 65 73 20  : The file does
f040: 6e 6f 74 20 65 78 69 73 74 2c 20 73 75 63 63 65  not exist, succe
f050: 73 73 21 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  ss!..        #..
f060: 20 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65          set code
f070: 20 30 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   0..      }....
f080: 20 20 20 20 20 72 65 74 75 72 6e 20 24 63 6f 64       return $cod f090: 65 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 e.. }..... f0a0: 20 70 72 6f 63 20 73 65 74 75 70 44 62 49 6e 74 proc setupDbInt f0b0: 65 72 72 75 70 74 43 61 6c 6c 62 61 63 6b 20 7b erruptCallback { f0c0: 20 63 68 61 6e 6e 65 6c 20 6c 6f 67 20 7d 20 7b channel log } { f0d0: 0d 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 .. tputs$c
f0e0: 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 73 65 74  hannel "---- set
f0f0: 74 69 6e 67 20 75 70 20 64 65 62 75 67 67 65 72  ting up debugger
f100: 20 69 6e 74 65 72 72 75 70 74 20 63 61 6c 6c 62   interrupt callb
f110: 61 63 6b 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20  ack... "....
f120: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 0d 0a    if {[catch {..
f130: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
f140: 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b 65 20     # NOTE: Make
f150: 73 75 72 65 20 74 68 65 20 73 63 72 69 70 74 20  sure the script
f160: 64 65 62 75 67 67 65 72 20 61 6e 64 20 74 68 65  debugger and the
f170: 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70   isolated interp
f180: 72 65 74 65 72 20 61 72 65 0d 0a 20 20 20 20 20  reter are..
f190: 20 20 20 23 20 20 20 20 20 20 20 73 65 74 75 70     #       setup
f1a0: 20 61 6e 64 20 72 65 61 64 79 20 66 6f 72 20 75   and ready for u
f1b0: 73 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  se...        #..
f1c0: 20 20 20 20 20 20 20 20 64 65 62 75 67 20 73 65          debug se
f1d0: 74 75 70 20 74 72 75 65 20 74 72 75 65 0d 0a 0d  tup true true...
f1e0: 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20  .        #..
f1f0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64      # NOTE: Load
f200: 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 70   the necessary p
f210: 61 63 6b 61 67 65 73 20 69 6e 74 6f 20 74 68 65  ackages into the
f220: 20 69 73 6f 6c 61 74 65 64 20 69 6e 74 65 72 70   isolated interp
f230: 72 65 74 65 72 2e 0d 0a 20 20 20 20 20 20 20 20  reter...
f240: 23 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67  #..        debug
f250: 20 65 76 61 6c 20 7b 0d 0a 20 20 20 20 20 20 20   eval {..
f260: 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75 69     package requi
f270: 72 65 20 45 61 67 6c 65 0d 0a 20 20 20 20 20 20  re Eagle..
f280: 20 20 20 20 70 61 63 6b 61 67 65 20 72 65 71 75      package requ
f290: 69 72 65 20 45 61 67 6c 65 2e 4c 69 62 72 61 72  ire Eagle.Librar
f2a0: 79 0d 0a 20 20 20 20 20 20 20 20 20 20 70 61 63  y..          pac
f2b0: 6b 61 67 65 20 72 65 71 75 69 72 65 20 45 61 67  kage require Eag
f2c0: 6c 65 2e 54 65 73 74 0d 0a 20 20 20 20 20 20 20  le.Test..
f2d0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d   }....        #.
f2e0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
f2f0: 20 43 6f 70 79 20 74 68 65 20 6e 65 63 65 73 73   Copy the necess
f300: 61 72 79 20 76 61 72 69 61 62 6c 65 73 20 69 6e  ary variables in
f310: 74 6f 20 74 68 65 20 69 73 6f 6c 61 74 65 64 20  to the isolated
f320: 69 6e 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20  interpreter...
f330: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f340: 20 64 65 62 75 67 20 69 6e 76 6f 6b 65 20 30 20   debug invoke 0
f350: 73 65 74 20 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  set ::test_chann
f360: 65 6c 20 24 63 68 61 6e 6e 65 6c 3b 20 23 20 4e  el $channel; # N f370: 4f 54 45 3a 20 46 6f 72 20 5b 74 70 75 74 73 5d OTE: For [tputs] f380: 2e 0d 0a 20 20 20 20 20 20 20 20 64 65 62 75 67 ... debug f390: 20 69 6e 76 6f 6b 65 20 30 20 73 65 74 20 3a 3a invoke 0 set :: f3a0: 74 65 73 74 5f 6c 6f 67 20 24 6c 6f 67 3b 20 23 test_log$log; #
f3b0: 20 4e 4f 54 45 3a 20 46 6f 72 20 5b 74 6c 6f 67   NOTE: For [tlog
f3c0: 5d 2e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d  ].....        #.
f3d0: 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a  .        # NOTE:
f3e0: 20 49 6e 73 74 61 6c 6c 20 74 68 65 20 63 61 6c   Install the cal
f3f0: 6c 62 61 63 6b 20 73 63 72 69 70 74 20 74 6f 20  lback script to
f400: 62 65 20 65 76 61 6c 75 61 74 65 64 20 69 6e 20  be evaluated in
f410: 74 68 65 20 69 73 6f 6c 61 74 65 64 0d 0a 20 20  the isolated..
f420: 20 20 20 20 20 20 23 20 20 20 20 20 20 20 69 6e        #       in
f430: 74 65 72 70 72 65 74 65 72 20 77 68 65 6e 20 74  terpreter when t
f440: 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 20  his interpreter
f450: 69 73 20 69 6e 74 65 72 72 75 70 74 65 64 20 62  is interrupted b
f460: 79 20 73 63 72 69 70 74 0d 0a 20 20 20 20 20 20  y script..
f470: 20 20 23 20 20 20 20 20 20 20 63 61 6e 63 65 6c    #       cancel
f480: 6c 61 74 69 6f 6e 2c 20 65 74 63 2e 0d 0a 20 20  lation, etc...
f490: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
f4a0: 20 64 65 62 75 67 20 63 61 6c 6c 62 61 63 6b 20   debug callback
f4b0: 61 70 70 6c 79 20 7b 7b 73 65 6e 64 65 72 20 65  apply {{sender e
f4c0: 7d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 23  } {..          #
f4d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f  ..          # NO
f4e0: 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 69  TE: Check if thi
f4f0: 73 20 63 61 6c 6c 62 61 63 6b 20 69 73 20 6f 6e  s callback is on
f500: 65 20 74 68 61 74 20 77 65 20 63 61 72 65 20 61  e that we care a
f510: 62 6f 75 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  bout...
f520: 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66   #..          if
f530: 20 7b 22 43 61 6e 63 65 6c 65 64 22 20 69 6e 20   {"Canceled" in
f540: 5b 73 70 6c 69 74 20 5b 24 65 20 49 6e 74 65 72  [split [$e Inter f550: 72 75 70 74 54 79 70 65 5d 20 22 2c 20 22 5d 7d ruptType] ", "]} f560: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. f570: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. f580: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 74 65 72 # NOTE: Iter f590: 61 74 65 20 74 68 72 6f 75 67 68 20 61 6c 6c 20 ate through all f5a0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 database connect f5b0: 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 68 ions known to th f5c0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 e.. # f5d0: 20 20 20 20 20 20 20 70 61 72 65 6e 74 20 69 6e parent in f5e0: 74 65 72 70 72 65 74 65 72 2e 0d 0a 20 20 20 20 terpreter... f5f0: 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. f600: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 66 6f object fo f610: 72 65 61 63 68 20 2d 61 6c 69 61 73 20 70 61 69 reach -alias pai f620: 72 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 r \.. f630: 20 20 20 20 20 5b 6f 62 6a 65 63 74 20 69 6e 76 [object inv f640: 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 oke -flags +NonP f650: 75 62 6c 69 63 20 24 65 20 49 6e 74 65 72 70 72 ublic$e Interpr
f660: 65 74 65 72 2e 63 6f 6e 6e 65 63 74 69 6f 6e 73  eter.connections
f670: 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ] {..
f680: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
f690: 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65      # NOTE: Atte
f6a0: 6d 70 74 20 74 6f 20 63 61 6e 63 65 6c 20 61 6e  mpt to cancel an
f6b0: 79 20 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e  y SQL queries in
f6c0: 20 70 72 6f 67 72 65 73 73 20 6f 6e 20 74 68 69   progress on thi
f6d0: 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  s..
f6e0: 20 23 20 20 20 20 20 20 20 64 61 74 61 62 61 73   #       databas
f6f0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection...
f700: 20 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a               #..
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
f720: 20 7b 5b 63 61 74 63 68 20 7b 24 70 61 69 72 20   {[catch {$pair f730: 56 61 6c 75 65 2e 43 61 6e 63 65 6c 7d 20 65 72 Value.Cancel} er f740: 72 6f 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 ror]} then {.. f750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70 tp f760: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e uts$::test_chan
f770: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs
f780: 5c 6e 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  \n \..
f790: 20 20 20 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20            "====
f7a0: 57 41 52 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20  WARNING: failed
f7b0: 74 6f 20 63 61 6e 63 65 6c 20 71 75 65 72 79 20  to cancel query
f7c0: 66 6f 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c  for connection \
f7d0: 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
f7e0: 20 20 20 20 20 20 20 20 20 20 5b 24 70 61 69 72            [$pair f7f0: 20 4b 65 79 5d 20 22 5c 22 2c 20 65 72 72 6f 72 Key] "\", error f800: 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20 : " \n\t$error
f810: 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  \n]..
f820: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..
f830: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
f840: 0d 0a 20 20 20 20 20 20 20 20 7d 7d 0d 0a 20 20  ..        }}..
f850: 20 20 20 20 7d 20 65 72 72 6f 72 5d 20 3d 3d 20      } error] ==
f860: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
f870: 20 20 20 61 64 64 43 6f 6e 73 74 72 61 69 6e 74     addConstraint
f880: 20 69 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61   interruptCallba
f890: 63 6b 2e 73 71 6c 69 74 65 33 0d 0a 0d 0a 20 20  ck.sqlite3....
f8a0: 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61        tputs $cha f8b0: 6e 6e 65 6c 20 79 65 73 5c 6e 0d 0a 20 20 20 20 nnel yes\n.. f8c0: 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 } else {.. f8d0: 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e tputs$chann
f8e0: 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22  el [appendArgs "
f8f0: 6e 6f 2c 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c  no, error: " \n\
f900: 74 20 24 65 72 72 6f 72 20 5c 6e 5d 0d 0a 20 20  t $error \n].. f910: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... f920: 0a 20 20 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 . proc cleanu f930: 70 46 69 6c 65 20 7b 20 66 69 6c 65 4e 61 6d 65 pFile { fileName f940: 20 7b 63 6f 6c 6c 65 63 74 20 74 72 75 65 7d 20 {collect true} f950: 7b 66 6f 72 63 65 20 66 61 6c 73 65 7d 20 7d 20 {force false} } f960: 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 {.. #.. f970: 20 20 23 20 4e 4f 54 45 3a 20 41 74 74 65 6d 70 # NOTE: Attemp f980: 74 20 74 6f 20 66 6f 72 63 65 20 61 6c 6c 20 70 t to force all p f990: 65 6e 64 69 6e 67 20 22 67 61 72 62 61 67 65 22 ending "garbage" f9a0: 20 6f 62 6a 65 63 74 73 20 74 6f 20 62 65 20 63 objects to be c f9b0: 6f 6c 6c 65 63 74 65 64 2c 0d 0a 20 20 20 20 20 ollected,.. f9c0: 20 23 20 20 20 20 20 20 20 69 6e 63 6c 75 64 69 # includi f9d0: 6e 67 20 53 51 4c 69 74 65 20 73 74 61 74 65 6d ng SQLite statem f9e0: 65 6e 74 73 20 61 6e 64 20 62 61 63 6b 75 70 20 ents and backup f9f0: 6f 62 6a 65 63 74 73 3b 20 74 68 69 73 20 73 68 objects; this sh fa00: 6f 75 6c 64 20 61 6c 6c 6f 77 0d 0a 20 20 20 20 ould allow.. fa10: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 75 6e # the un fa20: 64 65 72 6c 79 69 6e 67 20 64 61 74 61 62 61 73 derlying databas fa30: 65 20 66 69 6c 65 20 74 6f 20 62 65 20 64 65 6c e file to be del fa40: 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 23 0d 0a eted... #.. fa50: 20 20 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 if {$colle
fa60: 63 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  ct} then {..
fa70: 20 20 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61      collectGarba
fa80: 67 65 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e  ge $::test_chann fa90: 65 6c 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 el.. }.... faa0: 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 #.. # fab0: 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 74 NOTE: Check if t fac0: 68 65 20 66 69 6c 65 20 73 74 69 6c 6c 20 65 78 he file still ex fad0: 69 73 74 73 2e 0d 0a 20 20 20 20 20 20 23 0d 0a ists... #.. fae0: 20 20 20 20 20 20 69 66 20 7b 5b 66 69 6c 65 20 if {[file faf0: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65 exists$fileName
fb00: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
fb10: 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20     #..        #
fb20: 4e 4f 54 45 3a 20 53 6b 69 70 20 64 65 6c 65 74  NOTE: Skip delet
fb30: 69 6e 67 20 74 65 73 74 20 66 69 6c 65 73 20 69  ing test files i
fb40: 66 20 73 6f 6d 65 62 6f 64 79 20 73 65 74 73 20  f somebody sets
fb50: 74 68 65 20 67 6c 6f 62 61 6c 20 76 61 72 69 61  the global varia
fb60: 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20  ble..        #
fb70: 20 20 20 20 20 74 6f 20 70 72 65 76 65 6e 74 20       to prevent
fb80: 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a  it...        #..
fb90: 20 20 20 20 20 20 20 20 69 66 20 7b 24 66 6f 72          if {$for fba0: 63 65 20 7c 7c 20 21 5b 69 6e 66 6f 20 65 78 69 ce || ![info exi fbb0: 73 74 73 20 3a 3a 6e 6f 28 63 6c 65 61 6e 75 70 sts ::no(cleanup fbc0: 46 69 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a File)]} then {.. fbd0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. fbe0: 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A fbf0: 74 74 65 6d 70 74 20 74 6f 20 64 65 6c 65 74 65 ttempt to delete fc00: 20 74 68 65 20 74 65 73 74 20 66 69 6c 65 20 6e the test file n fc10: 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 ow... # fc20: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { fc30: 5b 73 65 74 20 63 6f 64 65 20 5b 63 61 74 63 68 [set code [catch fc40: 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24 66 {file delete$f
fc50: 69 6c 65 4e 61 6d 65 7d 20 65 72 72 6f 72 5d 5d  ileName} error]]
fc60: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
fc70: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
fc80: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 57 65 20       # NOTE: We
fc90: 73 6f 6d 65 68 6f 77 20 66 61 69 6c 65 64 20 74  somehow failed t
fca0: 6f 20 64 65 6c 65 74 65 20 74 68 65 20 66 69 6c  o delete the fil
fcb0: 65 2c 20 72 65 70 6f 72 74 20 77 68 79 2e 0d 0a  e, report why...
fcc0: 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20              #..
fcd0: 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73             tputs
fce0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel fcf0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a [appendArgs \.. fd00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 fd10: 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f fd20: 61 69 6c 65 64 20 74 6f 20 64 65 6c 65 74 65 20 ailed to delete fd30: 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20 24 66 test file \""$f
fd40: 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20 20 20  ileName \..
fd50: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64             "\" d
fd60: 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 2c 20 65  uring cleanup, e
fd70: 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72  rror: " \n\t $er fd80: 72 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ror \n].. fd90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 }.. } fda0: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 else {.. fdb0: 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # fdc0: 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 61 74 NOTE: Show that fdd0: 20 77 65 20 73 6b 69 70 70 65 64 20 64 65 6c 65 we skipped dele fde0: 74 69 6e 67 20 74 68 65 20 66 69 6c 65 2e 0d 0a ting the file... fdf0: 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. fe00: 20 20 20 20 20 20 20 73 65 74 20 63 6f 64 65 20 set code fe10: 30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 74 0.... t fe20: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
fe30: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
fe40: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
fe50: 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a    "==== WARNING:
fe60: 20 73 6b 69 70 70 65 64 20 64 65 6c 65 74 69 6e   skipped deletin
fe70: 67 20 74 65 73 74 20 66 69 6c 65 20 5c 22 22 20  g test file \""
fe80: 24 66 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  $fileName \.. fe90: 20 20 20 20 20 20 20 20 20 20 20 22 5c 22 20 64 "\" d fea0: 75 72 69 6e 67 20 63 6c 65 61 6e 75 70 5c 6e 22 uring cleanup\n" feb0: 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 ].. }.. fec0: 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. fed0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. fee0: 20 23 20 4e 4f 54 45 3a 20 54 68 65 20 66 69 6c # NOTE: The fil fef0: 65 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 e does not exist ff00: 2c 20 73 75 63 63 65 73 73 21 0d 0a 20 20 20 20 , success!.. ff10: 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 73 #.. s ff20: 65 74 20 63 6f 64 65 20 30 0d 0a 20 20 20 20 20 et code 0.. ff30: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 }.... retu ff40: 72 6e 20 24 63 6f 64 65 0d 0a 20 20 20 20 7d 0d rn$code..    }.
ff50: 0a 0c 0d 0a 20 20 20 20 70 72 6f 63 20 63 6f 6c  ....    proc col
ff60: 6c 65 63 74 47 61 72 62 61 67 65 20 7b 20 63 68  lectGarbage { ch
ff70: 61 6e 6e 65 6c 20 7b 6d 69 6c 6c 69 73 65 63 6f  annel {milliseco
ff80: 6e 64 73 20 31 30 30 30 7d 20 7b 71 75 69 65 74  nds 1000} {quiet
ff90: 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20   true} } {..
ffa0: 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62    if {[catch {ob
ffb0: 6a 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47  ject invoke GC G
ffc0: 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61  etTotalMemory fa
ffd0: 6c 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20  lse} result] ==
ffe0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..
fff0: 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20     if {!$quiet} 10000 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 10010 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
10020 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
10030 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
10040 2d 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73  --- memory in us
10050 65 20 62 79 20 74 68 65 20 43 4c 52 20 62 65 66  e by the CLR bef
10060 6f 72 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e  ore collection..
10070 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  . " \..
10080 20 20 20 20 20 24 72 65 73 75 6c 74 20 22 20 62       $result " b 10090 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 ytes\n"].. 100a0 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 }.. } els 100b0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 e {.. tpu 100c0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
100d0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
100e0 20 20 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52         "==== WAR
100f0 4e 49 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20  NING: failed to
10100 67 65 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75  get CLR memory u
10110 73 61 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c  sage, error: " \
10120 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e  ..            \n
10130 5c 74 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a  \t $result \n].. 10140 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 10150 20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ############### 10160 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10170 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10180 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 10190 23 23 23 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 ##########.... 101a0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e #.. # N 101b0 4f 54 45 3a 20 52 65 70 65 61 74 65 64 6c 79 20 OTE: Repeatedly 101c0 61 74 74 65 6d 70 74 20 74 6f 20 63 6f 6c 6c 65 attempt to colle 101d0 63 74 20 67 61 72 62 61 67 65 20 75 6e 74 69 6c ct garbage until 101e0 20 74 68 65 20 61 6c 6c 6f 74 74 65 64 20 6e 75 the allotted nu 101f0 6d 62 65 72 0d 0a 20 20 20 20 20 20 23 20 20 20 mber.. # 10200 20 20 20 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f of milliseco 10210 6e 64 73 20 68 61 73 20 65 6c 61 70 73 65 64 2e nds has elapsed. 10220 20 20 41 6c 77 61 79 73 20 61 74 74 65 6d 70 74 Always attempt 10230 20 74 6f 20 63 6f 6c 6c 65 63 74 20 67 61 72 62 to collect garb 10240 61 67 65 0d 0a 20 20 20 20 20 20 23 20 20 20 20 age.. # 10250 20 20 20 61 74 20 6c 65 61 73 74 20 6f 6e 63 65 at least once 10260 2e 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 ... #.. 10270 20 20 73 65 74 20 73 74 61 72 74 20 5b 63 6c 6f set start [clo 10280 63 6b 20 73 65 63 6f 6e 64 73 5d 0d 0a 20 20 20 ck seconds].. 10290 20 20 20 73 65 74 20 73 74 6f 70 20 5b 65 78 70 set stop [exp 102a0 72 20 7b 24 73 74 61 72 74 20 2b 20 28 24 6d 69 r {$start + ($mi 102b0 6c 6c 69 73 65 63 6f 6e 64 73 20 2f 20 31 30 30 lliseconds / 100 102c0 30 29 7d 5d 0d 0a 0d 0a 20 20 20 20 20 20 64 6f 0)}].... do 102d0 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 {.. #.. 102e0 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 41 # NOTE: A 102f0 74 74 65 6d 70 74 20 74 6f 20 66 6f 72 63 65 20 ttempt to force 10300 61 20 66 75 6c 6c 20 67 61 72 62 61 67 65 20 63 a full garbage c 10310 6f 6c 6c 65 63 74 69 6f 6e 20 6e 6f 77 2e 20 20 ollection now. 10320 52 65 70 6f 72 74 20 61 6e 79 0d 0a 20 20 20 20 Report any.. 10330 20 20 20 20 23 20 20 20 20 20 20 20 65 72 72 6f # erro 10340 72 20 74 68 61 74 20 69 73 20 65 6e 63 6f 75 6e r that is encoun 10350 74 65 72 65 64 20 69 66 20 77 65 20 66 61 69 6c tered if we fail 10360 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 ... #.. 10370 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 10380 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 {object invoke 10390 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72 GC GetTotalMemor 103a0 79 20 74 72 75 65 7d 20 65 72 72 6f 72 5d 7d 20 y true} error]} 103b0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 103c0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c tputs$channel
103d0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
103e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 3d                "=
103f0 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 61 69  === WARNING: fai
10400 6c 65 64 20 66 75 6c 6c 20 67 61 72 62 61 67 65  led full garbage
10410 20 63 6f 6c 6c 65 63 74 69 6f 6e 2c 20 65 72 72   collection, err
10420 6f 72 3a 20 22 20 5c 0d 0a 20 20 20 20 20 20 20  or: " \..
10430 20 20 20 20 20 20 20 5c 6e 5c 74 20 24 65 72 72         \n\t $err 10440 6f 72 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 or \n].. 10450 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 }.... set 10460 20 6e 6f 77 20 5b 63 6c 6f 63 6b 20 73 65 63 6f now [clock seco 10470 6e 64 73 5d 0d 0a 20 20 20 20 20 20 7d 20 77 68 nds].. } wh 10480 69 6c 65 20 7b 24 73 74 61 72 74 20 3c 3d 20 24 ile {$start <= $10490 6e 6f 77 20 26 26 20 24 6e 6f 77 20 3c 20 24 73 now &&$now < $s 104a0 74 6f 70 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 23 top}.... ## 104b0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 104c0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 104d0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 104e0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 ################ 104f0 23 23 23 23 23 23 23 0d 0a 0d 0a 20 20 20 20 20 #######.... 10500 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj 10510 65 63 74 20 69 6e 76 6f 6b 65 20 47 43 20 47 65 ect invoke GC Ge 10520 74 54 6f 74 61 6c 4d 65 6d 6f 72 79 20 66 61 6c tTotalMemory fal 10530 73 65 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30 se} result] == 0 10540 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10550 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
10560 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
10570 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 10580 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 10590 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d "-- 105a0 2d 2d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 65 -- memory in use 105b0 20 62 79 20 74 68 65 20 43 4c 52 20 61 66 74 65 by the CLR afte 105c0 72 20 63 6f 6c 6c 65 63 74 69 6f 6e 2e 2e 2e 20 r collection... 105d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 " \.. 105e0 20 20 20 24 72 65 73 75 6c 74 20 22 20 62 79 74$result " byt
105f0 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20  es\n"]..
10600 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
10610 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
10620 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e   $channel [appen 10630 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 dArgs \.. 10640 20 20 20 20 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 "==== WARNI 10650 4e 47 3a 20 66 61 69 6c 65 64 20 74 6f 20 67 65 NG: failed to ge 10660 74 20 43 4c 52 20 6d 65 6d 6f 72 79 20 75 73 61 t CLR memory usa 10670 67 65 2c 20 65 72 72 6f 72 3a 20 22 20 5c 0d 0a ge, error: " \.. 10680 20 20 20 20 20 20 20 20 20 20 20 20 5c 6e 5c 74 \n\t 10690 20 24 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20$result \n]..
106a0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d      }..    }....
106b0 0a 20 20 20 20 70 72 6f 63 20 67 65 74 53 51 4c  .    proc getSQL
106c0 69 74 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20  iteHandleCounts
106d0 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74  { channel {quiet
106e0 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20   false} } {..
106f0 20 20 20 73 65 74 20 72 65 73 75 6c 74 20 5b 6c     set result [l
10700 69 73 74 5d 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ist]....      if
10710 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72 61 69 6e   {[haveConstrain
10720 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
10730 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 61 6e     defineConstan
10740 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  t.System.Data.SQ
10750 4c 69 74 65 2e 43 4f 55 4e 54 5f 48 41 4e 44 4c  Lite.COUNT_HANDL
10760 45 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  E]} then {..
10770 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23      #..        #
10780 20 4e 4f 54 45 3a 20 41 64 64 20 65 61 63 68 20   NOTE: Add each
10790 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle
107a0 63 6f 75 6e 74 20 74 6f 20 74 68 65 20 72 65 73  count to the res
107b0 75 6c 74 69 6e 67 20 6c 69 73 74 2e 0d 0a 20 20  ulting list...
107c0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
107d0 20 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 5b 6c   foreach name [l
107e0 69 73 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 43 6f  ist connectionCo
107f0 75 6e 74 20 73 74 61 74 65 6d 65 6e 74 43 6f 75  unt statementCou
10800 6e 74 20 62 61 63 6b 75 70 43 6f 75 6e 74 5d 20  nt backupCount]
10810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
10820 20 76 61 6c 75 65 20 5b 6f 62 6a 65 63 74 20 69   value [object i
10830 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f  nvoke -flags +No
10840 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20  nPublic \..
10850 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
10860 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61  Data.SQLite.Unsa
10870 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20  feNativeMethods
10880 24 6e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20 20 20  $name].... 10890 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d if {!$quiet}
108a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
108b0 20 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e       tputs $chan 108c0 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 nel [appendArgs 108d0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 108e0 20 20 20 22 2d 2d 2d 2d 20 63 72 69 74 69 63 61 "---- critica 108f0 6c 20 68 61 6e 64 6c 65 20 63 6f 75 6e 74 20 5c l handle count \ 10900 22 22 20 24 6e 61 6d 65 20 22 5c 22 20 69 73 20 ""$name "\" is
10910 22 20 24 76 61 6c 75 65 20 5c 6e 5d 0d 0a 20 20  " $value \n].. 10920 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 }.... 10930 20 20 20 20 20 20 20 6c 61 70 70 65 6e 64 20 72 lappend r 10940 65 73 75 6c 74 20 24 76 61 6c 75 65 0d 0a 20 20 esult$value..
10950 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
10960 20 65 6c 73 65 69 66 20 7b 21 24 71 75 69 65 74   elseif {!$quiet 10970 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 10980 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e #.. # N 10990 4f 54 45 3a 20 54 68 65 20 61 63 74 75 61 6c 20 OTE: The actual 109a0 68 61 6e 64 6c 65 20 63 6f 75 6e 74 73 20 61 72 handle counts ar 109b0 65 20 6e 6f 74 20 61 76 61 69 6c 61 62 6c 65 3b e not available; 109c0 20 74 68 65 72 65 66 6f 72 65 2c 20 6a 75 73 74 therefore, just 109d0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 .. # 109e0 20 20 72 65 74 75 72 6e 20 61 6e 20 65 6d 70 74 return an empt 109f0 79 20 6c 69 73 74 2e 0d 0a 20 20 20 20 20 20 20 y list... 10a00 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 10a10 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d s$channel "----
10a20 20 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65   critical handle
10a30 20 63 6f 75 6e 74 73 20 75 6e 61 76 61 69 6c 61   counts unavaila
10a40 62 6c 65 5c 6e 22 0d 0a 20 20 20 20 20 20 7d 0d  ble\n"..      }.
10a50 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return
10a60 24 72 65 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a  $result.. }.. 10a70 0c 0d 0a 20 20 20 20 70 72 6f 63 20 73 68 75 74 ... proc shut 10a80 64 6f 77 6e 53 51 4c 69 74 65 20 7b 20 63 68 61 downSQLite { cha 10a90 6e 6e 65 6c 20 7b 66 6f 72 63 65 20 66 61 6c 73 nnel {force fals 10aa0 65 7d 20 7b 71 75 69 65 74 20 66 61 6c 73 65 7d e} {quiet false} 10ab0 20 7d 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 } {.. #.. 10ac0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4d 61 6b # NOTE: Mak 10ad0 65 20 73 75 72 65 20 74 68 61 74 20 53 51 4c 69 e sure that SQLi 10ae0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 te core library 10af0 69 73 20 63 6f 6d 70 6c 65 74 65 6c 79 20 73 68 is completely sh 10b00 75 74 64 6f 77 6e 2e 20 20 54 68 69 73 0d 0a 20 utdown. This.. 10b10 20 20 20 20 20 23 20 20 20 20 20 20 20 69 73 20 # is 10b20 75 73 65 64 20 62 79 20 74 65 73 74 73 20 74 68 used by tests th 10b30 61 74 20 63 68 61 6e 67 65 20 63 6f 6e 66 69 67 at change config 10b40 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 20 uration options 10b50 61 6e 64 2f 6f 72 20 74 68 6f 73 65 0d 0a 20 20 and/or those.. 10b60 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 # that 10b70 20 6e 65 65 64 20 74 6f 20 6d 61 6b 65 20 73 75 need to make su 10b80 72 65 20 6c 6f 67 67 69 6e 67 20 69 73 20 69 6e re logging is in 10b90 69 74 69 61 6c 69 7a 65 64 20 28 69 2e 65 2e 20 itialized (i.e. 10ba0 6a 75 73 74 20 69 6e 20 63 61 73 65 0d 0a 20 20 just in case.. 10bb0 20 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 # the 10bc0 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 SQLite core libr 10bd0 61 72 79 20 77 61 73 20 69 6e 69 74 69 61 6c 69 ary was initiali 10be0 7a 65 64 20 69 6e 20 74 68 65 20 70 72 6f 63 65 zed in the proce 10bf0 73 73 20 70 72 69 6f 72 20 74 6f 0d 0a 20 20 20 ss prior to.. 10c00 20 20 20 23 20 20 20 20 20 20 20 74 68 65 20 53 # the S 10c10 51 4c 69 74 65 4c 6f 67 20 63 6c 61 73 73 20 62 QLiteLog class b 10c20 65 69 6e 67 20 61 62 6c 65 20 74 6f 20 73 65 74 eing able to set 10c30 75 70 20 69 74 73 20 6c 6f 67 67 69 6e 67 20 63 up its logging c 10c40 61 6c 6c 62 61 63 6b 29 2e 0d 0a 20 20 20 20 20 allback)... 10c50 20 23 20 20 20 20 20 20 20 4e 6f 72 6d 61 6c 6c # Normall 10c60 79 2c 20 74 68 69 73 20 73 68 6f 75 6c 64 20 6f y, this should o 10c70 6e 6c 79 20 62 65 20 70 65 72 66 6f 72 6d 65 64 nly be performed 10c80 20 69 66 20 53 51 4c 69 74 65 20 69 73 20 6c 6f if SQLite is lo 10c90 61 64 65 64 20 61 6e 64 0d 0a 20 20 20 20 20 20 aded and.. 10ca0 23 20 20 20 20 20 20 20 72 65 61 64 79 20 66 6f # ready fo 10cb0 72 20 75 73 65 20 62 79 20 74 68 65 20 74 65 73 r use by the tes 10cc0 74 20 73 75 69 74 65 2e 0d 0a 20 20 20 20 20 20 t suite... 10cd0 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 24 66 6f #.. if {$fo
10ce0 72 63 65 20 7c 7c 20 5b 69 73 53 51 4c 69 74 65  rce || [isSQLite
10cf0 52 65 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a  Ready]} then {..
10d00 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
10d10 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 65 66     # BUGFIX: Bef
10d20 6f 72 65 20 63 61 6c 6c 69 6e 67 20 74 68 65 20  ore calling the
10d30 6e 61 74 69 76 65 20 73 68 75 74 64 6f 77 6e 20  native shutdown
10d40 66 75 6e 63 74 69 6f 6e 2c 20 6d 61 6b 65 20 73  function, make s
10d50 75 72 65 20 62 6f 74 68 0d 0a 20 20 20 20 20 20  ure both..
10d60 20 20 23 20 20 20 20 20 20 20 20 20 6f 66 20 74    #         of t
10d70 68 65 20 50 52 41 47 4d 41 20 72 65 6c 61 74 65  he PRAGMA relate
10d80 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65  d directory name
10d90 73 20 61 72 65 20 66 72 65 65 64 2e 0d 0a 20 20  s are freed...
10da0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
10db0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 44   checkForSQLiteD
10dc0 69 72 65 63 74 6f 72 69 65 73 20 24 63 68 61 6e  irectories $chan 10dd0 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20 20 20 nel true.... 10de0 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b if {[catch { 10df0 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 object invoke -f 10e00 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 lags +NonPublic 10e10 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 10e20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 System.Data.S 10e30 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e 61 74 69 QLite.UnsafeNati 10e40 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a 20 20 20 veMethods \.. 10e50 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c sql 10e60 69 74 65 33 5f 73 68 75 74 64 6f 77 6e 7d 20 72 ite3_shutdown} r 10e70 65 73 75 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 esult] == 0} the 10e80 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 n {.. i 10e90 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e f {!$quiet} then
10ea0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
10eb0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 10ec0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 10ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 10ee0 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74 65 33 --- call sqlite3 10ef0 5f 73 68 75 74 64 6f 77 6e 28 29 2e 2e 2e 20 6f _shutdown()... o 10f00 6b 3a 20 22 20 24 72 65 73 75 6c 74 20 5c 6e 5d k: "$result \n]
10f10 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }..
10f20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d         } else {.
10f30 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21  .          if {!
10f40 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a  $quiet} then {.. 10f50 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 10f60 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 s$channel [appe
10f70 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20  ndArgs \..
10f80 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
10f90 63 61 6c 6c 20 73 71 6c 69 74 65 33 5f 73 68 75  call sqlite3_shu
10fa0 74 64 6f 77 6e 28 29 2e 2e 2e 20 65 72 72 6f 72  tdown()... error
10fb0 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74  : " \n\t $result 10fc0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 10fd0 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 }.. }.. 10fe0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d }.. }.... 10ff0 0a 20 20 20 20 70 72 6f 63 20 72 65 70 6f 72 74 . proc report 11000 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 20 SQLiteResources 11010 7b 20 63 68 61 6e 6e 65 6c 20 7b 71 75 69 65 74 { channel {quiet 11020 20 66 61 6c 73 65 7d 20 7b 63 6f 6c 6c 65 63 74 false} {collect 11030 20 74 72 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 true} } {.. 11040 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 #.. # NOT 11050 45 3a 20 53 6b 69 70 20 61 6c 6c 20 6f 75 74 70 E: Skip all outp 11060 75 74 20 69 66 20 77 65 20 61 72 65 20 72 75 6e ut if we are run 11070 6e 69 6e 67 20 69 6e 20 22 71 75 69 65 74 22 20 ning in "quiet" 11080 6d 6f 64 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a mode... #.. 11090 20 20 20 20 20 20 69 66 20 7b 5b 68 61 76 65 43 if {[haveC 110a0 6f 6e 73 74 72 61 69 6e 74 20 5c 0d 0a 20 20 20 onstraint \.. 110b0 20 20 20 20 20 20 20 20 20 20 20 64 65 66 69 6e defin 110c0 65 43 6f 6e 73 74 61 6e 74 2e 53 79 73 74 65 6d eConstant.System 110d0 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 49 4e 54 .Data.SQLite.INT 110e0 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 EROP_VIRTUAL_TAB 110f0 4c 45 5d 20 26 26 20 5c 0d 0a 20 20 20 20 20 20 LE] && \.. 11100 20 20 20 20 5b 68 61 76 65 43 6f 6e 73 74 72 61 [haveConstra 11110 69 6e 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 int \.. 11120 20 20 20 20 20 64 65 66 69 6e 65 43 6f 6e 73 74 defineConst 11130 61 6e 74 2e 53 79 73 74 65 6d 2e 44 61 74 61 2e ant.System.Data. 11140 53 51 4c 69 74 65 2e 54 52 41 43 4b 5f 4d 45 4d SQLite.TRACK_MEM 11150 4f 52 59 5f 42 59 54 45 53 5d 7d 20 74 68 65 6e ORY_BYTES]} then 11160 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b {.. if { 11170 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d !$quiet} then {.
11180 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
11190 20 24 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20   $channel "---- 111a0 63 75 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 current memory i 111b0 6e 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 4d n use by SQLiteM 111c0 65 6d 6f 72 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 emory... ".. 111d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 }.... 111e0 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f 62 6a if {[catch {obj 111f0 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 ect invoke -flag 11200 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a s +NonPublic \.. 11210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 11220 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 System.Data.SQLi 11230 74 65 2e 53 51 4c 69 74 65 4d 65 6d 6f 72 79 20 te.SQLiteMemory 11240 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 11250 20 20 20 62 79 74 65 73 41 6c 6c 6f 63 61 74 65 bytesAllocate 11260 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 30 7d d} memory] == 0} 11270 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11280 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11290 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
112a0 20 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e      tputs $chann 112b0 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 el [appendArgs$
112c0 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e  memory " bytes\n
112d0 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  "]..          }.
112e0 0a 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20  .        } else
112f0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74  {..          set
11300 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d   memory unknown.
11310 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if
11320 7b 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b  {!$quiet} then { 11330 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 .. tp 11340 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 uts$channel [ap
11350 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79  pendArgs $memory 11360 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 11370 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a }.. }.... 11380 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 if {!$qu
11390 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20  iet} then {..
113a0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 113b0 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 6d 61 78 69 annel "---- maxi 113c0 6d 75 6d 20 6d 65 6d 6f 72 79 20 69 6e 20 75 73 mum memory in us 113d0 65 20 62 79 20 53 51 4c 69 74 65 4d 65 6d 6f 72 e by SQLiteMemor 113e0 79 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 20 20 y... ".. 113f0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 }.... if 11400 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 {[catch {object 11410 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e invoke -flags +N 11420 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 onPublic \.. 11430 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 Syst 11440 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 53 em.Data.SQLite.S 11450 51 4c 69 74 65 4d 65 6d 6f 72 79 20 5c 0d 0a 20 QLiteMemory \.. 11460 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6d m 11470 61 78 69 6d 75 6d 42 79 74 65 73 41 6c 6c 6f 63 aximumBytesAlloc 11480 61 74 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d ated} memory] == 11490 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 0} then {.. 114a0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
114b0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
114c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68         tputs $ch 114d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 114e0 73 20 24 6d 65 6d 6f 72 79 20 22 20 62 79 74 65 s$memory " byte
114f0 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20  s\n"]..
11500 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 20 65 6c   }..        } el
11510 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  se {..
11520 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e 6b 6e 6f  set memory unkno
11530 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  wn....
11540 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 65  if {!$quiet} the 11550 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 11560 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11570 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d  [appendArgs $mem 11580 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 ory \n].. 11590 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d }.. }. 115a0 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 . }.... 115b0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
115c0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 74  hen {..        t
115d0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 22 2d  puts $channel "- 115e0 2d 2d 2d 20 63 75 72 72 65 6e 74 20 6d 65 6d 6f --- current memo 115f0 72 79 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c ry in use by SQL 11600 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20 20 20 ite... ".. 11610 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b }.... if {[ 11620 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 6e catch {object in 11630 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e voke -flags +Non 11640 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 Public \.. 11650 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 System.D 11660 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 ata.SQLite.Unsaf 11670 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c eNativeMethods \ 11680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 11690 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75 sqlite3_memory_u 116a0 73 65 64 7d 20 6d 65 6d 6f 72 79 5d 20 3d 3d 20 sed} memory] == 116b0 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 0} then {.. 116c0 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
116d0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
116e0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 116f0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
11700 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22 5d  mory " bytes\n"]
11710 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
11720 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20     } else {..
11730 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
11740 23 20 4e 4f 54 45 3a 20 4d 61 79 62 65 20 74 68  # NOTE: Maybe th
11750 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
11760 62 72 61 72 79 20 69 73 20 75 6e 61 76 61 69 6c  brary is unavail
11770 61 62 6c 65 3f 0d 0a 20 20 20 20 20 20 20 20 23  able?..        #
11780 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 6d 65  ..        set me
11790 6d 6f 72 79 20 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a  mory unknown....
117a0 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75          if {!$qu 117b0 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 iet} then {.. 117c0 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 tputs$ch
117d0 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67  annel [appendArg
117e0 73 20 24 6d 65 6d 6f 72 79 20 5c 6e 5d 0d 0a 20  s $memory \n].. 117f0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 }.. 11800 7d 0d 0a 0d 0a 20 20 20 20 20 20 73 65 74 20 72 }.... set r 11810 65 73 75 6c 74 20 24 6d 65 6d 6f 72 79 3b 20 23 esult$memory; #
11820 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 6d 65   NOTE: Return me
11830 6d 6f 72 79 20 69 6e 2d 75 73 65 20 74 6f 20 6f  mory in-use to o
11840 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 0d 0a 20 20  ur caller.....
11850 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d      if {!$quiet} 11860 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 then {.. 11870 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 tputs$channel
11880 22 2d 2d 2d 2d 20 6d 61 78 69 6d 75 6d 20 6d 65  "---- maximum me
11890 6d 6f 72 79 20 69 6e 20 75 73 65 20 62 79 20 53  mory in use by S
118a0 51 4c 69 74 65 2e 2e 2e 20 22 0d 0a 20 20 20 20  QLite... "..
118b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20    }....      if
118c0 7b 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20  {[catch {object
118d0 69 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e  invoke -flags +N
118e0 6f 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20  onPublic \..
118f0 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
11900 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73  .Data.SQLite.Uns
11910 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11920 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..
11930 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79    sqlite3_memory
11940 5f 68 69 67 68 77 61 74 65 72 20 30 7d 20 6d 65  _highwater 0} me
11950 6d 6f 72 79 5d 20 3d 3d 20 30 7d 20 74 68 65 6e  mory] == 0} then
11960 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b   {..        if {
11970 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11980 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 . tputs 11990 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e$channel [appen
119a0 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20 22 20  dArgs $memory " 119b0 62 79 74 65 73 5c 6e 22 5d 0d 0a 20 20 20 20 20 bytes\n"].. 119c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c }.. } el 119d0 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d se {.. #. 119e0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 119f0 20 4d 61 79 62 65 20 74 68 65 20 53 51 4c 69 74 Maybe the SQLit 11a00 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 e core library i 11a10 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 3f 0d 0a s unavailable?.. 11a20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 11a30 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 75 6e set memory un 11a40 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 known.... 11a50 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 68 if {!$quiet} th
11a60 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  en {..
11a70 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b  tputs $channel [ 11a80 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f appendArgs$memo
11a90 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  ry \n]..
11aa0 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....
11ab0 20 20 20 20 69 66 20 7b 24 63 6f 6c 6c 65 63 74      if {$collect 11ac0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 11ad0 20 20 63 6f 6c 6c 65 63 74 47 61 72 62 61 67 65 collectGarbage 11ae0 20 24 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20$channel..
11af0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 7b   }....      if {
11b00 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11b10 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
11b20 63 68 61 6e 6e 65 6c 20 22 2d 2d 2d 2d 20 63 75  channel "---- cu
11b30 72 72 65 6e 74 20 6d 65 6d 6f 72 79 20 69 6e 20  rrent memory in
11b40 75 73 65 20 62 79 20 74 68 65 20 43 4c 52 2e 2e  use by the CLR..
11b50 2e 20 22 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  . "..      }....
11b60 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68        if {[catch
11b70 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20   {object invoke
11b80 47 43 20 47 65 74 54 6f 74 61 6c 4d 65 6d 6f 72  GC GetTotalMemor
11b90 79 20 66 61 6c 73 65 7d 20 6d 65 6d 6f 72 79 5d  y false} memory]
11ba0 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20   == 0} then {..
11bb0 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69         if {[stri
11bc0 6e 67 20 69 73 20 69 6e 74 65 67 65 72 20 2d 73  ng is integer -s
11bd0 74 72 69 63 74 20 24 6d 65 6d 6f 72 79 5d 7d 20  trict $memory]} 11be0 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 11bf0 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 74 if {!$quiet} t
11c00 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
11c10 20 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65     tputs $channe 11c20 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d l [appendArgs$m
11c30 65 6d 6f 72 79 20 22 20 62 79 74 65 73 5c 6e 22  emory " bytes\n"
11c40 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ]..          }..
11c50 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b          } else {
11c60 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20  ..          set
11c70 6d 65 6d 6f 72 79 20 69 6e 76 61 6c 69 64 0d 0a  memory invalid..
11c80 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b  ..          if {
11c90 21 24 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d  !$quiet} then {. 11ca0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 . tpu 11cb0 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 ts$channel [app
11cc0 65 6e 64 41 72 67 73 20 24 6d 65 6d 6f 72 79 20  endArgs $memory 11cd0 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d \n].. } 11ce0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 .. }.. 11cf0 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 } else {.. 11d00 20 20 20 20 20 73 65 74 20 6d 65 6d 6f 72 79 20 set memory 11d10 75 6e 6b 6e 6f 77 6e 0d 0a 0d 0a 20 20 20 20 20 unknown.... 11d20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 7d 20 if {!$quiet}
11d30 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20  then {..
11d40 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 11d50 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 6d 65 [appendArgs$me
11d60 6d 6f 72 79 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  mory \n]..
11d70 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
11d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 72 65        return $re 11d90 73 75 6c 74 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a sult.. }..... 11da0 20 20 20 20 70 72 6f 63 20 63 68 65 63 6b 46 6f proc checkFo 11db0 72 53 51 4c 69 74 65 44 69 72 65 63 74 6f 72 69 rSQLiteDirectori 11dc0 65 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 72 65 es { channel {re 11dd0 73 65 74 20 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a set false} } {.. 11de0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 #.. # 11df0 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 11e00 74 68 65 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 the sqlite3_win3 11e10 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 11e20 66 75 6e 63 74 69 6f 6e 20 69 73 20 61 76 61 69 function is avai 11e30 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d lable... #. 11e40 0a 20 20 20 20 20 20 74 70 75 74 73 20 24 63 68 . tputs$ch
11e50 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20  annel \..
11e60 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e     "---- checkin
11e70 67 20 66 6f 72 20 66 75 6e 63 74 69 6f 6e 20 73  g for function s
11e80 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
11e90 5f 64 69 72 65 63 74 6f 72 79 2e 2e 2e 20 22 0d  _directory... ".
11ea0 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20  ...      #..
11eb0 20 20 23 20 4e 4f 54 45 3a 20 54 68 69 73 20 63    # NOTE: This c
11ec0 61 6c 6c 20 74 6f 20 74 68 65 20 73 71 6c 69 74  all to the sqlit
11ed0 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
11ee0 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20  ectory function
11ef0 75 73 65 73 20 74 68 65 0d 0a 20 20 20 20 20 20  uses the..
11f00 23 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 20  #       invalid
11f10 76 61 6c 75 65 20 30 20 66 6f 72 20 74 68 65 20  value 0 for the
11f20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2e 20  first argument.
11f30 20 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65   This code is de
11f40 73 69 67 6e 65 64 0d 0a 20 20 20 20 20 20 23 20  signed..      #
11f50 20 20 20 20 20 20 74 6f 20 63 68 65 63 6b 20 69        to check i
11f60 66 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 66 75  f calling the fu
11f70 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 72 61 69 73  nction will rais
11f80 65 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 28  e an exception (
11f90 69 2e 65 2e 0d 0a 20 20 20 20 20 20 23 20 20 20  i.e...      #
11fa0 20 20 20 20 74 68 65 20 61 63 74 75 61 6c 20 72      the actual r
11fb0 65 73 75 6c 74 20 6f 66 20 74 68 65 20 66 75 6e  esult of the fun
11fc0 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 20 6d  ction does not m
11fd0 61 74 74 65 72 20 61 73 20 6c 6f 6e 67 20 61 73  atter as long as
11fe0 20 6e 6f 0d 0a 20 20 20 20 20 20 23 20 20 20 20   no..      #
11ff0 20 20 20 64 69 72 65 63 74 6f 72 79 20 69 73 20     directory is
12000 63 68 61 6e 67 65 64 29 2e 0d 0a 20 20 20 20 20  changed)...
12010 20 23 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b 63   #..      if {[c
12020 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
12030 20 20 20 20 20 20 6f 62 6a 65 63 74 20 69 6e 76        object inv
12040 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50  oke -flags +NonP
12050 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 20 20  ublic \..
12060 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61         System.Da
12070 74 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65  ta.SQLite.Unsafe
12080 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d  NativeMethods \.
12090 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
120a0 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73 65 74  qlite3_win32_set
120b0 5f 64 69 72 65 63 74 6f 72 79 20 30 20 6e 75 6c  _directory 0 nul
120c0 6c 7d 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  l}] == 0} then {
120d0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
120e0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 61 6c       # NOTE: Cal
120f0 6c 69 6e 67 20 74 68 65 20 73 71 6c 69 74 65 33  ling the sqlite3
12100 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
12110 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e 20 64 6f  tory function do
12120 65 73 20 6e 6f 74 0d 0a 20 20 20 20 20 20 20 20  es not..
12130 23 20 20 20 20 20 20 20 63 61 75 73 65 20 61 6e  #       cause an
12140 20 65 78 63 65 70 74 69 6f 6e 3b 20 74 68 65 72   exception; ther
12150 65 66 6f 72 65 2c 20 69 74 20 6d 75 73 74 20 62  efore, it must b
12160 65 20 61 76 61 69 6c 61 62 6c 65 20 28 69 2e 65  e available (i.e
12170 2e 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  ...        #
12180 20 20 20 65 76 65 6e 20 74 68 6f 75 67 68 20 69     even though i
12190 74 20 73 68 6f 75 6c 64 20 72 65 74 75 72 6e 20  t should return
121a0 61 20 66 61 69 6c 75 72 65 20 72 65 74 75 72 6e  a failure return
121b0 20 63 6f 64 65 20 69 6e 20 74 68 69 73 0d 0a 20   code in this..
121c0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 63         #       c
121d0 61 73 65 29 2e 0d 0a 20 20 20 20 20 20 20 20 23  ase)...        #
121e0 0d 0a 20 20 20 20 20 20 20 20 61 64 64 43 6f 6e  ..        addCon
121f0 73 74 72 61 69 6e 74 20 73 71 6c 69 74 65 33 5f  straint sqlite3_
12200 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74  win32_set_direct
12210 6f 72 79 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ory....        t
12220 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 79 65  puts $channel ye 12230 73 5c 6e 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 s\n.... # 12240 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 .. # NOTE 12250 3a 20 44 6f 65 73 20 6f 75 72 20 63 61 6c 6c 65 : Does our calle 12260 72 20 77 61 6e 74 20 74 6f 20 72 65 73 65 74 20 r want to reset 12270 74 68 65 20 64 69 72 65 63 74 6f 72 69 65 73 3f the directories? 12280 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 12290 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 74 7d if {$reset}
122a0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
122b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20     #..
122c0 23 20 4e 4f 54 45 3a 20 4e 6f 77 20 6d 61 6b 65  # NOTE: Now make
122d0 20 73 75 72 65 20 74 68 65 20 64 61 74 61 62 61   sure the databa
122e0 73 65 20 61 6e 64 20 74 65 6d 70 6f 72 61 72 79  se and temporary
122f0 20 64 69 72 65 63 74 6f 72 69 65 73 20 61 72 65   directories are
12300 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20  ..          #
12310 20 20 20 20 72 65 73 65 74 20 74 68 65 69 72 20      reset their
12320 64 65 66 61 75 6c 74 20 76 61 6c 75 65 73 2c 20  default values,
12330 77 68 69 63 68 20 73 68 6f 75 6c 64 20 62 65 20  which should be
12340 6e 75 6c 6c 20 66 6f 72 20 62 6f 74 68 2e 0d 0a  null for both...
12350 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
12360 20 20 53 69 6e 63 65 20 74 68 65 20 73 71 6c 69    Since the sqli
12370 74 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69  te3_win32_set_di
12380 72 65 63 74 6f 72 79 20 66 75 6e 63 74 69 6f 6e  rectory function
12390 20 69 73 20 61 76 61 69 6c 61 62 6c 65 2c 0d 0a   is available,..
123a0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
123b0 20 20 75 73 65 20 69 74 2e 0d 0a 20 20 20 20 20    use it...
123c0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
123d0 20 20 66 6f 72 20 7b 73 65 74 20 69 6e 64 65 78    for {set index
123e0 20 31 7d 20 7b 24 69 6e 64 65 78 20 3c 20 33 7d   1} {$index < 3} 123f0 20 7b 69 6e 63 72 20 69 6e 64 65 78 7d 20 7b 0d {incr index} {. 12400 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 12410 7b 5b 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 {[catch {.. 12420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6f o 12430 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c bject invoke -fl 12440 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c ags +NonPublic \ 12450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12460 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 System.Dat 12470 61 2e 53 51 4c 69 74 65 2e 55 6e 73 61 66 65 4e a.SQLite.UnsafeN 12480 61 74 69 76 65 4d 65 74 68 6f 64 73 20 5c 0d 0a ativeMethods \.. 12490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 124a0 20 20 20 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 sqlite3_win3 124b0 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 20 2_set_directory 124c0 24 69 6e 64 65 78 20 6e 75 6c 6c 7d 20 5c 0d 0a$index null} \..
124d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
124e0 20 20 20 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30      result] == 0
124f0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12500 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12510 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12520 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12530 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 63 61 "---- ca 12540 6c 6c 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 ll sqlite3_win32 12550 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28 22 _set_directory(" 12560 20 24 69 6e 64 65 78 20 5c 0d 0a 20 20 20 20 20$index \..
12570 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2c 20               ",
12580 6e 75 6c 6c 29 2e 2e 2e 20 6f 6b 3a 20 22 20 24  null)... ok: " $12590 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 result \n].. 125a0 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b } else { 125b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 125c0 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b tputs$channel [
125d0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
125e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20
125f0 22 2d 2d 2d 2d 20 63 61 6c 6c 20 73 71 6c 69 74  "---- call sqlit
12600 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
12610 65 63 74 6f 72 79 28 22 20 24 69 6e 64 65 78 20  ectory(" $index 12620 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 12630 20 20 20 20 20 22 2c 20 6e 75 6c 6c 29 2e 2e 2e ", null)... 12640 20 65 72 72 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 error: " \n\t$
12650 72 65 73 75 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20  result \n]..
12660 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..
12670 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
12680 7d 0d 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  }..      } else
12690 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
126a0 20 24 63 68 61 6e 6e 65 6c 20 6e 6f 5c 6e 0d 0a   $channel no\n.. 126b0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 126c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 44 6f 65 # NOTE: Doe 126d0 73 20 6f 75 72 20 63 61 6c 6c 65 72 20 77 61 6e s our caller wan 126e0 74 20 74 6f 20 72 65 73 65 74 20 74 68 65 20 64 t to reset the d 126f0 69 72 65 63 74 6f 72 69 65 73 3f 20 20 54 68 69 irectories? Thi 12700 73 20 63 61 6e 20 6f 6e 6c 79 0d 0a 20 20 20 20 s can only.. 12710 20 20 20 20 23 20 20 20 20 20 20 20 62 65 20 70 # be p 12720 65 72 66 6f 72 6d 65 64 20 69 66 20 53 51 4c 69 erformed if SQLi 12730 74 65 20 69 73 20 6c 6f 61 64 65 64 20 61 6e 64 te is loaded and 12740 20 72 65 61 64 79 20 66 6f 72 20 75 73 65 20 62 ready for use b 12750 79 20 74 68 65 20 74 65 73 74 0d 0a 20 20 20 20 y the test.. 12760 20 20 20 20 23 20 20 20 20 20 20 20 73 75 69 74 # suit 12770 65 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 e... #.. 12780 20 20 20 20 20 20 20 69 66 20 7b 24 72 65 73 65 if {$rese
12790 74 20 26 26 20 5b 69 73 53 51 4c 69 74 65 52 65  t && [isSQLiteRe
127a0 61 64 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  ady]} then {..
127b0 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
127c0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4e 6f 77       # NOTE: Now
127d0 20 6d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64   make sure the d
127e0 61 74 61 62 61 73 65 20 61 6e 64 20 74 65 6d 70  atabase and temp
127f0 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72 69 65  orary directorie
12800 73 20 61 72 65 0d 0a 20 20 20 20 20 20 20 20 20  s are..
12810 20 23 20 20 20 20 20 20 20 72 65 73 65 74 20 74   #       reset t
12820 68 65 69 72 20 64 65 66 61 75 6c 74 20 76 61 6c  heir default val
12830 75 65 73 2c 20 77 68 69 63 68 20 73 68 6f 75 6c  ues, which shoul
12840 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 62 6f  d be null for bo
12850 74 68 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23  th...          #
12860 20 20 20 20 20 20 20 53 69 6e 63 65 20 74 68 65         Since the
12870 20 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 73   sqlite3_win32_s
12880 65 74 5f 64 69 72 65 63 74 6f 72 79 20 66 75 6e  et_directory fun
12890 63 74 69 6f 6e 20 64 6f 65 73 20 6e 6f 74 0d 0a  ction does not..
128a0 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
128b0 20 20 61 70 70 65 61 72 20 74 6f 20 62 65 20 61    appear to be a
128c0 76 61 69 6c 61 62 6c 65 2c 20 75 73 65 20 74 68  vailable, use th
128d0 65 20 61 73 73 6f 63 69 61 74 65 64 20 50 52 41  e associated PRA
128e0 47 4d 41 20 63 6f 6d 6d 61 6e 64 73 0d 0a 20 20  GMA commands..
128f0 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
12900 69 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20  instead...
12910 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
12920 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74 6f   foreach directo
12930 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73 74  ry [list data_st
12940 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74 65  ore_directory te
12950 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
12960 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  ry] {..
12970 20 20 20 73 65 74 20 73 71 6c 20 5b 61 70 70 65     set sql [appe
12980 6e 64 41 72 67 73 20 22 50 52 41 47 4d 41 20 22  ndArgs "PRAGMA "
12990 20 24 64 69 72 65 63 74 6f 72 79 20 22 20 3d 20   $directory " = 129a0 5c 22 5c 22 3b 22 5d 0d 0a 0d 0a 20 20 20 20 20 \"\";"].... 129b0 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 if {[catc 129c0 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 73 h {executeSql$s
129d0 71 6c 7d 20 72 65 73 75 6c 74 5d 20 3d 3d 20 30  ql} result] == 0
129e0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
129f0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 12a00 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 12a10 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 12a20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 65 78 "---- ex 12a30 65 63 75 74 65 20 50 52 41 47 4d 41 20 22 20 24 ecute PRAGMA "$
12a40 64 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 6f  directory "... o
12a50 6b 3a 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20  k: \"" \..
12a60 20 20 20 20 20 20 20 20 20 20 20 20 24 72 65 73              $res 12a70 75 6c 74 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 20 ult \"\n].. 12a80 20 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d } else {. 12a90 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 12aa0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 puts$channel [a
12ab0 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20  ppendArgs \..
12ac0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
12ad0 2d 2d 2d 2d 20 65 78 65 63 75 74 65 20 50 52 41  ---- execute PRA
12ae0 47 4d 41 20 22 20 24 64 69 72 65 63 74 6f 72 79  GMA " $directory 12af0 20 22 2e 2e 2e 20 65 72 72 6f 72 3a 20 22 20 5c "... error: " \ 12b00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 12b10 20 20 20 20 5c 6e 5c 74 20 24 72 65 73 75 6c 74 \n\t$result
12b20 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
12b30 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
12b40 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..
12b50 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d     }....      #.
12b60 0a 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46  .      # NOTE: F
12b70 69 6e 61 6c 6c 79 2c 20 73 68 6f 77 20 74 68 65  inally, show the
12b80 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 6f   current value o
12b90 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  f the database a
12ba0 6e 64 20 74 65 6d 70 6f 72 61 72 79 0d 0a 20 20  nd temporary..
12bb0 20 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65      #       dire
12bc0 63 74 6f 72 69 65 73 2e 20 20 54 68 69 73 20 63  ctories.  This c
12bd0 61 6e 20 6f 6e 6c 79 20 62 65 20 70 65 72 66 6f  an only be perfo
12be0 72 6d 65 64 20 69 66 20 53 51 4c 69 74 65 20 69  rmed if SQLite i
12bf0 73 20 6c 6f 61 64 65 64 0d 0a 20 20 20 20 20 20  s loaded..
12c00 23 20 20 20 20 20 20 20 61 6e 64 20 72 65 61 64  #       and read
12c10 79 20 66 6f 72 20 75 73 65 20 62 79 20 74 68 65  y for use by the
12c20 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 20   test suite...
12c30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
12c40 7b 5b 69 73 53 51 4c 69 74 65 52 65 61 64 79 5d  {[isSQLiteReady]
12c50 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
12c60 20 20 66 6f 72 65 61 63 68 20 64 69 72 65 63 74    foreach direct
12c70 6f 72 79 20 5b 6c 69 73 74 20 64 61 74 61 5f 73  ory [list data_s
12c80 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 74  tore_directory t
12c90 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
12ca0 6f 72 79 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20  ory] {..
12cb0 20 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c    tputs $channel 12cc0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 22 2d 2d [appendArgs "-- 12cd0 2d 2d 20 63 68 65 63 6b 69 6e 67 20 22 20 24 64 -- checking "$d
12ce0 69 72 65 63 74 6f 72 79 20 22 2e 2e 2e 20 22 5d  irectory "... "]
12cf0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65  ....          se
12d00 74 20 73 71 6c 20 5b 61 70 70 65 6e 64 41 72 67  t sql [appendArg
12d10 73 20 22 50 52 41 47 4d 41 20 22 20 24 64 69 72  s "PRAGMA " $dir 12d20 65 63 74 6f 72 79 20 5c 3b 5d 0d 0a 0d 0a 20 20 ectory \;].... 12d30 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 if {[cat 12d40 63 68 20 7b 65 78 65 63 75 74 65 53 71 6c 20 24 ch {executeSql$
12d50 73 71 6c 20 73 63 61 6c 61 72 7d 20 72 65 73 75  sql scalar} resu
12d60 6c 74 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b  lt] == 0} then {
12d70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 70  ..            tp
12d80 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 12d90 70 65 6e 64 41 72 67 73 20 22 6f 6b 3a 20 5c 22 pendArgs "ok: \" 12da0 22 20 24 72 65 73 75 6c 74 20 5c 22 5c 6e 5d 0d "$result \"\n].
12db0 0a 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73  .          } els
12dc0 65 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e {..
12dd0 20 74 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20   tputs $channel 12de0 5b 61 70 70 65 6e 64 41 72 67 73 20 22 65 72 72 [appendArgs "err 12df0 6f 72 3a 20 22 20 5c 6e 5c 74 20 24 72 65 73 75 or: " \n\t$resu
12e00 6c 74 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20  lt \n]..
12e10 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
12e20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
12e30 0c 0d 0a 20 20 20 20 70 72 6f 63 20 6c 6f 61 64  ...    proc load
12e40 53 51 4c 69 74 65 54 65 73 74 53 65 74 74 69 6e  SQLiteTestSettin
12e50 67 73 20 7b 20 63 68 61 6e 6e 65 6c 20 7b 73 75  gs { channel {su
12e60 66 66 69 78 20 22 22 7d 20 7b 71 75 69 65 74 20  ffix ""} {quiet
12e70 66 61 6c 73 65 7d 20 7d 20 7b 0d 0a 20 20 20 20  false} } {..
12e80 20 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54    #..      # NOT
12e90 45 3a 20 53 6b 69 70 20 6c 6f 61 64 69 6e 67 20  E: Skip loading
12ea0 74 68 65 20 73 65 74 74 69 6e 67 73 20 69 66 20  the settings if
12eb0 74 68 65 69 72 20 75 73 61 67 65 20 68 61 73 20  their usage has
12ec0 62 65 65 6e 20 64 69 73 61 62 6c 65 64 2e 0d 0a  been disabled...
12ed0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69        #..      i
12ee0 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73  f {![info exists
12ef0 20 3a 3a 6e 6f 28 73 71 6c 69 74 65 54 65 73 74   ::no(sqliteTest
12f00 53 65 74 74 69 6e 67 73 29 5d 7d 20 74 68 65 6e  Settings)]} then
12f10 20 7b 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20   {..        #..
12f20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 4c         # NOTE: L
12f30 6f 61 64 20 63 75 73 74 6f 6d 20 70 65 72 2d 75  oad custom per-u
12f40 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72 2d 68  ser and/or per-h
12f50 6f 73 74 20 74 65 73 74 20 73 65 74 74 69 6e 67  ost test setting
12f60 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 20 20  s now...
12f70 23 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b  #..        if {[
12f80 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63  info exists ::tc
12f90 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73 65 72 29  l_platform(user)
12fa0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
12fb0 20 20 20 20 20 73 65 74 20 75 73 65 72 53 65 74       set userSet
12fc0 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66  tingsFileName [f
12fd0 69 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d  ile join [getCom
12fe0 6d 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d  monDirectory] \.
12ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b  .              [
13000 61 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69  appendArgs setti
13010 6e 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a  ngs $suffix .$:
13020 3a 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 75 73  :tcl_platform(us
13030 65 72 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a  er) .eagle]]....
13040 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66            if {[f
13050 69 6c 65 20 65 78 69 73 74 73 20 24 75 73 65 72  ile exists $user 13060 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 SettingsFileName 13070 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13080 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 if {!$qui
13090 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20  et} then {..
130a0 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
130b0 24 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  $channel [append 130c0 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 Args \.. 130d0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 "---- 130e0 6c 6f 61 64 69 6e 67 20 70 65 72 2d 75 73 65 72 loading per-user 130f0 20 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 test settings f 13100 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 ile \"" \.. 13110 20 20 20 20 20 20 20 20 20 20 20 20 20 24 75 73$us
13120 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61  erSettingsFileNa
13130 6d 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20  me \"...\n]..
13140 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
13150 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63            if {[c
13160 61 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20  atch {uplevel 1
13170 5b 6c 69 73 74 20 73 6f 75 72 63 65 20 24 75 73  [list source $us 13180 65 72 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 erSettingsFileNa 13190 6d 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 me]} \.. 131a0 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f erro 131b0 72 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 r]} then {.. 131c0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 if {!$
131d0 71 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20  quiet} then {..
131e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
131f0 70 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61  puts $channel [a 13200 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 ppendArgs \.. 13210 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13220 20 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 "==== WARNING: 13230 66 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 failed to load p 13240 65 72 2d 75 73 65 72 20 73 65 74 74 69 6e 67 73 er-user settings 13250 20 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 file \"" \.. 13260 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13270 20 24 75 73 65 72 53 65 74 74 69 6e 67 73 46 69$userSettingsFi
13280 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f  leName "\", erro
13290 72 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72  r: " \n\t $error 132a0 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 \n].. 132b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 }.. 132c0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 132d0 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 } else {.. 132e0 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
132f0 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
13300 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $13310 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13320 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13330 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 "---- s 13340 6b 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 kipped loading p 13350 65 72 2d 75 73 65 72 20 74 65 73 74 20 73 65 74 er-user test set 13360 74 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c tings file \"" \ 13370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 13380 20 20 20 20 24 75 73 65 72 53 65 74 74 69 6e 67$userSetting
13390 73 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69  sFileName "\", i
133a0 74 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74  t does not exist
133b0 5c 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20  \n"]..
133c0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d    }..          }
133d0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }....
133e0 20 20 20 20 20 20 20 23 23 23 23 23 23 23 23 23         #########
133f0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13400 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13410 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
13420 23 23 23 23 23 23 23 23 23 23 23 23 23 23 0d 0a  ##############..
13430 0d 0a 20 20 20 20 20 20 20 20 69 66 20 7b 5b 69  ..        if {[i
13440 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a 74 63 6c  nfo exists ::tcl
13450 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73 74 29 5d  _platform(host)]
13460 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
13470 20 20 20 20 73 65 74 20 68 6f 73 74 53 65 74 74      set hostSett
13480 69 6e 67 73 46 69 6c 65 4e 61 6d 65 20 5b 66 69  ingsFileName [fi
13490 6c 65 20 6a 6f 69 6e 20 5b 67 65 74 43 6f 6d 6d  le join [getComm
134a0 6f 6e 44 69 72 65 63 74 6f 72 79 5d 20 5c 0d 0a  onDirectory] \..
134b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5b 61                [a
134c0 70 70 65 6e 64 41 72 67 73 20 73 65 74 74 69 6e  ppendArgs settin
134d0 67 73 20 24 73 75 66 66 69 78 20 2e 20 24 3a 3a  gs $suffix .$::
134e0 74 63 6c 5f 70 6c 61 74 66 6f 72 6d 28 68 6f 73  tcl_platform(hos
134f0 74 29 20 2e 65 61 67 6c 65 5d 5d 0d 0a 0d 0a 20  t) .eagle]]....
13500 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 66 69           if {[fi
13510 6c 65 20 65 78 69 73 74 73 20 24 68 6f 73 74 53  le exists $hostS 13520 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d 65 5d ettingsFileName] 13530 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 13540 20 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 if {!$quie
13550 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  t} then {..
13560 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $13570 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 13580 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 13590 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 6c "---- l 135a0 6f 61 64 69 6e 67 20 70 65 72 2d 68 6f 73 74 20 oading per-host 135b0 74 65 73 74 20 73 65 74 74 69 6e 67 73 20 66 69 test settings fi 135c0 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 le \"" \.. 135d0 20 20 20 20 20 20 20 20 20 20 20 20 24 68 6f 73$hos
135e0 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d  tSettingsFileNam
135f0 65 20 5c 22 2e 2e 2e 5c 6e 5d 0d 0a 20 20 20 20  e \"...\n]..
13600 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....
13610 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 63 61           if {[ca
13620 74 63 68 20 7b 75 70 6c 65 76 65 6c 20 31 20 5b  tch {uplevel 1 [
13630 6c 69 73 74 20 73 6f 75 72 63 65 20 24 68 6f 73  list source $hos 13640 74 53 65 74 74 69 6e 67 73 46 69 6c 65 4e 61 6d tSettingsFileNam 13650 65 5d 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 e]} \.. 13660 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 error 13670 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13680 20 20 20 20 20 20 20 20 20 69 66 20 7b 21 24 71 if {!$q
13690 75 69 65 74 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  uiet} then {..
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 70                tp
136b0 75 74 73 20 24 63 68 61 6e 6e 65 6c 20 5b 61 70  uts $channel [ap 136c0 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 pendArgs \.. 136d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 136e0 22 3d 3d 3d 3d 20 57 41 52 4e 49 4e 47 3a 20 66 "==== WARNING: f 136f0 61 69 6c 65 64 20 74 6f 20 6c 6f 61 64 20 70 65 ailed to load pe 13700 72 2d 68 6f 73 74 20 73 65 74 74 69 6e 67 73 20 r-host settings 13710 66 69 6c 65 20 5c 22 22 20 5c 0d 0a 20 20 20 20 file \"" \.. 13720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 13730 24 68 6f 73 74 53 65 74 74 69 6e 67 73 46 69 6c$hostSettingsFil
13740 65 4e 61 6d 65 20 22 5c 22 2c 20 65 72 72 6f 72  eName "\", error
13750 3a 20 22 20 5c 6e 5c 74 20 24 65 72 72 6f 72 20  : " \n\t $error 13760 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 \n].. 13770 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 }.. 13780 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d }.. } 13790 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 20 else {.. 137a0 20 20 20 20 20 69 66 20 7b 21 24 71 75 69 65 74 if {!$quiet
137b0 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..
137c0 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 63          tputs $c 137d0 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 hannel [appendAr 137e0 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 gs \.. 137f0 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b "---- sk 13800 69 70 70 65 64 20 6c 6f 61 64 69 6e 67 20 70 65 ipped loading pe 13810 72 2d 68 6f 73 74 20 74 65 73 74 20 73 65 74 74 r-host test sett 13820 69 6e 67 73 20 66 69 6c 65 20 5c 22 22 20 5c 0d ings file \"" \. 13830 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 . 13840 20 20 20 24 68 6f 73 74 53 65 74 74 69 6e 67 73$hostSettings
13850 46 69 6c 65 4e 61 6d 65 20 22 5c 22 2c 20 69 74  FileName "\", it
13860 20 64 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c   does not exist\
13870 6e 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n"]..
13880 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
13890 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..
138a0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c 0d 0a 20    }..    }.....
138b0 20 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74     proc runSQLit
138c0 65 54 65 73 74 50 72 6f 6c 6f 67 75 65 20 7b 7d  eTestPrologue {}
138d0 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20   {..      #..
138e0 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70 20     # NOTE: Skip
138f0 72 75 6e 6e 69 6e 67 20 6f 75 72 20 63 75 73 74  running our cust
13900 6f 6d 20 70 72 6f 6c 6f 67 75 65 20 69 66 20 74  om prologue if t
13910 68 65 20 6d 61 69 6e 20 6f 6e 65 20 68 61 73 20  he main one has
13920 62 65 65 6e 0d 0a 20 20 20 20 20 20 23 20 20 20  been..      #
13930 20 20 20 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20      skipped...
13940 20 20 20 20 23 0d 0a 20 20 20 20 20 20 69 66 20      #..      if
13950 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
13960 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e 65 61 67  :no(prologue.eag
13970 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  le)]} then {..
13980 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
13990 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
139a0 65 20 22 62 65 66 6f 72 65 2d 63 6f 6e 73 74 72  e "before-constr
139b0 61 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65  aints" custom pe
139c0 72 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65  r-user and/or pe
139d0 72 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20  r-host..
139e0 23 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74  #       test set
139f0 74 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20  tings now...
13a00 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75      #..        u
13a10 70 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c  plevel 1 [list l
13a20 6f 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74  oadSQLiteTestSet
13a30 74 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68  tings $::test_ch 13a40 61 6e 6e 65 6c 20 2e 62 65 66 6f 72 65 5d 0d 0a annel .before].. 13a50 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 13a60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 # NOTE: Ski 13a70 70 20 61 6c 6c 20 53 79 73 74 65 6d 2e 44 61 74 p all System.Dat 13a80 61 2e 53 51 4c 69 74 65 20 72 65 6c 61 74 65 64 a.SQLite related 13a90 20 66 69 6c 65 20 68 61 6e 64 6c 69 6e 67 20 28 file handling ( 13aa0 64 65 6c 65 74 69 6e 67 2c 0d 0a 20 20 20 20 20 deleting,.. 13ab0 20 20 20 23 20 20 20 20 20 20 20 63 6f 70 79 69 # copyi 13ac0 6e 67 2c 20 61 6e 64 20 6c 6f 61 64 69 6e 67 29 ng, and loading) 13ad0 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e if we are so in 13ae0 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 structed... 13af0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 69 66 #.. if 13b00 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 {![info exists 13b10 3a 3a 6e 6f 28 73 71 6c 69 74 65 46 69 6c 65 73 ::no(sqliteFiles 13b20 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 )]} then {.. 13b30 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 13b40 20 20 20 23 20 4e 4f 54 45 3a 20 44 65 74 65 72 # NOTE: Deter 13b50 6d 69 6e 65 20 74 68 65 20 6e 61 6d 65 20 66 6f mine the name fo 13b60 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 6e 61 r the current na 13b70 74 69 76 65 20 70 6c 61 74 66 6f 72 6d 2e 0d 0a tive platform... 13b80 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 13b90 20 20 20 20 20 20 20 73 65 74 20 70 6c 61 74 66 set platf 13ba0 6f 72 6d 20 5b 61 72 63 68 69 74 65 63 74 75 72 orm [architectur 13bb0 65 46 6f 72 50 6c 61 74 66 6f 72 6d 20 5b 67 65 eForPlatform [ge 13bc0 74 42 75 69 6c 64 50 6c 61 74 66 6f 72 6d 20 74 tBuildPlatform t 13bd0 72 75 65 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 rue]].... 13be0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 #.. 13bf0 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 74 68 65 # NOTE: Show the 13c00 20 70 6c 61 74 66 6f 72 6d 20 74 68 61 74 20 77 platform that w 13c10 69 6c 6c 20 62 65 20 75 73 65 64 20 74 6f 20 68 ill be used to h 13c20 65 6c 70 20 6c 6f 63 61 74 65 20 6e 61 74 69 76 elp locate nativ 13c30 65 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 e.. # 13c40 20 20 20 20 20 62 75 69 6c 64 20 66 69 6c 65 73 build files 13c50 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a ... #.. 13c60 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 13c70 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
13c80 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \..
13c90 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
13ca0 2d 2d 20 70 6c 61 74 66 6f 72 6d 20 66 6f 72 20  -- platform for
13cb0 6c 6f 63 61 74 69 6e 67 20 6e 61 74 69 76 65 20  locating native
13cc0 62 75 69 6c 64 20 66 69 6c 65 73 20 69 73 20 5c  build files is \
13cd0 22 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  "" \..
13ce0 20 20 20 20 24 70 6c 61 74 66 6f 72 6d 20 5c 22      $platform \" 13cf0 5c 6e 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 \n].... 13d00 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 13d10 4e 4f 54 45 3a 20 53 6b 69 70 20 74 72 79 69 6e NOTE: Skip tryin 13d20 67 20 74 6f 20 64 65 6c 65 74 65 20 61 6e 79 20 g to delete any 13d30 66 69 6c 65 73 20 69 66 20 77 65 20 61 72 65 20 files if we are 13d40 73 6f 20 69 6e 73 74 72 75 63 74 65 64 2e 0d 0a so instructed... 13d50 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 13d60 20 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 if {![inf 13d70 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 64 65 o exists ::no(de 13d80 6c 65 74 65 53 71 6c 69 74 65 46 69 6c 65 73 29 leteSqliteFiles) 13d90 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 ]} then {.. 13da0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 13db0 41 73 73 65 6d 62 6c 79 20 73 71 6c 69 74 65 33 Assembly sqlite3 13dc0 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 .dll.. 13dd0 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d tryDeleteAssem 13de0 62 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 bly SQLite.Inter 13df0 6f 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 op.dll.. 13e00 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 tryDeleteAss 13e10 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 embly System.Dat 13e20 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 a.SQLite.dll.. 13e30 20 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c tryDel 13e40 65 74 65 41 73 73 65 6d 62 6c 79 20 53 79 73 74 eteAssembly Syst 13e50 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c em.Data.SQLite.L 13e60 69 6e 71 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 inq.dll.... 13e70 20 20 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 if {[stri 13e80 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 ng length$platf
13e90 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  orm] > 0} then {
13ea0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
13eb0 74 72 79 44 65 6c 65 74 65 41 73 73 65 6d 62 6c  tryDeleteAssembl
13ec0 79 20 73 71 6c 69 74 65 33 2e 64 6c 6c 20 24 70  y sqlite3.dll $p 13ed0 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 13ee0 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 tryDelete 13ef0 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e Assembly SQLite. 13f00 49 6e 74 65 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 Interop.dll$pla
13f10 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20  tform..
13f20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65 41 73       tryDeleteAs
13f30 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
13f40 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70  ta.SQLite.dll $p 13f50 6c 61 74 66 6f 72 6d 0d 0a 20 20 20 20 20 20 20 latform.. 13f60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 }.... 13f70 20 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 removeCons 13f80 74 72 61 69 6e 74 20 66 69 6c 65 5f 73 71 6c 69 traint file_sqli 13f90 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 te3.dll.. 13fa0 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 13fb0 72 61 69 6e 74 20 66 69 6c 65 5f 53 51 4c 69 74 raint file_SQLit 13fc0 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 e.Interop.dll.. 13fd0 20 20 20 20 20 20 20 20 20 20 20 72 65 6d 6f 76 remov 13fe0 65 43 6f 6e 73 74 72 61 69 6e 74 20 66 69 6c 65 eConstraint file 13ff0 5f 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c _System.Data.SQL 14000 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 ite.dll.. 14010 20 20 20 20 20 72 65 6d 6f 76 65 43 6f 6e 73 74 removeConst 14020 72 61 69 6e 74 20 66 69 6c 65 5f 53 79 73 74 65 raint file_Syste 14030 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 m.Data.SQLite.Li 14040 6e 71 2e 64 6c 6c 0d 0a 20 20 20 20 20 20 20 20 nq.dll.. 14050 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 }.... 14060 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 #.. # 14070 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 20 NOTE: Check for 14080 74 68 65 20 22 61 75 74 6f 53 65 6c 65 63 74 22 the "autoSelect" 14090 20 72 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 2e runtime option. 140a0 20 20 49 66 20 70 72 65 73 65 6e 74 2c 0d 0a 20 If present,.. 140b0 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 140c0 20 61 74 74 65 6d 70 74 20 74 6f 20 61 75 74 6f attempt to auto 140d0 6d 61 74 69 63 61 6c 6c 79 20 73 65 6c 65 63 74 matically select 140e0 20 74 68 65 20 66 69 72 73 74 20 61 76 61 69 6c the first avail 140f0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 20 20 able.. 14100 23 20 20 20 20 20 20 20 62 75 69 6c 64 20 28 6f # build (o 14110 72 20 22 72 65 6c 65 61 73 65 22 29 20 6f 66 20 r "release") of 14120 53 51 4c 69 74 65 20 61 6e 64 20 53 79 73 74 65 SQLite and Syste 14130 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 0d 0a 20 m.Data.SQLite.. 14140 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 # 14150 20 66 6f 72 20 75 73 65 20 77 69 74 68 20 74 68 for use with th 14160 65 20 74 65 73 74 20 73 75 69 74 65 2e 0d 0a 20 e test suite... 14170 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 14180 20 20 20 20 20 20 69 66 20 7b 5b 68 61 73 52 75 if {[hasRu 14190 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 61 75 74 6f ntimeOption auto 141a0 53 65 6c 65 63 74 5d 7d 20 74 68 65 6e 20 7b 0d Select]} then {. 141b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 . if 141c0 7b 21 5b 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 {![checkForSQLit 141d0 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73 74 5f eBuilds$::test_
141e0 63 68 61 6e 6e 65 6c 20 74 72 75 65 5d 7d 20 74  channel true]} t
141f0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
14200 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
14210 69 74 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74  iteReleases $::t 14220 65 73 74 5f 63 68 61 6e 6e 65 6c 20 74 72 75 65 est_channel true 14230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d .. }. 14240 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a . }.... 14250 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 #.. 14260 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 # NOTE: S 14270 6b 69 70 20 74 72 79 69 6e 67 20 74 6f 20 76 65 kip trying to ve 14280 72 69 66 79 20 74 68 65 20 62 75 69 6c 64 20 64 rify the build d 14290 69 72 65 63 74 6f 72 79 20 69 66 20 77 65 20 61 irectory if we a 142a0 72 65 20 73 6f 0d 0a 20 20 20 20 20 20 20 20 20 re so.. 142b0 20 23 20 20 20 20 20 20 20 69 6e 73 74 72 75 63 # instruc 142c0 74 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 ted; otherwise, 142d0 6d 61 6b 65 20 73 75 72 65 20 69 74 20 61 63 74 make sure it act 142e0 75 61 6c 6c 79 20 65 78 69 73 74 73 20 6f 72 0d ually exists or. 142f0 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 . # 14300 20 20 20 68 61 6c 74 20 74 68 65 20 65 6e 74 69 halt the enti 14310 72 65 20 74 65 73 74 69 6e 67 20 70 72 6f 63 65 re testing proce 14320 73 73 20 69 66 20 69 74 20 64 6f 65 73 20 6e 6f ss if it does no 14330 74 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 20 20 t exist... 14340 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 14350 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 if {![info exis 14360 74 73 20 3a 3a 6e 6f 28 76 65 72 69 66 79 42 75 ts ::no(verifyBu 14370 69 6c 64 44 69 72 65 63 74 6f 72 79 29 5d 7d 20 ildDirectory)]} 14380 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 then {.. 14390 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 #.. 143a0 20 20 20 23 20 4e 4f 54 45 3a 20 41 74 20 74 68 # NOTE: At th 143b0 69 73 20 70 6f 69 6e 74 2c 20 74 68 65 20 62 75 is point, the bu 143c0 69 6c 64 20 64 69 72 65 63 74 6f 72 79 20 4d 55 ild directory MU 143d0 53 54 20 65 78 69 73 74 20 61 73 20 61 0d 0a 20 ST exist as a.. 143e0 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 143f0 20 20 20 76 61 6c 69 64 20 64 69 72 65 63 74 6f valid directo 14400 72 79 20 66 6f 72 20 74 68 65 20 74 65 73 74 69 ry for the testi 14410 6e 67 20 70 72 6f 63 65 73 73 20 74 6f 20 63 6f ng process to co 14420 6e 74 69 6e 75 65 2e 0d 0a 20 20 20 20 20 20 20 ntinue... 14430 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14440 20 20 20 20 73 65 74 20 64 69 72 65 63 74 6f 72 set director 14450 79 20 5b 67 65 74 42 75 69 6c 64 44 69 72 65 63 y [getBuildDirec 14460 74 6f 72 79 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 tory].... 14470 20 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 if {![file 14480 65 78 69 73 74 73 20 24 64 69 72 65 63 74 6f 72 exists$director
14490 79 5d 20 7c 7c 20 5c 0d 0a 20 20 20 20 20 20 20  y] || \..
144a0 20 20 20 20 20 20 20 20 20 21 5b 66 69 6c 65 20           ![file
144b0 69 73 64 69 72 65 63 74 6f 72 79 20 24 64 69 72  isdirectory $dir 144c0 65 63 74 6f 72 79 5d 7d 20 74 68 65 6e 20 7b 0d ectory]} then {. 144d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 23 . # 144e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 144f0 23 20 4e 4f 54 45 3a 20 4a 75 73 74 20 70 72 69 # NOTE: Just pri 14500 6f 72 20 74 6f 20 61 63 74 75 61 6c 6c 79 20 68 or to actually h 14510 61 6c 74 69 6e 67 20 74 68 65 20 74 65 73 74 69 alting the testi 14520 6e 67 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20 ng process,.. 14530 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 # 14540 20 20 20 61 64 64 20 61 6e 20 65 72 72 6f 72 20 add an error 14550 74 6f 20 74 68 65 20 74 65 73 74 20 6c 6f 67 20 to the test log 14560 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 file... 14570 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14580 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
14590 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
145a0 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..
145b0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
145c0 2d 2d 20 63 6f 75 6c 64 20 6e 6f 74 20 76 65 72  -- could not ver
145d0 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 63 74  ify build direct
145e0 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 74 6f  ory \"" $directo 145f0 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 ry \.. 14600 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61 6c 6c "\", all 14610 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65 64 5c testing halted\ 14620 6e 22 5d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 n"].... 14630 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 14640 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 61 # NOTE: Ra 14650 69 73 69 6e 67 20 61 20 73 63 72 69 70 74 20 65 ising a script e 14660 72 72 6f 72 20 66 72 6f 6d 20 74 68 69 73 20 70 rror from this p 14670 6f 69 6e 74 20 73 68 6f 75 6c 64 20 68 61 6c 74 oint should halt 14680 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 14690 23 20 20 20 20 20 20 20 74 68 65 20 74 65 73 74 # the test 146a0 69 6e 67 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 ing process... 146b0 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 #.. 146c0 20 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 err 146d0 6f 72 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c or [appendArgs \ 146e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 146f0 20 20 20 20 22 63 6f 75 6c 64 20 6e 6f 74 20 76 "could not v 14700 65 72 69 66 79 20 62 75 69 6c 64 20 64 69 72 65 erify build dire 14710 63 74 6f 72 79 20 5c 22 22 20 24 64 69 72 65 63 ctory \""$direc
14720 74 6f 72 79 20 5c 0d 0a 20 20 20 20 20 20 20 20  tory \..
14730 20 20 20 20 20 20 20 20 20 20 22 5c 22 2c 20 61            "\", a
14740 6c 6c 20 74 65 73 74 69 6e 67 20 68 61 6c 74 65  ll testing halte
14750 64 22 5d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d"]..
14760 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
14770 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
14780 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
14790 3a 20 53 6b 69 70 20 74 72 79 69 6e 67 20 74 6f  : Skip trying to
147a0 20 63 6f 70 79 20 61 6e 79 20 66 69 6c 65 73 20   copy any files
147b0 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73  if we are so ins
147c0 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
147d0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
147e0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
147f0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
14800 74 65 46 69 6c 65 73 29 5d 7d 20 74 68 65 6e 20  teFiles)]} then
14810 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
14820 72 79 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20  ryCopyBuildFile
14830 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
14840 74 65 2e 64 6c 6c 2e 63 6f 6e 66 69 67 0d 0a 0d  te.dll.config...
14850 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
14860 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 73 71 6c  CopyAssembly sql
14870 69 74 65 33 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  ite3.dll..
14880 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
14890 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74  embly SQLite.Int
148a0 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20 20 20 20  erop.dll..
148b0 20 20 20 20 20 20 74 72 79 43 6f 70 79 41 73 73        tryCopyAss
148c0 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74  embly System.Dat
148d0 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20  a.SQLite.dll..
148e0 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f 70            tryCop
148f0 79 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65 6d  yAssembly System
14900 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
14910 71 2e 64 6c 6c 0d 0a 0d 0a 20 20 20 20 20 20 20  q.dll....
14920 20 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67       if {[string
14930 20 6c 65 6e 67 74 68 20 24 70 6c 61 74 66 6f 72   length $platfor 14940 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a m] > 0} then {.. 14950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 72 tr 14960 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 73 71 yCopyAssembly sq 14970 6c 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 74 66 lite3.dll$platf
14980 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
14990 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62     tryCopyAssemb
149a0 6c 79 20 53 51 4c 69 74 65 2e 49 6e 74 65 72 6f  ly SQLite.Intero
149b0 70 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d  p.dll $platform. 149c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 . t 149d0 72 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 53 ryCopyAssembly S 149e0 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 149f0 65 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72 6d 0d e.dll$platform.
14a00 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
14a10 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }....
14a20 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20           #..
14a30 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b        # NOTE: Sk
14a40 69 70 20 74 72 79 69 6e 67 20 74 6f 20 6c 6f 61  ip trying to loa
14a50 64 20 61 6e 79 20 66 69 6c 65 73 20 69 66 20 77  d any files if w
14a60 65 20 61 72 65 20 73 6f 20 69 6e 73 74 72 75 63  e are so instruc
14a70 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ted...
14a80 23 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  #..          if
14a90 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a  {![info exists :
14aa0 3a 6e 6f 28 6c 6f 61 64 53 71 6c 69 74 65 46 69  :no(loadSqliteFi
14ab0 6c 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20  les)]} then {..
14ac0 20 20 20 20 20 20 20 20 20 20 20 74 72 79 4c 6f             tryLo
14ad0 61 64 41 73 73 65 6d 62 6c 79 20 53 79 73 74 65  adAssembly Syste
14ae0 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c  m.Data.SQLite.dl
14af0 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  l..            t
14b00 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20 53  ryLoadAssembly S
14b10 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74  ystem.Data.SQLit
14b20 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 0d 0a 20 20  e.Linq.dll....
14b30 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73            if {[s
14b40 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 70 6c  tring length $pl 14b50 61 74 66 6f 72 6d 5d 20 3e 20 30 7d 20 74 68 65 atform] > 0} the 14b60 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 n {.. 14b70 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 tryLoadAssemb 14b80 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 ly System.Data.S 14b90 51 4c 69 74 65 2e 64 6c 6c 20 24 70 6c 61 74 66 QLite.dll$platf
14ba0 6f 72 6d 0d 0a 20 20 20 20 20 20 20 20 20 20 20  orm..
14bb0 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
14bc0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 23 0d 0a  ...          #..
14bd0 20 20 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45            # NOTE
14be0 3a 20 42 75 69 6c 64 20 61 20 6c 69 73 74 20 6f  : Build a list o
14bf0 66 20 61 75 78 69 6c 69 61 72 79 20 4d 61 6e 61  f auxiliary Mana
14c00 67 65 64 20 44 65 62 75 67 67 69 6e 67 20 41 73  ged Debugging As
14c10 73 69 73 74 61 6e 74 73 20 28 4d 44 41 29 0d 0a  sistants (MDA)..
14c20 20 20 20 20 20 20 20 20 20 20 23 20 20 20 20 20            #
14c30 20 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20    configuration
14c40 66 69 6c 65 73 20 74 68 61 74 20 6d 61 79 20 6e  files that may n
14c50 65 65 64 20 74 6f 20 62 65 20 64 65 6c 65 74 65  eed to be delete
14c60 64 20 6f 72 20 63 6f 70 69 65 64 2e 0d 0a 20 20  d or copied...
14c70 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14c80 20 20 20 20 20 73 65 74 20 6d 64 61 43 6f 6e 66       set mdaConf
14c90 69 67 46 69 6c 65 4e 61 6d 65 73 20 5b 6c 69 73  igFileNames [lis
14ca0 74 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  t \..
14cb0 20 20 20 49 6e 73 74 61 6c 6c 65 72 2e 65 78 65     Installer.exe
14cc0 2e 6d 64 61 2e 63 6f 6e 66 69 67 20 74 65 73 74  .mda.config test
14cd0 2e 65 78 65 2e 6d 64 61 2e 63 6f 6e 66 69 67 20  .exe.mda.config
14ce0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  \..
14cf0 20 74 65 73 74 6c 69 6e 71 2e 65 78 65 2e 6d 64   testlinq.exe.md
14d00 61 2e 63 6f 6e 66 69 67 5d 0d 0a 0d 0a 20 20 20  a.config]....
14d10 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14d20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69 70      # NOTE: Skip
14d30 20 74 72 79 69 6e 67 20 74 6f 20 64 65 6c 65 74   trying to delet
14d40 65 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73  e external files
14d50 20 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e   if we are so in
14d60 73 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20  structed...
14d70 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
14d80 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69    if {![info exi
14d90 73 74 73 20 3a 3a 6e 6f 28 64 65 6c 65 74 65 53  sts ::no(deleteS
14da0 71 6c 69 74 65 45 78 74 65 72 6e 61 6c 46 69 6c  qliteExternalFil
14db0 65 73 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  es)]} then {..
14dc0 20 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63            foreac
14dd0 68 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c 65 4e  h mdaConfigFileN
14de0 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67 46 69  ame $mdaConfigFi 14df0 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 leNames {.. 14e00 20 20 20 20 20 20 20 20 20 74 72 79 44 65 6c 65 tryDele 14e10 74 65 42 75 69 6c 64 46 69 6c 65 20 24 6d 64 61 teBuildFile$mda
14e20 43 6f 6e 66 69 67 46 69 6c 65 4e 61 6d 65 0d 0a  ConfigFileName..
14e30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }..
14e40 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....
14e50 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20          #..
14e60 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53 6b 69       # NOTE: Ski
14e70 70 20 74 72 79 69 6e 67 20 74 6f 20 63 6f 70 79  p trying to copy
14e80 20 65 78 74 65 72 6e 61 6c 20 66 69 6c 65 73 20   external files
14e90 69 66 20 77 65 20 61 72 65 20 73 6f 20 69 6e 73  if we are so ins
14ea0 74 72 75 63 74 65 64 2e 0d 0a 20 20 20 20 20 20  tructed...
14eb0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20      #..
14ec0 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73   if {![info exis
14ed0 74 73 20 3a 3a 6e 6f 28 63 6f 70 79 53 71 6c 69  ts ::no(copySqli
14ee0 74 65 45 78 74 65 72 6e 61 6c 46 69 6c 65 73 29  teExternalFiles)
14ef0 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..
14f00 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
14f10 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 6f        # NOTE: Co
14f20 70 79 20 74 68 65 20 4d 61 6e 61 67 65 64 20 44  py the Managed D
14f30 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61  ebugging Assista
14f40 6e 74 73 20 28 4d 44 41 29 20 63 6f 6e 66 69 67  nts (MDA) config
14f50 75 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20  uration..
14f60 20 20 20 20 20 23 20 20 20 20 20 20 20 66 69 6c       #       fil
14f70 65 20 66 6f 72 20 74 68 65 20 45 61 67 6c 65 20  e for the Eagle
14f80 73 68 65 6c 6c 20 74 6f 20 74 68 65 20 62 75 69  shell to the bui
14f90 6c 64 20 6f 75 74 70 75 74 20 64 69 72 65 63 74  ld output direct
14fa0 6f 72 79 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ory,..
14fb0 20 20 23 20 20 20 20 20 20 20 77 68 69 6c 65 20    #       while
14fc0 75 73 69 6e 67 20 65 61 63 68 20 6f 66 20 74 68  using each of th
14fd0 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65 20 76  e names of the v
14fe0 61 72 69 6f 75 73 20 6c 65 67 61 63 79 20 74 65  arious legacy te
14ff0 73 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  st..
15000 23 20 20 20 20 20 20 20 65 78 65 63 75 74 61 62  #       executab
15010 6c 65 73 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  les.  This will
15020 68 65 6c 70 20 74 6f 20 6d 61 6b 65 20 73 75 72  help to make sur
15030 65 20 74 68 61 74 20 61 6c 6c 20 74 68 65 0d 0a  e that all the..
15040 20 20 20 20 20 20 20 20 20 20 20 20 23 20 20 20              #
15050 20 20 20 20 6c 65 67 61 63 79 20 74 65 73 74 73      legacy tests
15060 20 72 75 6e 20 77 69 74 68 20 65 78 61 63 74 6c   run with exactl
15070 79 20 74 68 65 20 73 61 6d 65 20 73 65 74 20 6f  y the same set o
15080 66 20 4d 61 6e 61 67 65 64 0d 0a 20 20 20 20 20  f Managed..
15090 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 44         #       D
150a0 65 62 75 67 67 69 6e 67 20 41 73 73 69 73 74 61  ebugging Assista
150b0 6e 74 73 20 63 6f 6e 66 69 67 75 72 65 64 2e 0d  nts configured..
150c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 23 0d 0a  .            #..
150d0 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
150e0 61 63 68 20 6d 64 61 43 6f 6e 66 69 67 46 69 6c  ach mdaConfigFil
150f0 65 4e 61 6d 65 20 24 6d 64 61 43 6f 6e 66 69 67  eName $mdaConfig 15100 46 69 6c 65 4e 61 6d 65 73 20 7b 0d 0a 20 20 20 FileNames {.. 15110 20 20 20 20 20 20 20 20 20 20 20 74 72 79 43 6f tryCo 15120 70 79 42 69 6e 61 72 79 46 69 6c 65 20 45 61 67 pyBinaryFile Eag 15130 6c 65 53 68 65 6c 6c 2e 65 78 65 2e 6d 64 61 2e leShell.exe.mda. 15140 63 6f 6e 66 69 67 20 22 22 20 24 6d 64 61 43 6f config ""$mdaCo
15150 6e 66 69 67 46 69 6c 65 4e 61 6d 65 0d 0a 20 20  nfigFileName..
15160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..
15170 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15180 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63    }....        c
15190 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20  atch {..
151a0 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 151b0 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 151c0 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 151d0 20 20 20 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 "---- file 151e0 76 65 72 73 69 6f 6e 20 6f 66 20 5c 22 73 71 6c version of \"sql 151f0 69 74 65 33 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 ite3.dll\"... " 15200 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15210 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b [file version [ 15220 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d getBinaryFileNam 15230 65 20 73 71 6c 69 74 65 33 2e 64 6c 6c 5d 5d 20 e sqlite3.dll]] 15240 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a \n].. }.. 15250 0d 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 20 .. catch 15260 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 {.. tpu 15270 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e ts$::test_chann
15280 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c  el [appendArgs \
15290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
152a0 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69  "---- file versi
152b0 6f 6e 20 6f 66 20 5c 22 53 51 4c 69 74 65 2e 49  on of \"SQLite.I
152c0 6e 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20  nterop.dll\"...
152d0 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  " \..
152e0 20 20 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e     [file version
152f0 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e   [getBinaryFileN
15300 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65 72  ame SQLite.Inter
15310 6f 70 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20  op.dll]] \n]..
15320 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....
15330 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20     catch {..
15340 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t 15350 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 est_channel [app 15360 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 endArgs \.. 15370 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 "---- f 15380 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c ile version of \ 15390 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 153a0 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c ite.dll\"... " \ 153b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 .. 153c0 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 [file version [g 153d0 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 etBinaryFileName 153e0 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c System.Data.SQL 153f0 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 ite.dll]] \n].. 15400 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 15410 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 15420 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
15430 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
15440 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
15450 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
15460 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66 20  file version of
15470 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \"System.Data.SQ
15480 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 5c 22 2e  Lite.Linq.dll\".
15490 2e 2e 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20  .. " \..
154a0 20 20 20 20 20 20 5b 66 69 6c 65 20 76 65 72 73        [file vers
154b0 69 6f 6e 20 5b 67 65 74 42 69 6e 61 72 79 46 69  ion [getBinaryFi
154c0 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61  leName System.Da
154d0 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64  ta.SQLite.Linq.d
154e0 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20  ll]] \n]..
154f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
15500 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
15510 68 20 24 70 6c 61 74 66 6f 72 6d 5d 20 3e 20 30  h $platform] > 0 15520 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 } then {.. 15530 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 catch {.. 15540 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 tputs$
15550 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
15560 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
15570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d                "-
15580 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e  --- file version
15590 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72   of \"" $platfor 155a0 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 m \.. 155b0 20 20 20 20 20 22 2f 73 71 6c 69 74 65 33 2e 64 "/sqlite3.d 155c0 6c 6c 5c 22 2e 2e 2e 20 22 20 5b 66 69 6c 65 20 ll\"... " [file 155d0 76 65 72 73 69 6f 6e 20 5c 0d 0a 20 20 20 20 20 version \.. 155e0 20 20 20 20 20 20 20 20 20 20 20 5b 67 65 74 42 [getB 155f0 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 73 71 inaryFileName sq 15600 6c 69 74 65 33 2e 64 6c 6c 20 24 70 6c 61 74 66 lite3.dll$platf
15610 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20  orm]] \n]..
15620 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....
15630 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20      catch {..
15640 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24           tputs $15650 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b ::test_channel [ 15660 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 appendArgs \.. 15670 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d "- 15680 2d 2d 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e --- file version 15690 20 6f 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 of \""$platfor
156a0 6d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  m \..
156b0 20 20 20 20 20 22 2f 53 51 4c 69 74 65 2e 49 6e       "/SQLite.In
156c0 74 65 72 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  terop.dll\"... "
156d0 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5c   [file version \
156e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
156f0 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65    [getBinaryFile
15700 4e 61 6d 65 20 53 51 4c 69 74 65 2e 49 6e 74 65  Name SQLite.Inte
15710 72 6f 70 2e 64 6c 6c 20 24 70 6c 61 74 66 6f 72  rop.dll $platfor 15720 6d 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 m]] \n].. 15730 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 }.... 15740 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 catch {.. 15750 20 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a tputs$::
15760 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70  test_channel [ap
15770 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20  pendArgs \..
15780 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
15790 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
157a0 66 20 5c 22 22 20 24 70 6c 61 74 66 6f 72 6d 20  f \"" $platform 157b0 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 \.. 157c0 20 20 20 22 2f 53 79 73 74 65 6d 2e 44 61 74 61 "/System.Data 157d0 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e .SQLite.dll\"... 157e0 20 22 20 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e " [file version 157f0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 15800 20 20 20 20 5b 67 65 74 42 69 6e 61 72 79 46 69 [getBinaryFi 15810 6c 65 4e 61 6d 65 20 53 79 73 74 65 6d 2e 44 61 leName System.Da 15820 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 20 24 70 ta.SQLite.dll$p
15830 6c 61 74 66 6f 72 6d 5d 5d 20 5c 6e 5d 0d 0a 20  latform]] \n]..
15840 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..
15850 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....
15860 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20   set assemblies
15870 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41  [object invoke A
15880 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74  ppDomain.Current
15890 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62  Domain GetAssemb
158a0 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 20  lies]....
158b0 20 6f 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20   object foreach
158c0 61 73 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62  assembly $assemb 158d0 6c 69 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 lies {.. 158e0 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6d 61 if {[string ma 158f0 74 63 68 20 5c 7b 53 79 73 74 65 6d 2e 44 61 74 tch \{System.Dat 15900 61 2e 53 51 4c 69 74 65 2a 20 24 61 73 73 65 6d a.SQLite*$assem
15910 62 6c 79 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20  bly]} then {..
15920 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20            tputs
15930 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 15940 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 [appendArgs \.. 15950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 " 15960 2d 2d 2d 2d 20 66 6f 75 6e 64 20 61 73 73 65 6d ---- found assem 15970 62 6c 79 3a 20 22 20 24 61 73 73 65 6d 62 6c 79 bly: "$assembly
15980 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 20 20 20 20   \n]..
15990 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  }..        }....
159a0 20 20 20 20 20 20 20 20 63 61 74 63 68 20 7b 0d          catch {.
159b0 0a 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73  .          tputs
159c0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel 159d0 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 \.. 159e0 20 20 22 2d 2d 2d 2d 20 64 65 66 69 6e 65 20 63 "---- define c 159f0 6f 6e 73 74 61 6e 74 73 20 66 6f 72 20 5c 22 53 onstants for \"S 15a00 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 ystem.Data.SQLit 15a10 65 5c 22 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 e\"... ".... 15a20 20 20 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 if {[catch 15a30 20 7b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 {object invoke 15a40 2d 66 6c 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 -flags +NonPubli 15a50 63 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 c \.. 15a60 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e 44 61 System.Da 15a70 74 61 2e 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 ta.SQLite.SQLite 15a80 33 20 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 3 DefineConstant 15a90 73 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 s} \.. 15aa0 20 20 20 20 20 20 20 20 64 65 66 69 6e 65 43 6f defineCo 15ab0 6e 73 74 61 6e 74 73 5d 20 3d 3d 20 30 7d 20 74 nstants] == 0} t 15ac0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 hen {.. 15ad0 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 tputs$::test
15ae0 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64  _channel [append
15af0 41 72 67 73 20 5b 66 6f 72 6d 61 74 4c 69 73 74  Args [formatList
15b00 20 5b 6c 73 6f 72 74 20 5c 0d 0a 20 20 20 20 20   [lsort \..
15b10 20 20 20 20 20 20 20 20 20 20 20 24 64 65 66 69             $defi 15b20 6e 65 43 6f 6e 73 74 61 6e 74 73 5d 20 3c 6e 6f neConstants] <no 15b30 6e 65 3e 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 ne>] \n].. 15b40 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 } else {.. 15b50 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 20 tputs 15b60 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20$::test_channel
15b70 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20 20 20  unknown\n..
15b80 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..
15b90 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 63 61 74  }....        cat
15ba0 63 68 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  ch {..
15bb0 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15bc0 61 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 annel \.. 15bd0 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6f 75 "---- sou 15be0 72 63 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 5c rce version of \ 15bf0 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c "System.Data.SQL 15c00 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 0d 0a ite.dll\"... ".. 15c10 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 7b .. if { 15c20 5b 63 61 74 63 68 20 7b 6f 62 6a 65 63 74 20 69 [catch {object i 15c30 6e 76 6f 6b 65 20 2d 66 6c 61 67 73 20 2b 4e 6f nvoke -flags +No 15c40 6e 50 75 62 6c 69 63 20 5c 0d 0a 20 20 20 20 20 nPublic \.. 15c50 20 20 20 20 20 20 20 20 20 20 20 20 20 53 79 73 Sys 15c60 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e tem.Data.SQLite. 15c70 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e SQLiteConnection 15c80 20 50 72 6f 76 69 64 65 72 56 65 72 73 69 6f 6e ProviderVersion 15c90 7d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 } \.. 15ca0 20 20 20 20 20 20 20 76 65 72 73 69 6f 6e 5d 20 version] 15cb0 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 == 0} then {.. 15cc0 20 20 20 20 20 20 20 20 20 20 69 66 20 7b 5b 73 if {[s 15cd0 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 76 65 tring length$ve
15ce0 72 73 69 6f 6e 5d 20 3d 3d 20 30 7d 20 74 68 65  rsion] == 0} the
15cf0 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n {..
15d00 20 20 20 73 65 74 20 76 65 72 73 69 6f 6e 20 6e     set version n
15d10 75 6c 6c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ull..
15d20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..
15d30 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15d40 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 annel [appendArg 15d50 73 20 24 76 65 72 73 69 6f 6e 20 5c 6e 5d 0d 0a s$version \n]..
15d60 20 20 20 20 20 20 20 20 20 20 7d 20 65 6c 73 65            } else
15d70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..
15d80 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68  tputs $::test_ch 15d90 61 6e 6e 65 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d annel unknown\n. 15da0 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 . }.. 15db0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 }.... 15dc0 20 20 20 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 catch {.. 15dd0 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 tputs$::t
15de0 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5c 0d 0a 20  est_channel \..
15df0 20 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d               "--
15e00 2d 2d 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f  -- source checko
15e10 75 74 20 6f 66 20 5c 22 53 79 73 74 65 6d 2e 44  ut of \"System.D
15e20 61 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 5c 22  ata.SQLite.dll\"
15e30 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20 20 20 20 20  ... "....
15e40 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20 7b 6f     if {[catch {o
15e50 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 2d 66 6c  bject invoke -fl
15e60 61 67 73 20 2b 4e 6f 6e 50 75 62 6c 69 63 20 5c  ags +NonPublic \
15e70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..
15e80 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
15e90 53 51 4c 69 74 65 2e 53 51 4c 69 74 65 43 6f 6e  SQLite.SQLiteCon
15ea0 6e 65 63 74 69 6f 6e 20 50 72 6f 76 69 64 65 72  nection Provider
15eb0 53 6f 75 72 63 65 49 64 7d 20 5c 0d 0a 20 20 20  SourceId} \..
15ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
15ed0 6f 75 72 63 65 49 64 5d 20 3d 3d 20 30 7d 20 74  ourceId] == 0} t
15ee0 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20 20 20  hen {..
15ef0 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c     if {[string l
15f00 65 6e 67 74 68 20 24 73 6f 75 72 63 65 49 64 5d  ength $sourceId] 15f10 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 == 0} then {.. 15f20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 65 74 set 15f30 20 73 6f 75 72 63 65 49 64 20 6e 75 6c 6c 0d 0a sourceId null.. 15f40 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 }.. 15f50 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 73 tputs 15f60 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
15f70 20 5b 61 70 70 65 6e 64 41 72 67 73 20 24 73 6f   [appendArgs $so 15f80 75 72 63 65 49 64 20 5c 6e 5d 0d 0a 20 20 20 20 urceId \n].. 15f90 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d 0a } else {.. 15fa0 20 20 20 20 20 20 20 20 20 20 20 20 74 70 75 74 tput 15fb0 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
15fc0 6c 20 75 6e 6b 6e 6f 77 6e 5c 6e 0d 0a 20 20 20  l unknown\n..
15fd0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..
15fe0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23    }....        #
15ff0 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45  ..        # NOTE
16000 3a 20 43 68 65 63 6b 20 74 68 65 20 61 76 61 69  : Check the avai
16010 6c 61 62 6c 65 20 62 75 69 6c 64 73 20 28 61 6e  lable builds (an
16020 64 20 22 72 65 6c 65 61 73 65 73 22 29 20 6f 66  d "releases") of
16030 20 53 51 4c 69 74 65 20 61 6e 64 0d 0a 20 20 20   SQLite and..
16040 20 20 20 20 20 23 20 20 20 20 20 20 20 53 79 73       #       Sys
16050 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
16060 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
16070 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c       checkForSQL
16080 69 74 65 42 75 69 6c 64 73 20 24 3a 3a 74 65 73  iteBuilds $::tes 16090 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20 20 20 20 20 t_channel.. 160a0 20 20 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 checkForSQLit 160b0 65 52 65 6c 65 61 73 65 73 20 24 3a 3a 74 65 73 eReleases$::tes
160c0 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20  t_channel....
160d0 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
160e0 23 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 77 65 20  # NOTE: Now, we
160f0 6e 65 65 64 20 74 6f 20 6b 6e 6f 77 20 69 66 20  need to know if
16100 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core
16110 6c 69 62 72 61 72 79 20 69 73 20 61 76 61 69 6c  library is avail
16120 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20  able..        #
16130 20 20 20 20 20 20 28 69 2e 65 2e 20 62 65 63 61        (i.e. beca
16140 75 73 65 20 74 68 65 20 6d 61 6e 61 67 65 64 2d  use the managed-
16150 6f 6e 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  only System.Data
16160 2e 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79  .SQLite assembly
16170 20 63 61 6e 0d 0a 20 20 20 20 20 20 20 20 23 20   can..        #
16180 20 20 20 20 20 20 6c 6f 61 64 20 77 69 74 68 6f        load witho
16190 75 74 20 69 74 3b 20 68 6f 77 65 76 65 72 2c 20  ut it; however,
161a0 69 74 20 63 61 6e 6e 6f 74 20 64 6f 20 61 6e 79  it cannot do any
161b0 74 68 69 6e 67 20 75 73 65 66 75 6c 20 77 69 74  thing useful wit
161c0 68 6f 75 74 0d 0a 20 20 20 20 20 20 20 20 23 20  hout..        #
161d0 20 20 20 20 20 20 69 74 29 2e 20 20 49 66 20 77        it).  If w
161e0 65 20 61 72 65 20 75 73 69 6e 67 20 74 68 65 20  e are using the
161f0 6d 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d  mixed-mode assem
16200 62 6c 79 20 61 6e 64 20 77 65 20 61 6c 72 65 61  bly and we alrea
16210 64 79 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20  dy..        #
16220 20 20 20 20 66 6f 75 6e 64 20 69 74 20 28 61 62      found it (ab
16230 6f 76 65 29 2c 20 74 68 69 73 20 73 68 6f 75 6c  ove), this shoul
16240 64 20 61 6c 77 61 79 73 20 73 75 63 63 65 65 64  d always succeed
16250 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20  ...        #..
16260 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51        checkForSQ
16270 4c 69 74 65 4c 69 62 72 61 72 79 20 24 3a 3a 74  LiteLibrary $::t 16280 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 est_channel.... 16290 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 162a0 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 162b0 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e if the SQLite in 162c0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 terop assembly i 162d0 73 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 s available... 162e0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 162f0 20 63 68 65 63 6b 46 6f 72 53 51 4c 69 74 65 49 checkForSQLiteI 16300 6e 74 65 72 6f 70 20 24 3a 3a 74 65 73 74 5f 63 nterop$::test_c
16310 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 20  hannel....
16320 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e    #..        # N
16330 4f 54 45 3a 20 43 68 65 63 6b 20 74 68 65 20 53  OTE: Check the S
16340 51 4c 69 74 65 20 64 61 74 61 62 61 73 65 20 61  QLite database a
16350 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
16360 65 63 74 6f 72 69 65 73 2e 0d 0a 20 20 20 20 20  ectories...
16370 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68     #..        ch
16380 65 63 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65  eckForSQLiteDire
16390 63 74 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f  ctories $::test_ 163a0 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 20 20 20 channel.... 163b0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 #.. # 163c0 4e 4f 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f NOTE: Attempt to 163d0 20 64 65 74 65 72 6d 69 6e 65 20 69 66 20 76 61 determine if va 163e0 72 69 6f 75 73 20 63 6f 6d 70 69 6c 65 2d 74 69 rious compile-ti 163f0 6d 65 20 6f 70 74 69 6f 6e 73 20 6e 65 65 64 65 me options neede 16400 64 20 66 6f 72 0d 0a 20 20 20 20 20 20 20 20 23 d for.. # 16410 20 20 20 20 20 20 20 74 65 73 74 20 63 6f 6e 73 test cons 16420 74 72 61 69 6e 74 73 20 77 65 72 65 20 65 6e 61 traints were ena 16430 62 6c 65 64 20 66 6f 72 20 74 68 65 20 6d 61 6e bled for the man 16440 61 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 20 20 aged assembly. 16450 54 68 65 72 65 0d 0a 20 20 20 20 20 20 20 20 23 There.. # 16460 20 20 20 20 20 20 20 61 72 65 20 73 6f 6d 65 20 are some 16470 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 compile-time opt 16480 69 6f 6e 73 20 74 68 61 74 20 6d 75 73 74 20 61 ions that must a 16490 6c 73 6f 20 68 61 76 65 20 62 65 65 6e 20 65 6e lso have been en 164a0 61 62 6c 65 64 0d 0a 20 20 20 20 20 20 20 20 23 abled.. # 164b0 20 20 20 20 20 20 20 66 6f 72 20 74 68 65 20 69 for the i 164c0 6e 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 nterop assembly 164d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 62 65 20 65 in order to be e 164e0 66 66 65 63 74 69 76 65 2e 20 20 46 6f 72 20 74 ffective. For t 164f0 68 6f 73 65 0d 0a 20 20 20 20 20 20 20 20 23 20 hose.. # 16500 20 20 20 20 20 20 6f 70 74 69 6f 6e 73 2c 20 69 options, i 16510 74 20 77 69 6c 6c 20 62 65 20 61 73 73 75 6d 65 t will be assume 16520 64 20 74 68 61 74 20 69 74 20 77 61 73 20 65 6e d that it was en 16530 61 62 6c 65 64 20 66 6f 72 20 74 68 65 20 69 6e abled for the in 16540 74 65 72 6f 70 0d 0a 20 20 20 20 20 20 20 20 23 terop.. # 16550 20 20 20 20 20 20 20 61 73 73 65 6d 62 6c 79 20 assembly 16560 69 66 20 69 74 20 77 61 73 20 65 6e 61 62 6c 65 if it was enable 16570 64 20 66 6f 72 20 74 68 65 20 6d 61 6e 61 67 65 d for the manage 16580 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 d assembly... 16590 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 #.. 165a0 66 6f 72 65 61 63 68 20 64 65 66 69 6e 65 43 6f foreach defineCo 165b0 6e 73 74 61 6e 74 20 5b 6c 69 73 74 20 5c 0d 0a nstant [list \.. 165c0 20 20 20 20 20 20 20 20 20 20 20 20 43 48 45 43 CHEC 165d0 4b 5f 53 54 41 54 45 20 43 4f 55 4e 54 5f 48 41 K_STATE COUNT_HA 165e0 4e 44 4c 45 20 44 45 42 55 47 20 49 4e 54 45 52 NDLE DEBUG INTER 165f0 4f 50 5f 43 4f 44 45 43 20 49 4e 54 45 52 4f 50 OP_CODEC INTEROP 16600 5f 44 45 42 55 47 20 5c 0d 0a 20 20 20 20 20 20 _DEBUG \.. 16610 20 20 20 20 20 20 49 4e 54 45 52 4f 50 5f 45 58 INTEROP_EX 16620 54 45 4e 53 49 4f 4e 5f 46 55 4e 43 54 49 4f 4e TENSION_FUNCTION 16630 53 20 49 4e 54 45 52 4f 50 5f 4c 45 47 41 43 59 S INTEROP_LEGACY 16640 5f 43 4c 4f 53 45 20 49 4e 54 45 52 4f 50 5f 4c _CLOSE INTEROP_L 16650 4f 47 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 OG \.. 16660 20 20 49 4e 54 45 52 4f 50 5f 54 45 53 54 5f 45 INTEROP_TEST_E 16670 58 54 45 4e 53 49 4f 4e 20 49 4e 54 45 52 4f 50 XTENSION INTEROP 16680 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 20 4e _VIRTUAL_TABLE N 16690 45 54 5f 32 30 20 4e 45 54 5f 33 35 20 5c 0d 0a ET_20 NET_35 \.. 166a0 20 20 20 20 20 20 20 20 20 20 20 20 4e 45 54 5f NET_ 166b0 34 30 20 4e 45 54 5f 34 35 20 4e 45 54 5f 34 35 40 NET_45 NET_45 166c0 31 20 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 1 NET_COMPACT_20 166d0 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 PLATFORM_COMPAC 166e0 54 46 52 41 4d 45 57 4f 52 4b 20 5c 0d 0a 20 20 TFRAMEWORK \.. 166f0 20 20 20 20 20 20 20 20 20 20 50 52 45 4c 4f 41 PRELOA 16700 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 D_NATIVE_LIBRARY 16710 20 52 45 54 41 52 47 45 54 41 42 4c 45 20 53 51 RETARGETABLE SQ 16720 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 5c 0d LITE_STANDARD \. 16730 0a 20 20 20 20 20 20 20 20 20 20 20 20 54 48 52 . THR 16740 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 20 54 OW_ON_DISPOSED T 16750 52 41 43 45 20 54 52 41 43 45 5f 43 4f 4e 4e 45 RACE TRACE_CONNE 16760 43 54 49 4f 4e 20 54 52 41 43 45 5f 48 41 4e 44 CTION TRACE_HAND 16770 4c 45 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 LE \.. 16780 20 20 54 52 41 43 45 5f 50 52 45 4c 4f 41 44 20 TRACE_PRELOAD 16790 54 52 41 43 45 5f 53 48 41 52 45 44 20 54 52 41 TRACE_SHARED TRA 167a0 43 45 5f 53 54 41 54 45 4d 45 4e 54 20 54 52 41 CE_STATEMENT TRA 167b0 43 45 5f 57 41 52 4e 49 4e 47 20 5c 0d 0a 20 20 CE_WARNING \.. 167c0 20 20 20 20 20 20 20 20 20 20 54 52 41 43 4b 5f TRACK_ 167d0 4d 45 4d 4f 52 59 5f 42 59 54 45 53 20 55 53 45 MEMORY_BYTES USE 167e0 5f 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 55 53 45 _INTEROP_DLL USE 167f0 5f 50 52 45 50 41 52 45 5f 56 32 20 57 49 4e 44 _PREPARE_V2 WIND 16800 4f 57 53 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 OWS] {.. 16810 20 20 23 0d 0a 20 20 20 20 20 20 20 20 20 20 23 #.. # 16820 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 69 66 20 NOTE: Check if 16830 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 the compile-time 16840 20 6f 70 74 69 6f 6e 20 69 73 20 6c 69 73 74 65 option is liste 16850 64 20 69 6e 20 74 68 65 20 6c 69 73 74 20 6f 66 d in the list of 16860 0d 0a 20 20 20 20 20 20 20 20 20 20 23 20 20 20 .. # 16870 20 20 20 20 22 64 65 66 69 6e 65 20 63 6f 6e 73 "define cons 16880 74 61 6e 74 73 22 20 6b 65 70 74 20 74 72 61 63 tants" kept trac 16890 6b 20 6f 66 20 62 79 20 74 68 65 20 6d 61 6e 61 k of by the mana 168a0 67 65 64 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 ged assembly... 168b0 20 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 #.. 168c0 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 53 51 checkForSQ 168d0 4c 69 74 65 44 65 66 69 6e 65 43 6f 6e 73 74 61 LiteDefineConsta 168e0 6e 74 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e nt$::test_chann
168f0 65 6c 20 24 64 65 66 69 6e 65 43 6f 6e 73 74 61  el $defineConsta 16900 6e 74 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d nt.. }... 16910 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 16920 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 # NOTE: Chec 16930 6b 20 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 k the current bu 16940 69 6c 64 20 79 65 61 72 2e 20 20 42 61 73 69 63 ild year. Basic 16950 61 6c 6c 79 2c 20 74 68 69 73 20 69 6e 64 69 63 ally, this indic 16960 61 74 65 73 0d 0a 20 20 20 20 20 20 20 20 23 20 ates.. # 16970 20 20 20 20 20 20 77 68 69 63 68 20 76 65 72 73 which vers 16980 69 6f 6e 20 6f 66 20 4d 53 42 75 69 6c 64 20 61 ion of MSBuild a 16990 6e 64 2f 6f 72 20 56 69 73 75 61 6c 20 53 74 75 nd/or Visual Stu 169a0 64 69 6f 20 77 61 73 20 75 73 65 64 20 74 6f 0d dio was used to. 169b0 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 . # 169c0 20 63 6f 6d 70 69 6c 65 20 74 68 65 20 61 73 73 compile the ass 169d0 65 6d 62 6c 79 20 62 69 6e 61 72 69 65 73 20 75 embly binaries u 169e0 6e 64 65 72 20 74 65 73 74 2e 0d 0a 20 20 20 20 nder test... 169f0 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 74 #.. t 16a00 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 puts$::test_cha
16a10 6e 6e 65 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20  nnel \..
16a20 20 20 20 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69      "---- checki
16a30 6e 67 20 66 6f 72 20 53 79 73 74 65 6d 2e 44 61  ng for System.Da
16a40 74 61 2e 53 51 4c 69 74 65 20 62 75 69 6c 64 20  ta.SQLite build
16a50 79 65 61 72 2e 2e 2e 20 22 0d 0a 0d 0a 20 20 20  year... "....
16a60 20 20 20 20 20 73 65 74 20 79 65 61 72 20 5b 67       set year [g
16a70 65 74 42 75 69 6c 64 59 65 61 72 5d 0d 0a 20 20  etBuildYear]..
16a80 20 20 20 20 20 20 61 64 64 43 6f 6e 73 74 72 61        addConstra
16a90 69 6e 74 20 5b 61 70 70 65 6e 64 41 72 67 73 20  int [appendArgs
16aa0 62 75 69 6c 64 59 65 61 72 2e 20 24 79 65 61 72  buildYear. $year 16ab0 5d 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 ].. tputs 16ac0 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
16ad0 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 22 20   [appendArgs \"
16ae0 24 79 65 61 72 20 5c 22 5c 6e 5d 0d 0a 0d 0a 20  $year \"\n].... 16af0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 16b00 20 20 23 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 # NOTE: Check 16b10 74 68 65 20 63 75 72 72 65 6e 74 20 62 75 69 6c the current buil 16b20 64 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2e d configuration. 16b30 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 6e 6f This should no 16b40 72 6d 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 rmally.. 16b50 23 20 20 20 20 20 20 20 62 65 20 65 69 74 68 65 # be eithe 16b60 72 20 22 44 65 62 75 67 22 20 6f 72 20 22 52 65 r "Debug" or "Re 16b70 6c 65 61 73 65 22 2e 0d 0a 20 20 20 20 20 20 20 lease"... 16b80 20 23 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 #.. tput 16b90 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 s$::test_channe
16ba0 6c 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l \..
16bb0 20 22 2d 2d 2d 2d 20 63 68 65 63 6b 69 6e 67 20   "---- checking
16bc0 66 6f 72 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  for System.Data.
16bd0 53 51 4c 69 74 65 20 62 75 69 6c 64 20 63 6f 6e  SQLite build con
16be0 66 69 67 75 72 61 74 69 6f 6e 2e 2e 2e 20 22 0d  figuration... ".
16bf0 0a 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20 63  ...        set c
16c00 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 5b 67 65  onfiguration [ge
16c10 74 42 75 69 6c 64 43 6f 6e 66 69 67 75 72 61 74  tBuildConfigurat
16c20 69 6f 6e 5d 0d 0a 20 20 20 20 20 20 20 20 61 64  ion]..        ad
16c30 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 61 70 70  dConstraint [app
16c40 65 6e 64 41 72 67 73 20 62 75 69 6c 64 43 6f 6e  endArgs buildCon
16c50 66 69 67 75 72 61 74 69 6f 6e 2e 20 24 63 6f 6e  figuration. $con 16c60 66 69 67 75 72 61 74 69 6f 6e 5d 0d 0a 20 20 20 figuration].. 16c70 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 tputs$::te
16c80 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65  st_channel [appe
16c90 6e 64 41 72 67 73 20 5c 22 20 24 63 6f 6e 66 69  ndArgs \" $confi 16ca0 67 75 72 61 74 69 6f 6e 20 5c 22 5c 6e 5d 0d 0a guration \"\n].. 16cb0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16cc0 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 72 79 # NOTE: Try 16cd0 20 74 6f 20 73 65 74 75 70 20 61 6e 20 69 6e 74 to setup an int 16ce0 65 72 72 75 70 74 20 63 61 6c 6c 62 61 63 6b 20 errupt callback 16cf0 75 73 69 6e 67 20 74 68 65 20 73 63 72 69 70 74 using the script 16d00 20 64 65 62 75 67 67 65 72 0d 0a 20 20 20 20 20 debugger.. 16d10 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74 20 # that 16d20 77 69 6c 6c 20 63 61 6e 63 65 6c 20 61 6c 6c 20 will cancel all 16d30 53 51 4c 20 71 75 65 72 69 65 73 20 69 6e 20 70 SQL queries in p 16d40 72 6f 67 72 65 73 73 20 66 6f 72 20 61 6c 6c 20 rogress for all 16d50 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 database.. 16d60 20 20 23 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 # connec 16d70 74 69 6f 6e 73 20 6b 6e 6f 77 6e 20 74 6f 20 74 tions known to t 16d80 68 69 73 20 69 6e 74 65 72 70 72 65 74 65 72 2e his interpreter. 16d90 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 16da0 20 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 if {![info 16db0 65 78 69 73 74 73 20 3a 3a 6e 6f 28 73 71 6c 69 exists ::no(sqli 16dc0 74 65 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 teInterruptCallb 16dd0 61 63 6b 29 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 ack)]} then {.. 16de0 20 20 20 20 20 20 20 20 20 73 65 74 75 70 44 62 setupDb 16df0 49 6e 74 65 72 72 75 70 74 43 61 6c 6c 62 61 63 InterruptCallbac 16e00 6b 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 k$::test_channe
16e10 6c 20 24 3a 3a 74 65 73 74 5f 6c 6f 67 0d 0a 20  l $::test_log.. 16e20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 }.... 16e30 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 23 #.. # 16e40 20 4e 4f 54 45 3a 20 43 68 65 63 6b 20 66 6f 72 NOTE: Check for 16e50 20 74 68 65 20 6e 61 74 69 76 65 20 72 75 6e 74 the native runt 16e60 69 6d 65 20 6f 70 74 69 6f 6e 2c 20 77 68 69 63 ime option, whic 16e70 68 20 77 6f 75 6c 64 20 6d 65 61 6e 20 77 65 20 h would mean we 16e80 61 72 65 0d 0a 20 20 20 20 20 20 20 20 23 20 20 are.. # 16e90 20 20 20 20 20 75 73 69 6e 67 20 74 68 65 20 6d using the m 16ea0 69 78 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 ixed-mode assemb 16eb0 6c 79 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ly... #.. 16ec0 20 20 20 20 20 20 20 20 63 68 65 63 6b 46 6f 72 checkFor 16ed0 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 24 3a RuntimeOption$:
16ee0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 6e 61  :test_channel na
16ef0 74 69 76 65 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tive....
16f00 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54  #..        # NOT
16f10 45 3a 20 43 68 65 63 6b 20 69 66 20 74 68 65 20  E: Check if the
16f20 74 65 73 74 20 73 75 69 74 65 20 73 68 6f 75 6c  test suite shoul
16f30 64 20 63 6f 75 6e 74 20 74 68 65 20 6e 75 6d 62  d count the numb
16f40 65 72 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  er of connection
16f50 73 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  s..        #
16f60 20 20 20 22 6f 70 65 6e 65 64 22 20 61 6e 64 20     "opened" and
16f70 22 63 6c 6f 73 65 64 22 20 66 72 6f 6d 20 74 68  "closed" from th
16f80 65 20 70 6f 6f 6c 20 77 68 65 6e 20 64 65 74 65  e pool when dete
16f90 72 6d 69 6e 69 6e 67 20 69 66 20 61 20 74 65 73  rmining if a tes
16fa0 74 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20  t..        #
16fb0 20 20 20 70 61 73 73 65 64 2e 20 20 44 69 73 61     passed.  Disa
16fc0 62 6c 69 6e 67 20 74 68 69 73 20 62 65 68 61 76  bling this behav
16fd0 69 6f 72 20 69 73 20 73 6f 6d 65 74 69 6d 65 73  ior is sometimes
16fe0 20 6e 65 63 65 73 73 61 72 79 20 28 65 2e 67 2e   necessary (e.g.
16ff0 0d 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20  ..        #
17000 20 20 64 75 72 69 6e 67 20 74 68 65 20 72 65 6c    during the rel
17010 65 61 73 65 20 74 65 73 74 69 6e 67 20 70 72 6f  ease testing pro
17020 63 65 73 73 29 20 62 65 63 61 75 73 65 20 74 68  cess) because th
17030 65 72 65 20 61 72 65 20 73 65 76 65 72 61 6c 0d  ere are several.
17040 0a 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20  .        #
17050 20 74 65 73 74 73 20 74 68 61 74 20 72 65 6c 79   tests that rely
17060 20 6f 6e 20 74 68 65 20 22 6f 70 65 6e 65 64 20   on the "opened
17070 66 72 6f 6d 20 70 6f 6f 6c 22 20 63 6f 75 6e 74  from pool" count
17080 20 62 65 69 6e 67 20 67 72 65 61 74 65 72 0d 0a   being greater..
17090 20 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20          #
170a0 74 68 61 6e 20 7a 65 72 6f 2e 20 20 54 68 65 73  than zero.  Thes
170b0 65 20 74 65 73 74 73 20 6d 61 79 20 66 61 69 6c  e tests may fail
170c0 20 64 75 65 20 74 6f 20 74 68 65 20 6e 6f 6e 2d   due to the non-
170d0 64 65 74 65 72 6d 69 6e 69 73 74 69 63 0d 0a 20  deterministic..
170e0 20 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62         #       b
170f0 65 68 61 76 69 6f 72 20 6f 66 20 74 68 65 20 43  ehavior of the C
17100 4c 52 20 47 43 2c 20 65 76 65 6e 20 77 68 65 6e  LR GC, even when
17110 20 74 68 65 72 65 20 69 73 20 6e 6f 20 62 75 67   there is no bug
17120 20 69 6e 20 74 68 65 20 63 6f 64 65 0d 0a 20 20   in the code..
17130 20 20 20 20 20 20 23 20 20 20 20 20 20 20 62 65        #       be
17140 69 6e 67 20 74 65 73 74 65 64 2e 0d 0a 20 20 20  ing tested...
17150 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20       #..
17160 63 68 65 63 6b 46 6f 72 52 75 6e 74 69 6d 65 4f  checkForRuntimeO
17170 70 74 69 6f 6e 20 24 3a 3a 74 65 73 74 5f 63 68  ption $::test_ch 17180 61 6e 6e 65 6c 20 6e 6f 50 6f 6f 6c 43 6f 75 6e annel noPoolCoun 17190 74 73 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d ts.... #. 171a0 0a 20 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a . # NOTE: 171b0 20 52 65 70 6f 72 74 20 74 68 65 20 72 65 73 6f Report the reso 171c0 75 72 63 65 20 75 73 61 67 65 20 70 72 69 6f 72 urce usage prior 171d0 20 74 6f 20 72 75 6e 6e 69 6e 67 20 61 6e 79 20 to running any 171e0 74 65 73 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 tests... 171f0 23 0d 0a 20 20 20 20 20 20 20 20 72 65 70 6f 72 #.. repor 17200 74 53 51 4c 69 74 65 52 65 73 6f 75 72 63 65 73 tSQLiteResources 17210 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c$::test_channel
17220 0d 0a 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20  ....        #..
17230 20 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 53         # NOTE: S
17240 68 6f 77 20 74 68 65 20 61 63 74 69 76 65 20 74  how the active t
17250 65 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 73 2e  est constraints.
17260 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
17270 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65       tputs $::te 17280 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 st_channel [appe 17290 6e 64 41 72 67 73 20 22 2d 2d 2d 2d 20 63 6f 6e ndArgs "---- con 172a0 73 74 72 61 69 6e 74 73 3a 20 22 20 5c 0d 0a 20 straints: " \.. 172b0 20 20 20 20 20 20 20 20 20 20 20 5b 66 6f 72 6d [form 172c0 61 74 4c 69 73 74 20 5b 6c 73 6f 72 74 20 5b 67 atList [lsort [g 172d0 65 74 43 6f 6e 73 74 72 61 69 6e 74 73 5d 5d 20 etConstraints]] 172e0 3c 6e 6f 6e 65 3e 5d 20 5c 6e 5d 0d 0a 0d 0a 20 <none>] \n].... 172f0 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 #.. 17300 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20 74 # NOTE: Save t 17310 68 65 20 74 65 73 74 20 63 6f 6e 73 74 72 61 69 he test constrai 17320 6e 74 73 20 66 6f 72 20 75 73 65 20 62 79 20 74 nts for use by t 17330 68 72 65 61 64 73 20 63 72 65 61 74 65 64 20 69 hreads created i 17340 6e 20 74 68 69 73 0d 0a 20 20 20 20 20 20 20 20 n this.. 17350 23 20 20 20 20 20 20 20 61 70 70 6c 69 63 61 74 # applicat 17360 69 6f 6e 20 64 6f 6d 61 69 6e 2e 20 20 54 68 69 ion domain. Thi 17370 73 20 69 73 20 6e 65 63 65 73 73 61 72 79 20 62 s is necessary b 17380 65 63 61 75 73 65 20 61 6c 6c 20 74 68 65 20 45 ecause all the E 17390 61 67 6c 65 0d 0a 20 20 20 20 20 20 20 20 23 20 agle.. # 173a0 20 20 20 20 20 20 22 74 65 73 74 20 63 6f 6e 74 "test cont 173b0 65 78 74 22 20 69 6e 66 6f 72 6d 61 74 69 6f 6e ext" information 173c0 20 69 73 20 70 65 72 2d 74 68 72 65 61 64 2e 0d is per-thread.. 173d0 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 . #.. 173e0 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f 20 65 if {![info e 173f0 78 69 73 74 73 20 3a 3a 74 65 73 74 5f 63 6f 6e xists ::test_con 17400 73 74 72 61 69 6e 74 73 5d 7d 20 74 68 65 6e 20 straints]} then 17410 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 {.. set 17420 20 3a 3a 74 65 73 74 5f 63 6f 6e 73 74 72 61 69 ::test_constrai 17430 6e 74 73 20 24 3a 3a 65 61 67 6c 65 5f 74 65 73 nts$::eagle_tes
17440 74 73 28 63 6f 6e 73 74 72 61 69 6e 74 73 29 0d  ts(constraints).
17450 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....
17460 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
17470 20 23 20 4e 4f 54 45 3a 20 4c 6f 61 64 20 74 68   # NOTE: Load th
17480 65 20 22 61 66 74 65 72 2d 63 6f 6e 73 74 72 61  e "after-constra
17490 69 6e 74 73 22 20 63 75 73 74 6f 6d 20 70 65 72  ints" custom per
174a0 2d 75 73 65 72 20 61 6e 64 2f 6f 72 20 70 65 72  -user and/or per
174b0 2d 68 6f 73 74 0d 0a 20 20 20 20 20 20 20 20 23  -host..        #
174c0 20 20 20 20 20 20 20 74 65 73 74 20 73 65 74 74         test sett
174d0 69 6e 67 73 20 6e 6f 77 2e 0d 0a 20 20 20 20 20  ings now...
174e0 20 20 20 23 0d 0a 20 20 20 20 20 20 20 20 75 70     #..        up
174f0 6c 65 76 65 6c 20 31 20 5b 6c 69 73 74 20 6c 6f  level 1 [list lo
17500 61 64 53 51 4c 69 74 65 54 65 73 74 53 65 74 74  adSQLiteTestSett
17510 69 6e 67 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  ings $::test_cha 17520 6e 6e 65 6c 20 2e 61 66 74 65 72 5d 0d 0a 0d 0a nnel .after].... 17530 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 #.. 17540 20 20 20 23 20 4e 4f 54 45 3a 20 53 68 6f 77 20 # NOTE: Show 17550 77 68 65 6e 20 6f 75 72 20 74 65 73 74 73 20 61 when our tests a 17560 63 74 75 61 6c 6c 79 20 62 65 67 61 6e 20 28 6e ctually began (n 17570 6f 77 29 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d ow)... #. 17580 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20 24 . tputs$
17590 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b  ::test_channel [
175a0 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20  appendArgs \..
175b0 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "----
175c0 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
175d0 74 65 20 74 65 73 74 73 20 62 65 67 61 6e 20 61  te tests began a
175e0 74 20 22 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  t " \..
175f0 20 20 20 5b 63 6c 6f 63 6b 20 66 6f 72 6d 61 74     [clock format
17600 20 5b 63 6c 6f 63 6b 20 73 65 63 6f 6e 64 73 5d   [clock seconds]
17610 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d 0a  ] \n]..      }..
17620 20 20 20 20 7d 0d 0a 0c 0d 0a 20 20 20 20 70 72      }.....    pr
17630 6f 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74  oc runSQLiteTest
17640 45 70 69 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20  Epilogue {} {..
17650 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23 20       #..      #
17660 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e 69  NOTE: Skip runni
17670 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65 70  ng our custom ep
17680 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d 61  ilogue if the ma
17690 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e 0d  in one has been.
176a0 0a 20 20 20 20 20 20 23 20 20 20 20 20 20 20 73  .      #       s
176b0 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 20 20 23  kipped...      #
176c0 0d 0a 20 20 20 20 20 20 69 66 20 7b 21 5b 69 6e  ..      if {![in
176d0 66 6f 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65  fo exists ::no(e
176e0 70 69 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d  pilogue.eagle)]}
176f0 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 20   then {..
17700 20 23 0d 0a 20 20 20 20 20 20 20 20 23 20 4e 4f   #..        # NO
17710 54 45 3a 20 53 68 6f 77 20 77 68 65 6e 20 6f 75  TE: Show when ou
17720 72 20 74 65 73 74 73 20 61 63 74 75 61 6c 6c 79  r tests actually
17730 20 65 6e 64 65 64 20 28 6e 6f 77 29 2e 0d 0a 20   ended (now)...
17740 20 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20         #..
17750 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f    tputs $::test_ 17760 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 channel [appendA 17770 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 rgs \.. 17780 20 20 20 22 2d 2d 2d 2d 20 53 79 73 74 65 6d 2e "---- System. 17790 44 61 74 61 2e 53 51 4c 69 74 65 20 74 65 73 74 Data.SQLite test 177a0 73 20 65 6e 64 65 64 20 61 74 20 22 20 5c 0d 0a s ended at " \.. 177b0 20 20 20 20 20 20 20 20 20 20 20 20 5b 63 6c 6f [clo 177c0 63 6b 20 66 6f 72 6d 61 74 20 5b 63 6c 6f 63 6b ck format [clock 177d0 20 73 65 63 6f 6e 64 73 5d 5d 20 5c 6e 5d 0d 0a seconds]] \n].. 177e0 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20 .. #.. 177f0 20 20 20 20 20 23 20 42 55 47 46 49 58 3a 20 42 # BUGFIX: B 17800 65 66 6f 72 65 20 63 68 65 63 6b 69 6e 67 20 74 efore checking t 17810 68 65 20 66 69 6e 61 6c 20 72 65 73 6f 75 72 63 he final resourc 17820 65 73 20 69 6e 20 75 73 65 20 62 79 20 53 51 4c es in use by SQL 17830 69 74 65 2c 20 6d 61 6b 65 0d 0a 20 20 20 20 20 ite, make.. 17840 20 20 20 23 20 20 20 20 20 20 20 20 20 73 75 72 # sur 17850 65 20 62 6f 74 68 20 6f 66 20 74 68 65 20 50 52 e both of the PR 17860 41 47 4d 41 20 72 65 6c 61 74 65 64 20 64 69 72 AGMA related dir 17870 65 63 74 6f 72 79 20 6e 61 6d 65 73 20 61 72 65 ectory names are 17880 20 66 72 65 65 64 2e 0d 0a 20 20 20 20 20 20 20 freed... 17890 20 23 0d 0a 20 20 20 20 20 20 20 20 63 68 65 63 #.. chec 178a0 6b 46 6f 72 53 51 4c 69 74 65 44 69 72 65 63 74 kForSQLiteDirect 178b0 6f 72 69 65 73 20 24 3a 3a 74 65 73 74 5f 63 68 ories$::test_ch
178c0 61 6e 6e 65 6c 20 74 72 75 65 0d 0a 0d 0a 20 20  annel true....
178d0 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20        #..
178e0 20 23 20 4e 4f 54 45 3a 20 41 6c 73 6f 20 72 65   # NOTE: Also re
178f0 70 6f 72 74 20 74 68 65 20 72 65 73 6f 75 72 63  port the resourc
17900 65 20 75 73 61 67 65 20 61 66 74 65 72 20 72 75  e usage after ru
17910 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 74 73 2e  nning the tests.
17920 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a 20 20 20  ..        #..
17930 20 20 20 20 20 72 65 70 6f 72 74 53 51 4c 69 74       reportSQLit
17940 65 52 65 73 6f 75 72 63 65 73 20 24 3a 3a 74 65  eResources $::te 17950 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 0d 0a 20 20 st_channel.... 17960 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 20 #.. 17970 20 23 20 4e 4f 54 45 3a 20 52 65 70 6f 72 74 20 # NOTE: Report 17980 74 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e the critical han 17990 64 6c 65 20 63 6f 75 6e 74 73 20 61 66 74 65 72 dle counts after 179a0 20 72 75 6e 6e 69 6e 67 20 74 68 65 20 74 65 73 running the tes 179b0 74 73 2e 0d 0a 20 20 20 20 20 20 20 20 23 0d 0a ts... #.. 179c0 20 20 20 20 20 20 20 20 67 65 74 53 51 4c 69 74 getSQLit 179d0 65 48 61 6e 64 6c 65 43 6f 75 6e 74 73 20 24 3a eHandleCounts$:
179e0 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 0d 0a 20  :test_channel..
179f0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0c       }..    }...
17a00 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23 23  ..    ##########
17a10 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a20 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a30 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a40 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a50 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23 23  #..    #########
17a60 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17a70 23 23 23 23 20 45 4e 44 20 45 61 67 6c 65 20 4f  #### END Eagle O
17a80 4e 4c 59 20 23 23 23 23 23 23 23 23 23 23 23 23  NLY ############
17a90 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17aa0 23 23 0d 0a 20 20 20 20 23 23 23 23 23 23 23 23  ##..    ########
17ab0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17ac0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17ad0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17ae0 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23 23  ################
17af0 23 23 23 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 23 0d  ###..  }....  #.
17b00 0a 20 20 23 20 4e 4f 54 45 3a 20 53 61 76 65 20  .  # NOTE: Save
17b10 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20  the name of the
17b20 64 69 72 65 63 74 6f 72 79 20 63 6f 6e 74 61 69  directory contai
17b30 6e 69 6e 67 20 74 68 69 73 20 66 69 6c 65 2e 0d  ning this file..
17b40 0a 20 20 23 0d 0a 20 20 69 66 20 7b 21 5b 69 6e  .  #..  if {![in
17b50 66 6f 20 65 78 69 73 74 73 20 63 6f 6d 6d 6f 6e  fo exists common
17b60 5f 64 69 72 65 63 74 6f 72 79 5d 7d 20 74 68 65  _directory]} the
17b70 6e 20 7b 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d  n {..    set com
17b80 6d 6f 6e 5f 64 69 72 65 63 74 6f 72 79 20 5b 66  mon_directory [f
17b90 69 6c 65 20 64 69 72 6e 61 6d 65 20 5b 69 6e 66  ile dirname [inf
17ba0 6f 20 73 63 72 69 70 74 5d 5d 0d 0a 20 20 7d 0d  o script]]..  }.
17bb0 0a 0d 0a 20 20 23 0d 0a 20 20 23 20 4e 4f 54 45  ...  #..  # NOTE
17bc0 3a 20 50 72 6f 76 69 64 65 20 74 68 65 20 53 79  : Provide the Sy
17bd0 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
17be0 20 74 65 73 74 20 70 61 63 6b 61 67 65 20 74 6f   test package to
17bf0 20 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72   the interpreter
17c00 2e 0d 0a 20 20 23 0d 0a 20 20 70 61 63 6b 61 67  ...  #..  packag
17c10 65 20 70 72 6f 76 69 64 65 20 53 79 73 74 65 6d  e provide System
17c20 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 54 65 73  .Data.SQLite.Tes
17c30 74 20 31 2e 30 0d 0a 7d 0d 0a                    t 1.0..}..