System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 9062c83904003b854c2f9cd6ae91f3ea7f66c7bd:


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 69 66 20 7b 5b 69 73 45 61 67  ##....if {[isEag
0120: 6c 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 70  le]} then {..  p
0130: 72 6f 63 20 67 65 74 42 75 69 6c 64 59 65 61 72  roc getBuildYear
0140: 20 7b 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20   {} {..    #..  
0150: 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69 66    # NOTE: See if
0160: 20 74 68 65 20 22 79 65 61 72 22 20 73 65 74 74   the "year" sett
0170: 69 6e 67 20 68 61 73 20 62 65 65 6e 20 6f 76 65  ing has been ove
0180: 72 72 69 64 64 65 6e 20 62 79 20 74 68 65 20 75  rridden by the u
0190: 73 65 72 20 28 65 2e 67 2e 20 6f 6e 0d 0a 20 20  ser (e.g. on..  
01a0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 63 6f    #       the co
01b0: 6d 6d 61 6e 64 20 6c 69 6e 65 29 2e 20 20 54 68  mmand line).  Th
01c0: 69 73 20 63 6f 6e 74 72 6f 6c 73 20 77 68 69 63  is controls whic
01d0: 68 20 62 69 6e 61 72 69 65 73 20 77 65 20 61 72  h binaries we ar
01e0: 65 20 74 65 73 74 69 6e 67 2c 0d 0a 20 20 20 20  e testing,..    
01f0: 23 20 20 20 20 20 20 20 74 68 6f 73 65 20 70 72  #       those pr
0200: 6f 64 75 63 65 64 20 62 79 20 65 69 74 68 65 72  oduced by either
0210: 20 74 68 65 20 56 69 73 75 61 6c 20 53 74 75 64   the Visual Stud
0220: 69 6f 20 32 30 30 38 20 6f 72 20 56 69 73 75 61  io 2008 or Visua
0230: 6c 20 53 74 75 64 69 6f 0d 0a 20 20 20 20 23 20  l Studio..    # 
0240: 20 20 20 20 20 20 32 30 31 30 20 62 75 69 6c 64        2010 build
0250: 20 73 79 73 74 65 6d 73 2e 20 20 54 6f 20 6f 76   systems.  To ov
0260: 65 72 72 69 64 65 20 74 68 69 73 20 76 61 6c 75  erride this valu
0270: 65 20 76 69 61 20 74 68 65 20 63 6f 6d 6d 61 6e  e via the comman
0280: 64 20 6c 69 6e 65 2c 0d 0a 20 20 20 20 23 20 20  d line,..    #  
0290: 20 20 20 20 20 65 6e 74 65 72 20 61 20 63 6f 6d       enter a com
02a0: 6d 61 6e 64 20 73 69 6d 69 6c 61 72 20 74 6f 20  mand similar to 
02b0: 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 28 61  the following (a
02c0: 6c 6c 20 6f 6e 20 6f 6e 65 20 6c 69 6e 65 29 3a  ll on one line):
02d0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 20  ..    #..    #  
02e0: 20 20 20 20 20 45 61 67 6c 65 53 68 65 6c 6c 2e       EagleShell.
02f0: 65 78 65 20 2d 70 72 65 49 6e 69 74 69 61 6c 69  exe -preInitiali
0300: 7a 65 20 22 73 65 74 20 74 65 73 74 5f 79 65 61  ze "set test_yea
0310: 72 20 32 30 30 38 22 0d 0a 20 20 20 20 23 20 20  r 2008"..    #  
0320: 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e 5c 70         -file .\p
0330: 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65  ath\to\all.eagle
0340: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66 20  ..    #..    if 
0350: 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a 3a  {[info exists ::
0360: 74 65 73 74 5f 79 65 61 72 5d 20 26 26 20 5b 73  test_year] && [s
0370: 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 3a 3a  tring length $::
0380: 74 65 73 74 5f 79 65 61 72 5d 20 3e 20 30 7d 20  test_year] > 0} 
0390: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 72 65  then {..      re
03a0: 74 75 72 6e 20 24 3a 3a 74 65 73 74 5f 79 65 61  turn $::test_yea
03b0: 72 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b 0d  r..    } else {.
03c0: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 65  .      return [e
03d0: 78 70 72 20 7b 5b 68 61 76 65 43 6f 6e 73 74 72  xpr {[haveConstr
03e0: 61 69 6e 74 20 69 6d 61 67 65 52 75 6e 74 69 6d  aint imageRuntim
03f0: 65 34 30 5d 20 3f 20 22 32 30 31 30 22 20 3a 20  e40] ? "2010" : 
0400: 22 32 30 30 38 22 7d 5d 0d 0a 20 20 20 20 7d 0d  "2008"}]..    }.
0410: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20  .  }.....  proc 
0420: 67 65 74 42 75 69 6c 64 44 69 72 65 63 74 6f 72  getBuildDirector
0430: 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a 20  y {} {..    #.. 
0440: 20 20 20 23 20 4e 4f 54 45 3a 20 53 65 65 20 69     # NOTE: See i
0450: 66 20 74 68 65 20 22 6e 61 74 69 76 65 22 20 72  f the "native" r
0460: 75 6e 74 69 6d 65 20 6f 70 74 69 6f 6e 20 68 61  untime option ha
0470: 73 20 62 65 65 6e 20 61 64 64 65 64 2e 20 20 49  s been added.  I
0480: 66 20 73 6f 2c 20 75 73 65 20 74 68 65 0d 0a 20  f so, use the.. 
0490: 20 20 20 23 20 20 20 20 20 20 20 64 69 72 65 63     #       direc
04a0: 74 6f 72 79 20 66 6f 72 20 74 68 65 20 6d 69 78  tory for the mix
04b0: 65 64 2d 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79  ed-mode assembly
04c0: 2e 20 20 54 6f 20 65 6e 61 62 6c 65 20 74 68 69  .  To enable thi
04d0: 73 20 6f 70 74 69 6f 6e 20 76 69 61 0d 0a 20 20  s option via..  
04e0: 20 20 23 20 20 20 20 20 20 20 74 68 65 20 63 6f    #       the co
04f0: 6d 6d 61 6e 64 20 6c 69 6e 65 2c 20 65 6e 74 65  mmand line, ente
0500: 72 20 61 20 63 6f 6d 6d 61 6e 64 20 73 69 6d 69  r a command simi
0510: 6c 61 72 20 74 6f 20 74 68 65 20 66 6f 6c 6c 6f  lar to the follo
0520: 77 69 6e 67 20 28 61 6c 6c 20 6f 6e 0d 0a 20 20  wing (all on..  
0530: 20 20 23 20 20 20 20 20 20 20 6f 6e 65 20 6c 69    #       one li
0540: 6e 65 29 3a 0d 0a 20 20 20 20 23 0d 0a 20 20 20  ne):..    #..   
0550: 20 23 20 20 20 20 20 20 20 45 61 67 6c 65 53 68   #       EagleSh
0560: 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74 69 61 6c  ell.exe -initial
0570: 69 7a 65 20 2d 72 75 6e 74 69 6d 65 4f 70 74 69  ize -runtimeOpti
0580: 6f 6e 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 23  on native..    #
0590: 20 20 20 20 20 20 20 20 20 2d 66 69 6c 65 20 2e           -file .
05a0: 5c 70 61 74 68 5c 74 6f 5c 61 6c 6c 2e 65 61 67  \path\to\all.eag
05b0: 6c 65 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  le..    #..    #
05c0: 20 20 20 20 20 20 20 54 6f 20 65 6e 61 62 6c 65         To enable
05d0: 20 74 68 69 73 20 6f 70 74 69 6f 6e 20 76 69 61   this option via
05e0: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e   the command lin
05f0: 65 20 70 72 69 6f 72 20 74 6f 20 74 68 65 20 22  e prior to the "
0600: 62 65 74 61 20 31 36 22 0d 0a 20 20 20 20 23 20  beta 16"..    # 
0610: 20 20 20 20 20 20 72 65 6c 65 61 73 65 20 6f 66        release of
0620: 20 45 61 67 6c 65 2c 20 74 68 65 20 66 6f 6c 6c   Eagle, the foll
0630: 6f 77 69 6e 67 20 63 6f 6d 6d 61 6e 64 20 6d 75  owing command mu
0640: 73 74 20 62 65 20 75 73 65 64 20 69 6e 73 74 65  st be used inste
0650: 61 64 20 28 61 6c 73 6f 0d 0a 20 20 20 20 23 20  ad (also..    # 
0660: 20 20 20 20 20 20 61 6c 6c 20 6f 6e 20 6f 6e 65        all on one
0670: 20 6c 69 6e 65 29 3a 0d 0a 20 20 20 20 23 0d 0a   line):..    #..
0680: 20 20 20 20 23 20 20 20 20 20 20 20 45 61 67 6c      #       Eagl
0690: 65 53 68 65 6c 6c 2e 65 78 65 20 2d 69 6e 69 74  eShell.exe -init
06a0: 69 61 6c 69 7a 65 20 2d 70 6f 73 74 49 6e 69 74  ialize -postInit
06b0: 69 61 6c 69 7a 65 0d 0a 20 20 20 20 23 20 20 20  ialize..    #   
06c0: 20 20 20 20 20 20 22 6f 62 6a 65 63 74 20 69 6e        "object in
06d0: 76 6f 6b 65 20 49 6e 74 65 72 70 72 65 74 65 72  voke Interpreter
06e0: 2e 47 65 74 41 63 74 69 76 65 20 41 64 64 52 75  .GetActive AddRu
06f0: 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e 61 74 69  ntimeOption nati
0700: 76 65 22 0d 0a 20 20 20 20 23 20 20 20 20 20 20  ve"..    #      
0710: 20 20 20 2d 66 69 6c 65 20 2e 5c 70 61 74 68 5c     -file .\path\
0720: 74 6f 5c 61 6c 6c 2e 65 61 67 6c 65 0d 0a 20 20  to\all.eagle..  
0730: 20 20 23 0d 0a 20 20 20 20 69 66 20 7b 5b 68 61    #..    if {[ha
0740: 73 52 75 6e 74 69 6d 65 4f 70 74 69 6f 6e 20 6e  sRuntimeOption n
0750: 61 74 69 76 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  ative]} then {..
0760: 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b 66 69        return [fi
0770: 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20 64 69  le join [file di
0780: 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d 20 62  rname $::path] b
0790: 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65 61 72  in [getBuildYear
07a0: 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 5b  ] \..          [
07b0: 6d 61 63 68 69 6e 65 54 6f 50 6c 61 74 66 6f 72  machineToPlatfor
07c0: 6d 20 24 3a 3a 74 63 6c 5f 70 6c 61 74 66 6f 72  m $::tcl_platfor
07d0: 6d 28 6d 61 63 68 69 6e 65 29 5d 20 24 3a 3a 74  m(machine)] $::t
07e0: 65 73 74 5f 63 6f 6e 66 69 67 75 72 61 74 69 6f  est_configuratio
07f0: 6e 5d 0d 0a 20 20 20 20 7d 20 65 6c 73 65 20 7b  n]..    } else {
0800: 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 5b  ..      return [
0810: 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65 20  file join [file 
0820: 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68 5d  dirname $::path]
0830: 20 62 69 6e 20 5b 67 65 74 42 75 69 6c 64 59 65   bin [getBuildYe
0840: 61 72 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20  ar] \..         
0850: 20 24 3a 3a 74 65 73 74 5f 63 6f 6e 66 69 67 75   $::test_configu
0860: 72 61 74 69 6f 6e 20 62 69 6e 5d 0d 0a 20 20 20  ration bin]..   
0870: 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72   }..  }.....  pr
0880: 6f 63 20 67 65 74 42 75 69 6c 64 46 69 6c 65 4e  oc getBuildFileN
0890: 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20 7d  ame { fileName }
08a0: 20 7b 0d 0a 20 20 20 20 72 65 74 75 72 6e 20 5b   {..    return [
08b0: 66 69 6c 65 20 6e 61 74 69 76 65 6e 61 6d 65 20  file nativename 
08c0: 5c 0d 0a 20 20 20 20 20 20 20 20 5b 66 69 6c 65  \..        [file
08d0: 20 6a 6f 69 6e 20 5b 67 65 74 42 75 69 6c 64 44   join [getBuildD
08e0: 69 72 65 63 74 6f 72 79 5d 20 5b 66 69 6c 65 20  irectory] [file 
08f0: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]]
0900: 5d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f  ]..  }.....  pro
0910: 63 20 67 65 74 42 69 6e 61 72 79 44 69 72 65 63  c getBinaryDirec
0920: 74 6f 72 79 20 7b 7d 20 7b 0d 0a 20 20 20 20 23  tory {} {..    #
0930: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 54 68  ..    # NOTE: Th
0940: 69 73 20 70 72 6f 63 65 64 75 72 65 20 72 65 74  is procedure ret
0950: 75 72 6e 73 20 74 68 65 20 64 69 72 65 63 74 6f  urns the directo
0960: 72 79 20 77 68 65 72 65 20 74 68 65 20 74 65 73  ry where the tes
0970: 74 20 61 70 70 6c 69 63 61 74 69 6f 6e 0d 0a 20  t application.. 
0980: 20 20 20 23 20 20 20 20 20 20 20 69 74 73 65 6c     #       itsel
0990: 66 20 28 69 2e 65 2e 20 74 68 65 20 45 61 67 6c  f (i.e. the Eagl
09a0: 65 20 73 68 65 6c 6c 29 20 69 73 20 6c 6f 63 61  e shell) is loca
09b0: 74 65 64 2e 20 20 54 68 69 73 20 77 69 6c 6c 20  ted.  This will 
09c0: 62 65 20 75 73 65 64 20 61 73 0d 0a 20 20 20 20  be used as..    
09d0: 23 20 20 20 20 20 20 20 74 68 65 20 64 65 73 74  #       the dest
09e0: 69 6e 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  ination for the 
09f0: 63 6f 70 69 65 64 20 53 79 73 74 65 6d 2e 44 61  copied System.Da
0a00: 74 61 2e 53 51 4c 69 74 65 20 6e 61 74 69 76 65  ta.SQLite native
0a10: 20 61 6e 64 0d 0a 20 20 20 20 23 20 20 20 20 20   and..    #     
0a20: 20 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62    managed assemb
0a30: 6c 69 65 73 20 28 69 2e 65 2e 20 62 65 63 61 75  lies (i.e. becau
0a40: 73 65 20 74 68 69 73 20 69 73 20 6f 6e 65 20 6f  se this is one o
0a50: 66 20 74 68 65 20 66 65 77 20 70 6c 61 63 65 73  f the few places
0a60: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 77 68  ..    #       wh
0a70: 65 72 65 20 74 68 65 20 43 4c 52 20 77 69 6c 6c  ere the CLR will
0a80: 20 61 63 74 75 61 6c 6c 79 20 66 69 6e 64 20 61   actually find a
0a90: 6e 64 20 6c 6f 61 64 20 74 68 65 6d 20 70 72 6f  nd load them pro
0aa0: 70 65 72 6c 79 29 2e 0d 0a 20 20 20 20 23 0d 0a  perly)...    #..
0ab0: 20 20 20 20 72 65 74 75 72 6e 20 5b 69 6e 66 6f      return [info
0ac0: 20 62 69 6e 61 72 79 5d 0d 0a 20 20 7d 0d 0a 0c   binary]..  }...
0ad0: 0d 0a 20 20 70 72 6f 63 20 67 65 74 42 69 6e 61  ..  proc getBina
0ae0: 72 79 46 69 6c 65 4e 61 6d 65 20 7b 20 66 69 6c  ryFileName { fil
0af0: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 72  eName } {..    r
0b00: 65 74 75 72 6e 20 5b 66 69 6c 65 20 6e 61 74 69  eturn [file nati
0b10: 76 65 6e 61 6d 65 20 5c 0d 0a 20 20 20 20 20 20  vename \..      
0b20: 20 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 67 65    [file join [ge
0b30: 74 42 69 6e 61 72 79 44 69 72 65 63 74 6f 72 79  tBinaryDirectory
0b40: 5d 20 5b 66 69 6c 65 20 74 61 69 6c 20 24 66 69  ] [file tail $fi
0b50: 6c 65 4e 61 6d 65 5d 5d 5d 0d 0a 20 20 7d 0d 0a  leName]]]..  }..
0b60: 0c 0d 0a 20 20 70 72 6f 63 20 74 72 79 43 6f 70  ...  proc tryCop
0b70: 79 42 75 69 6c 64 46 69 6c 65 20 7b 20 66 69 6c  yBuildFile { fil
0b80: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 23  eName } {..    #
0b90: 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66  ..    # NOTE: If
0ba0: 20 77 65 20 63 61 6e 6e 6f 74 20 63 6f 70 79 20   we cannot copy 
0bb0: 74 68 65 20 61 73 73 65 6d 62 6c 79 20 74 68 65  the assembly the
0bc0: 6e 20 69 74 20 69 73 20 70 72 6f 62 61 62 6c 79  n it is probably
0bd0: 20 61 6c 72 65 61 64 79 20 6c 6f 61 64 65 64 2e   already loaded.
0be0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74  ..    #..    set
0bf0: 20 73 6f 75 72 63 65 46 69 6c 65 4e 61 6d 65 20   sourceFileName 
0c00: 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61 6d  [getBuildFileNam
0c10: 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a  e $fileName]....
0c20: 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20 65      if {![file e
0c30: 78 69 73 74 73 20 24 73 6f 75 72 63 65 46 69 6c  xists $sourceFil
0c40: 65 4e 61 6d 65 5d 7d 20 74 68 65 6e 20 7b 0d 0a  eName]} then {..
0c50: 20 20 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74        tputs $::t
0c60: 65 73 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70  est_channel [app
0c70: 65 6e 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20  endArgs \..     
0c80: 20 20 20 20 20 22 2d 2d 2d 2d 20 73 6b 69 70 70       "---- skipp
0c90: 65 64 20 63 6f 70 79 69 6e 67 20 62 75 69 6c 64  ed copying build
0ca0: 20 66 69 6c 65 20 5c 22 22 20 24 73 6f 75 72 63   file \"" $sourc
0cb0: 65 46 69 6c 65 4e 61 6d 65 20 5c 0d 0a 20 20 20  eFileName \..   
0cc0: 20 20 20 20 20 20 20 22 5c 22 2c 20 69 74 20 64         "\", it d
0cd0: 6f 65 73 20 6e 6f 74 20 65 78 69 73 74 5c 6e 22  oes not exist\n"
0ce0: 5d 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ]....      retur
0cf0: 6e 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  n..    }....    
0d00: 73 65 74 20 74 61 72 67 65 74 46 69 6c 65 4e 61  set targetFileNa
0d10: 6d 65 20 5b 67 65 74 42 69 6e 61 72 79 46 69 6c  me [getBinaryFil
0d20: 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d  eName $fileName]
0d30: 0d 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 63 61 74  ....    if {[cat
0d40: 63 68 20 7b 66 69 6c 65 20 63 6f 70 79 20 2d 66  ch {file copy -f
0d50: 6f 72 63 65 20 24 73 6f 75 72 63 65 46 69 6c 65  orce $sourceFile
0d60: 4e 61 6d 65 20 24 74 61 72 67 65 74 46 69 6c 65  Name $targetFile
0d70: 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d 20 74 68 65  Name}] == 0} the
0d80: 6e 20 7b 0d 0a 20 20 20 20 20 20 74 70 75 74 73  n {..      tputs
0d90: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel
0da0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
0db0: 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20            "---- 
0dc0: 63 6f 70 69 65 64 20 62 75 69 6c 64 20 66 69 6c  copied build fil
0dd0: 65 20 66 72 6f 6d 20 5c 22 22 20 24 73 6f 75 72  e from \"" $sour
0de0: 63 65 46 69 6c 65 4e 61 6d 65 20 22 5c 22 20 74  ceFileName "\" t
0df0: 6f 20 5c 22 22 20 5c 0d 0a 20 20 20 20 20 20 20  o \"" \..       
0e00: 20 20 20 24 74 61 72 67 65 74 46 69 6c 65 4e 61     $targetFileNa
0e10: 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 7d 20  me \"\n]..    } 
0e20: 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20 20 74 70  else {..      tp
0e30: 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e  uts $::test_chan
0e40: 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73 20  nel [appendArgs 
0e50: 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d 2d  \..          "--
0e60: 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20 63 6f 70  -- failed to cop
0e70: 79 20 62 75 69 6c 64 20 66 69 6c 65 20 66 72 6f  y build file fro
0e80: 6d 20 5c 22 22 20 24 73 6f 75 72 63 65 46 69 6c  m \"" $sourceFil
0e90: 65 4e 61 6d 65 20 22 5c 22 20 74 6f 20 5c 22 22  eName "\" to \""
0ea0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 24 74   \..          $t
0eb0: 61 72 67 65 74 46 69 6c 65 4e 61 6d 65 20 5c 22  argetFileName \"
0ec0: 5c 6e 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  \n]..    }..  }.
0ed0: 0a 0c 0d 0a 20 20 70 72 6f 63 20 74 72 79 44 65  ....  proc tryDe
0ee0: 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20 7b  leteBinaryFile {
0ef0: 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20   fileName } {.. 
0f00: 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65 20     set fileName 
0f10: 5b 67 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61  [getBinaryFileNa
0f20: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  me $fileName]...
0f30: 0a 20 20 20 20 69 66 20 7b 21 5b 66 69 6c 65 20  .    if {![file 
0f40: 65 78 69 73 74 73 20 24 66 69 6c 65 4e 61 6d 65  exists $fileName
0f50: 5d 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  ]} then {..     
0f60: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c
0f70: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
0f80: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
0f90: 22 2d 2d 2d 2d 20 73 6b 69 70 70 65 64 20 64 65  "---- skipped de
0fa0: 6c 65 74 69 6e 67 20 62 69 6e 61 72 79 20 66 69  leting binary fi
0fb0: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName
0fc0: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 5c   \..          "\
0fd0: 22 2c 20 69 74 20 64 6f 65 73 20 6e 6f 74 20 65  ", it does not e
0fe0: 78 69 73 74 5c 6e 22 5d 0d 0a 0d 0a 20 20 20 20  xist\n"]....    
0ff0: 20 20 72 65 74 75 72 6e 0d 0a 20 20 20 20 7d 0d    return..    }.
1000: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 63 61 74 63  ...    if {[catc
1010: 68 20 7b 66 69 6c 65 20 64 65 6c 65 74 65 20 24  h {file delete $
1020: 66 69 6c 65 4e 61 6d 65 7d 5d 20 3d 3d 20 30 7d  fileName}] == 0}
1030: 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 74   then {..      t
1040: 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63 68 61  puts $::test_cha
1050: 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72 67 73  nnel [appendArgs
1060: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 22 2d   \..          "-
1070: 2d 2d 2d 20 64 65 6c 65 74 65 64 20 62 69 6e 61  --- deleted bina
1080: 72 79 20 66 69 6c 65 20 5c 22 22 20 24 66 69 6c  ry file \"" $fil
1090: 65 4e 61 6d 65 20 5c 22 5c 6e 5d 0d 0a 20 20 20  eName \"\n]..   
10a0: 20 7d 20 65 6c 73 65 20 7b 0d 0a 20 20 20 20 20   } else {..     
10b0: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c
10c0: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
10d0: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
10e0: 22 2d 2d 2d 2d 20 66 61 69 6c 65 64 20 74 6f 20  "---- failed to 
10f0: 64 65 6c 65 74 65 20 62 69 6e 61 72 79 20 66 69  delete binary fi
1100: 6c 65 20 5c 22 22 20 24 66 69 6c 65 4e 61 6d 65  le \"" $fileName
1110: 20 5c 22 5c 6e 5d 0d 0a 20 20 20 20 7d 0d 0a 20   \"\n]..    }.. 
1120: 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 74 72   }.....  proc tr
1130: 79 43 6f 70 79 41 73 73 65 6d 62 6c 79 20 7b 20  yCopyAssembly { 
1140: 66 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74 72  fileName {pdb tr
1150: 75 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 74 72 79  ue} } {..    try
1160: 43 6f 70 79 42 75 69 6c 64 46 69 6c 65 20 24 66  CopyBuildFile $f
1170: 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20 20 69  ileName....    i
1180: 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20 7b 0d  f {$pdb} then {.
1190: 0a 20 20 20 20 20 20 74 72 79 43 6f 70 79 42 75  .      tryCopyBu
11a0: 69 6c 64 46 69 6c 65 20 5b 61 70 70 65 6e 64 41  ildFile [appendA
11b0: 72 67 73 20 5b 66 69 6c 65 20 72 6f 6f 74 6e 61  rgs [file rootna
11c0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 20 2e 70  me $fileName] .p
11d0: 64 62 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  db]..    }..  }.
11e0: 0a 0c 0d 0a 20 20 70 72 6f 63 20 74 72 79 44 65  ....  proc tryDe
11f0: 6c 65 74 65 41 73 73 65 6d 62 6c 79 20 7b 20 66  leteAssembly { f
1200: 69 6c 65 4e 61 6d 65 20 7b 70 64 62 20 74 72 75  ileName {pdb tru
1210: 65 7d 20 7d 20 7b 0d 0a 20 20 20 20 74 72 79 44  e} } {..    tryD
1220: 65 6c 65 74 65 42 69 6e 61 72 79 46 69 6c 65 20  eleteBinaryFile 
1230: 24 66 69 6c 65 4e 61 6d 65 0d 0a 0d 0a 20 20 20  $fileName....   
1240: 20 69 66 20 7b 24 70 64 62 7d 20 74 68 65 6e 20   if {$pdb} then 
1250: 7b 0d 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65  {..      tryDele
1260: 74 65 42 69 6e 61 72 79 46 69 6c 65 20 5b 61 70  teBinaryFile [ap
1270: 70 65 6e 64 41 72 67 73 20 5b 66 69 6c 65 20 72  pendArgs [file r
1280: 6f 6f 74 6e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ootname $fileNam
1290: 65 5d 20 2e 70 64 62 5d 0d 0a 20 20 20 20 7d 0d  e] .pdb]..    }.
12a0: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20  .  }.....  proc 
12b0: 74 72 79 4c 6f 61 64 41 73 73 65 6d 62 6c 79 20  tryLoadAssembly 
12c0: 7b 20 66 69 6c 65 4e 61 6d 65 20 7d 20 7b 0d 0a  { fileName } {..
12d0: 20 20 20 20 73 65 74 20 66 69 6c 65 4e 61 6d 65      set fileName
12e0: 20 5b 67 65 74 42 75 69 6c 64 46 69 6c 65 4e 61   [getBuildFileNa
12f0: 6d 65 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  me $fileName]...
1300: 0a 20 20 20 20 69 66 20 7b 5b 63 61 74 63 68 20  .    if {[catch 
1310: 7b 73 65 74 20 61 73 73 65 6d 62 6c 79 20 5c 0d  {set assembly \.
1320: 0a 20 20 20 20 20 20 20 20 5b 6f 62 6a 65 63 74  .        [object
1330: 20 6c 6f 61 64 20 2d 6c 6f 61 64 74 79 70 65 20   load -loadtype 
1340: 46 69 6c 65 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  File $fileName]}
1350: 5d 20 3d 3d 20 30 7d 20 74 68 65 6e 20 7b 0d 0a  ] == 0} then {..
1360: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 23        #..      #
1370: 20 4e 4f 54 45 3a 20 4e 6f 77 2c 20 61 64 64 20   NOTE: Now, add 
1380: 74 68 65 20 6e 65 63 65 73 73 61 72 79 20 74 65  the necessary te
1390: 73 74 20 63 6f 6e 73 74 72 61 69 6e 74 2e 0d 0a  st constraint...
13a0: 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20 61        #..      a
13b0: 64 64 43 6f 6e 73 74 72 61 69 6e 74 20 5b 66 69  ddConstraint [fi
13c0: 6c 65 20 72 6f 6f 74 6e 61 6d 65 20 5b 66 69 6c  le rootname [fil
13d0: 65 20 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65  e tail $fileName
13e0: 5d 5d 0d 0a 0d 0a 20 20 20 20 20 20 23 0d 0a 20  ]]....      #.. 
13f0: 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 74       # NOTE: Ret
1400: 75 72 6e 20 74 68 65 20 66 75 6c 6c 20 70 61 74  urn the full pat
1410: 68 20 6f 66 20 74 68 65 20 6c 6f 61 64 65 64 20  h of the loaded 
1420: 66 69 6c 65 2e 0d 0a 20 20 20 20 20 20 23 0d 0a  file...      #..
1430: 20 20 20 20 20 20 72 65 74 75 72 6e 20 24 66 69        return $fi
1440: 6c 65 4e 61 6d 65 0d 0a 20 20 20 20 7d 0d 0a 0d  leName..    }...
1450: 0a 20 20 20 20 72 65 74 75 72 6e 20 22 22 0d 0a  .    return ""..
1460: 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 65    }.....  proc e
1470: 6e 75 6d 65 72 61 62 6c 65 54 6f 53 74 72 69 6e  numerableToStrin
1480: 67 20 7b 20 65 6e 75 6d 65 72 61 62 6c 65 20 7d  g { enumerable }
1490: 20 7b 0d 0a 20 20 20 20 73 65 74 20 72 65 73 75   {..    set resu
14a0: 6c 74 20 5b 6c 69 73 74 5d 0d 0a 0d 0a 20 20 20  lt [list]....   
14b0: 20 69 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e   if {[string len
14c0: 67 74 68 20 24 65 6e 75 6d 65 72 61 62 6c 65 5d  gth $enumerable]
14d0: 20 3d 3d 20 30 20 7c 7c 20 24 65 6e 75 6d 65 72   == 0 || $enumer
14e0: 61 62 6c 65 20 65 71 20 22 6e 75 6c 6c 22 7d 20  able eq "null"} 
14f0: 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 72 65  then {..      re
1500: 74 75 72 6e 20 24 72 65 73 75 6c 74 0d 0a 20 20  turn $result..  
1510: 20 20 7d 0d 0a 0d 0a 20 20 20 20 6f 62 6a 65 63    }....    objec
1520: 74 20 66 6f 72 65 61 63 68 20 2d 61 6c 69 61 73  t foreach -alias
1530: 20 69 74 65 6d 20 24 65 6e 75 6d 65 72 61 62 6c   item $enumerabl
1540: 65 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 7b 5b  e {..      if {[
1550: 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24 69  string length $i
1560: 74 65 6d 5d 20 3e 20 30 7d 20 74 68 65 6e 20 7b  tem] > 0} then {
1570: 0d 0a 20 20 20 20 20 20 20 20 6c 61 70 70 65 6e  ..        lappen
1580: 64 20 72 65 73 75 6c 74 20 5b 24 69 74 65 6d 20  d result [$item 
1590: 54 6f 53 74 72 69 6e 67 5d 0d 0a 20 20 20 20 20  ToString]..     
15a0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
15b0: 20 72 65 74 75 72 6e 20 24 72 65 73 75 6c 74 0d   return $result.
15c0: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20  .  }.....  proc 
15d0: 63 6f 6d 70 69 6c 65 43 53 68 61 72 70 57 69 74  compileCSharpWit
15e0: 68 20 7b 20 74 65 78 74 20 72 65 73 75 6c 74 73  h { text results
15f0: 56 61 72 4e 61 6d 65 20 65 72 72 6f 72 73 56 61  VarName errorsVa
1600: 72 4e 61 6d 65 20 66 69 6c 65 4e 61 6d 65 73 20  rName fileNames 
1610: 61 72 67 73 20 7d 20 7b 0d 0a 20 20 20 20 23 0d  args } {..    #.
1620: 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 43 72 65  .    # NOTE: Cre
1630: 61 74 65 20 74 68 65 20 62 61 73 65 20 63 6f 6d  ate the base com
1640: 6d 61 6e 64 20 74 6f 20 65 76 61 6c 75 61 74 65  mand to evaluate
1650: 20 61 6e 64 20 61 64 64 20 74 68 65 20 70 72 6f   and add the pro
1660: 70 65 72 74 79 20 73 65 74 74 69 6e 67 73 0d 0a  perty settings..
1670: 20 20 20 20 23 20 20 20 20 20 20 20 74 68 61 74      #       that
1680: 20 61 72 65 20 61 6c 6d 6f 73 74 20 61 6c 77 61   are almost alwa
1690: 79 73 20 6e 65 65 64 65 64 20 62 79 20 6f 75 72  ys needed by our
16a0: 20 75 6e 69 74 20 74 65 73 74 73 20 28 69 2e 65   unit tests (i.e
16b0: 2e 20 74 68 65 20 53 79 73 74 65 6d 0d 0a 20 20  . the System..  
16c0: 20 20 23 20 20 20 20 20 20 20 61 6e 64 20 53 79    #       and Sy
16d0: 73 74 65 6d 2e 44 61 74 61 20 61 73 73 65 6d 62  stem.Data assemb
16e0: 6c 79 20 72 65 66 65 72 65 6e 63 65 73 29 2e 0d  ly references)..
16f0: 0a 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74 20  .    #..    set 
1700: 63 6f 6d 6d 61 6e 64 20 5b 6c 69 73 74 20 63 6f  command [list co
1710: 6d 70 69 6c 65 43 53 68 61 72 70 20 24 74 65 78  mpileCSharp $tex
1720: 74 20 72 65 73 75 6c 74 73 20 65 72 72 6f 72 73  t results errors
1730: 20 5c 0d 0a 20 20 20 20 20 20 20 20 52 65 66 65   \..        Refe
1740: 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73  rencedAssemblies
1750: 2e 41 64 64 20 53 79 73 74 65 6d 2e 64 6c 6c 20  .Add System.dll 
1760: 52 65 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62  ReferencedAssemb
1770: 6c 69 65 73 2e 41 64 64 20 5c 0d 0a 20 20 20 20  lies.Add \..    
1780: 20 20 20 20 53 79 73 74 65 6d 2e 44 61 74 61 2e      System.Data.
1790: 64 6c 6c 20 52 65 66 65 72 65 6e 63 65 64 41 73  dll ReferencedAs
17a0: 73 65 6d 62 6c 69 65 73 2e 41 64 64 20 53 79 73  semblies.Add Sys
17b0: 74 65 6d 2e 58 6d 6c 2e 64 6c 6c 5d 0d 0a 0d 0a  tem.Xml.dll]....
17c0: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
17d0: 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65 20 70  E: Add all the p
17e0: 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e 61 6d  rovided file nam
17f0: 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79 20 72  es as assembly r
1800: 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20 20 20  eferences...    
1810: 23 0d 0a 20 20 20 20 66 6f 72 65 61 63 68 20 66  #..    foreach f
1820: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam
1830: 65 73 20 7b 0d 0a 20 20 20 20 20 20 6c 61 70 70  es {..      lapp
1840: 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 52 65 66 65  end command Refe
1850: 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73  rencedAssemblies
1860: 2e 41 64 64 20 5b 67 65 74 42 75 69 6c 64 46 69  .Add [getBuildFi
1870: 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d 65  leName $fileName
1880: 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ]..    }....    
1890: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 41  #..    # NOTE: A
18a0: 64 64 20 74 68 65 20 65 78 74 72 61 20 61 72 67  dd the extra arg
18b0: 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79 2c 20  uments, if any, 
18c0: 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74  to the command t
18d0: 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20 20 20  o evaluate...   
18e0: 20 23 0d 0a 20 20 20 20 65 76 61 6c 20 6c 61 70   #..    eval lap
18f0: 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24 61 72  pend command $ar
1900: 67 73 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20  gs....    #..   
1910: 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73 20 74   # NOTE: Alias t
1920: 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f 63 61  he compiler loca
1930: 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20 65 72  l results and er
1940: 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73 20 74  rors variables t
1950: 6f 20 74 68 65 0d 0a 20 20 20 20 23 20 20 20 20  o the..    #    
1960: 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61 6d 65     variable name
1970: 73 20 70 72 6f 76 69 64 65 64 20 62 79 20 6f 75  s provided by ou
1980: 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20 20 23  r caller...    #
1990: 0d 0a 20 20 20 20 75 70 76 61 72 20 31 20 24 72  ..    upvar 1 $r
19a0: 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20 72 65  esultsVarName re
19b0: 73 75 6c 74 73 0d 0a 20 20 20 20 75 70 76 61 72  sults..    upvar
19c0: 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e 61 6d   1 $errorsVarNam
19d0: 65 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20 20 20  e errors....    
19e0: 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a 20 45  #..    # NOTE: E
19f0: 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f 6e 73  valuate the cons
1a00: 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69 6c 65  tructed [compile
1a10: 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e 64 20  CSharp] command 
1a20: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 0d 0a  and return the..
1a30: 20 20 20 20 23 20 20 20 20 20 20 20 72 65 73 75      #       resu
1a40: 6c 74 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  lt...    #..    
1a50: 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d 0a 20  eval $command.. 
1a60: 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 73 65   }.....  proc se
1a70: 74 75 70 44 62 20 7b 66 69 6c 65 4e 61 6d 65 20  tupDb {fileName 
1a80: 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 65 6c 65 74  {mode ""} {delet
1a90: 65 20 22 22 7d 20 7b 65 78 74 72 61 20 22 22 7d  e ""} {extra ""}
1aa0: 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 7d 20 7b   {varName db}} {
1ab0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
1ac0: 4f 54 45 3a 20 46 6f 72 20 6e 6f 77 2c 20 61 6c  OTE: For now, al
1ad0: 6c 20 74 65 73 74 20 64 61 74 61 62 61 73 65 73  l test databases
1ae0: 20 75 73 65 64 20 62 79 20 74 68 65 20 74 65 73   used by the tes
1af0: 74 20 73 75 69 74 65 20 61 72 65 20 70 6c 61 63  t suite are plac
1b00: 65 64 20 69 6e 74 6f 0d 0a 20 20 20 20 23 20 20  ed into..    #  
1b10: 20 20 20 20 20 74 68 65 20 74 65 6d 70 6f 72 61       the tempora
1b20: 72 79 20 64 69 72 65 63 74 6f 72 79 2e 20 20 45  ry directory.  E
1b30: 61 63 68 20 64 61 74 61 62 61 73 65 20 75 73 65  ach database use
1b40: 64 20 62 79 20 61 20 74 65 73 74 20 73 68 6f 75  d by a test shou
1b50: 6c 64 20 62 65 0d 0a 20 20 20 20 23 20 20 20 20  ld be..    #    
1b60: 20 20 20 63 6c 65 61 6e 65 64 20 75 70 20 62 79     cleaned up by
1b70: 20 74 68 61 74 20 74 65 73 74 20 75 73 69 6e 67   that test using
1b80: 20 74 68 65 20 22 63 6c 65 61 6e 75 70 44 62 22   the "cleanupDb"
1b90: 20 70 72 6f 63 65 64 75 72 65 2c 20 62 65 6c 6f   procedure, belo
1ba0: 77 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 73  w...    #..    s
1bb0: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 66 69 6c  et fileName [fil
1bc0: 65 20 6a 6f 69 6e 20 5b 67 65 74 54 65 6d 70 6f  e join [getTempo
1bd0: 72 61 72 79 50 61 74 68 5d 20 5b 66 69 6c 65 20  raryPath] [file 
1be0: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]]
1bf0: 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  ....    #..    #
1c00: 20 4e 4f 54 45 3a 20 42 79 20 64 65 66 61 75 6c   NOTE: By defaul
1c10: 74 2c 20 64 65 6c 65 74 65 20 61 6e 79 20 70 72  t, delete any pr
1c20: 65 2d 65 78 69 73 74 69 6e 67 20 64 61 74 61 62  e-existing datab
1c30: 61 73 65 20 77 69 74 68 20 74 68 65 20 73 61 6d  ase with the sam
1c40: 65 20 66 69 6c 65 0d 0a 20 20 20 20 23 20 20 20  e file..    #   
1c50: 20 20 20 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 23      name...    #
1c60: 0d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e  ..    if {[strin
1c70: 67 20 6c 65 6e 67 74 68 20 24 64 65 6c 65 74 65  g length $delete
1c80: 5d 20 3d 3d 20 30 20 7c 7c 20 24 64 65 6c 65 74  ] == 0 || $delet
1c90: 65 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  e} then {..     
1ca0: 20 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c   catch {file del
1cb0: 65 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 0d 0a  ete $fileName}..
1cc0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 23 0d 0a      }....    #..
1cd0: 20 20 20 20 23 20 4e 4f 54 45 3a 20 52 65 66 65      # NOTE: Refe
1ce0: 72 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  r to the specifi
1cf0: 65 64 20 76 61 72 69 61 62 6c 65 20 28 65 2e 67  ed variable (e.g
1d00: 2e 20 22 64 62 22 29 20 69 6e 20 74 68 65 20 63  . "db") in the c
1d10: 6f 6e 74 65 78 74 20 6f 66 20 74 68 65 0d 0a 20  ontext of the.. 
1d20: 20 20 20 23 20 20 20 20 20 20 20 63 61 6c 6c 65     #       calle
1d30: 72 2e 20 20 54 68 65 20 68 61 6e 64 6c 65 20 74  r.  The handle t
1d40: 6f 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74  o the opened dat
1d50: 61 62 61 73 65 20 77 69 6c 6c 20 62 65 20 73 74  abase will be st
1d60: 6f 72 65 64 20 74 68 65 72 65 2e 0d 0a 20 20 20  ored there...   
1d70: 20 23 0d 0a 20 20 20 20 75 70 76 61 72 20 31 20   #..    upvar 1 
1d80: 24 76 61 72 4e 61 6d 65 20 64 62 0d 0a 0d 0a 20  $varName db.... 
1d90: 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45     #..    # NOTE
1da0: 3a 20 53 74 61 72 74 20 62 75 69 6c 64 69 6e 67  : Start building
1db0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
1dc0: 73 74 72 69 6e 67 2e 20 20 54 68 65 20 6f 6e 6c  string.  The onl
1dd0: 79 20 72 65 71 75 69 72 65 64 20 70 6f 72 74 69  y required porti
1de0: 6f 6e 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  on..    #       
1df0: 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
1e00: 6e 20 73 74 72 69 6e 67 20 69 73 20 74 68 65 20  n string is the 
1e10: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 6e 61  database file na
1e20: 6d 65 20 69 74 73 65 6c 66 2e 0d 0a 20 20 20 20  me itself...    
1e30: 23 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 6e 65  #..    set conne
1e40: 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72  ction {Data Sour
1e50: 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d  ce=${fileName}}.
1e60: 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  ...    #..    # 
1e70: 4e 4f 54 45 3a 20 49 66 20 74 68 65 20 63 61 6c  NOTE: If the cal
1e80: 6c 65 72 20 73 70 65 63 69 66 69 65 64 20 61 20  ler specified a 
1e90: 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 20 61 64  journal mode, ad
1ea0: 64 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 20  d the necessary 
1eb0: 70 6f 72 74 69 6f 6e 0d 0a 20 20 20 20 23 20 20  portion..    #  
1ec0: 20 20 20 20 20 6f 66 20 74 68 65 20 63 6f 6e 6e       of the conn
1ed0: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 6e 6f  ection string no
1ee0: 77 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69  w...    #..    i
1ef0: 66 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74  f {[string lengt
1f00: 68 20 24 6d 6f 64 65 5d 20 3e 20 30 7d 20 74 68  h $mode] > 0} th
1f10: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 61 70 70 65  en {..      appe
1f20: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 7b 3b  nd connection {;
1f30: 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 3d 24 7b 6d  Journal Mode=${m
1f40: 6f 64 65 7d 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ode}}..    }....
1f50: 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54      #..    # NOT
1f60: 45 3a 20 49 66 20 74 68 65 20 63 61 6c 6c 65 72  E: If the caller
1f70: 20 73 70 65 63 69 66 69 65 64 20 61 6e 20 65 78   specified an ex
1f80: 74 72 61 20 70 61 79 6c 6f 61 64 20 74 6f 20 74  tra payload to t
1f90: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
1fa0: 72 69 6e 67 2c 0d 0a 20 20 20 20 23 20 20 20 20  ring,..    #    
1fb0: 20 20 20 61 70 70 65 6e 64 20 69 74 20 6e 6f 77     append it now
1fc0: 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 69 66  ...    #..    if
1fd0: 20 7b 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68   {[string length
1fe0: 20 24 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68   $extra] > 0} th
1ff0: 65 6e 20 7b 0d 0a 20 20 20 20 20 20 61 70 70 65  en {..      appe
2000: 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b  nd connection \;
2010: 20 24 65 78 74 72 61 0d 0a 20 20 20 20 7d 0d 0a   $extra..    }..
2020: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
2030: 4f 54 45 3a 20 4f 70 65 6e 20 74 68 65 20 64 61  OTE: Open the da
2040: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
2050: 6e 20 6e 6f 77 2c 20 70 6c 61 63 69 6e 67 20 74  n now, placing t
2060: 68 65 20 6f 70 61 71 75 65 20 68 61 6e 64 6c 65  he opaque handle
2070: 20 76 61 6c 75 65 0d 0a 20 20 20 20 23 20 20 20   value..    #   
2080: 20 20 20 20 69 6e 74 6f 20 74 68 65 20 76 61 72      into the var
2090: 69 61 62 6c 65 20 73 70 65 63 69 66 69 65 64 20  iable specified 
20a0: 62 79 20 74 68 65 20 63 61 6c 6c 65 72 2e 0d 0a  by the caller...
20b0: 20 20 20 20 23 0d 0a 20 20 20 20 73 65 74 20 64      #..    set d
20c0: 62 20 5b 73 71 6c 20 6f 70 65 6e 20 2d 74 79 70  b [sql open -typ
20d0: 65 20 53 51 4c 69 74 65 20 5b 73 75 62 73 74 20  e SQLite [subst 
20e0: 24 63 6f 6e 6e 65 63 74 69 6f 6e 5d 5d 0d 0a 20  $connection]].. 
20f0: 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 63 6c   }.....  proc cl
2100: 65 61 6e 75 70 44 62 20 7b 66 69 6c 65 4e 61 6d  eanupDb {fileNam
2110: 65 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 7d 20  e {varName db}} 
2120: 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20  {..    #..    # 
2130: 4e 4f 54 45 3a 20 52 65 66 65 72 20 74 6f 20 74  NOTE: Refer to t
2140: 68 65 20 73 70 65 63 69 66 69 65 64 20 76 61 72  he specified var
2150: 69 61 62 6c 65 20 28 65 2e 67 2e 20 22 64 62 22  iable (e.g. "db"
2160: 29 20 69 6e 20 74 68 65 20 63 6f 6e 74 65 78 74  ) in the context
2170: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 23 20 20   of the..    #  
2180: 20 20 20 20 20 63 61 6c 6c 65 72 2e 20 20 54 68       caller.  Th
2190: 65 20 68 61 6e 64 6c 65 20 74 6f 20 74 68 65 20  e handle to the 
21a0: 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73 65 20  opened database 
21b0: 69 73 20 73 74 6f 72 65 64 20 74 68 65 72 65 2e  is stored there.
21c0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 75 70 76  ..    #..    upv
21d0: 61 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62  ar 1 $varName db
21e0: 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23  ....    #..    #
21f0: 20 4e 4f 54 45 3a 20 43 6c 6f 73 65 20 74 68 65   NOTE: Close the
2200: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 74   connection to t
2210: 68 65 20 64 61 74 61 62 61 73 65 20 6e 6f 77 2e  he database now.
2220: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 61 6c    This should al
2230: 6c 6f 77 20 75 73 20 74 6f 0d 0a 20 20 20 20 23  low us to..    #
2240: 20 20 20 20 20 20 20 64 65 6c 65 74 65 20 74 68         delete th
2250: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
2260: 61 62 61 73 65 20 66 69 6c 65 2e 0d 0a 20 20 20  abase file...   
2270: 20 23 0d 0a 20 20 20 20 63 61 74 63 68 20 7b 73   #..    catch {s
2280: 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 0d 0a 0d  ql close $db}...
2290: 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f  .    #..    # NO
22a0: 54 45 3a 20 44 65 6c 65 74 65 20 74 68 65 20 74  TE: Delete the t
22b0: 65 73 74 20 64 61 74 61 62 61 73 65 20 66 69 6c  est database fil
22c0: 65 20 6e 6f 77 2e 20 20 46 6f 72 20 6e 6f 77 2c  e now.  For now,
22d0: 20 61 6c 6c 20 74 65 73 74 20 64 61 74 61 62 61   all test databa
22e0: 73 65 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20  se..    #       
22f0: 66 69 6c 65 73 20 61 72 65 20 73 74 6f 72 65 64  files are stored
2300: 20 69 6e 20 74 68 65 20 74 65 6d 70 6f 72 61 72   in the temporar
2310: 79 20 64 69 72 65 63 74 6f 72 79 2e 0d 0a 20 20  y directory...  
2320: 20 20 23 0d 0a 20 20 20 20 63 61 74 63 68 20 7b    #..    catch {
2330: 66 69 6c 65 20 64 65 6c 65 74 65 20 5b 66 69 6c  file delete [fil
2340: 65 20 6a 6f 69 6e 20 5b 67 65 74 54 65 6d 70 6f  e join [getTempo
2350: 72 61 72 79 50 61 74 68 5d 20 5b 66 69 6c 65 20  raryPath] [file 
2360: 74 61 69 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d  tail $fileName]]
2370: 7d 0d 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f  }..  }.....  pro
2380: 63 20 72 75 6e 53 51 4c 69 74 65 54 65 73 74 50  c runSQLiteTestP
2390: 72 6f 6c 6f 67 75 65 20 7b 7d 20 7b 0d 0a 20 20  rologue {} {..  
23a0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
23b0: 20 53 6b 69 70 20 72 75 6e 6e 69 6e 67 20 6f 75   Skip running ou
23c0: 72 20 63 75 73 74 6f 6d 20 70 72 6f 6c 6f 67 75  r custom prologu
23d0: 65 20 69 66 20 74 68 65 20 6d 61 69 6e 20 6f 6e  e if the main on
23e0: 65 20 68 61 73 20 62 65 65 6e 20 73 6b 69 70 70  e has been skipp
23f0: 65 64 2e 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20  ed...    #..    
2400: 69 66 20 7b 21 5b 69 6e 66 6f 20 65 78 69 73 74  if {![info exist
2410: 73 20 3a 3a 6e 6f 28 70 72 6f 6c 6f 67 75 65 2e  s ::no(prologue.
2420: 65 61 67 6c 65 29 5d 7d 20 74 68 65 6e 20 7b 0d  eagle)]} then {.
2430: 0a 20 20 20 20 20 20 74 72 79 44 65 6c 65 74 65  .      tryDelete
2440: 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65 2e  Assembly SQLite.
2450: 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20 20  Interop.dll..   
2460: 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
2470: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
2480: 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20  .SQLite.dll..   
2490: 20 20 20 74 72 79 44 65 6c 65 74 65 41 73 73 65     tryDeleteAsse
24a0: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
24b0: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
24c0: 0d 0a 0d 0a 20 20 20 20 20 20 74 72 79 43 6f 70  ....      tryCop
24d0: 79 41 73 73 65 6d 62 6c 79 20 53 51 4c 69 74 65  yAssembly SQLite
24e0: 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c 0d 0a 20 20  .Interop.dll..  
24f0: 20 20 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d      tryCopyAssem
2500: 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e  bly System.Data.
2510: 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20 20 20 20  SQLite.dll..    
2520: 20 20 74 72 79 43 6f 70 79 41 73 73 65 6d 62 6c    tryCopyAssembl
2530: 79 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  y System.Data.SQ
2540: 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c 0d 0a 0d  Lite.Linq.dll...
2550: 0a 20 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73  .      tryLoadAs
2560: 73 65 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61  sembly System.Da
2570: 74 61 2e 53 51 4c 69 74 65 2e 64 6c 6c 0d 0a 20  ta.SQLite.dll.. 
2580: 20 20 20 20 20 74 72 79 4c 6f 61 64 41 73 73 65       tryLoadAsse
2590: 6d 62 6c 79 20 53 79 73 74 65 6d 2e 44 61 74 61  mbly System.Data
25a0: 2e 53 51 4c 69 74 65 2e 4c 69 6e 71 2e 64 6c 6c  .SQLite.Linq.dll
25b0: 0d 0a 0d 0a 20 20 20 20 20 20 63 61 74 63 68 20  ....      catch 
25c0: 7b 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73  {..        tputs
25d0: 20 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c   $::test_channel
25e0: 20 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a   [appendArgs \..
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d              "---
2600: 2d 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f  - file version o
2610: 66 20 5c 22 53 51 4c 69 74 65 2e 49 6e 74 65 72  f \"SQLite.Inter
2620: 6f 70 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d  op.dll\"... " \.
2630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69  .            [fi
2640: 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42  le version [getB
2650: 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 51  inaryFileName SQ
2660: 4c 69 74 65 2e 49 6e 74 65 72 6f 70 2e 64 6c 6c  Lite.Interop.dll
2670: 5d 5d 20 5c 6e 5d 0d 0a 20 20 20 20 20 20 7d 0d  ]] \n]..      }.
2680: 0a 0d 0a 20 20 20 20 20 20 63 61 74 63 68 20 7b  ...      catch {
2690: 0d 0a 20 20 20 20 20 20 20 20 74 70 75 74 73 20  ..        tputs 
26a0: 24 3a 3a 74 65 73 74 5f 63 68 61 6e 6e 65 6c 20  $::test_channel 
26b0: 5b 61 70 70 65 6e 64 41 72 67 73 20 5c 0d 0a 20  [appendArgs \.. 
26c0: 20 20 20 20 20 20 20 20 20 20 20 22 2d 2d 2d 2d             "----
26d0: 20 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 6f 66   file version of
26e0: 20 5c 22 53 79 73 74 65 6d 2e 44 61 74 61 2e 53   \"System.Data.S
26f0: 51 4c 69 74 65 2e 64 6c 6c 5c 22 2e 2e 2e 20 22  QLite.dll\"... "
2700: 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   \..            
2710: 5b 66 69 6c 65 20 76 65 72 73 69 6f 6e 20 5b 67  [file version [g
2720: 65 74 42 69 6e 61 72 79 46 69 6c 65 4e 61 6d 65  etBinaryFileName
2730: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
2740: 69 74 65 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a 20  ite.dll]] \n].. 
2750: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2760: 63 61 74 63 68 20 7b 0d 0a 20 20 20 20 20 20 20  catch {..       
2770: 20 74 70 75 74 73 20 24 3a 3a 74 65 73 74 5f 63   tputs $::test_c
2780: 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e 64 41 72  hannel [appendAr
2790: 67 73 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  gs \..          
27a0: 20 20 22 2d 2d 2d 2d 20 66 69 6c 65 20 76 65 72    "---- file ver
27b0: 73 69 6f 6e 20 6f 66 20 5c 22 53 79 73 74 65 6d  sion of \"System
27c0: 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e 4c 69 6e  .Data.SQLite.Lin
27d0: 71 2e 64 6c 6c 5c 22 2e 2e 2e 20 22 20 5c 0d 0a  q.dll\"... " \..
27e0: 20 20 20 20 20 20 20 20 20 20 20 20 5b 66 69 6c              [fil
27f0: 65 20 76 65 72 73 69 6f 6e 20 5b 67 65 74 42 69  e version [getBi
2800: 6e 61 72 79 46 69 6c 65 4e 61 6d 65 20 53 79 73  naryFileName Sys
2810: 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65 2e  tem.Data.SQLite.
2820: 4c 69 6e 71 2e 64 6c 6c 5d 5d 20 5c 6e 5d 0d 0a  Linq.dll]] \n]..
2830: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
2840: 20 73 65 74 20 61 73 73 65 6d 62 6c 69 65 73 20   set assemblies 
2850: 5b 6f 62 6a 65 63 74 20 69 6e 76 6f 6b 65 20 41  [object invoke A
2860: 70 70 44 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74  ppDomain.Current
2870: 44 6f 6d 61 69 6e 20 47 65 74 41 73 73 65 6d 62  Domain GetAssemb
2880: 6c 69 65 73 5d 0d 0a 0d 0a 20 20 20 20 20 20 6f  lies]....      o
2890: 62 6a 65 63 74 20 66 6f 72 65 61 63 68 20 61 73  bject foreach as
28a0: 73 65 6d 62 6c 79 20 24 61 73 73 65 6d 62 6c 69  sembly $assembli
28b0: 65 73 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66  es {..        if
28c0: 20 7b 5b 73 74 72 69 6e 67 20 6d 61 74 63 68 20   {[string match 
28d0: 5c 7b 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51  \{System.Data.SQ
28e0: 4c 69 74 65 2a 20 24 61 73 73 65 6d 62 6c 79 5d  Lite* $assembly]
28f0: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
2900: 20 20 20 20 74 70 75 74 73 20 24 3a 3a 74 65 73      tputs $::tes
2910: 74 5f 63 68 61 6e 6e 65 6c 20 5b 61 70 70 65 6e  t_channel [appen
2920: 64 41 72 67 73 20 5c 0d 0a 20 20 20 20 20 20 20  dArgs \..       
2930: 20 20 20 20 20 20 20 22 2d 2d 2d 2d 20 66 6f 75         "---- fou
2940: 6e 64 20 61 73 73 65 6d 62 6c 79 3a 20 22 20 24  nd assembly: " $
2950: 61 73 73 65 6d 62 6c 79 20 5c 6e 5d 0d 0a 20 20  assembly \n]..  
2960: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d        }..      }
2970: 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a 0c 0d  ..    }..  }....
2980: 0a 20 20 70 72 6f 63 20 72 75 6e 53 51 4c 69 74  .  proc runSQLit
2990: 65 54 65 73 74 45 70 69 6c 6f 67 75 65 20 7b 7d  eTestEpilogue {}
29a0: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
29b0: 20 4e 4f 54 45 3a 20 53 6b 69 70 20 72 75 6e 6e   NOTE: Skip runn
29c0: 69 6e 67 20 6f 75 72 20 63 75 73 74 6f 6d 20 65  ing our custom e
29d0: 70 69 6c 6f 67 75 65 20 69 66 20 74 68 65 20 6d  pilogue if the m
29e0: 61 69 6e 20 6f 6e 65 20 68 61 73 20 62 65 65 6e  ain one has been
29f0: 20 73 6b 69 70 70 65 64 2e 0d 0a 20 20 20 20 23   skipped...    #
2a00: 0d 0a 20 20 20 20 69 66 20 7b 21 5b 69 6e 66 6f  ..    if {![info
2a10: 20 65 78 69 73 74 73 20 3a 3a 6e 6f 28 65 70 69   exists ::no(epi
2a20: 6c 6f 67 75 65 2e 65 61 67 6c 65 29 5d 7d 20 74  logue.eagle)]} t
2a30: 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20 23 0d 0a  hen {..      #..
2a40: 20 20 20 20 20 20 23 20 4e 4f 54 45 3a 20 46 6f        # NOTE: Fo
2a50: 72 20 6e 6f 77 2c 20 6e 6f 74 68 69 6e 67 20 69  r now, nothing i
2a60: 73 20 64 6f 6e 65 20 68 65 72 65 2e 0d 0a 20 20  s done here...  
2a70: 20 20 20 20 23 0d 0a 20 20 20 20 7d 0d 0a 20 20      #..    }..  
2a80: 7d 0d 0a 7d 0d 0a                                }..}..