System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact b7e00244f6bb9473f0a5bf8dd532ad8d8762fc4f:


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 46 69 6c 65  roc getBuildFile
0140: 4e 61 6d 65 20 7b 20 66 69 6c 65 4e 61 6d 65 20  Name { fileName 
0150: 7d 20 7b 0d 0a 20 20 20 20 72 65 74 75 72 6e 20  } {..    return 
0160: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 66 69 6c 65  [file join [file
0170: 20 64 69 72 6e 61 6d 65 20 24 3a 3a 70 61 74 68   dirname $::path
0180: 5d 20 62 69 6e 20 5c 0d 0a 20 20 20 20 20 20 20  ] bin \..       
0190: 20 5b 65 78 70 72 20 7b 5b 68 61 76 65 43 6f 6e   [expr {[haveCon
01a0: 73 74 72 61 69 6e 74 20 69 6d 61 67 65 52 75 6e  straint imageRun
01b0: 74 69 6d 65 34 30 5d 20 3f 20 22 32 30 31 30 22  time40] ? "2010"
01c0: 20 3a 20 22 32 30 30 38 22 7d 5d 20 5c 0d 0a 20   : "2008"}] \.. 
01d0: 20 20 20 20 20 20 20 24 3a 3a 74 65 73 74 5f 63         $::test_c
01e0: 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 62 69 6e  onfiguration bin
01f0: 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 20 20 7d   $fileName]..  }
0200: 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20 63 6f 70 79  .....  proc copy
0210: 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c 65 4e  Assembly { fileN
0220: 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 23 0d 0a  ame } {..    #..
0230: 20 20 20 20 23 20 4e 4f 54 45 3a 20 49 66 20 77      # NOTE: If w
0240: 65 20 63 61 6e 6e 6f 74 20 63 6f 70 79 20 74 68  e cannot copy th
0250: 65 20 66 69 6c 65 20 74 68 65 6e 20 69 74 20 69  e file then it i
0260: 73 20 70 72 6f 62 61 62 6c 79 20 61 6c 72 65 61  s probably alrea
0270: 64 79 20 6c 6f 61 64 65 64 2c 0d 0a 20 20 20 20  dy loaded,..    
0280: 23 20 20 20 20 20 20 20 69 67 6e 6f 72 65 20 74  #       ignore t
0290: 68 65 20 65 72 72 6f 72 2e 0d 0a 20 20 20 20 23  he error...    #
02a0: 0d 0a 20 20 20 20 63 61 74 63 68 20 7b 0d 0a 20  ..    catch {.. 
02b0: 20 20 20 20 20 66 69 6c 65 20 63 6f 70 79 20 2d       file copy -
02c0: 66 6f 72 63 65 20 5b 67 65 74 42 75 69 6c 64 46  force [getBuildF
02d0: 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61 6d  ileName $fileNam
02e0: 65 5d 20 5c 0d 0a 20 20 20 20 20 20 20 20 20 20  e] \..          
02f0: 5b 66 69 6c 65 20 6a 6f 69 6e 20 5b 69 6e 66 6f  [file join [info
0300: 20 62 69 6e 61 72 79 5d 20 24 66 69 6c 65 4e 61   binary] $fileNa
0310: 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d  me]..    }..  }.
0320: 0a 0c 0d 0a 20 20 70 72 6f 63 20 74 72 79 4c 6f  ....  proc tryLo
0330: 61 64 41 73 73 65 6d 62 6c 79 20 7b 20 66 69 6c  adAssembly { fil
0340: 65 4e 61 6d 65 20 7d 20 7b 0d 0a 20 20 20 20 73  eName } {..    s
0350: 65 74 20 66 69 6c 65 4e 61 6d 65 20 5b 67 65 74  et fileName [get
0360: 42 75 69 6c 64 46 69 6c 65 4e 61 6d 65 20 24 66  BuildFileName $f
0370: 69 6c 65 4e 61 6d 65 5d 0d 0a 0d 0a 20 20 20 20  ileName]....    
0380: 69 66 20 7b 5b 63 61 74 63 68 20 7b 73 65 74 20  if {[catch {set 
0390: 61 73 73 65 6d 62 6c 79 20 5c 0d 0a 20 20 20 20  assembly \..    
03a0: 20 20 20 20 5b 6f 62 6a 65 63 74 20 6c 6f 61 64      [object load
03b0: 20 2d 6c 6f 61 64 74 79 70 65 20 46 69 6c 65 20   -loadtype File 
03c0: 24 66 69 6c 65 4e 61 6d 65 5d 7d 5d 20 3d 3d 20  $fileName]}] == 
03d0: 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20  0} then {..     
03e0: 20 23 0d 0a 20 20 20 20 20 20 23 20 4e 4f 54 45   #..      # NOTE
03f0: 3a 20 4e 6f 77 2c 20 61 64 64 20 74 68 65 20 6e  : Now, add the n
0400: 65 63 65 73 73 61 72 79 20 74 65 73 74 20 63 6f  ecessary test co
0410: 6e 73 74 72 61 69 6e 74 2e 0d 0a 20 20 20 20 20  nstraint...     
0420: 20 23 0d 0a 20 20 20 20 20 20 61 64 64 43 6f 6e   #..      addCon
0430: 73 74 72 61 69 6e 74 20 5b 66 69 6c 65 20 72 6f  straint [file ro
0440: 6f 74 6e 61 6d 65 20 5b 66 69 6c 65 20 74 61 69  otname [file tai
0450: 6c 20 24 66 69 6c 65 4e 61 6d 65 5d 5d 0d 0a 0d  l $fileName]]...
0460: 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20 20  .      #..      
0470: 23 20 4e 4f 54 45 3a 20 52 65 74 75 72 6e 20 74  # NOTE: Return t
0480: 68 65 20 66 75 6c 6c 20 70 61 74 68 20 6f 66 20  he full path of 
0490: 74 68 65 20 6c 6f 61 64 65 64 20 66 69 6c 65 2e  the loaded file.
04a0: 0d 0a 20 20 20 20 20 20 23 0d 0a 20 20 20 20 20  ..      #..     
04b0: 20 72 65 74 75 72 6e 20 24 66 69 6c 65 4e 61 6d   return $fileNam
04c0: 65 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  e..    }....    
04d0: 72 65 74 75 72 6e 20 22 22 0d 0a 20 20 7d 0d 0a  return ""..  }..
04e0: 0c 0d 0a 20 20 70 72 6f 63 20 63 6f 6d 70 69 6c  ...  proc compil
04f0: 65 43 53 68 61 72 70 57 69 74 68 20 7b 20 74 65  eCSharpWith { te
0500: 78 74 20 72 65 73 75 6c 74 73 56 61 72 4e 61 6d  xt resultsVarNam
0510: 65 20 65 72 72 6f 72 73 56 61 72 4e 61 6d 65 20  e errorsVarName 
0520: 66 69 6c 65 4e 61 6d 65 73 20 61 72 67 73 20 7d  fileNames args }
0530: 20 7b 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23   {..    #..    #
0540: 20 4e 4f 54 45 3a 20 43 72 65 61 74 65 20 74 68   NOTE: Create th
0550: 65 20 62 61 73 65 20 63 6f 6d 6d 61 6e 64 20 74  e base command t
0560: 6f 20 65 76 61 6c 75 61 74 65 20 61 6e 64 20 61  o evaluate and a
0570: 64 64 20 74 68 65 20 70 72 6f 70 65 72 74 79 20  dd the property 
0580: 73 65 74 74 69 6e 67 73 0d 0a 20 20 20 20 23 20  settings..    # 
0590: 20 20 20 20 20 20 74 68 61 74 20 61 72 65 20 61        that are a
05a0: 6c 6d 6f 73 74 20 61 6c 77 61 79 73 20 6e 65 65  lmost always nee
05b0: 64 65 64 20 62 79 20 6f 75 72 20 75 6e 69 74 20  ded by our unit 
05c0: 74 65 73 74 73 20 28 69 2e 65 2e 20 74 68 65 20  tests (i.e. the 
05d0: 53 79 73 74 65 6d 0d 0a 20 20 20 20 23 20 20 20  System..    #   
05e0: 20 20 20 20 61 6e 64 20 53 79 73 74 65 6d 2e 44      and System.D
05f0: 61 74 61 20 61 73 73 65 6d 62 6c 79 20 72 65 66  ata assembly ref
0600: 65 72 65 6e 63 65 73 29 2e 0d 0a 20 20 20 20 23  erences)...    #
0610: 0d 0a 20 20 20 20 73 65 74 20 63 6f 6d 6d 61 6e  ..    set comman
0620: 64 20 5b 6c 69 73 74 20 63 6f 6d 70 69 6c 65 43  d [list compileC
0630: 53 68 61 72 70 20 24 74 65 78 74 20 72 65 73 75  Sharp $text resu
0640: 6c 74 73 20 65 72 72 6f 72 73 20 5c 0d 0a 20 20  lts errors \..  
0650: 20 20 20 20 20 20 52 65 66 65 72 65 6e 63 65 64        Referenced
0660: 41 73 73 65 6d 62 6c 69 65 73 2e 41 64 64 20 53  Assemblies.Add S
0670: 79 73 74 65 6d 2e 64 6c 6c 20 52 65 66 65 72 65  ystem.dll Refere
0680: 6e 63 65 64 41 73 73 65 6d 62 6c 69 65 73 2e 41  ncedAssemblies.A
0690: 64 64 20 5c 0d 0a 20 20 20 20 20 20 20 20 53 79  dd \..        Sy
06a0: 73 74 65 6d 2e 44 61 74 61 2e 64 6c 6c 5d 0d 0a  stem.Data.dll]..
06b0: 0d 0a 20 20 20 20 23 0d 0a 20 20 20 20 23 20 4e  ..    #..    # N
06c0: 4f 54 45 3a 20 41 64 64 20 61 6c 6c 20 74 68 65  OTE: Add all the
06d0: 20 70 72 6f 76 69 64 65 64 20 66 69 6c 65 20 6e   provided file n
06e0: 61 6d 65 73 20 61 73 20 61 73 73 65 6d 62 6c 79  ames as assembly
06f0: 20 72 65 66 65 72 65 6e 63 65 73 2e 0d 0a 20 20   references...  
0700: 20 20 23 0d 0a 20 20 20 20 66 6f 72 65 61 63 68    #..    foreach
0710: 20 66 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e   fileName $fileN
0720: 61 6d 65 73 20 7b 0d 0a 20 20 20 20 20 20 6c 61  ames {..      la
0730: 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 52 65  ppend command Re
0740: 66 65 72 65 6e 63 65 64 41 73 73 65 6d 62 6c 69  ferencedAssembli
0750: 65 73 2e 41 64 64 20 5b 67 65 74 42 75 69 6c 64  es.Add [getBuild
0760: 46 69 6c 65 4e 61 6d 65 20 24 66 69 6c 65 4e 61  FileName $fileNa
0770: 6d 65 5d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  me]..    }....  
0780: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
0790: 20 41 64 64 20 74 68 65 20 65 78 74 72 61 20 61   Add the extra a
07a0: 72 67 75 6d 65 6e 74 73 2c 20 69 66 20 61 6e 79  rguments, if any
07b0: 2c 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  , to the command
07c0: 20 74 6f 20 65 76 61 6c 75 61 74 65 2e 0d 0a 20   to evaluate... 
07d0: 20 20 20 23 0d 0a 20 20 20 20 65 76 61 6c 20 6c     #..    eval l
07e0: 61 70 70 65 6e 64 20 63 6f 6d 6d 61 6e 64 20 24  append command $
07f0: 61 72 67 73 0d 0a 0d 0a 20 20 20 20 23 0d 0a 20  args....    #.. 
0800: 20 20 20 23 20 4e 4f 54 45 3a 20 41 6c 69 61 73     # NOTE: Alias
0810: 20 74 68 65 20 63 6f 6d 70 69 6c 65 72 20 6c 6f   the compiler lo
0820: 63 61 6c 20 72 65 73 75 6c 74 73 20 61 6e 64 20  cal results and 
0830: 65 72 72 6f 72 73 20 76 61 72 69 61 62 6c 65 73  errors variables
0840: 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 23 20 20   to the..    #  
0850: 20 20 20 20 20 76 61 72 69 61 62 6c 65 20 6e 61       variable na
0860: 6d 65 73 20 70 72 6f 76 69 64 65 64 20 62 79 20  mes provided by 
0870: 6f 75 72 20 63 61 6c 6c 65 72 2e 0d 0a 20 20 20  our caller...   
0880: 20 23 0d 0a 20 20 20 20 75 70 76 61 72 20 31 20   #..    upvar 1 
0890: 24 72 65 73 75 6c 74 73 56 61 72 4e 61 6d 65 20  $resultsVarName 
08a0: 72 65 73 75 6c 74 73 0d 0a 20 20 20 20 75 70 76  results..    upv
08b0: 61 72 20 31 20 24 65 72 72 6f 72 73 56 61 72 4e  ar 1 $errorsVarN
08c0: 61 6d 65 20 65 72 72 6f 72 73 0d 0a 0d 0a 20 20  ame errors....  
08d0: 20 20 23 0d 0a 20 20 20 20 23 20 4e 4f 54 45 3a    #..    # NOTE:
08e0: 20 45 76 61 6c 75 61 74 65 20 74 68 65 20 63 6f   Evaluate the co
08f0: 6e 73 74 72 75 63 74 65 64 20 5b 63 6f 6d 70 69  nstructed [compi
0900: 6c 65 43 53 68 61 72 70 5d 20 63 6f 6d 6d 61 6e  leCSharp] comman
0910: 64 20 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65  d and return the
0920: 0d 0a 20 20 20 20 23 20 20 20 20 20 20 20 72 65  ..    #       re
0930: 73 75 6c 74 2e 0d 0a 20 20 20 20 23 0d 0a 20 20  sult...    #..  
0940: 20 20 65 76 61 6c 20 24 63 6f 6d 6d 61 6e 64 0d    eval $command.
0950: 0a 20 20 7d 0d 0a 0c 0d 0a 20 20 70 72 6f 63 20  .  }.....  proc 
0960: 73 65 74 75 70 44 62 20 7b 66 69 6c 65 4e 61 6d  setupDb {fileNam
0970: 65 20 7b 6d 6f 64 65 20 22 22 7d 20 7b 64 65 6c  e {mode ""} {del
0980: 65 74 65 20 22 22 7d 20 7b 65 78 74 72 61 20 22  ete ""} {extra "
0990: 22 7d 20 7b 76 61 72 4e 61 6d 65 20 64 62 7d 7d  "} {varName db}}
09a0: 20 7b 0d 0a 20 20 20 20 73 65 74 20 66 69 6c 65   {..    set file
09b0: 4e 61 6d 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20  Name [file join 
09c0: 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50 61 74  [getTemporaryPat
09d0: 68 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 0d 0a 0d  h] $fileName]...
09e0: 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69 6e 67  .    if {[string
09f0: 20 6c 65 6e 67 74 68 20 24 64 65 6c 65 74 65 5d   length $delete]
0a00: 20 3d 3d 20 30 20 7c 7c 20 24 64 65 6c 65 74 65   == 0 || $delete
0a10: 7d 20 74 68 65 6e 20 7b 0d 0a 20 20 20 20 20 20  } then {..      
0a20: 63 61 74 63 68 20 7b 66 69 6c 65 20 64 65 6c 65  catch {file dele
0a30: 74 65 20 24 66 69 6c 65 4e 61 6d 65 7d 0d 0a 20  te $fileName}.. 
0a40: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 75 70 76 61     }....    upva
0a50: 72 20 31 20 24 76 61 72 4e 61 6d 65 20 64 62 0d  r 1 $varName db.
0a60: 0a 0d 0a 20 20 20 20 73 65 74 20 63 6f 6e 6e 65  ...    set conne
0a70: 63 74 69 6f 6e 20 7b 44 61 74 61 20 53 6f 75 72  ction {Data Sour
0a80: 63 65 3d 24 7b 66 69 6c 65 4e 61 6d 65 7d 7d 0d  ce=${fileName}}.
0a90: 0a 0d 0a 20 20 20 20 69 66 20 7b 5b 73 74 72 69  ...    if {[stri
0aa0: 6e 67 20 6c 65 6e 67 74 68 20 24 6d 6f 64 65 5d  ng length $mode]
0ab0: 20 3e 20 30 7d 20 74 68 65 6e 20 7b 0d 0a 20 20   > 0} then {..  
0ac0: 20 20 20 20 61 70 70 65 6e 64 20 63 6f 6e 6e 65      append conne
0ad0: 63 74 69 6f 6e 20 7b 3b 4a 6f 75 72 6e 61 6c 20  ction {;Journal 
0ae0: 4d 6f 64 65 3d 24 7b 6d 6f 64 65 7d 7d 0d 0a 20  Mode=${mode}}.. 
0af0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 66 20 7b     }....    if {
0b00: 5b 73 74 72 69 6e 67 20 6c 65 6e 67 74 68 20 24  [string length $
0b10: 65 78 74 72 61 5d 20 3e 20 30 7d 20 74 68 65 6e  extra] > 0} then
0b20: 20 7b 0d 0a 20 20 20 20 20 20 61 70 70 65 6e 64   {..      append
0b30: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 5c 3b 20 24   connection \; $
0b40: 65 78 74 72 61 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  extra..    }....
0b50: 20 20 20 20 73 65 74 20 64 62 20 5b 73 71 6c 20      set db [sql 
0b60: 6f 70 65 6e 20 2d 74 79 70 65 20 53 51 4c 69 74  open -type SQLit
0b70: 65 20 5b 73 75 62 73 74 20 24 63 6f 6e 6e 65 63  e [subst $connec
0b80: 74 69 6f 6e 5d 5d 0d 0a 20 20 7d 0d 0a 0c 0d 0a  tion]]..  }.....
0b90: 20 20 70 72 6f 63 20 63 6c 65 61 6e 75 70 44 62    proc cleanupDb
0ba0: 20 7b 66 69 6c 65 4e 61 6d 65 20 7b 76 61 72 4e   {fileName {varN
0bb0: 61 6d 65 20 64 62 7d 7d 20 7b 0d 0a 20 20 20 20  ame db}} {..    
0bc0: 75 70 76 61 72 20 31 20 24 76 61 72 4e 61 6d 65  upvar 1 $varName
0bd0: 20 64 62 0d 0a 20 20 20 20 63 61 74 63 68 20 7b   db..    catch {
0be0: 73 71 6c 20 63 6c 6f 73 65 20 24 64 62 7d 0d 0a  sql close $db}..
0bf0: 20 20 20 20 63 61 74 63 68 20 7b 66 69 6c 65 20      catch {file 
0c00: 64 65 6c 65 74 65 20 5b 66 69 6c 65 20 6a 6f 69  delete [file joi
0c10: 6e 20 5b 67 65 74 54 65 6d 70 6f 72 61 72 79 50  n [getTemporaryP
0c20: 61 74 68 5d 20 24 66 69 6c 65 4e 61 6d 65 5d 7d  ath] $fileName]}
0c30: 0d 0a 20 20 7d 0d 0a 7d 0d 0a                    ..  }..}..