System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 77fc41fd7139bf25736081e05db83e746d95b886:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 20 2a 20 41 44 4f  *********. * ADO
0040: 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50 72  .NET 2.0 Data Pr
0050: 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69 74  ovider for SQLit
0060: 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0a 20 2a  e Version 3.X. *
0070: 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f 62 65   Written by Robe
0080: 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f 62 65  rt Simpson (robe
0090: 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65 73 6f  rt@blackcastleso
00a0: 66 74 2e 63 6f 6d 29 0a 20 2a 20 0a 20 2a 20 52  ft.com). * . * R
00b0: 65 6c 65 61 73 65 64 20 74 6f 20 74 68 65 20 70  eleased to the p
00c0: 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c 20 75 73  ublic domain, us
00d0: 65 20 61 74 20 79 6f 75 72 20 6f 77 6e 20 72 69  e at your own ri
00e0: 73 6b 21 0a 20 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  sk!. ***********
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
0120: 6e 61 6d 65 73 70 61 63 65 20 53 79 73 74 65 6d  namespace System
0130: 2e 44 61 74 61 2e 53 51 4c 69 74 65 0a 7b 0a 20  .Data.SQLite.{. 
0140: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 3b 0a 20   using System;. 
0150: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61   using System.Da
0160: 74 61 2e 43 6f 6d 6d 6f 6e 3b 0a 20 20 75 73 69  ta.Common;.  usi
0170: 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f 6e  ng System.Compon
0180: 65 6e 74 4d 6f 64 65 6c 3b 0a 20 20 75 73 69 6e  entModel;.  usin
0190: 67 20 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74  g System.Collect
01a0: 69 6f 6e 73 3b 0a 20 20 75 73 69 6e 67 20 53 79  ions;.  using Sy
01b0: 73 74 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69  stem.Globalizati
01c0: 6f 6e 3b 0a 20 20 75 73 69 6e 67 20 53 79 73 74  on;.  using Syst
01d0: 65 6d 2e 52 65 66 6c 65 63 74 69 6f 6e 3b 0a 0a  em.Reflection;..
01e0: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
01f0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0a 20  MPACTFRAMEWORK. 
0200: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0210: 20 2f 2f 2f 20 53 51 4c 69 74 65 20 69 6d 70 6c   /// SQLite impl
0220: 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 44 62  ementation of Db
0230: 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67  ConnectionString
0240: 42 75 69 6c 64 65 72 2e 0a 20 20 2f 2f 2f 20 3c  Builder..  /// <
0250: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 5b 44 65 66  /summary>.  [Def
0260: 61 75 6c 74 50 72 6f 70 65 72 74 79 28 22 44 61  aultProperty("Da
0270: 74 61 53 6f 75 72 63 65 22 29 5d 0a 20 20 5b 44  taSource")].  [D
0280: 65 66 61 75 6c 74 4d 65 6d 62 65 72 28 22 49 74  efaultMember("It
0290: 65 6d 22 29 5d 0a 20 20 70 75 62 6c 69 63 20 73  em")].  public s
02a0: 65 61 6c 65 64 20 63 6c 61 73 73 20 53 51 4c 69  ealed class SQLi
02b0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  teConnectionStri
02c0: 6e 67 42 75 69 6c 64 65 72 20 3a 20 44 62 43 6f  ngBuilder : DbCo
02d0: 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75  nnectionStringBu
02e0: 69 6c 64 65 72 0a 20 20 7b 0a 20 20 20 20 2f 2f  ilder.  {.    //
02f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
0300: 2f 2f 2f 20 50 72 6f 70 65 72 74 69 65 73 20 6f  /// Properties o
0310: 66 20 74 68 69 73 20 63 6c 61 73 73 0a 20 20 20  f this class.   
0320: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
0330: 20 20 20 20 70 72 69 76 61 74 65 20 48 61 73 68      private Hash
0340: 74 61 62 6c 65 20 5f 70 72 6f 70 65 72 74 69 65  table _propertie
0350: 73 3b 0a 0a 20 20 20 20 2f 2f 2f 20 3c 6f 76 65  s;..    /// <ove
0360: 72 6c 6f 61 64 73 3e 0a 20 20 20 20 2f 2f 2f 20  rloads>.    /// 
0370: 43 6f 6e 73 74 72 75 63 74 73 20 61 20 6e 65 77  Constructs a new
0380: 20 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65   instance of the
0390: 20 63 6c 61 73 73 0a 20 20 20 20 2f 2f 2f 20 3c   class.    /// <
03a0: 2f 6f 76 65 72 6c 6f 61 64 73 3e 0a 20 20 20 20  /overloads>.    
03b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
03c0: 20 20 2f 2f 2f 20 44 65 66 61 75 6c 74 20 63 6f    /// Default co
03d0: 6e 73 74 72 75 63 74 6f 72 0a 20 20 20 20 2f 2f  nstructor.    //
03e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20  / </summary>.   
03f0: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 43 6f   public SQLiteCo
0400: 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75  nnectionStringBu
0410: 69 6c 64 65 72 28 29 0a 20 20 20 20 7b 0a 20 20  ilder().    {.  
0420: 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 28 6e      Initialize(n
0430: 75 6c 6c 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ull);.    }..   
0440: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
0450: 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74     /// Construct
0460: 73 20 61 20 6e 65 77 20 69 6e 73 74 61 6e 63 65  s a new instance
0470: 20 6f 66 20 74 68 65 20 63 6c 61 73 73 20 75 73   of the class us
0480: 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65  ing the specifie
0490: 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  d connection str
04a0: 69 6e 67 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ing..    /// </s
04b0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
04c0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
04d0: 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 22 3e 54  nectionString">T
04e0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
04f0: 72 69 6e 67 20 74 6f 20 70 61 72 73 65 3c 2f 70  ring to parse</p
0500: 61 72 61 6d 3e 0a 20 20 20 20 70 75 62 6c 69 63  aram>.    public
0510: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
0520: 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 73  nStringBuilder(s
0530: 74 72 69 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e  tring connection
0540: 53 74 72 69 6e 67 29 0a 20 20 20 20 7b 0a 20 20  String).    {.  
0550: 20 20 20 20 49 6e 69 74 69 61 6c 69 7a 65 28 63      Initialize(c
0560: 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 29  onnectionString)
0570: 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  ;.    }..    ///
0580: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
0590: 2f 2f 20 50 72 69 76 61 74 65 20 69 6e 69 74 69  // Private initi
05a0: 61 6c 69 7a 65 72 2c 20 77 68 69 63 68 20 61 73  alizer, which as
05b0: 73 69 67 6e 73 20 74 68 65 20 63 6f 6e 6e 65 63  signs the connec
05c0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 61 6e 64 20  tion string and 
05d0: 72 65 73 65 74 73 20 74 68 65 20 62 75 69 6c 64  resets the build
05e0: 65 72 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  er.    /// </sum
05f0: 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70  mary>.    /// <p
0600: 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 53 74  aram name="cnnSt
0610: 72 69 6e 67 22 3e 54 68 65 20 63 6f 6e 6e 65 63  ring">The connec
0620: 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 6f 20 61  tion string to a
0630: 73 73 69 67 6e 3c 2f 70 61 72 61 6d 3e 0a 20 20  ssign</param>.  
0640: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 49    private void I
0650: 6e 69 74 69 61 6c 69 7a 65 28 73 74 72 69 6e 67  nitialize(string
0660: 20 63 6e 6e 53 74 72 69 6e 67 29 0a 20 20 20 20   cnnString).    
0670: 7b 0a 20 20 20 20 20 20 5f 70 72 6f 70 65 72 74  {.      _propert
0680: 69 65 73 20 3d 20 6e 65 77 20 48 61 73 68 74 61  ies = new Hashta
0690: 62 6c 65 28 53 74 72 69 6e 67 43 6f 6d 70 61 72  ble(StringCompar
06a0: 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  er.OrdinalIgnore
06b0: 43 61 73 65 29 3b 0a 20 20 20 20 20 20 74 72 79  Case);.      try
06c0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
06d0: 20 62 61 73 65 2e 47 65 74 50 72 6f 70 65 72 74   base.GetPropert
06e0: 69 65 73 28 5f 70 72 6f 70 65 72 74 69 65 73 29  ies(_properties)
06f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
0700: 63 61 74 63 68 28 4e 6f 74 49 6d 70 6c 65 6d 65  catch(NotImpleme
0710: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 29 0a 20  ntedException). 
0720: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 46       {.        F
0730: 61 6c 6c 62 61 63 6b 47 65 74 50 72 6f 70 65 72  allbackGetProper
0740: 74 69 65 73 28 5f 70 72 6f 70 65 72 74 69 65 73  ties(_properties
0750: 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
0760: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
0770: 75 6c 6c 4f 72 45 6d 70 74 79 28 63 6e 6e 53 74  ullOrEmpty(cnnSt
0780: 72 69 6e 67 29 20 3d 3d 20 66 61 6c 73 65 29 0a  ring) == false).
0790: 20 20 20 20 20 20 20 20 43 6f 6e 6e 65 63 74 69          Connecti
07a0: 6f 6e 53 74 72 69 6e 67 20 3d 20 63 6e 6e 53 74  onString = cnnSt
07b0: 72 69 6e 67 3b 0a 20 20 20 20 7d 0a 0a 20 20 20  ring;.    }..   
07c0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
07d0: 20 20 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73     /// Gets/Sets
07e0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 65 72   the default ver
07f0: 73 69 6f 6e 20 6f 66 20 74 68 65 20 53 51 4c 69  sion of the SQLi
0800: 74 65 20 65 6e 67 69 6e 65 20 74 6f 20 69 6e 73  te engine to ins
0810: 74 61 6e 74 69 61 74 65 2e 20 20 43 75 72 72 65  tantiate.  Curre
0820: 6e 74 6c 79 20 74 68 65 20 6f 6e 6c 79 20 76 61  ntly the only va
0830: 6c 69 64 20 76 61 6c 75 65 20 69 73 20 33 2c 20  lid value is 3, 
0840: 69 6e 64 69 63 61 74 69 6e 67 20 76 65 72 73 69  indicating versi
0850: 6f 6e 20 33 20 6f 66 20 74 68 65 20 73 71 6c 69  on 3 of the sqli
0860: 74 65 20 6c 69 62 72 61 72 79 2e 0a 20 20 20 20  te library..    
0870: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20  /// </summary>. 
0880: 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72     [Browsable(tr
0890: 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c  ue)].    [Defaul
08a0: 74 56 61 6c 75 65 28 33 29 5d 0a 20 20 20 20 70  tValue(3)].    p
08b0: 75 62 6c 69 63 20 69 6e 74 20 56 65 72 73 69 6f  ublic int Versio
08c0: 6e 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  n.    {.      ge
08d0: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
08e0: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0a    object value;.
08f0: 20 20 20 20 20 20 20 20 54 72 79 47 65 74 56 61          TryGetVa
0900: 6c 75 65 28 22 76 65 72 73 69 6f 6e 22 2c 20 6f  lue("version", o
0910: 75 74 20 76 61 6c 75 65 29 3b 0a 20 20 20 20 20  ut value);.     
0920: 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72     return Conver
0930: 74 2e 54 6f 49 6e 74 33 32 28 76 61 6c 75 65 2c  t.ToInt32(value,
0940: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
0950: 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20  rentCulture);.  
0960: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a      }.      set.
0970: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0980: 69 66 20 28 76 61 6c 75 65 20 21 3d 20 33 29 0a  if (value != 3).
0990: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
09a0: 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72 74 65 64  new NotSupported
09b0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0a 0a 20 20  Exception();..  
09c0: 20 20 20 20 20 20 74 68 69 73 5b 22 76 65 72 73        this["vers
09d0: 69 6f 6e 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20  ion"] = value;. 
09e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
09f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
0a00: 20 20 20 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74      /// Gets/Set
0a10: 73 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 69 7a  s the synchroniz
0a20: 61 74 69 6f 6e 20 6d 6f 64 65 20 28 66 69 6c 65  ation mode (file
0a30: 20 66 6c 75 73 68 69 6e 67 29 20 6f 66 20 74 68   flushing) of th
0a40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
0a50: 69 6e 67 2e 20 20 44 65 66 61 75 6c 74 20 69 73  ing.  Default is
0a60: 20 22 4e 6f 72 6d 61 6c 22 2e 0a 20 20 20 20 2f   "Normal"..    /
0a70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
0a80: 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22    [DisplayName("
0a90: 53 79 6e 63 68 72 6f 6e 6f 75 73 22 29 5d 0a 20  Synchronous")]. 
0aa0: 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72     [Browsable(tr
0ab0: 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c  ue)].    [Defaul
0ac0: 74 56 61 6c 75 65 28 53 79 6e 63 68 72 6f 6e 69  tValue(Synchroni
0ad0: 7a 61 74 69 6f 6e 4d 6f 64 65 73 2e 4e 6f 72 6d  zationModes.Norm
0ae0: 61 6c 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20  al)].    public 
0af0: 53 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f 6e 4d  SynchronizationM
0b00: 6f 64 65 73 20 53 79 6e 63 4d 6f 64 65 0a 20 20  odes SyncMode.  
0b10: 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20    {.      get.  
0b20: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 6f 62      {.        ob
0b30: 6a 65 63 74 20 76 61 6c 75 65 3b 0a 20 20 20 20  ject value;.    
0b40: 20 20 20 20 54 72 79 47 65 74 56 61 6c 75 65 28      TryGetValue(
0b50: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20 6f  "synchronous", o
0b60: 75 74 20 76 61 6c 75 65 29 3b 0a 20 20 20 20 20  ut value);.     
0b70: 20 20 20 69 66 20 28 76 61 6c 75 65 20 69 73 20     if (value is 
0b80: 73 74 72 69 6e 67 29 0a 20 20 20 20 20 20 20 20  string).        
0b90: 20 20 72 65 74 75 72 6e 20 28 53 79 6e 63 68 72    return (Synchr
0ba0: 6f 6e 69 7a 61 74 69 6f 6e 4d 6f 64 65 73 29 54  onizationModes)T
0bb0: 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65  ypeDescriptor.Ge
0bc0: 74 43 6f 6e 76 65 72 74 65 72 28 74 79 70 65 6f  tConverter(typeo
0bd0: 66 28 53 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f  f(Synchronizatio
0be0: 6e 4d 6f 64 65 73 29 29 2e 43 6f 6e 76 65 72 74  nModes)).Convert
0bf0: 46 72 6f 6d 28 76 61 6c 75 65 29 3b 0a 20 20 20  From(value);.   
0c00: 20 20 20 20 20 65 6c 73 65 20 72 65 74 75 72 6e       else return
0c10: 20 28 53 79 6e 63 68 72 6f 6e 69 7a 61 74 69 6f   (Synchronizatio
0c20: 6e 4d 6f 64 65 73 29 76 61 6c 75 65 3b 0a 20 20  nModes)value;.  
0c30: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a      }.      set.
0c40: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
0c50: 74 68 69 73 5b 22 73 79 6e 63 68 72 6f 6e 6f 75  this["synchronou
0c60: 73 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  s"] = value;.   
0c70: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
0c80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
0c90: 20 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73 20    /// Gets/Sets 
0ca0: 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  the encoding for
0cb0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
0cc0: 73 74 72 69 6e 67 2e 20 20 54 68 65 20 64 65 66  string.  The def
0cd0: 61 75 6c 74 20 69 73 20 22 46 61 6c 73 65 22 20  ault is "False" 
0ce0: 77 68 69 63 68 20 69 6e 64 69 63 61 74 65 73 20  which indicates 
0cf0: 55 54 46 2d 38 20 65 6e 63 6f 64 69 6e 67 2e 0a  UTF-8 encoding..
0d00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0d10: 79 3e 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  y>.    [Browsabl
0d20: 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b 44 65  e(true)].    [De
0d30: 66 61 75 6c 74 56 61 6c 75 65 28 66 61 6c 73 65  faultValue(false
0d40: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f  )].    public bo
0d50: 6f 6c 20 55 73 65 55 54 46 31 36 45 6e 63 6f 64  ol UseUTF16Encod
0d60: 69 6e 67 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  ing.    {.      
0d70: 67 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  get.      {.    
0d80: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
0d90: 3b 0a 20 20 20 20 20 20 20 20 54 72 79 47 65 74  ;.        TryGet
0da0: 56 61 6c 75 65 28 22 75 73 65 75 74 66 31 36 65  Value("useutf16e
0db0: 6e 63 6f 64 69 6e 67 22 2c 20 6f 75 74 20 76 61  ncoding", out va
0dc0: 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72 65  lue);.        re
0dd0: 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65  turn SQLiteConve
0de0: 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 76 61 6c  rt.ToBoolean(val
0df0: 75 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ue);.      }.   
0e00: 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20     set.      {. 
0e10: 20 20 20 20 20 20 20 74 68 69 73 5b 22 75 73 65         this["use
0e20: 75 74 66 31 36 65 6e 63 6f 64 69 6e 67 22 5d 20  utf16encoding"] 
0e30: 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 7d  = value;.      }
0e40: 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
0e50: 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  <summary>.    //
0e60: 2f 20 47 65 74 73 2f 53 65 74 73 20 77 68 65 74  / Gets/Sets whet
0e70: 68 65 72 20 6f 72 20 6e 6f 74 20 74 6f 20 75 73  her or not to us
0e80: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f  e connection poo
0e90: 6c 69 6e 67 2e 20 20 54 68 65 20 64 65 66 61 75  ling.  The defau
0ea0: 6c 74 20 69 73 20 22 46 61 6c 73 65 22 0a 20 20  lt is "False".  
0eb0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0ec0: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
0ed0: 74 72 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61  true)].    [Defa
0ee0: 75 6c 74 56 61 6c 75 65 28 66 61 6c 73 65 29 5d  ultValue(false)]
0ef0: 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c  .    public bool
0f00: 20 50 6f 6f 6c 69 6e 67 0a 20 20 20 20 7b 0a 20   Pooling.    {. 
0f10: 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b       get.      {
0f20: 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
0f30: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 54  value;.        T
0f40: 72 79 47 65 74 56 61 6c 75 65 28 22 70 6f 6f 6c  ryGetValue("pool
0f50: 69 6e 67 22 2c 20 6f 75 74 20 76 61 6c 75 65 29  ing", out value)
0f60: 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ;.        return
0f70: 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54   SQLiteConvert.T
0f80: 6f 42 6f 6f 6c 65 61 6e 28 76 61 6c 75 65 29 3b  oBoolean(value);
0f90: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
0fa0: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
0fb0: 20 20 20 74 68 69 73 5b 22 70 6f 6f 6c 69 6e 67     this["pooling
0fc0: 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20  "] = value;.    
0fd0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
0fe0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
0ff0: 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 77   /// Gets/Sets w
1000: 68 65 74 68 6f 72 20 6e 6f 74 20 74 6f 20 73 74  hethor not to st
1010: 6f 72 65 20 47 55 49 44 27 73 20 69 6e 20 62 69  ore GUID's in bi
1020: 6e 61 72 79 20 66 6f 72 6d 61 74 2e 20 20 54 68  nary format.  Th
1030: 65 20 64 65 66 61 75 6c 74 20 69 73 20 54 72 75  e default is Tru
1040: 65 0a 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20  e.    /// which 
1050: 73 61 76 65 73 20 73 70 61 63 65 20 69 6e 20 74  saves space in t
1060: 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  he database..   
1070: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a   /// </summary>.
1080: 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74      [Browsable(t
1090: 72 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75  rue)].    [Defau
10a0: 6c 74 56 61 6c 75 65 28 74 72 75 65 29 5d 0a 20  ltValue(true)]. 
10b0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 42     public bool B
10c0: 69 6e 61 72 79 47 55 49 44 0a 20 20 20 20 7b 0a  inaryGUID.    {.
10d0: 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20 20        get.      
10e0: 7b 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74  {.        object
10f0: 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20   value;.        
1100: 54 72 79 47 65 74 56 61 6c 75 65 28 22 62 69 6e  TryGetValue("bin
1110: 61 72 79 67 75 69 64 22 2c 20 6f 75 74 20 76 61  aryguid", out va
1120: 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72 65  lue);.        re
1130: 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65  turn SQLiteConve
1140: 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 76 61 6c  rt.ToBoolean(val
1150: 75 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ue);.      }.   
1160: 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20     set.      {. 
1170: 20 20 20 20 20 20 20 74 68 69 73 5b 22 62 69 6e         this["bin
1180: 61 72 79 67 75 69 64 22 5d 20 3d 20 76 61 6c 75  aryguid"] = valu
1190: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  e;.      }.    }
11a0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
11b0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73  ry>.    /// Gets
11c0: 2f 53 65 74 73 20 74 68 65 20 66 69 6c 65 6e 61  /Sets the filena
11d0: 6d 65 20 74 6f 20 6f 70 65 6e 20 6f 6e 20 74 68  me to open on th
11e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
11f0: 69 6e 67 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ing..    /// </s
1200: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 5b 44 69 73  ummary>.    [Dis
1210: 70 6c 61 79 4e 61 6d 65 28 22 44 61 74 61 20 53  playName("Data S
1220: 6f 75 72 63 65 22 29 5d 0a 20 20 20 20 5b 42 72  ource")].    [Br
1230: 6f 77 73 61 62 6c 65 28 74 72 75 65 29 5d 0a 20  owsable(true)]. 
1240: 20 20 20 5b 44 65 66 61 75 6c 74 56 61 6c 75 65     [DefaultValue
1250: 28 22 22 29 5d 0a 20 20 20 20 70 75 62 6c 69 63  ("")].    public
1260: 20 73 74 72 69 6e 67 20 44 61 74 61 53 6f 75 72   string DataSour
1270: 63 65 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  ce.    {.      g
1280: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
1290: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b     object value;
12a0: 0a 20 20 20 20 20 20 20 20 54 72 79 47 65 74 56  .        TryGetV
12b0: 61 6c 75 65 28 22 64 61 74 61 20 73 6f 75 72 63  alue("data sourc
12c0: 65 22 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0a  e", out value);.
12d0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76          return v
12e0: 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b  alue.ToString();
12f0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73  .      }.      s
1300: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
1310: 20 20 20 74 68 69 73 5b 22 64 61 74 61 20 73 6f     this["data so
1320: 75 72 63 65 22 5d 20 3d 20 76 61 6c 75 65 3b 0a  urce"] = value;.
1330: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20        }.    }.. 
1340: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1350: 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 61 6c 74 65  .    /// An alte
1360: 72 6e 61 74 65 20 74 6f 20 74 68 65 20 64 61 74  rnate to the dat
1370: 61 20 73 6f 75 72 63 65 20 70 72 6f 70 65 72 74  a source propert
1380: 79 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  y.    /// </summ
1390: 61 72 79 3e 0a 20 20 20 20 5b 42 72 6f 77 73 61  ary>.    [Browsa
13a0: 62 6c 65 28 66 61 6c 73 65 29 5d 0a 20 20 20 20  ble(false)].    
13b0: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 55 72  public string Ur
13c0: 69 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65  i.    {.      ge
13d0: 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20  t.      {.      
13e0: 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0a    object value;.
13f0: 20 20 20 20 20 20 20 20 54 72 79 47 65 74 56 61          TryGetVa
1400: 6c 75 65 28 22 75 72 69 22 2c 20 6f 75 74 20 76  lue("uri", out v
1410: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72  alue);.        r
1420: 65 74 75 72 6e 20 76 61 6c 75 65 2e 54 6f 53 74  eturn value.ToSt
1430: 72 69 6e 67 28 29 3b 0a 20 20 20 20 20 20 7d 0a  ring();.      }.
1440: 20 20 20 20 20 20 73 65 74 0a 20 20 20 20 20 20        set.      
1450: 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73 5b 22  {.        this["
1460: 75 72 69 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20  uri"] = value;. 
1470: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0d 0a 0d 0a       }.    }....
1480: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1490: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 6e 20 61 6c  >..    /// An al
14a0: 74 65 72 6e 61 74 65 20 74 6f 20 74 68 65 20 64  ternate to the d
14b0: 61 74 61 20 73 6f 75 72 63 65 20 70 72 6f 70 65  ata source prope
14c0: 72 74 79 20 74 68 61 74 20 75 73 65 73 20 74 68  rty that uses th
14d0: 65 20 53 51 4c 69 74 65 20 55 52 49 20 73 79 6e  e SQLite URI syn
14e0: 74 61 78 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tax...    /// </
14f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 5b 42  summary>..    [B
1500: 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65 29 5d  rowsable(false)]
1510: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72  ..    public str
1520: 69 6e 67 20 46 75 6c 6c 55 72 69 0d 0a 20 20 20  ing FullUri..   
1530: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
1540: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1550: 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d 0a 20  object value;.. 
1560: 20 20 20 20 20 20 20 54 72 79 47 65 74 56 61 6c         TryGetVal
1570: 75 65 28 22 66 75 6c 6c 75 72 69 22 2c 20 6f 75  ue("fulluri", ou
1580: 74 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  t value);..     
1590: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 2e     return value.
15a0: 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
15b0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 73 65 74 0d     }..      set.
15c0: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
15d0: 20 20 74 68 69 73 5b 22 66 75 6c 6c 75 72 69 22    this["fulluri"
15e0: 5d 20 3d 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ] = value;..    
15f0: 20 20 7d 0d 0a 20 20 20 20 7d 0a 0a 20 20 20 20    }..    }..    
1600: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
1610: 20 20 2f 2f 2f 20 47 65 74 73 2f 73 65 74 73 20    /// Gets/sets 
1620: 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6d 6d  the default comm
1630: 61 6e 64 20 74 69 6d 65 6f 75 74 20 66 6f 72 20  and timeout for 
1640: 6e 65 77 6c 79 2d 63 72 65 61 74 65 64 20 63 6f  newly-created co
1650: 6d 6d 61 6e 64 73 2e 20 20 54 68 69 73 20 69 73  mmands.  This is
1660: 20 65 73 70 65 63 69 61 6c 6c 79 20 75 73 65 66   especially usef
1670: 75 6c 20 66 6f 72 20 0a 20 20 20 20 2f 2f 2f 20  ul for .    /// 
1680: 63 6f 6d 6d 61 6e 64 73 20 75 73 65 64 20 69 6e  commands used in
1690: 74 65 72 6e 61 6c 6c 79 20 73 75 63 68 20 61 73  ternally such as
16a0: 20 69 6e 73 69 64 65 20 61 20 53 51 4c 69 74 65   inside a SQLite
16b0: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 77 68 65  Transaction, whe
16c0: 72 65 20 73 65 74 74 69 6e 67 20 74 68 65 20 74  re setting the t
16d0: 69 6d 65 6f 75 74 20 69 73 20 6e 6f 74 20 70 6f  imeout is not po
16e0: 73 73 69 62 6c 65 2e 0a 20 20 20 20 2f 2f 2f 20  ssible..    /// 
16f0: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 5b  </summary>.    [
1700: 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 44 65 66  DisplayName("Def
1710: 61 75 6c 74 20 54 69 6d 65 6f 75 74 22 29 5d 0a  ault Timeout")].
1720: 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74      [Browsable(t
1730: 72 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75  rue)].    [Defau
1740: 6c 74 56 61 6c 75 65 28 33 30 29 5d 0a 20 20 20  ltValue(30)].   
1750: 20 70 75 62 6c 69 63 20 69 6e 74 20 44 65 66 61   public int Defa
1760: 75 6c 74 54 69 6d 65 6f 75 74 0a 20 20 20 20 7b  ultTimeout.    {
1770: 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20  .      get.     
1780: 20 7b 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63   {.        objec
1790: 74 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  t value;.       
17a0: 20 54 72 79 47 65 74 56 61 6c 75 65 28 22 64 65   TryGetValue("de
17b0: 66 61 75 6c 74 20 74 69 6d 65 6f 75 74 22 2c 20  fault timeout", 
17c0: 6f 75 74 20 76 61 6c 75 65 29 3b 0a 20 20 20 20  out value);.    
17d0: 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
17e0: 72 74 2e 54 6f 49 6e 74 33 32 28 76 61 6c 75 65  rt.ToInt32(value
17f0: 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75  , CultureInfo.Cu
1800: 72 72 65 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20  rrentCulture);. 
1810: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74       }.      set
1820: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
1830: 20 74 68 69 73 5b 22 64 65 66 61 75 6c 74 20 74   this["default t
1840: 69 6d 65 6f 75 74 22 5d 20 3d 20 76 61 6c 75 65  imeout"] = value
1850: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1860: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1870: 79 3e 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72  y>.    /// Deter
1880: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
1890: 20 6e 6f 74 20 74 68 65 20 63 6f 6e 6e 65 63 74   not the connect
18a0: 69 6f 6e 20 77 69 6c 6c 20 61 75 74 6f 6d 61 74  ion will automat
18b0: 69 63 61 6c 6c 79 20 70 61 72 74 69 63 69 70 61  ically participa
18c0: 74 65 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 74 68  te.    /// in th
18d0: 65 20 63 75 72 72 65 6e 74 20 64 69 73 74 72 69  e current distri
18e0: 62 75 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  buted transactio
18f0: 6e 20 28 69 66 20 6f 6e 65 20 65 78 69 73 74 73  n (if one exists
1900: 29 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ).    /// </summ
1910: 61 72 79 3e 0a 20 20 20 20 5b 42 72 6f 77 73 61  ary>.    [Browsa
1920: 62 6c 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b  ble(true)].    [
1930: 44 65 66 61 75 6c 74 56 61 6c 75 65 28 74 72 75  DefaultValue(tru
1940: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 62  e)].    public b
1950: 6f 6f 6c 20 45 6e 6c 69 73 74 0a 20 20 20 20 7b  ool Enlist.    {
1960: 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20 20  .      get.     
1970: 20 7b 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63   {.        objec
1980: 74 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20  t value;.       
1990: 20 54 72 79 47 65 74 56 61 6c 75 65 28 22 65 6e   TryGetValue("en
19a0: 6c 69 73 74 22 2c 20 6f 75 74 20 76 61 6c 75 65  list", out value
19b0: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
19c0: 6e 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e  n SQLiteConvert.
19d0: 54 6f 42 6f 6f 6c 65 61 6e 28 76 61 6c 75 65 29  ToBoolean(value)
19e0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
19f0: 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  set.      {.    
1a00: 20 20 20 20 74 68 69 73 5b 22 65 6e 6c 69 73 74      this["enlist
1a10: 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20  "] = value;.    
1a20: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
1a30: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
1a40: 20 2f 2f 2f 20 49 66 20 73 65 74 20 74 6f 20 74   /// If set to t
1a50: 72 75 65 2c 20 77 69 6c 6c 20 74 68 72 6f 77 20  rue, will throw 
1a60: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 69 66 20  an exception if 
1a70: 74 68 65 20 64 61 74 61 62 61 73 65 20 73 70 65  the database spe
1a80: 63 69 66 69 65 64 20 69 6e 20 74 68 65 20 63 6f  cified in the co
1a90: 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 2f 2f 2f  nnection.    ///
1aa0: 20 73 74 72 69 6e 67 20 64 6f 65 73 20 6e 6f 74   string does not
1ab0: 20 65 78 69 73 74 2e 20 20 49 66 20 66 61 6c 73   exist.  If fals
1ac0: 65 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20  e, the database 
1ad0: 77 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20  will be created 
1ae0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 2e 0a 20  automatically.. 
1af0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1b00: 3e 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65  >.    [Browsable
1b10: 28 74 72 75 65 29 5d 0a 20 20 20 20 5b 44 65 66  (true)].    [Def
1b20: 61 75 6c 74 56 61 6c 75 65 28 66 61 6c 73 65 29  aultValue(false)
1b30: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f  ].    public boo
1b40: 6c 20 46 61 69 6c 49 66 4d 69 73 73 69 6e 67 0a  l FailIfMissing.
1b50: 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a      {.      get.
1b60: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1b70: 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0a 20 20  object value;.  
1b80: 20 20 20 20 20 20 54 72 79 47 65 74 56 61 6c 75        TryGetValu
1b90: 65 28 22 66 61 69 6c 69 66 6d 69 73 73 69 6e 67  e("failifmissing
1ba0: 22 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b 0a 20  ", out value);. 
1bb0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51         return SQ
1bc0: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f  LiteConvert.ToBo
1bd0: 6f 6c 65 61 6e 28 76 61 6c 75 65 29 3b 0a 20 20  olean(value);.  
1be0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a      }.      set.
1bf0: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
1c00: 74 68 69 73 5b 22 66 61 69 6c 69 66 6d 69 73 73  this["failifmiss
1c10: 69 6e 67 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20  ing"] = value;. 
1c20: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20       }.    }..  
1c30: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
1c40: 20 20 20 20 2f 2f 2f 20 49 66 20 65 6e 61 62 6c      /// If enabl
1c50: 65 64 2c 20 75 73 65 73 20 74 68 65 20 6c 65 67  ed, uses the leg
1c60: 61 63 79 20 33 2e 78 78 20 66 6f 72 6d 61 74 20  acy 3.xx format 
1c70: 66 6f 72 20 6d 61 78 69 6d 75 6d 20 63 6f 6d 70  for maximum comp
1c80: 61 74 69 62 69 6c 69 74 79 2c 20 62 75 74 20 72  atibility, but r
1c90: 65 73 75 6c 74 73 20 69 6e 20 6c 61 72 67 65 72  esults in larger
1ca0: 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
1cb0: 65 20 73 69 7a 65 73 2e 0a 20 20 20 20 2f 2f 2f  e sizes..    ///
1cc0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20   </summary>.    
1cd0: 5b 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 4c 65  [DisplayName("Le
1ce0: 67 61 63 79 20 46 6f 72 6d 61 74 22 29 5d 0a 20  gacy Format")]. 
1cf0: 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72     [Browsable(tr
1d00: 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c  ue)].    [Defaul
1d10: 74 56 61 6c 75 65 28 66 61 6c 73 65 29 5d 0a 20  tValue(false)]. 
1d20: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 4c     public bool L
1d30: 65 67 61 63 79 46 6f 72 6d 61 74 0a 20 20 20 20  egacyFormat.    
1d40: 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20  {.      get.    
1d50: 20 20 7b 0a 20 20 20 20 20 20 20 20 6f 62 6a 65    {.        obje
1d60: 63 74 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20  ct value;.      
1d70: 20 20 54 72 79 47 65 74 56 61 6c 75 65 28 22 6c    TryGetValue("l
1d80: 65 67 61 63 79 20 66 6f 72 6d 61 74 22 2c 20 6f  egacy format", o
1d90: 75 74 20 76 61 6c 75 65 29 3b 0a 20 20 20 20 20  ut value);.     
1da0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
1db0: 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61  Convert.ToBoolea
1dc0: 6e 28 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  n(value);.      
1dd0: 7d 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20  }.      set.    
1de0: 20 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73    {.        this
1df0: 5b 22 6c 65 67 61 63 79 20 66 6f 72 6d 61 74 22  ["legacy format"
1e00: 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  ] = value;.     
1e10: 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f   }.    }..    //
1e20: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20  / <summary>.    
1e30: 2f 2f 2f 20 57 68 65 6e 20 65 6e 61 62 6c 65 64  /// When enabled
1e40: 2c 20 74 68 65 20 64 61 74 61 62 61 73 65 20 77  , the database w
1e50: 69 6c 6c 20 62 65 20 6f 70 65 6e 65 64 20 66 6f  ill be opened fo
1e60: 72 20 72 65 61 64 2d 6f 6e 6c 79 20 61 63 63 65  r read-only acce
1e70: 73 73 20 61 6e 64 20 77 72 69 74 69 6e 67 20 77  ss and writing w
1e80: 69 6c 6c 20 62 65 20 64 69 73 61 62 6c 65 64 2e  ill be disabled.
1e90: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1ea0: 72 79 3e 0a 20 20 20 20 5b 44 69 73 70 6c 61 79  ry>.    [Display
1eb0: 4e 61 6d 65 28 22 52 65 61 64 20 4f 6e 6c 79 22  Name("Read Only"
1ec0: 29 5d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  )].    [Browsabl
1ed0: 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b 44 65  e(true)].    [De
1ee0: 66 61 75 6c 74 56 61 6c 75 65 28 66 61 6c 73 65  faultValue(false
1ef0: 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f  )].    public bo
1f00: 6f 6c 20 52 65 61 64 4f 6e 6c 79 0a 20 20 20 20  ol ReadOnly.    
1f10: 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20 20  {.      get.    
1f20: 20 20 7b 0a 20 20 20 20 20 20 20 20 6f 62 6a 65    {.        obje
1f30: 63 74 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20  ct value;.      
1f40: 20 20 54 72 79 47 65 74 56 61 6c 75 65 28 22 72    TryGetValue("r
1f50: 65 61 64 20 6f 6e 6c 79 22 2c 20 6f 75 74 20 76  ead only", out v
1f60: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72  alue);.        r
1f70: 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e 76  eturn SQLiteConv
1f80: 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 76 61  ert.ToBoolean(va
1f90: 6c 75 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  lue);.      }.  
1fa0: 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a      set.      {.
1fb0: 20 20 20 20 20 20 20 20 74 68 69 73 5b 22 72 65          this["re
1fc0: 61 64 20 6f 6e 6c 79 22 5d 20 3d 20 76 61 6c 75  ad only"] = valu
1fd0: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  e;.      }.    }
1fe0: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1ff0: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73  ry>.    /// Gets
2000: 2f 73 65 74 73 20 74 68 65 20 64 61 74 61 62 61  /sets the databa
2010: 73 65 20 65 6e 63 72 79 70 74 69 6f 6e 20 70 61  se encryption pa
2020: 73 73 77 6f 72 64 0a 20 20 20 20 2f 2f 2f 20 3c  ssword.    /// <
2030: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 5b 42  /summary>.    [B
2040: 72 6f 77 73 61 62 6c 65 28 74 72 75 65 29 5d 0a  rowsable(true)].
2050: 20 20 20 20 5b 50 61 73 73 77 6f 72 64 50 72 6f      [PasswordPro
2060: 70 65 72 74 79 54 65 78 74 28 74 72 75 65 29 5d  pertyText(true)]
2070: 0a 20 20 20 20 5b 44 65 66 61 75 6c 74 56 61 6c  .    [DefaultVal
2080: 75 65 28 22 22 29 5d 0a 20 20 20 20 70 75 62 6c  ue("")].    publ
2090: 69 63 20 73 74 72 69 6e 67 20 50 61 73 73 77 6f  ic string Passwo
20a0: 72 64 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67  rd.    {.      g
20b0: 65 74 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20  et.      {.     
20c0: 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b     object value;
20d0: 0a 20 20 20 20 20 20 20 20 54 72 79 47 65 74 56  .        TryGetV
20e0: 61 6c 75 65 28 22 70 61 73 73 77 6f 72 64 22 2c  alue("password",
20f0: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0a 20 20 20   out value);.   
2100: 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
2110: 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0a 20 20  e.ToString();.  
2120: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a      }.      set.
2130: 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20        {.        
2140: 74 68 69 73 5b 22 70 61 73 73 77 6f 72 64 22 5d  this["password"]
2150: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2160: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  }.    }..    ///
2170: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
2180: 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 74 68 65  // Gets/Sets the
2190: 20 70 61 67 65 20 73 69 7a 65 20 66 6f 72 20 74   page size for t
21a0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20  he connection.. 
21b0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
21c0: 3e 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61  >.    [DisplayNa
21d0: 6d 65 28 22 50 61 67 65 20 53 69 7a 65 22 29 5d  me("Page Size")]
21e0: 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28  .    [Browsable(
21f0: 74 72 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61  true)].    [Defa
2200: 75 6c 74 56 61 6c 75 65 28 31 30 32 34 29 5d 0a  ultValue(1024)].
2210: 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 50      public int P
2220: 61 67 65 53 69 7a 65 0a 20 20 20 20 7b 0a 20 20  ageSize.    {.  
2230: 20 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a      get.      {.
2240: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
2250: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 54 72  alue;.        Tr
2260: 79 47 65 74 56 61 6c 75 65 28 22 70 61 67 65 20  yGetValue("page 
2270: 73 69 7a 65 22 2c 20 6f 75 74 20 76 61 6c 75 65  size", out value
2280: 29 3b 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  );.        retur
2290: 6e 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33  n Convert.ToInt3
22a0: 32 28 76 61 6c 75 65 2c 20 43 75 6c 74 75 72 65  2(value, Culture
22b0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
22c0: 75 72 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ure);.      }.  
22d0: 20 20 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a      set.      {.
22e0: 20 20 20 20 20 20 20 20 74 68 69 73 5b 22 70 61          this["pa
22f0: 67 65 20 73 69 7a 65 22 5d 20 3d 20 76 61 6c 75  ge size"] = valu
2300: 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  e;.      }.    }
2310: 0a 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2320: 72 79 3e 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73  ry>.    /// Gets
2330: 2f 53 65 74 73 20 74 68 65 20 6d 61 78 69 6d 75  /Sets the maximu
2340: 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  m number of page
2350: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6d  s the database m
2360: 61 79 20 68 6f 6c 64 0a 20 20 20 20 2f 2f 2f 20  ay hold.    /// 
2370: 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 5b  </summary>.    [
2380: 44 69 73 70 6c 61 79 4e 61 6d 65 28 22 4d 61 78  DisplayName("Max
2390: 20 50 61 67 65 20 43 6f 75 6e 74 22 29 5d 0a 20   Page Count")]. 
23a0: 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72     [Browsable(tr
23b0: 75 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c  ue)].    [Defaul
23c0: 74 56 61 6c 75 65 28 30 29 5d 0a 20 20 20 20 70  tValue(0)].    p
23d0: 75 62 6c 69 63 20 69 6e 74 20 4d 61 78 50 61 67  ublic int MaxPag
23e0: 65 43 6f 75 6e 74 0a 20 20 20 20 7b 0a 20 20 20  eCount.    {.   
23f0: 20 20 20 67 65 74 0a 20 20 20 20 20 20 7b 0a 20     get.      {. 
2400: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
2410: 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 54 72 79  lue;.        Try
2420: 47 65 74 56 61 6c 75 65 28 22 6d 61 78 20 70 61  GetValue("max pa
2430: 67 65 20 63 6f 75 6e 74 22 2c 20 6f 75 74 20 76  ge count", out v
2440: 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20 20 72  alue);.        r
2450: 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 54 6f  eturn Convert.To
2460: 49 6e 74 33 32 28 76 61 6c 75 65 2c 20 43 75 6c  Int32(value, Cul
2470: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
2480: 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20 20 20  Culture);.      
2490: 7d 0a 20 20 20 20 20 20 73 65 74 0a 20 20 20 20  }.      set.    
24a0: 20 20 7b 0a 20 20 20 20 20 20 20 20 74 68 69 73    {.        this
24b0: 5b 22 6d 61 78 20 70 61 67 65 20 63 6f 75 6e 74  ["max page count
24c0: 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20  "] = value;.    
24d0: 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f    }.    }..    /
24e0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
24f0: 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 74   /// Gets/Sets t
2500: 68 65 20 63 61 63 68 65 20 73 69 7a 65 20 66 6f  he cache size fo
2510: 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  r the connection
2520: 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2530: 61 72 79 3e 0a 20 20 20 20 5b 44 69 73 70 6c 61  ary>.    [Displa
2540: 79 4e 61 6d 65 28 22 43 61 63 68 65 20 53 69 7a  yName("Cache Siz
2550: 65 22 29 5d 0a 20 20 20 20 5b 42 72 6f 77 73 61  e")].    [Browsa
2560: 62 6c 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b  ble(true)].    [
2570: 44 65 66 61 75 6c 74 56 61 6c 75 65 28 32 30 30  DefaultValue(200
2580: 30 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 69  0)].    public i
2590: 6e 74 20 43 61 63 68 65 53 69 7a 65 0a 20 20 20  nt CacheSize.   
25a0: 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20 20 20   {.      get.   
25b0: 20 20 20 7b 0a 20 20 20 20 20 20 20 20 6f 62 6a     {.        obj
25c0: 65 63 74 20 76 61 6c 75 65 3b 0a 20 20 20 20 20  ect value;.     
25d0: 20 20 20 54 72 79 47 65 74 56 61 6c 75 65 28 22     TryGetValue("
25e0: 63 61 63 68 65 20 73 69 7a 65 22 2c 20 6f 75 74  cache size", out
25f0: 20 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20   value);.       
2600: 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
2610: 54 6f 49 6e 74 33 32 28 76 61 6c 75 65 2c 20 43  ToInt32(value, C
2620: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
2630: 6e 74 43 75 6c 74 75 72 65 29 3b 0a 20 20 20 20  ntCulture);.    
2640: 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a 20 20    }.      set.  
2650: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 74 68      {.        th
2660: 69 73 5b 22 63 61 63 68 65 20 73 69 7a 65 22 5d  is["cache size"]
2670: 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20 20 20 20   = value;.      
2680: 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20 2f 2f 2f  }.    }..    ///
2690: 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f   <summary>.    /
26a0: 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 74 68 65  // Gets/Sets the
26b0: 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d 61 74   DateTime format
26c0: 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74   for the connect
26d0: 69 6f 6e 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ion..    /// </s
26e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 5b 42 72  ummary>..    [Br
26f0: 6f 77 73 61 62 6c 65 28 74 72 75 65 29 5d 0d 0a  owsable(true)]..
2700: 20 20 20 20 5b 44 65 66 61 75 6c 74 56 61 6c 75      [DefaultValu
2710: 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e(SQLiteDateForm
2720: 61 74 73 2e 44 65 66 61 75 6c 74 29 5d 0d 0a 20  ats.Default)].. 
2730: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
2740: 44 61 74 65 46 6f 72 6d 61 74 73 20 44 61 74 65  DateFormats Date
2750: 54 69 6d 65 46 6f 72 6d 61 74 0d 0a 20 20 20 20  TimeFormat..    
2760: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
2770: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2780: 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
2790: 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  lue;....        
27a0: 20 20 20 20 69 66 20 28 54 72 79 47 65 74 56 61      if (TryGetVa
27b0: 6c 75 65 28 22 64 61 74 65 74 69 6d 65 66 6f 72  lue("datetimefor
27c0: 6d 61 74 22 2c 20 6f 75 74 20 76 61 6c 75 65 29  mat", out value)
27d0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
27e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27f0: 20 20 69 66 20 28 76 61 6c 75 65 20 69 73 20 53    if (value is S
2800: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
2810: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2820: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 53         return (S
2830: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
2840: 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20  )value;..       
2850: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
2860: 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29   (value != null)
2870: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2880: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 53 51        return (SQ
2890: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 29  LiteDateFormats)
28a0: 54 79 70 65 44 65 73 63 72 69 70 74 6f 72 2e 47  TypeDescriptor.G
28b0: 65 74 43 6f 6e 76 65 72 74 65 72 28 0d 0a 20 20  etConverter(..  
28c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28d0: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
28e0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 29 29  iteDateFormats))
28f0: 2e 43 6f 6e 76 65 72 74 46 72 6f 6d 28 76 61 6c  .ConvertFrom(val
2900: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
2910: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2920: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
2930: 44 61 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61  DateFormats.Defa
2940: 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ult;..        }.
2950: 0a 20 20 20 20 20 20 20 20 73 65 74 0d 0a 20 20  .        set..  
2960: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2970: 20 20 20 20 20 74 68 69 73 5b 22 64 61 74 65 74       this["datet
2980: 69 6d 65 66 6f 72 6d 61 74 22 5d 20 3d 20 76 61  imeformat"] = va
2990: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lue;..        }.
29a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
29b0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
29c0: 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 74   /// Gets/Sets t
29d0: 68 65 20 44 61 74 65 54 69 6d 65 20 6b 69 6e 64  he DateTime kind
29e0: 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74   for the connect
29f0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
2a00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 5b 42  summary>..    [B
2a10: 72 6f 77 73 61 62 6c 65 28 74 72 75 65 29 5d 0d  rowsable(true)].
2a20: 0a 20 20 20 20 5b 44 65 66 61 75 6c 74 56 61 6c  .    [DefaultVal
2a30: 75 65 28 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  ue(DateTimeKind.
2a40: 55 6e 73 70 65 63 69 66 69 65 64 29 5d 0d 0a 20  Unspecified)].. 
2a50: 20 20 20 70 75 62 6c 69 63 20 44 61 74 65 54 69     public DateTi
2a60: 6d 65 4b 69 6e 64 20 44 61 74 65 54 69 6d 65 4b  meKind DateTimeK
2a70: 69 6e 64 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ind..    {..    
2a80: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
2a90: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2aa0: 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d 0a 0d  object value;...
2ab0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2ac0: 28 54 72 79 47 65 74 56 61 6c 75 65 28 22 64 61  (TryGetValue("da
2ad0: 74 65 74 69 6d 65 6b 69 6e 64 22 2c 20 6f 75 74  tetimekind", out
2ae0: 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
2af0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2b00: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
2b10: 75 65 20 69 73 20 44 61 74 65 54 69 6d 65 4b 69  ue is DateTimeKi
2b20: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nd)..           
2b30: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2b40: 28 44 61 74 65 54 69 6d 65 4b 69 6e 64 29 76 61  (DateTimeKind)va
2b50: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
2b60: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 76        else if (v
2b70: 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  alue != null).. 
2b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b90: 20 20 20 72 65 74 75 72 6e 20 28 44 61 74 65 54     return (DateT
2ba0: 69 6d 65 4b 69 6e 64 29 54 79 70 65 44 65 73 63  imeKind)TypeDesc
2bb0: 72 69 70 74 6f 72 2e 47 65 74 43 6f 6e 76 65 72  riptor.GetConver
2bc0: 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ter(..          
2bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
2be0: 70 65 6f 66 28 44 61 74 65 54 69 6d 65 4b 69 6e  peof(DateTimeKin
2bf0: 64 29 29 2e 43 6f 6e 76 65 72 74 46 72 6f 6d 28  d)).ConvertFrom(
2c00: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
2c10: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2c20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 44 61 74        return Dat
2c30: 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63  eTimeKind.Unspec
2c40: 69 66 69 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  ified;..        
2c50: 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 0d 0a  }..        set..
2c60: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2c70: 20 20 20 20 20 20 20 74 68 69 73 5b 22 64 61 74         this["dat
2c80: 65 74 69 6d 65 6b 69 6e 64 22 5d 20 3d 20 76 61  etimekind"] = va
2c90: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  lue;..        }.
2ca0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
2cb0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
2cc0: 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 74   /// Gets/Sets t
2cd0: 68 65 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 62  he placeholder b
2ce0: 61 73 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 20  ase schema name 
2cf0: 75 73 65 64 20 66 6f 72 0d 0a 20 20 20 20 2f 2f  used for..    //
2d00: 2f 20 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b  / .NET Framework
2d10: 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 20 70   compatibility p
2d20: 75 72 70 6f 73 65 73 2e 0d 0a 20 20 20 20 2f 2f  urposes...    //
2d30: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2d40: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72 75    [Browsable(tru
2d50: 65 29 5d 0d 0a 20 20 20 20 5b 44 65 66 61 75 6c  e)]..    [Defaul
2d60: 74 56 61 6c 75 65 28 53 51 4c 69 74 65 43 6f 6e  tValue(SQLiteCon
2d70: 6e 65 63 74 69 6f 6e 2e 44 65 66 61 75 6c 74 42  nection.DefaultB
2d80: 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29 5d 0d  aseSchemaName)].
2d90: 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
2da0: 6e 67 20 42 61 73 65 53 63 68 65 6d 61 4e 61 6d  ng BaseSchemaNam
2db0: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
2dc0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
2dd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62  ..            ob
2de0: 6a 65 63 74 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20  ject value;.... 
2df0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 54             if (T
2e00: 72 79 47 65 74 56 61 6c 75 65 28 22 62 61 73 65  ryGetValue("base
2e10: 73 63 68 65 6d 61 6e 61 6d 65 22 2c 20 6f 75 74  schemaname", out
2e20: 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
2e30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2e40: 20 20 20 20 20 20 20 20 20 69 66 20 28 76 61 6c           if (val
2e50: 75 65 20 69 73 20 73 74 72 69 6e 67 29 0d 0a 20  ue is string).. 
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e70: 20 20 20 72 65 74 75 72 6e 20 28 73 74 72 69 6e     return (strin
2e80: 67 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  g)value;..      
2e90: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
2ea0: 66 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  f (value != null
2eb0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
2ec0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61         return va
2ed0: 6c 75 65 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  lue.ToString();.
2ee0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
2ef0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
2f00: 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  turn null;..    
2f10: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 73      }..        s
2f20: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
2f30: 20 20 20 20 20 20 20 20 20 20 20 74 68 69 73 5b             this[
2f40: 22 62 61 73 65 73 63 68 65 6d 61 6e 61 6d 65 22  "baseschemaname"
2f50: 5d 20 3d 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ] = value;..    
2f60: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0a 0a 20 20      }..    }..  
2f70: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a    /// <summary>.
2f80: 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e      /// Determin
2f90: 65 73 20 68 6f 77 20 53 51 4c 69 74 65 20 68 61  es how SQLite ha
2fa0: 6e 64 6c 65 73 20 74 68 65 20 74 72 61 6e 73 61  ndles the transa
2fb0: 63 74 69 6f 6e 20 6a 6f 75 72 6e 61 6c 20 66 69  ction journal fi
2fc0: 6c 65 2e 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  le..    /// </su
2fd0: 6d 6d 61 72 79 3e 0a 20 20 20 20 5b 42 72 6f 77  mmary>.    [Brow
2fe0: 73 61 62 6c 65 28 74 72 75 65 29 5d 0d 0a 20 20  sable(true)]..  
2ff0: 20 20 5b 44 65 66 61 75 6c 74 56 61 6c 75 65 28    [DefaultValue(
3000: 53 51 4c 69 74 65 4a 6f 75 72 6e 61 6c 4d 6f 64  SQLiteJournalMod
3010: 65 45 6e 75 6d 2e 44 65 66 61 75 6c 74 29 5d 0a  eEnum.Default)].
3020: 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61 6d 65      [DisplayName
3030: 28 22 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65 22 29  ("Journal Mode")
3040: 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c  ].    public SQL
3050: 69 74 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 45 6e  iteJournalModeEn
3060: 75 6d 20 4a 6f 75 72 6e 61 6c 4d 6f 64 65 0a 20  um JournalMode. 
3070: 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74 0a 20     {.      get. 
3080: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 6f       {.        o
3090: 62 6a 65 63 74 20 76 61 6c 75 65 3b 0a 20 20 20  bject value;.   
30a0: 20 20 20 20 20 54 72 79 47 65 74 56 61 6c 75 65       TryGetValue
30b0: 28 22 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 22 2c  ("journal mode",
30c0: 20 6f 75 74 20 76 61 6c 75 65 29 3b 0a 20 20 20   out value);.   
30d0: 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20 69       if (value i
30e0: 73 20 73 74 72 69 6e 67 29 0a 20 20 20 20 20 20  s string).      
30f0: 20 20 20 20 72 65 74 75 72 6e 20 28 53 51 4c 69      return (SQLi
3100: 74 65 4a 6f 75 72 6e 61 6c 4d 6f 64 65 45 6e 75  teJournalModeEnu
3110: 6d 29 54 79 70 65 44 65 73 63 72 69 70 74 6f 72  m)TypeDescriptor
3120: 2e 47 65 74 43 6f 6e 76 65 72 74 65 72 28 74 79  .GetConverter(ty
3130: 70 65 6f 66 28 53 51 4c 69 74 65 4a 6f 75 72 6e  peof(SQLiteJourn
3140: 61 6c 4d 6f 64 65 45 6e 75 6d 29 29 2e 43 6f 6e  alModeEnum)).Con
3150: 76 65 72 74 46 72 6f 6d 28 76 61 6c 75 65 29 3b  vertFrom(value);
3160: 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20  .        else.  
3170: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
3180: 53 51 4c 69 74 65 4a 6f 75 72 6e 61 6c 4d 6f 64  SQLiteJournalMod
3190: 65 45 6e 75 6d 29 76 61 6c 75 65 3b 0a 20 20 20  eEnum)value;.   
31a0: 20 20 20 7d 0a 20 20 20 20 20 20 73 65 74 0a 20     }.      set. 
31b0: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 74       {.        t
31c0: 68 69 73 5b 22 6a 6f 75 72 6e 61 6c 20 6d 6f 64  his["journal mod
31d0: 65 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20 20  e"] = value;.   
31e0: 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20 20     }.    }..    
31f0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20  /// <summary>.  
3200: 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 64    /// Sets the d
3210: 65 66 61 75 6c 74 20 69 73 6f 6c 61 74 69 6f 6e  efault isolation
3220: 20 6c 65 76 65 6c 20 66 6f 72 20 74 72 61 6e 73   level for trans
3230: 61 63 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 63  actions on the c
3240: 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20 20 20 20 2f  onnection..    /
3250: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0a 20 20  // </summary>.  
3260: 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74 72 75    [Browsable(tru
3270: 65 29 5d 0a 20 20 20 20 5b 44 65 66 61 75 6c 74  e)].    [Default
3280: 56 61 6c 75 65 28 49 73 6f 6c 61 74 69 6f 6e 4c  Value(IsolationL
3290: 65 76 65 6c 2e 53 65 72 69 61 6c 69 7a 61 62 6c  evel.Serializabl
32a0: 65 29 5d 0a 20 20 20 20 5b 44 69 73 70 6c 61 79  e)].    [Display
32b0: 4e 61 6d 65 28 22 44 65 66 61 75 6c 74 20 49 73  Name("Default Is
32c0: 6f 6c 61 74 69 6f 6e 20 4c 65 76 65 6c 22 29 5d  olation Level")]
32d0: 0a 20 20 20 20 70 75 62 6c 69 63 20 49 73 6f 6c  .    public Isol
32e0: 61 74 69 6f 6e 4c 65 76 65 6c 20 44 65 66 61 75  ationLevel Defau
32f0: 6c 74 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c  ltIsolationLevel
3300: 0a 20 20 20 20 7b 0a 20 20 20 20 20 20 67 65 74  .    {.      get
3310: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
3320: 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0a 20   object value;. 
3330: 20 20 20 20 20 20 20 54 72 79 47 65 74 56 61 6c         TryGetVal
3340: 75 65 28 22 64 65 66 61 75 6c 74 20 69 73 6f 6c  ue("default isol
3350: 61 74 69 6f 6e 6c 65 76 65 6c 22 2c 20 6f 75 74  ationlevel", out
3360: 20 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20 20   value);.       
3370: 20 69 66 20 28 76 61 6c 75 65 20 69 73 20 73 74   if (value is st
3380: 72 69 6e 67 29 0a 20 20 20 20 20 20 20 20 20 20  ring).          
3390: 72 65 74 75 72 6e 20 28 49 73 6f 6c 61 74 69 6f  return (Isolatio
33a0: 6e 4c 65 76 65 6c 29 54 79 70 65 44 65 73 63 72  nLevel)TypeDescr
33b0: 69 70 74 6f 72 2e 47 65 74 43 6f 6e 76 65 72 74  iptor.GetConvert
33c0: 65 72 28 74 79 70 65 6f 66 28 49 73 6f 6c 61 74  er(typeof(Isolat
33d0: 69 6f 6e 4c 65 76 65 6c 29 29 2e 43 6f 6e 76 65  ionLevel)).Conve
33e0: 72 74 46 72 6f 6d 28 76 61 6c 75 65 29 3b 0a 20  rtFrom(value);. 
33f0: 20 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20         else.    
3400: 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 49 73        return (Is
3410: 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 29 76 61 6c  olationLevel)val
3420: 75 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ue;.      }.    
3430: 20 20 73 65 74 0a 20 20 20 20 20 20 7b 0a 20 20    set.      {.  
3440: 20 20 20 20 20 20 74 68 69 73 5b 22 64 65 66 61        this["defa
3450: 75 6c 74 20 69 73 6f 6c 61 74 69 6f 6e 6c 65 76  ult isolationlev
3460: 65 6c 22 5d 20 3d 20 76 61 6c 75 65 3b 0a 20 20  el"] = value;.  
3470: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 0a 20 20 20      }.    }..   
3480: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20   /// <summary>. 
3490: 20 20 20 2f 2f 2f 20 49 66 20 65 6e 61 62 6c 65     /// If enable
34a0: 64 2c 20 75 73 65 20 66 6f 72 65 69 67 6e 20 6b  d, use foreign k
34b0: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 0a 20  ey constraints. 
34c0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
34d0: 3e 0a 20 20 20 20 5b 44 69 73 70 6c 61 79 4e 61  >.    [DisplayNa
34e0: 6d 65 28 22 46 6f 72 65 69 67 6e 20 4b 65 79 73  me("Foreign Keys
34f0: 22 29 5d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62  ")].    [Browsab
3500: 6c 65 28 74 72 75 65 29 5d 0a 20 20 20 20 5b 44  le(true)].    [D
3510: 65 66 61 75 6c 74 56 61 6c 75 65 28 66 61 6c 73  efaultValue(fals
3520: 65 29 5d 0a 20 20 20 20 70 75 62 6c 69 63 20 62  e)].    public b
3530: 6f 6f 6c 20 46 6f 72 65 69 67 6e 4b 65 79 73 0a  ool ForeignKeys.
3540: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 67 65      {.        ge
3550: 74 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20 20  t.        {.    
3560: 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76          object v
3570: 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  alue;.          
3580: 20 20 54 72 79 47 65 74 56 61 6c 75 65 28 22 66    TryGetValue("f
3590: 6f 72 65 69 67 6e 20 6b 65 79 73 22 2c 20 6f 75  oreign keys", ou
35a0: 74 20 76 61 6c 75 65 29 3b 0a 20 20 20 20 20 20  t value);.      
35b0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
35c0: 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f  iteConvert.ToBoo
35d0: 6c 65 61 6e 28 76 61 6c 75 65 29 3b 0a 20 20 20  lean(value);.   
35e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73       }.        s
35f0: 65 74 0a 20 20 20 20 20 20 20 20 7b 0a 20 20 20  et.        {.   
3600: 20 20 20 20 20 20 20 20 20 74 68 69 73 5b 22 66           this["f
3610: 6f 72 65 69 67 6e 20 6b 65 79 73 22 5d 20 3d 20  oreign keys"] = 
3620: 76 61 6c 75 65 3b 0a 20 20 20 20 20 20 20 20 7d  value;.        }
3630: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
3640: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3650: 20 2f 2f 2f 20 47 65 74 73 2f 53 65 74 73 20 74   /// Gets/Sets t
3660: 68 65 20 65 78 74 72 61 20 62 65 68 61 76 69 6f  he extra behavio
3670: 72 61 6c 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20  ral flags...    
3680: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
3690: 20 20 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 74      [Browsable(t
36a0: 72 75 65 29 5d 0d 0a 20 20 20 20 5b 44 65 66 61  rue)]..    [Defa
36b0: 75 6c 74 56 61 6c 75 65 28 53 51 4c 69 74 65 43  ultValue(SQLiteC
36c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
36d0: 65 66 61 75 6c 74 29 5d 0d 0a 20 20 20 20 70 75  efault)]..    pu
36e0: 62 6c 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65  blic SQLiteConne
36f0: 63 74 69 6f 6e 46 6c 61 67 73 20 46 6c 61 67 73  ctionFlags Flags
3700: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
3710: 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
3720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f 62 6a  .            obj
3730: 65 63 74 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ect value;....  
3740: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 54 72            if (Tr
3750: 79 47 65 74 56 61 6c 75 65 28 22 66 6c 61 67 73  yGetValue("flags
3760: 22 2c 20 6f 75 74 20 76 61 6c 75 65 29 29 0d 0a  ", out value))..
3770: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
3780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
3790: 66 20 28 76 61 6c 75 65 20 69 73 20 53 51 4c 69  f (value is SQLi
37a0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
37b0: 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s)..            
37c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
37d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
37e0: 46 6c 61 67 73 29 76 61 6c 75 65 3b 0d 0a 20 20  Flags)value;..  
37f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65 6c                el
3800: 73 65 20 69 66 20 28 76 61 6c 75 65 20 21 3d 20  se if (value != 
3810: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
3820: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
3830: 6e 20 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  n (SQLiteConnect
3840: 69 6f 6e 46 6c 61 67 73 29 54 79 70 65 44 65 73  ionFlags)TypeDes
3850: 63 72 69 70 74 6f 72 2e 47 65 74 43 6f 6e 76 65  criptor.GetConve
3860: 72 74 65 72 28 0d 0a 20 20 20 20 20 20 20 20 20  rter(..         
3870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
3880: 79 70 65 6f 66 28 53 51 4c 69 74 65 43 6f 6e 6e  ypeof(SQLiteConn
3890: 65 63 74 69 6f 6e 46 6c 61 67 73 29 29 2e 43 6f  ectionFlags)).Co
38a0: 6e 76 65 72 74 46 72 6f 6d 28 76 61 6c 75 65 29  nvertFrom(value)
38b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
38c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
38d0: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e  return SQLiteCon
38e0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44 65 66  nectionFlags.Def
38f0: 61 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ault;..        }
3900: 0d 0a 20 20 20 20 20 20 20 20 73 65 74 0d 0a 20  ..        set.. 
3910: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
3920: 20 20 20 20 20 20 74 68 69 73 5b 22 66 6c 61 67        this["flag
3930: 73 22 5d 20 3d 20 76 61 6c 75 65 3b 0d 0a 20 20  s"] = value;..  
3940: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
3950: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3960: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  ry>..    /// If 
3970: 65 6e 61 62 6c 65 64 2c 20 61 70 70 6c 79 20 74  enabled, apply t
3980: 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65  he default conne
3990: 63 74 69 6f 6e 20 73 65 74 74 69 6e 67 73 20 74  ction settings t
39a0: 6f 20 6f 70 65 6e 65 64 20 64 61 74 61 62 61 73  o opened databas
39b0: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  es...    /// </s
39c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 5b 44 69  ummary>..    [Di
39d0: 73 70 6c 61 79 4e 61 6d 65 28 22 53 65 74 44 65  splayName("SetDe
39e0: 66 61 75 6c 74 73 22 29 5d 0d 0a 20 20 20 20 5b  faults")]..    [
39f0: 42 72 6f 77 73 61 62 6c 65 28 74 72 75 65 29 5d  Browsable(true)]
3a00: 0d 0a 20 20 20 20 5b 44 65 66 61 75 6c 74 56 61  ..    [DefaultVa
3a10: 6c 75 65 28 74 72 75 65 29 5d 0d 0a 20 20 20 20  lue(true)]..    
3a20: 70 75 62 6c 69 63 20 62 6f 6f 6c 20 53 65 74 44  public bool SetD
3a30: 65 66 61 75 6c 74 73 0d 0a 20 20 20 20 7b 0d 0a  efaults..    {..
3a40: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
3a50: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
3a60: 20 20 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65      object value
3a70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 54  ;..            T
3a80: 72 79 47 65 74 56 61 6c 75 65 28 22 73 65 74 64  ryGetValue("setd
3a90: 65 66 61 75 6c 74 73 22 2c 20 6f 75 74 20 76 61  efaults", out va
3aa0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
3ab0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
3ac0: 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61  Convert.ToBoolea
3ad0: 6e 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  n(value);..     
3ae0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65     }..        se
3af0: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  t..        {..  
3b00: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 5b 22            this["
3b10: 73 65 74 64 65 66 61 75 6c 74 73 22 5d 20 3d 20  setdefaults"] = 
3b20: 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  value;..        
3b30: 7d 0d 0a 20 20 20 20 7d 0d 0a 0a 20 20 20 20 2f  }..    }...    /
3b40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0a 20 20 20  // <summary>.   
3b50: 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75 6e 63   /// Helper func
3b60: 74 69 6f 6e 20 66 6f 72 20 72 65 74 72 69 65 76  tion for retriev
3b70: 69 6e 67 20 76 61 6c 75 65 73 20 66 72 6f 6d 20  ing values from 
3b80: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 74  the connectionst
3b90: 72 69 6e 67 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ring.    /// </s
3ba0: 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f 2f 20  ummary>.    /// 
3bb0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 65 79  <param name="key
3bc0: 77 6f 72 64 22 3e 54 68 65 20 6b 65 79 77 6f 72  word">The keywor
3bd0: 64 20 74 6f 20 72 65 74 72 69 65 76 65 20 73 65  d to retrieve se
3be0: 74 74 69 6e 67 73 20 66 6f 72 3c 2f 70 61 72 61  ttings for</para
3bf0: 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  m>.    /// <para
3c00: 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 54  m name="value">T
3c10: 68 65 20 72 65 73 75 6c 74 69 6e 67 20 70 61 72  he resulting par
3c20: 61 6d 65 74 65 72 20 76 61 6c 75 65 3c 2f 70 61  ameter value</pa
3c30: 72 61 6d 3e 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ram>.    /// <re
3c40: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 72  turns>Returns tr
3c50: 75 65 20 69 66 20 74 68 65 20 76 61 6c 75 65 20  ue if the value 
3c60: 77 61 73 20 66 6f 75 6e 64 20 61 6e 64 20 72 65  was found and re
3c70: 74 75 72 6e 65 64 3c 2f 72 65 74 75 72 6e 73 3e  turned</returns>
3c80: 0a 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72  .    public over
3c90: 72 69 64 65 20 62 6f 6f 6c 20 54 72 79 47 65 74  ride bool TryGet
3ca0: 56 61 6c 75 65 28 73 74 72 69 6e 67 20 6b 65 79  Value(string key
3cb0: 77 6f 72 64 2c 20 6f 75 74 20 6f 62 6a 65 63 74  word, out object
3cc0: 20 76 61 6c 75 65 29 0a 20 20 20 20 7b 0a 20 20   value).    {.  
3cd0: 20 20 20 20 62 6f 6f 6c 20 62 20 3d 20 62 61 73      bool b = bas
3ce0: 65 2e 54 72 79 47 65 74 56 61 6c 75 65 28 6b 65  e.TryGetValue(ke
3cf0: 79 77 6f 72 64 2c 20 6f 75 74 20 76 61 6c 75 65  yword, out value
3d00: 29 3b 0a 0a 20 20 20 20 20 20 69 66 20 28 21 5f  );..      if (!_
3d10: 70 72 6f 70 65 72 74 69 65 73 2e 43 6f 6e 74 61  properties.Conta
3d20: 69 6e 73 4b 65 79 28 6b 65 79 77 6f 72 64 29 29  insKey(keyword))
3d30: 20 72 65 74 75 72 6e 20 62 3b 0a 0a 20 20 20 20   return b;..    
3d40: 20 20 50 72 6f 70 65 72 74 79 44 65 73 63 72 69    PropertyDescri
3d50: 70 74 6f 72 20 70 64 20 3d 20 5f 70 72 6f 70 65  ptor pd = _prope
3d60: 72 74 69 65 73 5b 6b 65 79 77 6f 72 64 5d 20 61  rties[keyword] a
3d70: 73 20 50 72 6f 70 65 72 74 79 44 65 73 63 72 69  s PropertyDescri
3d80: 70 74 6f 72 3b 0a 0a 20 20 20 20 20 20 69 66 20  ptor;..      if 
3d90: 28 70 64 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74  (pd == null) ret
3da0: 75 72 6e 20 62 3b 0a 0a 20 20 20 20 20 20 2f 2f  urn b;..      //
3db0: 20 41 74 74 65 6d 70 74 20 74 6f 20 63 6f 65 72   Attempt to coer
3dc0: 63 65 20 74 68 65 20 76 61 6c 75 65 20 69 6e 74  ce the value int
3dd0: 6f 20 73 6f 6d 65 74 68 69 6e 67 20 6d 6f 72 65  o something more
3de0: 20 73 6f 6c 69 64 0a 20 20 20 20 20 20 69 66 20   solid.      if 
3df0: 28 62 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  (b).      {.    
3e00: 20 20 20 20 69 66 20 28 70 64 2e 50 72 6f 70 65      if (pd.Prope
3e10: 72 74 79 54 79 70 65 20 3d 3d 20 74 79 70 65 6f  rtyType == typeo
3e20: 66 28 42 6f 6f 6c 65 61 6e 29 29 0a 20 20 20 20  f(Boolean)).    
3e30: 20 20 20 20 20 20 76 61 6c 75 65 20 3d 20 53 51        value = SQ
3e40: 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f  LiteConvert.ToBo
3e50: 6f 6c 65 61 6e 28 76 61 6c 75 65 29 3b 0a 20 20  olean(value);.  
3e60: 20 20 20 20 20 20 65 6c 73 65 0a 20 20 20 20 20        else.     
3e70: 20 20 20 20 20 76 61 6c 75 65 20 3d 20 54 79 70       value = Typ
3e80: 65 44 65 73 63 72 69 70 74 6f 72 2e 47 65 74 43  eDescriptor.GetC
3e90: 6f 6e 76 65 72 74 65 72 28 70 64 2e 50 72 6f 70  onverter(pd.Prop
3ea0: 65 72 74 79 54 79 70 65 29 2e 43 6f 6e 76 65 72  ertyType).Conver
3eb0: 74 46 72 6f 6d 28 76 61 6c 75 65 29 3b 0a 20 20  tFrom(value);.  
3ec0: 20 20 20 20 7d 0a 20 20 20 20 20 20 65 6c 73 65      }.      else
3ed0: 0a 20 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20  .      {.       
3ee0: 20 44 65 66 61 75 6c 74 56 61 6c 75 65 41 74 74   DefaultValueAtt
3ef0: 72 69 62 75 74 65 20 61 74 74 20 3d 20 70 64 2e  ribute att = pd.
3f00: 41 74 74 72 69 62 75 74 65 73 5b 74 79 70 65 6f  Attributes[typeo
3f10: 66 28 44 65 66 61 75 6c 74 56 61 6c 75 65 41 74  f(DefaultValueAt
3f20: 74 72 69 62 75 74 65 29 5d 20 61 73 20 44 65 66  tribute)] as Def
3f30: 61 75 6c 74 56 61 6c 75 65 41 74 74 72 69 62 75  aultValueAttribu
3f40: 74 65 3b 0a 20 20 20 20 20 20 20 20 69 66 20 28  te;.        if (
3f50: 61 74 74 20 21 3d 20 6e 75 6c 6c 29 0a 20 20 20  att != null).   
3f60: 20 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20       {.         
3f70: 20 76 61 6c 75 65 20 3d 20 61 74 74 2e 56 61 6c   value = att.Val
3f80: 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 62 20  ue;.          b 
3f90: 3d 20 74 72 75 65 3b 0a 20 20 20 20 20 20 20 20  = true;.        
3fa0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
3fb0: 72 65 74 75 72 6e 20 62 3b 0a 20 20 20 20 7d 0a  return b;.    }.
3fc0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3fd0: 79 3e 0a 20 20 20 20 2f 2f 2f 20 46 61 6c 6c 62  y>.    /// Fallb
3fe0: 61 63 6b 20 6d 65 74 68 6f 64 20 66 6f 72 20 4d  ack method for M
3ff0: 4f 4e 4f 2c 20 77 68 69 63 68 20 64 6f 65 73 6e  ONO, which doesn
4000: 27 74 20 69 6d 70 6c 65 6d 65 6e 74 20 44 62 43  't implement DbC
4010: 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42  onnectionStringB
4020: 75 69 6c 64 65 72 2e 47 65 74 50 72 6f 70 65 72  uilder.GetProper
4030: 74 69 65 73 28 29 0a 20 20 20 20 2f 2f 2f 20 3c  ties().    /// <
4040: 2f 73 75 6d 6d 61 72 79 3e 0a 20 20 20 20 2f 2f  /summary>.    //
4050: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
4060: 72 6f 70 65 72 74 79 4c 69 73 74 22 3e 54 68 65  ropertyList">The
4070: 20 68 61 73 68 74 61 62 6c 65 20 74 6f 20 66 69   hashtable to fi
4080: 6c 6c 20 77 69 74 68 20 70 72 6f 70 65 72 74 79  ll with property
4090: 20 64 65 73 63 72 69 70 74 6f 72 73 3c 2f 70 61   descriptors</pa
40a0: 72 61 6d 3e 0a 20 20 20 20 70 72 69 76 61 74 65  ram>.    private
40b0: 20 76 6f 69 64 20 46 61 6c 6c 62 61 63 6b 47 65   void FallbackGe
40c0: 74 50 72 6f 70 65 72 74 69 65 73 28 48 61 73 68  tProperties(Hash
40d0: 74 61 62 6c 65 20 70 72 6f 70 65 72 74 79 4c 69  table propertyLi
40e0: 73 74 29 0a 20 20 20 20 7b 0a 20 20 20 20 20 20  st).    {.      
40f0: 66 6f 72 65 61 63 68 20 28 50 72 6f 70 65 72 74  foreach (Propert
4100: 79 44 65 73 63 72 69 70 74 6f 72 20 64 65 73 63  yDescriptor desc
4110: 72 69 70 74 6f 72 20 69 6e 20 54 79 70 65 44 65  riptor in TypeDe
4120: 73 63 72 69 70 74 6f 72 2e 47 65 74 50 72 6f 70  scriptor.GetProp
4130: 65 72 74 69 65 73 28 74 68 69 73 2c 20 74 72 75  erties(this, tru
4140: 65 29 29 0a 20 20 20 20 20 20 7b 0a 20 20 20 20  e)).      {.    
4150: 20 20 20 20 69 66 20 28 64 65 73 63 72 69 70 74      if (descript
4160: 6f 72 2e 4e 61 6d 65 20 21 3d 20 22 43 6f 6e 6e  or.Name != "Conn
4170: 65 63 74 69 6f 6e 53 74 72 69 6e 67 22 20 26 26  ectionString" &&
4180: 20 70 72 6f 70 65 72 74 79 4c 69 73 74 2e 43 6f   propertyList.Co
4190: 6e 74 61 69 6e 73 4b 65 79 28 64 65 73 63 72 69  ntainsKey(descri
41a0: 70 74 6f 72 2e 44 69 73 70 6c 61 79 4e 61 6d 65  ptor.DisplayName
41b0: 29 20 3d 3d 20 66 61 6c 73 65 29 0a 20 20 20 20  ) == false).    
41c0: 20 20 20 20 7b 0a 20 20 20 20 20 20 20 20 20 20      {.          
41d0: 70 72 6f 70 65 72 74 79 4c 69 73 74 2e 41 64 64  propertyList.Add
41e0: 28 64 65 73 63 72 69 70 74 6f 72 2e 44 69 73 70  (descriptor.Disp
41f0: 6c 61 79 4e 61 6d 65 2c 20 64 65 73 63 72 69 70  layName, descrip
4200: 74 6f 72 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  tor);.        }.
4210: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
4220: 7d 0a 23 65 6e 64 69 66 0a 7d 0a                 }.#endif.}.