SQLITE_NOTICE(283): recovered 2 frames from WAL file /fossil/dotnet.fossil-wal

System.Data.SQLite: Hex Artifact Content
System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 5d691bfc46d3c32418702eccde24662094fc6f1b:


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 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
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 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 44 61 74 61 3b 0d 0a 20 20  System.Data;..  
0170: 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 61 74  using System.Dat
0180: 61 2e 43 6f 6d 6d 6f 6e 3b 0d 0a 20 20 75 73 69  a.Common;..  usi
0190: 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f  ng System.Diagno
01a0: 73 74 69 63 73 3b 0d 0a 20 20 75 73 69 6e 67 20  stics;..  using 
01b0: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
01c0: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 20 20 75  ns.Generic;..  u
01d0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 47 6c 6f 62  sing System.Glob
01e0: 61 6c 69 7a 61 74 69 6f 6e 3b 0d 0a 20 20 75 73  alization;..  us
01f0: 69 6e 67 20 53 79 73 74 65 6d 2e 43 6f 6d 70 6f  ing System.Compo
0200: 6e 65 6e 74 4d 6f 64 65 6c 3b 0d 0a 20 20 75 73  nentModel;..  us
0210: 69 6e 67 20 53 79 73 74 65 6d 2e 52 65 66 6c 65  ing System.Refle
0220: 63 74 69 6f 6e 3b 0d 0a 20 20 75 73 69 6e 67 20  ction;..  using 
0230: 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d 65 2e 49  System.Runtime.I
0240: 6e 74 65 72 6f 70 53 65 72 76 69 63 65 73 3b 0d  nteropServices;.
0250: 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e  .  using System.
0260: 49 4f 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73  IO;..  using Sys
0270: 74 65 6d 2e 54 65 78 74 3b 0d 0a 20 20 75 73 69  tem.Text;..  usi
0280: 6e 67 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64  ng System.Thread
0290: 69 6e 67 3b 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f  ing;....  //////
02a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
02f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0300: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0310: 20 20 2f 2f 2f 20 54 68 69 73 20 63 6c 61 73 73    /// This class
0320: 20 72 65 70 72 65 73 65 6e 74 73 20 61 20 73 69   represents a si
0330: 6e 67 6c 65 20 76 61 6c 75 65 20 74 6f 20 62 65  ngle value to be
0340: 20 72 65 74 75 72 6e 65 64 0d 0a 20 20 2f 2f 2f   returned..  ///
0350: 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65 20 63   from the <see c
0360: 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52  ref="SQLiteDataR
0370: 65 61 64 65 72 22 20 2f 3e 20 63 6c 61 73 73 20  eader" /> class 
0380: 76 69 61 0d 0a 20 20 2f 2f 2f 20 69 74 73 20 3c  via..  /// its <
0390: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
03a0: 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 42 6c  DataReader.GetBl
03b0: 6f 62 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c  ob" />,..  /// <
03c0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
03d0: 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 42 6f  DataReader.GetBo
03e0: 6f 6c 65 61 6e 22 20 2f 3e 2c 0d 0a 20 20 2f 2f  olean" />,..  //
03f0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
0400: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
0410: 74 42 79 74 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f  tByte" />,..  //
0420: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
0430: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
0440: 74 42 79 74 65 73 22 20 2f 3e 2c 0d 0a 20 20 2f  tBytes" />,..  /
0450: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
0460: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
0470: 65 74 43 68 61 72 22 20 2f 3e 2c 0d 0a 20 20 2f  etChar" />,..  /
0480: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
0490: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
04a0: 65 74 43 68 61 72 73 22 20 2f 3e 2c 0d 0a 20 20  etChars" />,..  
04b0: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
04c0: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e  QLiteDataReader.
04d0: 47 65 74 44 61 74 65 54 69 6d 65 22 20 2f 3e 2c  GetDateTime" />,
04e0: 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65  ..  /// <see cre
04f0: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
0500: 64 65 72 2e 47 65 74 44 65 63 69 6d 61 6c 22 20  der.GetDecimal" 
0510: 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20  />,..  /// <see 
0520: 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61  cref="SQLiteData
0530: 52 65 61 64 65 72 2e 47 65 74 44 6f 75 62 6c 65  Reader.GetDouble
0540: 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65  " />,..  /// <se
0550: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
0560: 74 61 52 65 61 64 65 72 2e 47 65 74 46 6c 6f 61  taReader.GetFloa
0570: 74 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73  t" />,..  /// <s
0580: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
0590: 61 74 61 52 65 61 64 65 72 2e 47 65 74 47 75 69  ataReader.GetGui
05a0: 64 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73  d" />,..  /// <s
05b0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
05c0: 61 74 61 52 65 61 64 65 72 2e 47 65 74 49 6e 74  ataReader.GetInt
05d0: 31 36 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c  16" />,..  /// <
05e0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
05f0: 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 49 6e  DataReader.GetIn
0600: 74 33 32 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20  t32" />,..  /// 
0610: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
0620: 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 49  eDataReader.GetI
0630: 6e 74 36 34 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f  nt64" />,..  ///
0640: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
0650: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
0660: 53 74 72 69 6e 67 22 20 2f 3e 2c 20 6f 72 0d 0a  String" />, or..
0670: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
0680: 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  "SQLiteDataReade
0690: 72 2e 47 65 74 56 61 6c 75 65 22 20 2f 3e 20 6d  r.GetValue" /> m
06a0: 65 74 68 6f 64 2e 20 20 49 66 20 74 68 65 20 76  ethod.  If the v
06b0: 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 2f  alue of the..  /
06c0: 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 70 75  // associated pu
06d0: 62 6c 69 63 20 66 69 65 6c 64 20 6f 66 20 74 68  blic field of th
06e0: 69 73 20 63 6c 61 73 73 20 69 73 20 6e 75 6c 6c  is class is null
06f0: 20 75 70 6f 6e 20 72 65 74 75 72 6e 69 6e 67 20   upon returning 
0700: 66 72 6f 6d 20 74 68 65 0d 0a 20 20 2f 2f 2f 20  from the..  /// 
0710: 63 61 6c 6c 62 61 63 6b 2c 20 74 68 65 20 6e 75  callback, the nu
0720: 6c 6c 20 76 61 6c 75 65 20 77 69 6c 6c 20 6f 6e  ll value will on
0730: 6c 79 20 62 65 20 75 73 65 64 20 69 66 20 74 68  ly be used if th
0740: 65 20 72 65 74 75 72 6e 20 74 79 70 65 20 66 6f  e return type fo
0750: 72 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65  r the..  /// <se
0760: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
0770: 74 61 52 65 61 64 65 72 22 20 2f 3e 20 6d 65 74  taReader" /> met
0780: 68 6f 64 20 63 61 6c 6c 65 64 20 69 73 20 6e 6f  hod called is no
0790: 74 20 61 20 76 61 6c 75 65 20 74 79 70 65 2e 0d  t a value type..
07a0: 0a 20 20 2f 2f 2f 20 49 66 20 74 68 65 20 76 61  .  /// If the va
07b0: 6c 75 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e  lue to be return
07c0: 65 64 20 66 72 6f 6d 20 74 68 65 20 3c 73 65 65  ed from the <see
07d0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
07e0: 61 52 65 61 64 65 72 22 20 2f 3e 0d 0a 20 20 2f  aReader" />..  /
07f0: 2f 2f 20 6d 65 74 68 6f 64 20 69 73 20 75 6e 73  // method is uns
0800: 75 69 74 61 62 6c 65 20 28 65 2e 67 2e 20 6e 75  uitable (e.g. nu
0810: 6c 6c 20 77 69 74 68 20 61 20 76 61 6c 75 65 20  ll with a value 
0820: 74 79 70 65 29 2c 20 61 6e 20 65 78 63 65 70 74  type), an except
0830: 69 6f 6e 20 77 69 6c 6c 0d 0a 20 20 2f 2f 2f 20  ion will..  /// 
0840: 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 2f 2f  be thrown...  //
0850: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0860: 70 75 62 6c 69 63 20 73 65 61 6c 65 64 20 63 6c  public sealed cl
0870: 61 73 73 20 53 51 4c 69 74 65 44 61 74 61 52 65  ass SQLiteDataRe
0880: 61 64 65 72 56 61 6c 75 65 0d 0a 20 20 7b 0d 0a  aderValue..  {..
0890: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
08a0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
08b0: 68 65 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72  he value to be r
08c0: 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 74 68 65  eturned from the
08d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65  ..      /// <see
08e0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
08f0: 61 52 65 61 64 65 72 2e 47 65 74 42 6c 6f 62 22  aReader.GetBlob"
0900: 20 2f 3e 20 6d 65 74 68 6f 64 20 2d 4f 52 2d 20   /> method -OR- 
0910: 6e 75 6c 6c 20 74 6f 0d 0a 20 20 20 20 20 20 2f  null to..      /
0920: 2f 2f 20 69 6e 64 69 63 61 74 65 20 61 6e 20 65  // indicate an e
0930: 72 72 6f 72 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  rror...      ///
0940: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0950: 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
0960: 42 6c 6f 62 20 42 6c 6f 62 56 61 6c 75 65 3b 0d  Blob BlobValue;.
0970: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
0980: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
0990: 2f 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 62  / The value to b
09a0: 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20  e returned from 
09b0: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  the..      /// <
09c0: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
09d0: 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 42 6f  DataReader.GetBo
09e0: 6f 6c 65 61 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  olean" /> method
09f0: 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a 20   -OR- null to.. 
0a00: 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74       /// indicat
0a10: 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20  e an error...   
0a20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
0a30: 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  >..      public 
0a40: 62 6f 6f 6c 3f 20 42 6f 6f 6c 65 61 6e 56 61 6c  bool? BooleanVal
0a50: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ue;....      ///
0a60: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0a70: 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20    /// The value 
0a80: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 66  to be returned f
0a90: 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  rom the..      /
0aa0: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
0ab0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
0ac0: 65 74 42 79 74 65 22 20 2f 3e 20 6d 65 74 68 6f  etByte" /> metho
0ad0: 64 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a  d -OR- null to..
0ae0: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61        /// indica
0af0: 74 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20  te an error...  
0b00: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0b10: 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  y>..      public
0b20: 20 62 79 74 65 3f 20 42 79 74 65 56 61 6c 75 65   byte? ByteValue
0b30: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ;....      /// <
0b40: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
0b50: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 6f  /// The value to
0b60: 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f   be returned fro
0b70: 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  m the..      ///
0b80: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
0b90: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
0ba0: 42 79 74 65 73 22 20 2f 3e 20 6d 65 74 68 6f 64  Bytes" /> method
0bb0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
0bc0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70  ummary>..      p
0bd0: 75 62 6c 69 63 20 62 79 74 65 5b 5d 20 42 79 74  ublic byte[] Byt
0be0: 65 73 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20  esValue;....    
0bf0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0c00: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76  .      /// The v
0c10: 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74 75 72  alue to be retur
0c20: 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20  ned from the..  
0c30: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
0c40: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
0c50: 64 65 72 2e 47 65 74 43 68 61 72 22 20 2f 3e 20  der.GetChar" /> 
0c60: 6d 65 74 68 6f 64 20 2d 4f 52 2d 20 6e 75 6c 6c  method -OR- null
0c70: 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 69   to..      /// i
0c80: 6e 64 69 63 61 74 65 20 61 6e 20 65 72 72 6f 72  ndicate an error
0c90: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
0ca0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70  ummary>..      p
0cb0: 75 62 6c 69 63 20 63 68 61 72 3f 20 43 68 61 72  ublic char? Char
0cc0: 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  Value;....      
0cd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0ce0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c       /// The val
0cf0: 75 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65  ue to be returne
0d00: 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20  d from the..    
0d10: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
0d20: 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  "SQLiteDataReade
0d30: 72 2e 47 65 74 43 68 61 72 73 22 20 2f 3e 20 6d  r.GetChars" /> m
0d40: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  ethod...      //
0d50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0d60: 20 20 20 20 70 75 62 6c 69 63 20 63 68 61 72 5b      public char[
0d70: 5d 20 43 68 61 72 73 56 61 6c 75 65 3b 0d 0a 0d  ] CharsValue;...
0d80: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
0d90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
0da0: 54 68 65 20 76 61 6c 75 65 20 74 6f 20 62 65 20  The value to be 
0db0: 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 74 68  returned from th
0dc0: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  e..      /// <se
0dd0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
0de0: 74 61 52 65 61 64 65 72 2e 47 65 74 44 61 74 65  taReader.GetDate
0df0: 54 69 6d 65 22 20 2f 3e 20 6d 65 74 68 6f 64 20  Time" /> method 
0e00: 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a 20 20  -OR- null to..  
0e10: 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74 65      /// indicate
0e20: 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20 20   an error...    
0e30: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0e40: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 44  ..      public D
0e50: 61 74 65 54 69 6d 65 3f 20 44 61 74 65 54 69 6d  ateTime? DateTim
0e60: 65 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  eValue;....     
0e70: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0e80: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61        /// The va
0e90: 6c 75 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e  lue to be return
0ea0: 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a 20 20 20  ed from the..   
0eb0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
0ec0: 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  ="SQLiteDataRead
0ed0: 65 72 2e 47 65 74 44 65 63 69 6d 61 6c 22 20 2f  er.GetDecimal" /
0ee0: 3e 20 6d 65 74 68 6f 64 20 2d 4f 52 2d 20 6e 75  > method -OR- nu
0ef0: 6c 6c 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 2f  ll to..      ///
0f00: 20 69 6e 64 69 63 61 74 65 20 61 6e 20 65 72 72   indicate an err
0f10: 6f 72 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  or...      /// <
0f20: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
0f30: 20 70 75 62 6c 69 63 20 64 65 63 69 6d 61 6c 3f   public decimal?
0f40: 20 44 65 63 69 6d 61 6c 56 61 6c 75 65 3b 0d 0a   DecimalValue;..
0f50: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
0f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
0f70: 20 54 68 65 20 76 61 6c 75 65 20 74 6f 20 62 65   The value to be
0f80: 20 72 65 74 75 72 6e 65 64 20 66 72 6f 6d 20 74   returned from t
0f90: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
0fa0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
0fb0: 61 74 61 52 65 61 64 65 72 2e 47 65 74 44 6f 75  ataReader.GetDou
0fc0: 62 6c 65 22 20 2f 3e 20 6d 65 74 68 6f 64 20 2d  ble" /> method -
0fd0: 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a 20 20 20  OR- null to..   
0fe0: 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74 65 20     /// indicate 
0ff0: 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20 20 20  an error...     
1000: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1010: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 64 6f  .      public do
1020: 75 62 6c 65 3f 20 44 6f 75 62 6c 65 56 61 6c 75  uble? DoubleValu
1030: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  e;....      /// 
1040: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
1050: 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74   /// The value t
1060: 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72  o be returned fr
1070: 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  om the..      //
1080: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
1090: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
10a0: 74 46 6c 6f 61 74 22 20 2f 3e 20 6d 65 74 68 6f  tFloat" /> metho
10b0: 64 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a  d -OR- null to..
10c0: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61        /// indica
10d0: 74 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20  te an error...  
10e0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
10f0: 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  y>..      public
1100: 20 66 6c 6f 61 74 3f 20 46 6c 6f 61 74 56 61 6c   float? FloatVal
1110: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ue;....      ///
1120: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1130: 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20    /// The value 
1140: 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 66  to be returned f
1150: 72 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  rom the..      /
1160: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
1170: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
1180: 65 74 47 75 69 64 22 20 2f 3e 20 6d 65 74 68 6f  etGuid" /> metho
1190: 64 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a  d -OR- null to..
11a0: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61        /// indica
11b0: 74 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20  te an error...  
11c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
11d0: 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  y>..      public
11e0: 20 47 75 69 64 3f 20 47 75 69 64 56 61 6c 75 65   Guid? GuidValue
11f0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ;....      /// <
1200: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1210: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 6f  /// The value to
1220: 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f   be returned fro
1230: 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  m the..      ///
1240: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1250: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
1260: 49 6e 74 31 36 22 20 2f 3e 20 6d 65 74 68 6f 64  Int16" /> method
1270: 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a 20   -OR- null to.. 
1280: 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74       /// indicat
1290: 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20  e an error...   
12a0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12b0: 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  >..      public 
12c0: 73 68 6f 72 74 3f 20 49 6e 74 31 36 56 61 6c 75  short? Int16Valu
12d0: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  e;....      /// 
12e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
12f0: 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74   /// The value t
1300: 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72  o be returned fr
1310: 6f 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  om the..      //
1320: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
1330: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
1340: 74 49 6e 74 33 32 22 20 2f 3e 20 6d 65 74 68 6f  tInt32" /> metho
1350: 64 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a  d -OR- null to..
1360: 20 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61        /// indica
1370: 74 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20  te an error...  
1380: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1390: 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63  y>..      public
13a0: 20 69 6e 74 3f 20 49 6e 74 33 32 56 61 6c 75 65   int? Int32Value
13b0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ;....      /// <
13c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
13d0: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 6f  /// The value to
13e0: 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f   be returned fro
13f0: 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  m the..      ///
1400: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1410: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
1420: 49 6e 74 36 34 22 20 2f 3e 20 6d 65 74 68 6f 64  Int64" /> method
1430: 20 2d 4f 52 2d 20 6e 75 6c 6c 20 74 6f 0d 0a 20   -OR- null to.. 
1440: 20 20 20 20 20 2f 2f 2f 20 69 6e 64 69 63 61 74       /// indicat
1450: 65 20 61 6e 20 65 72 72 6f 72 2e 0d 0a 20 20 20  e an error...   
1460: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1470: 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20  >..      public 
1480: 6c 6f 6e 67 3f 20 49 6e 74 36 34 56 61 6c 75 65  long? Int64Value
1490: 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ;....      /// <
14a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
14b0: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 6f  /// The value to
14c0: 20 62 65 20 72 65 74 75 72 6e 65 64 20 66 72 6f   be returned fro
14d0: 6d 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  m the..      ///
14e0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
14f0: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
1500: 53 74 72 69 6e 67 22 20 2f 3e 20 6d 65 74 68 6f  String" /> metho
1510: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  d...      /// </
1520: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
1530: 70 75 62 6c 69 63 20 73 74 72 69 6e 67 20 53 74  public string St
1540: 72 69 6e 67 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20  ringValue;....  
1550: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1560: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
1570: 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72 65 74   value to be ret
1580: 75 72 6e 65 64 20 66 72 6f 6d 20 74 68 65 0d 0a  urned from the..
1590: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
15a0: 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52  ref="SQLiteDataR
15b0: 65 61 64 65 72 2e 47 65 74 56 61 6c 75 65 22 20  eader.GetValue" 
15c0: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
15d0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
15e0: 0d 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f  ..      public o
15f0: 62 6a 65 63 74 20 56 61 6c 75 65 3b 0d 0a 20 20  bject Value;..  
1600: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  }....  /////////
1610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1660: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f  ////////....  //
1670: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
1680: 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72 65  // This class re
1690: 70 72 65 73 65 6e 74 73 20 74 68 65 20 70 61 72  presents the par
16a0: 61 6d 65 74 65 72 73 20 74 68 61 74 20 61 72 65  ameters that are
16b0: 20 70 72 6f 76 69 64 65 64 0d 0a 20 20 2f 2f 2f   provided..  ///
16c0: 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65   to the <see cre
16d0: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
16e0: 64 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 73 2c  der" /> methods,
16f0: 20 77 69 74 68 0d 0a 20 20 2f 2f 2f 20 74 68 65   with..  /// the
1700: 20 65 78 63 65 70 74 69 6f 6e 20 6f 66 20 74 68   exception of th
1710: 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65 78 20 28  e column index (
1720: 70 72 6f 76 69 64 65 64 20 73 65 70 61 72 61 74  provided separat
1730: 65 6c 79 29 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73  ely)...  /// </s
1740: 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69  ummary>..  publi
1750: 63 20 61 62 73 74 72 61 63 74 20 63 6c 61 73 73  c abstract class
1760: 20 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e 74   SQLiteReadEvent
1770: 41 72 67 73 20 3a 20 45 76 65 6e 74 41 72 67 73  Args : EventArgs
1780: 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 20  ..  {..      // 
1790: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 7d 0d 0a 0d  nothing...  }...
17a0: 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .  /////////////
17b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1800: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73  ////....  /// <s
1810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54  ummary>..  /// T
1820: 68 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73  his class repres
1830: 65 6e 74 73 20 74 68 65 20 70 61 72 61 6d 65 74  ents the paramet
1840: 65 72 73 20 74 68 61 74 20 61 72 65 20 70 72 6f  ers that are pro
1850: 76 69 64 65 64 20 74 6f 0d 0a 20 20 2f 2f 2f 20  vided to..  /// 
1860: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
1870: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e  QLiteDataReader.
1880: 47 65 74 42 6c 6f 62 22 20 2f 3e 20 6d 65 74 68  GetBlob" /> meth
1890: 6f 64 2c 20 77 69 74 68 0d 0a 20 20 2f 2f 2f 20  od, with..  /// 
18a0: 74 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66  the exception of
18b0: 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e 64 65   the column inde
18c0: 78 20 28 70 72 6f 76 69 64 65 64 20 73 65 70 61  x (provided sepa
18d0: 72 61 74 65 6c 79 29 2e 0d 0a 20 20 2f 2f 2f 20  rately)...  /// 
18e0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75  </summary>..  pu
18f0: 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c 69 74  blic class SQLit
1900: 65 52 65 61 64 42 6c 6f 62 45 76 65 6e 74 41 72  eReadBlobEventAr
1910: 67 73 20 3a 20 53 51 4c 69 74 65 52 65 61 64 45  gs : SQLiteReadE
1920: 76 65 6e 74 41 72 67 73 0d 0a 20 20 7b 0d 0a 20  ventArgs..  {.. 
1930: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 72 69       #region Pri
1940: 76 61 74 65 20 44 61 74 61 0d 0a 20 20 20 20 20  vate Data..     
1950: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1960: 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f 76 69 64        /// Provid
1970: 65 73 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  es the underlyin
1980: 67 20 73 74 6f 72 61 67 65 20 66 6f 72 20 74 68  g storage for th
1990: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  e..      /// <se
19a0: 65 20 63 72 65 66 3d 22 52 65 61 64 4f 6e 6c 79  e cref="ReadOnly
19b0: 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e 0d 0a  " /> property...
19c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
19d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72 69 76  ary>..      priv
19e0: 61 74 65 20 62 6f 6f 6c 20 72 65 61 64 4f 6e 6c  ate bool readOnl
19f0: 79 3b 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65  y;..      #endre
1a00: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  gion....      //
1a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
1a60: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
1a70: 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20   Constructors.. 
1a80: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
1a90: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43 6f  y>..      /// Co
1aa0: 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73 74  nstructs an inst
1ab0: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
1ac0: 73 73 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20  ss to pass into 
1ad0: 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0d 0a  a user-defined..
1ae0: 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 62 61        /// callba
1af0: 63 6b 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ck associated wi
1b00: 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  th the <see cref
1b10: 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  ="SQLiteDataRead
1b20: 65 72 2e 47 65 74 42 6c 6f 62 22 20 2f 3e 0d 0a  er.GetBlob" />..
1b30: 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64        /// method
1b40: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
1b50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
1b60: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1b70: 72 65 61 64 4f 6e 6c 79 22 3e 0d 0a 20 20 20 20  readOnly">..    
1b80: 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20    /// The value 
1b90: 74 68 61 74 20 77 61 73 20 6f 72 69 67 69 6e 61  that was origina
1ba0: 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20 66 6f  lly specified fo
1bb0: 72 20 74 68 65 20 22 72 65 61 64 4f 6e 6c 79 22  r the "readOnly"
1bc0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61  ..      /// para
1bd0: 6d 65 74 65 72 20 74 6f 20 74 68 65 20 3c 73 65  meter to the <se
1be0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
1bf0: 74 61 52 65 61 64 65 72 2e 47 65 74 42 6c 6f 62  taReader.GetBlob
1c00: 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
1c10: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1c20: 0d 0a 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c  ..      internal
1c30: 20 53 51 4c 69 74 65 52 65 61 64 42 6c 6f 62 45   SQLiteReadBlobE
1c40: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
1c50: 20 20 20 20 20 62 6f 6f 6c 20 72 65 61 64 4f 6e       bool readOn
1c60: 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d  ly..          ).
1c70: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1c80: 20 20 20 20 74 68 69 73 2e 72 65 61 64 4f 6e 6c      this.readOnl
1c90: 79 20 3d 20 72 65 61 64 4f 6e 6c 79 3b 0d 0a 20  y = readOnly;.. 
1ca0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65       }..      #e
1cb0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
1cc0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
1cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1d10: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
1d20: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
1d30: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
1d40: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
1d50: 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 61  he value that wa
1d60: 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 70 65  s originally spe
1d70: 63 69 66 69 65 64 20 66 6f 72 20 74 68 65 20 22  cified for the "
1d80: 72 65 61 64 4f 6e 6c 79 22 0d 0a 20 20 20 20 20  readOnly"..     
1d90: 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20 74   /// parameter t
1da0: 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
1db0: 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  "SQLiteDataReade
1dc0: 72 2e 47 65 74 42 6c 6f 62 22 20 2f 3e 20 6d 65  r.GetBlob" /> me
1dd0: 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  thod...      ///
1de0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1df0: 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 52     public bool R
1e00: 65 61 64 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 7b  eadOnly..      {
1e10: 0d 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 20  ..          get 
1e20: 7b 20 72 65 74 75 72 6e 20 72 65 61 64 4f 6e 6c  { return readOnl
1e30: 79 3b 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20  y; }..          
1e40: 73 65 74 20 7b 20 72 65 61 64 4f 6e 6c 79 20 3d  set { readOnly =
1e50: 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20   value; }..     
1e60: 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e 64 72 65   }..      #endre
1e70: 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f  gion..  }....  /
1e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ec0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ed0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1ee0: 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
1ef0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20  ry>..  /// This 
1f00: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
1f10: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20   the parameters 
1f20: 74 68 61 74 20 61 72 65 20 70 72 6f 76 69 64 65  that are provide
1f30: 64 0d 0a 20 20 2f 2f 2f 20 74 6f 20 74 68 65 20  d..  /// to the 
1f40: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
1f50: 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 42  eDataReader.GetB
1f60: 79 74 65 73 22 20 2f 3e 20 61 6e 64 0d 0a 20 20  ytes" /> and..  
1f70: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
1f80: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e  QLiteDataReader.
1f90: 47 65 74 43 68 61 72 73 22 20 2f 3e 20 6d 65 74  GetChars" /> met
1fa0: 68 6f 64 73 2c 20 77 69 74 68 0d 0a 20 20 2f 2f  hods, with..  //
1fb0: 2f 20 74 68 65 20 65 78 63 65 70 74 69 6f 6e 20  / the exception 
1fc0: 6f 66 20 74 68 65 20 63 6f 6c 75 6d 6e 20 69 6e  of the column in
1fd0: 64 65 78 20 28 70 72 6f 76 69 64 65 64 20 73 65  dex (provided se
1fe0: 70 61 72 61 74 65 6c 79 29 2e 0d 0a 20 20 2f 2f  parately)...  //
1ff0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2000: 70 75 62 6c 69 63 20 63 6c 61 73 73 20 53 51 4c  public class SQL
2010: 69 74 65 52 65 61 64 41 72 72 61 79 45 76 65 6e  iteReadArrayEven
2020: 74 41 72 67 73 20 3a 20 53 51 4c 69 74 65 52 65  tArgs : SQLiteRe
2030: 61 64 45 76 65 6e 74 41 72 67 73 0d 0a 20 20 7b  adEventArgs..  {
2040: 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f 6e 20  ..      #region 
2050: 50 72 69 76 61 74 65 20 44 61 74 61 0d 0a 20 20  Private Data..  
2060: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2070: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f  >..      /// Pro
2080: 76 69 64 65 73 20 74 68 65 20 75 6e 64 65 72 6c  vides the underl
2090: 79 69 6e 67 20 73 74 6f 72 61 67 65 20 66 6f 72  ying storage for
20a0: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
20b0: 3c 73 65 65 20 63 72 65 66 3d 22 44 61 74 61 4f  <see cref="DataO
20c0: 66 66 73 65 74 22 20 2f 3e 20 70 72 6f 70 65 72  ffset" /> proper
20d0: 74 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ty...      /// <
20e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
20f0: 20 70 72 69 76 61 74 65 20 6c 6f 6e 67 20 64 61   private long da
2100: 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20 20  taOffset;....   
2110: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2120: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f 76  ..      /// Prov
2130: 69 64 65 73 20 74 68 65 20 75 6e 64 65 72 6c 79  ides the underly
2140: 69 6e 67 20 73 74 6f 72 61 67 65 20 66 6f 72 20  ing storage for 
2150: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  the..      /// <
2160: 73 65 65 20 63 72 65 66 3d 22 42 79 74 65 42 75  see cref="ByteBu
2170: 66 66 65 72 22 20 2f 3e 20 70 72 6f 70 65 72 74  ffer" /> propert
2180: 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  y...      /// </
2190: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
21a0: 70 72 69 76 61 74 65 20 62 79 74 65 5b 5d 20 62  private byte[] b
21b0: 79 74 65 42 75 66 66 65 72 3b 0d 0a 0d 0a 20 20  yteBuffer;....  
21c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
21d0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f  >..      /// Pro
21e0: 76 69 64 65 73 20 74 68 65 20 75 6e 64 65 72 6c  vides the underl
21f0: 79 69 6e 67 20 73 74 6f 72 61 67 65 20 66 6f 72  ying storage for
2200: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
2210: 3c 73 65 65 20 63 72 65 66 3d 22 43 68 61 72 42  <see cref="CharB
2220: 75 66 66 65 72 22 20 2f 3e 20 70 72 6f 70 65 72  uffer" /> proper
2230: 74 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ty...      /// <
2240: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2250: 20 70 72 69 76 61 74 65 20 63 68 61 72 5b 5d 20   private char[] 
2260: 63 68 61 72 42 75 66 66 65 72 3b 0d 0a 0d 0a 20  charBuffer;.... 
2270: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
2280: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 50 72  y>..      /// Pr
2290: 6f 76 69 64 65 73 20 74 68 65 20 75 6e 64 65 72  ovides the under
22a0: 6c 79 69 6e 67 20 73 74 6f 72 61 67 65 20 66 6f  lying storage fo
22b0: 72 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  r the..      ///
22c0: 20 3c 73 65 65 20 63 72 65 66 3d 22 42 75 66 66   <see cref="Buff
22d0: 65 72 4f 66 66 73 65 74 22 20 2f 3e 20 70 72 6f  erOffset" /> pro
22e0: 70 65 72 74 79 2e 0d 0a 20 20 20 20 20 20 2f 2f  perty...      //
22f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2300: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
2310: 62 75 66 66 65 72 4f 66 66 73 65 74 3b 0d 0a 0d  bufferOffset;...
2320: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
2330: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
2340: 50 72 6f 76 69 64 65 73 20 74 68 65 20 75 6e 64  Provides the und
2350: 65 72 6c 79 69 6e 67 20 73 74 6f 72 61 67 65 20  erlying storage 
2360: 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  for the..      /
2370: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 4c 65  // <see cref="Le
2380: 6e 67 74 68 22 20 2f 3e 20 70 72 6f 70 65 72 74  ngth" /> propert
2390: 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  y...      /// </
23a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
23b0: 70 72 69 76 61 74 65 20 69 6e 74 20 6c 65 6e 67  private int leng
23c0: 74 68 3b 0d 0a 20 20 20 20 20 20 23 65 6e 64 72  th;..      #endr
23d0: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f  egion....      /
23e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
23f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2400: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2410: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2420: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2430: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
2440: 65 20 43 6f 6e 73 74 72 75 63 74 6f 72 73 0d 0a  e Constructors..
2450: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
2460: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 43  ry>..      /// C
2470: 6f 6e 73 74 72 75 63 74 73 20 61 6e 20 69 6e 73  onstructs an ins
2480: 74 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c  tance of this cl
2490: 61 73 73 20 74 6f 20 70 61 73 73 20 69 6e 74 6f  ass to pass into
24a0: 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64 0d   a user-defined.
24b0: 0a 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 62  .      /// callb
24c0: 61 63 6b 20 61 73 73 6f 63 69 61 74 65 64 20 77  ack associated w
24d0: 69 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65  ith the <see cre
24e0: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
24f0: 64 65 72 2e 47 65 74 42 79 74 65 73 22 20 2f 3e  der.GetBytes" />
2500: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68  ..      /// meth
2510: 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  od...      /// <
2520: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
2530: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2540: 3d 22 64 61 74 61 4f 66 66 73 65 74 22 3e 0d 0a  ="dataOffset">..
2550: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61        /// The va
2560: 6c 75 65 20 74 68 61 74 20 77 61 73 20 6f 72 69  lue that was ori
2570: 67 69 6e 61 6c 6c 79 20 73 70 65 63 69 66 69 65  ginally specifie
2580: 64 20 66 6f 72 20 74 68 65 20 22 64 61 74 61 4f  d for the "dataO
2590: 66 66 73 65 74 22 0d 0a 20 20 20 20 20 20 2f 2f  ffset"..      //
25a0: 2f 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74  / parameter to t
25b0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
25c0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
25d0: 65 74 42 79 74 65 73 22 20 2f 3e 20 6f 72 0d 0a  etBytes" /> or..
25e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
25f0: 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52  ref="SQLiteDataR
2600: 65 61 64 65 72 2e 47 65 74 43 68 61 72 73 22 20  eader.GetChars" 
2610: 2f 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  /> methods...   
2620: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
2630: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
2640: 6d 20 6e 61 6d 65 3d 22 62 79 74 65 42 75 66 66  m name="byteBuff
2650: 65 72 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  er">..      /// 
2660: 54 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  The value that w
2670: 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 70  as originally sp
2680: 65 63 69 66 69 65 64 20 66 6f 72 20 74 68 65 20  ecified for the 
2690: 22 62 75 66 66 65 72 22 0d 0a 20 20 20 20 20 20  "buffer"..      
26a0: 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20 74 6f  /// parameter to
26b0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
26c0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
26d0: 2e 47 65 74 42 79 74 65 73 22 20 2f 3e 0d 0a 20  .GetBytes" />.. 
26e0: 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e       /// method.
26f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
2700: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
2710: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 75 66  <param name="buf
2720: 66 65 72 4f 66 66 73 65 74 22 3e 0d 0a 20 20 20  ferOffset">..   
2730: 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
2740: 20 74 68 61 74 20 77 61 73 20 6f 72 69 67 69 6e   that was origin
2750: 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20 66  ally specified f
2760: 6f 72 20 74 68 65 20 22 62 75 66 66 65 72 4f 66  or the "bufferOf
2770: 66 73 65 74 22 0d 0a 20 20 20 20 20 20 2f 2f 2f  fset"..      ///
2780: 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68   parameter to th
2790: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
27a0: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
27b0: 74 42 79 74 65 73 22 20 2f 3e 20 6f 72 0d 0a 20  tBytes" /> or.. 
27c0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
27d0: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
27e0: 61 64 65 72 2e 47 65 74 43 68 61 72 73 22 20 2f  ader.GetChars" /
27f0: 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  > methods...    
2800: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
2810: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
2820: 20 6e 61 6d 65 3d 22 6c 65 6e 67 74 68 22 3e 0d   name="length">.
2830: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76  .      /// The v
2840: 61 6c 75 65 20 74 68 61 74 20 77 61 73 20 6f 72  alue that was or
2850: 69 67 69 6e 61 6c 6c 79 20 73 70 65 63 69 66 69  iginally specifi
2860: 65 64 20 66 6f 72 20 74 68 65 20 22 6c 65 6e 67  ed for the "leng
2870: 74 68 22 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70  th"..      /// p
2880: 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65 20  arameter to the 
2890: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
28a0: 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 42  eDataReader.GetB
28b0: 79 74 65 73 22 20 2f 3e 20 6f 72 0d 0a 20 20 20  ytes" /> or..   
28c0: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
28d0: 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  ="SQLiteDataRead
28e0: 65 72 2e 47 65 74 43 68 61 72 73 22 20 2f 3e 20  er.GetChars" /> 
28f0: 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20  methods...      
2900: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2910: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
2920: 69 74 65 52 65 61 64 41 72 72 61 79 45 76 65 6e  iteReadArrayEven
2930: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
2940: 20 20 6c 6f 6e 67 20 64 61 74 61 4f 66 66 73 65    long dataOffse
2950: 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79  t,..          by
2960: 74 65 5b 5d 20 62 79 74 65 42 75 66 66 65 72 2c  te[] byteBuffer,
2970: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
2980: 62 75 66 66 65 72 4f 66 66 73 65 74 2c 0d 0a 20  bufferOffset,.. 
2990: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e           int len
29a0: 67 74 68 0d 0a 20 20 20 20 20 20 20 20 20 20 29  gth..          )
29b0: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
29c0: 20 20 20 20 20 74 68 69 73 2e 64 61 74 61 4f 66       this.dataOf
29d0: 66 73 65 74 20 3d 20 64 61 74 61 4f 66 66 73 65  fset = dataOffse
29e0: 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  t;..          th
29f0: 69 73 2e 62 79 74 65 42 75 66 66 65 72 20 3d 20  is.byteBuffer = 
2a00: 62 79 74 65 42 75 66 66 65 72 3b 0d 0a 20 20 20  byteBuffer;..   
2a10: 20 20 20 20 20 20 20 74 68 69 73 2e 62 75 66 66         this.buff
2a20: 65 72 4f 66 66 73 65 74 20 3d 20 62 75 66 66 65  erOffset = buffe
2a30: 72 4f 66 66 73 65 74 3b 0d 0a 20 20 20 20 20 20  rOffset;..      
2a40: 20 20 20 20 74 68 69 73 2e 6c 65 6e 67 74 68 20      this.length 
2a50: 3d 20 6c 65 6e 67 74 68 3b 0d 0a 20 20 20 20 20  = length;..     
2a60: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f   }....      ////
2a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2a90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2aa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ab0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f  /////....      /
2ac0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2ad0: 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63      /// Construc
2ae0: 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65 20 6f  ts an instance o
2af0: 66 20 74 68 69 73 20 63 6c 61 73 73 20 74 6f 20  f this class to 
2b00: 70 61 73 73 20 69 6e 74 6f 20 61 20 75 73 65 72  pass into a user
2b10: 2d 64 65 66 69 6e 65 64 0d 0a 20 20 20 20 20 20  -defined..      
2b20: 2f 2f 2f 20 63 61 6c 6c 62 61 63 6b 20 61 73 73  /// callback ass
2b30: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
2b40: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
2b50: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
2b60: 43 68 61 72 73 22 20 2f 3e 0d 0a 20 20 20 20 20  Chars" />..     
2b70: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
2b80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2b90: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
2ba0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 61 4f  aram name="dataO
2bb0: 66 66 73 65 74 22 3e 0d 0a 20 20 20 20 20 20 2f  ffset">..      /
2bc0: 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 68 61  // The value tha
2bd0: 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79  t was originally
2be0: 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74   specified for t
2bf0: 68 65 20 22 64 61 74 61 4f 66 66 73 65 74 22 0d  he "dataOffset".
2c00: 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d  .      /// param
2c10: 65 74 65 72 20 74 6f 20 74 68 65 20 3c 73 65 65  eter to the <see
2c20: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
2c30: 61 52 65 61 64 65 72 2e 47 65 74 42 79 74 65 73  aReader.GetBytes
2c40: 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20 2f  " /> or..      /
2c50: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
2c60: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
2c70: 65 74 43 68 61 72 73 22 20 2f 3e 20 6d 65 74 68  etChars" /> meth
2c80: 6f 64 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ods...      /// 
2c90: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20  </param>..      
2ca0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2cb0: 22 63 68 61 72 42 75 66 66 65 72 22 3e 0d 0a 20  "charBuffer">.. 
2cc0: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c       /// The val
2cd0: 75 65 20 74 68 61 74 20 77 61 73 20 6f 72 69 67  ue that was orig
2ce0: 69 6e 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64  inally specified
2cf0: 20 66 6f 72 20 74 68 65 20 22 62 75 66 66 65 72   for the "buffer
2d00: 22 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72  "..      /// par
2d10: 61 6d 65 74 65 72 20 74 6f 20 74 68 65 20 3c 73  ameter to the <s
2d20: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
2d30: 61 74 61 52 65 61 64 65 72 2e 47 65 74 43 68 61  ataReader.GetCha
2d40: 72 73 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f  rs" />..      //
2d50: 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20  / method...     
2d60: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
2d70: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
2d80: 6e 61 6d 65 3d 22 62 75 66 66 65 72 4f 66 66 73  name="bufferOffs
2d90: 65 74 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  et">..      /// 
2da0: 54 68 65 20 76 61 6c 75 65 20 74 68 61 74 20 77  The value that w
2db0: 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 70  as originally sp
2dc0: 65 63 69 66 69 65 64 20 66 6f 72 20 74 68 65 20  ecified for the 
2dd0: 22 62 75 66 66 65 72 4f 66 66 73 65 74 22 0d 0a  "bufferOffset"..
2de0: 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65        /// parame
2df0: 74 65 72 20 74 6f 20 74 68 65 20 3c 73 65 65 20  ter to the <see 
2e00: 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61  cref="SQLiteData
2e10: 52 65 61 64 65 72 2e 47 65 74 42 79 74 65 73 22  Reader.GetBytes"
2e20: 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f   /> or..      //
2e30: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
2e40: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
2e50: 74 43 68 61 72 73 22 20 2f 3e 20 6d 65 74 68 6f  tChars" /> metho
2e60: 64 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ds...      /// <
2e70: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f  /param>..      /
2e80: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2e90: 6c 65 6e 67 74 68 22 3e 0d 0a 20 20 20 20 20 20  length">..      
2ea0: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 68  /// The value th
2eb0: 61 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  at was originall
2ec0: 79 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20  y specified for 
2ed0: 74 68 65 20 22 6c 65 6e 67 74 68 22 0d 0a 20 20  the "length"..  
2ee0: 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65      /// paramete
2ef0: 72 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  r to the <see cr
2f00: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
2f10: 61 64 65 72 2e 47 65 74 42 79 74 65 73 22 20 2f  ader.GetBytes" /
2f20: 3e 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  > or..      /// 
2f30: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
2f40: 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 43  eDataReader.GetC
2f50: 68 61 72 73 22 20 2f 3e 20 6d 65 74 68 6f 64 73  hars" /> methods
2f60: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  ...      /// </p
2f70: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 69 6e 74  aram>..      int
2f80: 65 72 6e 61 6c 20 53 51 4c 69 74 65 52 65 61 64  ernal SQLiteRead
2f90: 41 72 72 61 79 45 76 65 6e 74 41 72 67 73 28 0d  ArrayEventArgs(.
2fa0: 0a 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20  .          long 
2fb0: 64 61 74 61 4f 66 66 73 65 74 2c 0d 0a 20 20 20  dataOffset,..   
2fc0: 20 20 20 20 20 20 20 63 68 61 72 5b 5d 20 63 68         char[] ch
2fd0: 61 72 42 75 66 66 65 72 2c 0d 0a 20 20 20 20 20  arBuffer,..     
2fe0: 20 20 20 20 20 69 6e 74 20 62 75 66 66 65 72 4f       int bufferO
2ff0: 66 66 73 65 74 2c 0d 0a 20 20 20 20 20 20 20 20  ffset,..        
3000: 20 20 69 6e 74 20 6c 65 6e 67 74 68 0d 0a 20 20    int length..  
3010: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20          )..     
3020: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68   {..          th
3030: 69 73 2e 64 61 74 61 4f 66 66 73 65 74 20 3d 20  is.dataOffset = 
3040: 64 61 74 61 4f 66 66 73 65 74 3b 0d 0a 20 20 20  dataOffset;..   
3050: 20 20 20 20 20 20 20 74 68 69 73 2e 63 68 61 72         this.char
3060: 42 75 66 66 65 72 20 3d 20 63 68 61 72 42 75 66  Buffer = charBuf
3070: 66 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  fer;..          
3080: 74 68 69 73 2e 62 75 66 66 65 72 4f 66 66 73 65  this.bufferOffse
3090: 74 20 3d 20 62 75 66 66 65 72 4f 66 66 73 65 74  t = bufferOffset
30a0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 69  ;..          thi
30b0: 73 2e 6c 65 6e 67 74 68 20 3d 20 6c 65 6e 67 74  s.length = lengt
30c0: 68 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  h;..      }..   
30d0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
30e0: 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  .      /////////
30f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3120: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3130: 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65 67 69 6f  ....      #regio
3140: 6e 20 50 75 62 6c 69 63 20 50 72 6f 70 65 72 74  n Public Propert
3150: 69 65 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ies..      /// <
3160: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
3170: 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20 74 68  /// The value th
3180: 61 74 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c  at was originall
3190: 79 20 73 70 65 63 69 66 69 65 64 20 66 6f 72 20  y specified for 
31a0: 74 68 65 20 22 64 61 74 61 4f 66 66 73 65 74 22  the "dataOffset"
31b0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61  ..      /// para
31c0: 6d 65 74 65 72 20 74 6f 20 74 68 65 20 3c 73 65  meter to the <se
31d0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
31e0: 74 61 52 65 61 64 65 72 2e 47 65 74 42 79 74 65  taReader.GetByte
31f0: 73 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20  s" /> or..      
3200: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
3210: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e  QLiteDataReader.
3220: 47 65 74 43 68 61 72 73 22 20 2f 3e 20 6d 65 74  GetChars" /> met
3230: 68 6f 64 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  hods...      ///
3240: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3250: 20 20 20 70 75 62 6c 69 63 20 6c 6f 6e 67 20 44     public long D
3260: 61 74 61 4f 66 66 73 65 74 0d 0a 20 20 20 20 20  ataOffset..     
3270: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 67 65   {..          ge
3280: 74 20 7b 20 72 65 74 75 72 6e 20 64 61 74 61 4f  t { return dataO
3290: 66 66 73 65 74 3b 20 7d 0d 0a 20 20 20 20 20 20  ffset; }..      
32a0: 20 20 20 20 73 65 74 20 7b 20 64 61 74 61 4f 66      set { dataOf
32b0: 66 73 65 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d  fset = value; }.
32c0: 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  .      }....    
32d0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
32e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
32f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3320: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
3330: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
3340: 65 20 76 61 6c 75 65 20 74 68 61 74 20 77 61 73  e value that was
3350: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 70 65 63   originally spec
3360: 69 66 69 65 64 20 66 6f 72 20 74 68 65 20 22 62  ified for the "b
3370: 75 66 66 65 72 22 0d 0a 20 20 20 20 20 20 2f 2f  uffer"..      //
3380: 2f 20 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74  / parameter to t
3390: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
33a0: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
33b0: 65 74 42 79 74 65 73 22 20 2f 3e 0d 0a 20 20 20  etBytes" />..   
33c0: 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a     /// method...
33d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
33e0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c  ary>..      publ
33f0: 69 63 20 62 79 74 65 5b 5d 20 42 79 74 65 42 75  ic byte[] ByteBu
3400: 66 66 65 72 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ffer..      {.. 
3410: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
3420: 65 74 75 72 6e 20 62 79 74 65 42 75 66 66 65 72  eturn byteBuffer
3430: 3b 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a  ; }..      }....
3440: 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f        //////////
3450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3490: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
34a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
34b0: 2f 20 54 68 65 20 76 61 6c 75 65 20 74 68 61 74  / The value that
34c0: 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
34d0: 73 70 65 63 69 66 69 65 64 20 66 6f 72 20 74 68  specified for th
34e0: 65 20 22 62 75 66 66 65 72 22 0d 0a 20 20 20 20  e "buffer"..    
34f0: 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72 20    /// parameter 
3500: 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
3510: 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  ="SQLiteDataRead
3520: 65 72 2e 47 65 74 43 68 61 72 73 22 20 2f 3e 0d  er.GetChars" />.
3530: 0a 20 20 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f  .      /// metho
3540: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  d...      /// </
3550: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
3560: 70 75 62 6c 69 63 20 63 68 61 72 5b 5d 20 43 68  public char[] Ch
3570: 61 72 42 75 66 66 65 72 0d 0a 20 20 20 20 20 20  arBuffer..      
3580: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 67 65 74  {..          get
3590: 20 7b 20 72 65 74 75 72 6e 20 63 68 61 72 42 75   { return charBu
35a0: 66 66 65 72 3b 20 7d 0d 0a 20 20 20 20 20 20 7d  ffer; }..      }
35b0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
35c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ///....      ///
3610: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3620: 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65 20    /// The value 
3630: 74 68 61 74 20 77 61 73 20 6f 72 69 67 69 6e 61  that was origina
3640: 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20 66 6f  lly specified fo
3650: 72 20 74 68 65 20 22 62 75 66 66 65 72 4f 66 66  r the "bufferOff
3660: 73 65 74 22 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  set"..      /// 
3670: 70 61 72 61 6d 65 74 65 72 20 74 6f 20 74 68 65  parameter to the
3680: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
3690: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
36a0: 42 79 74 65 73 22 20 2f 3e 20 6f 72 0d 0a 20 20  Bytes" /> or..  
36b0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
36c0: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
36d0: 64 65 72 2e 47 65 74 43 68 61 72 73 22 20 2f 3e  der.GetChars" />
36e0: 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 20   methods...     
36f0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3700: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 69 6e  .      public in
3710: 74 20 42 75 66 66 65 72 4f 66 66 73 65 74 0d 0a  t BufferOffset..
3720: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
3730: 20 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20     get { return 
3740: 62 75 66 66 65 72 4f 66 66 73 65 74 3b 20 7d 0d  bufferOffset; }.
3750: 0a 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b  .          set {
3760: 20 62 75 66 66 65 72 4f 66 66 73 65 74 20 3d 20   bufferOffset = 
3770: 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20  value; }..      
3780: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
3790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
37d0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ////....      //
37e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
37f0: 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
3800: 20 74 68 61 74 20 77 61 73 20 6f 72 69 67 69 6e   that was origin
3810: 61 6c 6c 79 20 73 70 65 63 69 66 69 65 64 20 66  ally specified f
3820: 6f 72 20 74 68 65 20 22 6c 65 6e 67 74 68 22 0d  or the "length".
3830: 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d  .      /// param
3840: 65 74 65 72 20 74 6f 20 74 68 65 20 3c 73 65 65  eter to the <see
3850: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
3860: 61 52 65 61 64 65 72 2e 47 65 74 42 79 74 65 73  aReader.GetBytes
3870: 22 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20 2f  " /> or..      /
3880: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
3890: 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47  LiteDataReader.G
38a0: 65 74 43 68 61 72 73 22 20 2f 3e 20 6d 65 74 68  etChars" /> meth
38b0: 6f 64 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ods...      /// 
38c0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
38d0: 20 20 70 75 62 6c 69 63 20 69 6e 74 20 4c 65 6e    public int Len
38e0: 67 74 68 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  gth..      {..  
38f0: 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65          get { re
3900: 74 75 72 6e 20 6c 65 6e 67 74 68 3b 20 7d 0d 0a  turn length; }..
3910: 20 20 20 20 20 20 20 20 20 20 73 65 74 20 7b 20            set { 
3920: 6c 65 6e 67 74 68 20 3d 20 76 61 6c 75 65 3b 20  length = value; 
3930: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  }..      }..    
3940: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20    #endregion..  
3950: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  }....  /////////
3960: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
39b0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f  ////////....  //
39c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
39d0: 2f 2f 20 54 68 69 73 20 63 6c 61 73 73 20 72 65  // This class re
39e0: 70 72 65 73 65 6e 74 73 20 74 68 65 20 70 61 72  presents the par
39f0: 61 6d 65 74 65 72 73 20 61 6e 64 20 72 65 74 75  ameters and retu
3a00: 72 6e 20 76 61 6c 75 65 73 20 66 6f 72 20 74 68  rn values for th
3a10: 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  e..  /// <see cr
3a20: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
3a30: 61 64 65 72 2e 47 65 74 42 6c 6f 62 22 20 2f 3e  ader.GetBlob" />
3a40: 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  ,..  /// <see cr
3a50: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
3a60: 61 64 65 72 2e 47 65 74 42 6f 6f 6c 65 61 6e 22  ader.GetBoolean"
3a70: 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65   />,..  /// <see
3a80: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
3a90: 61 52 65 61 64 65 72 2e 47 65 74 42 79 74 65 22  aReader.GetByte"
3aa0: 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65   />,..  /// <see
3ab0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74   cref="SQLiteDat
3ac0: 61 52 65 61 64 65 72 2e 47 65 74 42 79 74 65 73  aReader.GetBytes
3ad0: 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65  " />,..  /// <se
3ae0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
3af0: 74 61 52 65 61 64 65 72 2e 47 65 74 43 68 61 72  taReader.GetChar
3b00: 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65  " />,..  /// <se
3b10: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61  e cref="SQLiteDa
3b20: 74 61 52 65 61 64 65 72 2e 47 65 74 43 68 61 72  taReader.GetChar
3b30: 73 22 20 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73  s" />,..  /// <s
3b40: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
3b50: 61 74 61 52 65 61 64 65 72 2e 47 65 74 44 61 74  ataReader.GetDat
3b60: 65 54 69 6d 65 22 20 2f 3e 2c 0d 0a 20 20 2f 2f  eTime" />,..  //
3b70: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
3b80: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
3b90: 74 44 65 63 69 6d 61 6c 22 20 2f 3e 2c 0d 0a 20  tDecimal" />,.. 
3ba0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
3bb0: 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
3bc0: 2e 47 65 74 44 6f 75 62 6c 65 22 20 2f 3e 2c 0d  .GetDouble" />,.
3bd0: 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66  .  /// <see cref
3be0: 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  ="SQLiteDataRead
3bf0: 65 72 2e 47 65 74 46 6c 6f 61 74 22 20 2f 3e 2c  er.GetFloat" />,
3c00: 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65  ..  /// <see cre
3c10: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
3c20: 64 65 72 2e 47 65 74 47 75 69 64 22 20 2f 3e 2c  der.GetGuid" />,
3c30: 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65  ..  /// <see cre
3c40: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
3c50: 64 65 72 2e 47 65 74 49 6e 74 31 36 22 20 2f 3e  der.GetInt16" />
3c60: 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72  ,..  /// <see cr
3c70: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
3c80: 61 64 65 72 2e 47 65 74 49 6e 74 33 32 22 20 2f  ader.GetInt32" /
3c90: 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20 63  >,..  /// <see c
3ca0: 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52  ref="SQLiteDataR
3cb0: 65 61 64 65 72 2e 47 65 74 49 6e 74 36 34 22 20  eader.GetInt64" 
3cc0: 2f 3e 2c 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65 20  />,..  /// <see 
3cd0: 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61  cref="SQLiteData
3ce0: 52 65 61 64 65 72 2e 47 65 74 53 74 72 69 6e 67  Reader.GetString
3cf0: 22 20 2f 3e 2c 20 61 6e 64 0d 0a 20 20 2f 2f 2f  " />, and..  ///
3d00: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
3d10: 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74  teDataReader.Get
3d20: 56 61 6c 75 65 22 20 2f 3e 20 6d 65 74 68 6f 64  Value" /> method
3d30: 73 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  s...  /// </summ
3d40: 61 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 63  ary>..  public c
3d50: 6c 61 73 73 20 53 51 4c 69 74 65 52 65 61 64 56  lass SQLiteReadV
3d60: 61 6c 75 65 45 76 65 6e 74 41 72 67 73 20 3a 20  alueEventArgs : 
3d70: 53 51 4c 69 74 65 52 65 61 64 45 76 65 6e 74 41  SQLiteReadEventA
3d80: 72 67 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20  rgs..  {..      
3d90: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
3da0: 44 61 74 61 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  Data..      /// 
3db0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
3dc0: 20 2f 2f 2f 20 50 72 6f 76 69 64 65 73 20 74 68   /// Provides th
3dd0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73 74 6f  e underlying sto
3de0: 72 61 67 65 20 66 6f 72 20 74 68 65 0d 0a 20 20  rage for the..  
3df0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
3e00: 66 3d 22 4d 65 74 68 6f 64 4e 61 6d 65 22 20 2f  f="MethodName" /
3e10: 3e 20 70 72 6f 70 65 72 74 79 2e 0d 0a 20 20 20  > property...   
3e20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3e30: 3e 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  >..      private
3e40: 20 73 74 72 69 6e 67 20 6d 65 74 68 6f 64 4e 61   string methodNa
3e50: 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  me;....      ///
3e60: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
3e70: 20 20 2f 2f 2f 20 50 72 6f 76 69 64 65 73 20 74    /// Provides t
3e80: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73 74  he underlying st
3e90: 6f 72 61 67 65 20 66 6f 72 20 74 68 65 0d 0a 20  orage for the.. 
3ea0: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
3eb0: 65 66 3d 22 45 78 74 72 61 45 76 65 6e 74 41 72  ef="ExtraEventAr
3ec0: 67 73 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e  gs" /> property.
3ed0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
3ee0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72  mmary>..      pr
3ef0: 69 76 61 74 65 20 53 51 4c 69 74 65 52 65 61 64  ivate SQLiteRead
3f00: 45 76 65 6e 74 41 72 67 73 20 65 78 74 72 61 45  EventArgs extraE
3f10: 76 65 6e 74 41 72 67 73 3b 0d 0a 0d 0a 20 20 20  ventArgs;....   
3f20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3f30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 50 72 6f 76  ..      /// Prov
3f40: 69 64 65 73 20 74 68 65 20 75 6e 64 65 72 6c 79  ides the underly
3f50: 69 6e 67 20 73 74 6f 72 61 67 65 20 66 6f 72 20  ing storage for 
3f60: 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  the..      /// <
3f70: 73 65 65 20 63 72 65 66 3d 22 56 61 6c 75 65 22  see cref="Value"
3f80: 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e 0d 0a 20   /> property... 
3f90: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
3fa0: 72 79 3e 0d 0a 20 20 20 20 20 20 70 72 69 76 61  ry>..      priva
3fb0: 74 65 20 53 51 4c 69 74 65 44 61 74 61 52 65 61  te SQLiteDataRea
3fc0: 64 65 72 56 61 6c 75 65 20 76 61 6c 75 65 3b 0d  derValue value;.
3fd0: 0a 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f  .      #endregio
3fe0: 6e 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  n....      /////
3ff0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4030: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72  ////....      #r
4040: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
4050: 6e 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20  nstructors..    
4060: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
4070: 0a 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74  .      /// Const
4080: 72 75 63 74 73 20 61 20 6e 65 77 20 69 6e 73 74  ructs a new inst
4090: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
40a0: 73 73 2e 20 20 44 65 70 65 6e 64 69 6e 67 20 6f  ss.  Depending o
40b0: 6e 20 74 68 65 20 6d 65 74 68 6f 64 0d 0a 20 20  n the method..  
40c0: 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20 63 61      /// being ca
40d0: 6c 6c 65 64 2c 20 74 68 65 20 3c 70 61 72 61 6d  lled, the <param
40e0: 72 65 66 20 6e 61 6d 65 3d 22 65 78 74 72 61 45  ref name="extraE
40f0: 76 65 6e 74 41 72 67 73 22 20 2f 3e 20 61 6e 64  ventArgs" /> and
4100: 2f 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  /or..      /// <
4110: 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 76  paramref name="v
4120: 61 6c 75 65 22 20 2f 3e 20 70 61 72 61 6d 65 74  alue" /> paramet
4130: 65 72 73 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e  ers may be null.
4140: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
4150: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
4160: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d  / <param name="m
4170: 65 74 68 6f 64 4e 61 6d 65 22 3e 0d 0a 20 20 20  ethodName">..   
4180: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
4190: 6f 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  of the <see cref
41a0: 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64  ="SQLiteDataRead
41b0: 65 72 22 20 2f 3e 20 6d 65 74 68 6f 64 20 74 68  er" /> method th
41c0: 61 74 20 77 61 73 0d 0a 20 20 20 20 20 20 2f 2f  at was..      //
41d0: 2f 20 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f  / responsible fo
41e0: 72 20 69 6e 76 6f 6b 69 6e 67 20 74 68 69 73 20  r invoking this 
41f0: 63 61 6c 6c 62 61 63 6b 2e 0d 0a 20 20 20 20 20  callback...     
4200: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
4210: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
4220: 6e 61 6d 65 3d 22 65 78 74 72 61 45 76 65 6e 74  name="extraEvent
4230: 41 72 67 73 22 3e 0d 0a 20 20 20 20 20 20 2f 2f  Args">..      //
4240: 2f 20 49 66 20 74 68 65 20 3c 73 65 65 20 63 72  / If the <see cr
4250: 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65  ef="SQLiteDataRe
4260: 61 64 65 72 2e 47 65 74 42 79 74 65 73 22 20 2f  ader.GetBytes" /
4270: 3e 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  > or..      /// 
4280: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
4290: 65 44 61 74 61 52 65 61 64 65 72 2e 47 65 74 43  eDataReader.GetC
42a0: 68 61 72 73 22 20 2f 3e 20 6d 65 74 68 6f 64 20  hars" /> method 
42b0: 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 2c  is being called,
42c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 69 73  ..      /// this
42d0: 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 63 6f 6e   object will con
42e0: 74 61 69 6e 20 74 68 65 20 61 72 72 61 79 20 72  tain the array r
42f0: 65 6c 61 74 65 64 20 70 61 72 61 6d 65 74 65 72  elated parameter
4300: 73 20 66 6f 72 20 74 68 61 74 0d 0a 20 20 20 20  s for that..    
4310: 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 20 20 49    /// method.  I
4320: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
4330: 22 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  "SQLiteDataReade
4340: 72 2e 47 65 74 42 6c 6f 62 22 20 2f 3e 20 6d 65  r.GetBlob" /> me
4350: 74 68 6f 64 20 69 73 0d 0a 20 20 20 20 20 20 2f  thod is..      /
4360: 2f 2f 20 62 65 69 6e 67 20 63 61 6c 6c 65 64 2c  // being called,
4370: 20 74 68 69 73 20 6f 62 6a 65 63 74 20 77 69 6c   this object wil
4380: 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20 62 6c  l contain the bl
4390: 6f 62 20 72 65 6c 61 74 65 64 20 70 61 72 61 6d  ob related param
43a0: 65 74 65 72 73 0d 0a 20 20 20 20 20 20 2f 2f 2f  eters..      ///
43b0: 20 66 6f 72 20 74 68 61 74 20 6d 65 74 68 6f 64   for that method
43c0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70  ...      /// </p
43d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  aram>..      ///
43e0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61   <param name="va
43f0: 6c 75 65 22 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  lue">..      ///
4400: 20 54 68 69 73 20 6d 61 79 20 62 65 20 75 73 65   This may be use
4410: 64 20 62 79 20 74 68 65 20 63 61 6c 6c 62 61 63  d by the callbac
4420: 6b 20 74 6f 20 73 65 74 20 74 68 65 20 72 65 74  k to set the ret
4430: 75 72 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68  urn value for th
4440: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63 61 6c  e..      /// cal
4450: 6c 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53  led <see cref="S
4460: 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 22  QLiteDataReader"
4470: 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
4480: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
4490: 0a 20 20 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  .      internal 
44a0: 53 51 4c 69 74 65 52 65 61 64 56 61 6c 75 65 45  SQLiteReadValueE
44b0: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
44c0: 20 20 20 20 20 73 74 72 69 6e 67 20 6d 65 74 68       string meth
44d0: 6f 64 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  odName,..       
44e0: 20 20 20 53 51 4c 69 74 65 52 65 61 64 45 76 65     SQLiteReadEve
44f0: 6e 74 41 72 67 73 20 65 78 74 72 61 45 76 65 6e  ntArgs extraEven
4500: 74 41 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20  tArgs,..        
4510: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
4520: 65 72 56 61 6c 75 65 20 76 61 6c 75 65 0d 0a 20  erValue value.. 
4530: 20 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20           )..    
4540: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74    {..          t
4550: 68 69 73 2e 6d 65 74 68 6f 64 4e 61 6d 65 20 3d  his.methodName =
4560: 20 6d 65 74 68 6f 64 4e 61 6d 65 3b 0d 0a 20 20   methodName;..  
4570: 20 20 20 20 20 20 20 20 74 68 69 73 2e 65 78 74          this.ext
4580: 72 61 45 76 65 6e 74 41 72 67 73 20 3d 20 65 78  raEventArgs = ex
4590: 74 72 61 45 76 65 6e 74 41 72 67 73 3b 0d 0a 20  traEventArgs;.. 
45a0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 76 61           this.va
45b0: 6c 75 65 20 3d 20 76 61 6c 75 65 3b 0d 0a 20 20  lue = value;..  
45c0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e      }..      #en
45d0: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
45e0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
45f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4630: 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62 6c      #region Publ
4640: 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a 20  ic Properties.. 
4650: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
4660: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
4670: 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 3c 73  e name of the <s
4680: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 44  ee cref="SQLiteD
4690: 61 74 61 52 65 61 64 65 72 22 20 2f 3e 20 6d 65  ataReader" /> me
46a0: 74 68 6f 64 20 74 68 61 74 20 77 61 73 0d 0a 20  thod that was.. 
46b0: 20 20 20 20 20 2f 2f 2f 20 72 65 73 70 6f 6e 73       /// respons
46c0: 69 62 6c 65 20 66 6f 72 20 69 6e 76 6f 6b 69 6e  ible for invokin
46d0: 67 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 2e  g this callback.
46e0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
46f0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 75  mmary>..      pu
4700: 62 6c 69 63 20 73 74 72 69 6e 67 20 4d 65 74 68  blic string Meth
4710: 6f 64 4e 61 6d 65 0d 0a 20 20 20 20 20 20 7b 0d  odName..      {.
4720: 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b  .          get {
4730: 20 72 65 74 75 72 6e 20 6d 65 74 68 6f 64 4e 61   return methodNa
4740: 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a  me; }..      }..
4750: 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ..      ////////
4760: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4770: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4780: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4790: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
47a0: 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  /....      /// <
47b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
47c0: 2f 2f 2f 20 49 66 20 74 68 65 20 3c 73 65 65 20  /// If the <see 
47d0: 63 72 65 66 3d 22 53 51 4c 69 74 65 44 61 74 61  cref="SQLiteData
47e0: 52 65 61 64 65 72 2e 47 65 74 42 79 74 65 73 22  Reader.GetBytes"
47f0: 20 2f 3e 20 6f 72 0d 0a 20 20 20 20 20 20 2f 2f   /> or..      //
4800: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
4810: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 47 65  iteDataReader.Ge
4820: 74 43 68 61 72 73 22 20 2f 3e 20 6d 65 74 68 6f  tChars" /> metho
4830: 64 20 69 73 20 62 65 69 6e 67 20 63 61 6c 6c 65  d is being calle
4840: 64 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68  d,..      /// th
4850: 69 73 20 6f 62 6a 65 63 74 20 77 69 6c 6c 20 63  is object will c
4860: 6f 6e 74 61 69 6e 20 74 68 65 20 61 72 72 61 79  ontain the array
4870: 20 72 65 6c 61 74 65 64 20 70 61 72 61 6d 65 74   related paramet
4880: 65 72 73 20 66 6f 72 20 74 68 61 74 0d 0a 20 20  ers for that..  
4890: 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 20      /// method. 
48a0: 20 49 66 20 74 68 65 20 3c 73 65 65 20 63 72 65   If the <see cre
48b0: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
48c0: 64 65 72 2e 47 65 74 42 6c 6f 62 22 20 2f 3e 20  der.GetBlob" /> 
48d0: 6d 65 74 68 6f 64 20 69 73 0d 0a 20 20 20 20 20  method is..     
48e0: 20 2f 2f 2f 20 62 65 69 6e 67 20 63 61 6c 6c 65   /// being calle
48f0: 64 2c 20 74 68 69 73 20 6f 62 6a 65 63 74 20 77  d, this object w
4900: 69 6c 6c 20 63 6f 6e 74 61 69 6e 20 74 68 65 20  ill contain the 
4910: 62 6c 6f 62 20 72 65 6c 61 74 65 64 20 70 61 72  blob related par
4920: 61 6d 65 74 65 72 73 0d 0a 20 20 20 20 20 20 2f  ameters..      /
4930: 2f 2f 20 66 6f 72 20 74 68 61 74 20 6d 65 74 68  // for that meth
4940: 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  od...      /// <
4950: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
4960: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 52 65   public SQLiteRe
4970: 61 64 45 76 65 6e 74 41 72 67 73 20 45 78 74 72  adEventArgs Extr
4980: 61 45 76 65 6e 74 41 72 67 73 0d 0a 20 20 20 20  aEventArgs..    
4990: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 67    {..          g
49a0: 65 74 20 7b 20 72 65 74 75 72 6e 20 65 78 74 72  et { return extr
49b0: 61 45 76 65 6e 74 41 72 67 73 3b 20 7d 0d 0a 20  aEventArgs; }.. 
49c0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
49d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
49f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4a10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
4a20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
4a30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73  ..      /// This
4a40: 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 20   may be used by 
4a50: 74 68 65 20 63 61 6c 6c 62 61 63 6b 20 74 6f 20  the callback to 
4a60: 73 65 74 20 74 68 65 20 72 65 74 75 72 6e 20 76  set the return v
4a70: 61 6c 75 65 20 66 6f 72 20 74 68 65 0d 0a 20 20  alue for the..  
4a80: 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 20 3c      /// called <
4a90: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
4aa0: 44 61 74 61 52 65 61 64 65 72 22 20 2f 3e 20 6d  DataReader" /> m
4ab0: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  ethod...      //
4ac0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4ad0: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
4ae0: 65 44 61 74 61 52 65 61 64 65 72 56 61 6c 75 65  eDataReaderValue
4af0: 20 56 61 6c 75 65 0d 0a 20 20 20 20 20 20 7b 0d   Value..      {.
4b00: 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b  .          get {
4b10: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 20 7d   return value; }
4b20: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20  ..      }..     
4b30: 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 20 20 7d   #endregion..  }
4b40: 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ....  //////////
4b50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ba0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f  ///////....  ///
4bb0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f   <summary>..  //
4bc0: 2f 20 54 68 69 73 20 72 65 70 72 65 73 65 6e 74  / This represent
4bd0: 73 20 61 20 6d 65 74 68 6f 64 20 74 68 61 74 20  s a method that 
4be0: 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 69  will be called i
4bf0: 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20  n response to a 
4c00: 72 65 71 75 65 73 74 20 74 6f 0d 0a 20 20 2f 2f  request to..  //
4c10: 2f 20 62 69 6e 64 20 61 20 70 61 72 61 6d 65 74  / bind a paramet
4c20: 65 72 20 74 6f 20 61 20 63 6f 6d 6d 61 6e 64 2e  er to a command.
4c30: 20 20 49 66 20 61 6e 20 65 78 63 65 70 74 69 6f    If an exceptio
4c40: 6e 20 69 73 20 74 68 72 6f 77 6e 2c 20 69 74 20  n is thrown, it 
4c50: 77 69 6c 6c 20 63 61 75 73 65 0d 0a 20 20 2f 2f  will cause..  //
4c60: 2f 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20  / the parameter 
4c70: 62 69 6e 64 69 6e 67 20 6f 70 65 72 61 74 69 6f  binding operatio
4c80: 6e 20 74 6f 20 66 61 69 6c 20 2d 41 4e 44 2d 20  n to fail -AND- 
4c90: 69 74 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75 65  it will continue
4ca0: 20 74 6f 20 75 6e 77 69 6e 64 0d 0a 20 20 2f 2f   to unwind..  //
4cb0: 2f 20 74 68 65 20 63 61 6c 6c 20 73 74 61 63 6b  / the call stack
4cc0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
4cd0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61  ry>..  /// <para
4ce0: 6d 20 6e 61 6d 65 3d 22 63 6f 6e 76 65 72 74 22  m name="convert"
4cf0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  >..  /// The <se
4d00: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
4d10: 6e 76 65 72 74 22 20 2f 3e 20 69 6e 73 74 61 6e  nvert" /> instan
4d20: 63 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20 2f 2f  ce in use...  //
4d30: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  / </param>..  //
4d40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
4d50: 6f 6d 6d 61 6e 64 22 3e 0d 0a 20 20 2f 2f 2f 20  ommand">..  /// 
4d60: 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
4d70: 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 22 20 2f 3e  QLiteCommand" />
4d80: 20 69 6e 73 74 61 6e 63 65 20 69 6e 20 75 73 65   instance in use
4d90: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
4da0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
4db0: 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20  name="flags">.. 
4dc0: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61   /// The flags a
4dd0: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
4de0: 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  he <see cref="SQ
4df0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
4e00: 2f 3e 20 69 6e 73 74 61 6e 63 65 0d 0a 20 20 2f  /> instance..  /
4e10: 2f 2f 20 69 6e 20 75 73 65 2e 0d 0a 20 20 2f 2f  // in use...  //
4e20: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f  / </param>..  //
4e30: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
4e40: 61 72 61 6d 65 74 65 72 22 3e 0d 0a 20 20 2f 2f  arameter">..  //
4e50: 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d  / The <see cref=
4e60: 22 53 51 4c 69 74 65 50 61 72 61 6d 65 74 65 72  "SQLiteParameter
4e70: 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 62 65  " /> instance be
4e80: 69 6e 67 20 62 6f 75 6e 64 20 74 6f 20 74 68 65  ing bound to the
4e90: 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20 2f 2f 2f   command...  ///
4ea0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f   </param>..  ///
4eb0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79   <param name="ty
4ec0: 70 65 4e 61 6d 65 22 3e 0d 0a 20 20 2f 2f 2f 20  peName">..  /// 
4ed0: 54 68 65 20 64 61 74 61 62 61 73 65 20 74 79 70  The database typ
4ee0: 65 20 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65  e name associate
4ef0: 64 20 77 69 74 68 20 74 68 69 73 20 63 61 6c 6c  d with this call
4f00: 62 61 63 6b 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70  back...  /// </p
4f10: 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  aram>..  /// <pa
4f20: 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 64 65 78 22  ram name="index"
4f30: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6f 72 64  >..  /// The ord
4f40: 69 6e 61 6c 20 6f 66 20 74 68 65 20 70 61 72 61  inal of the para
4f50: 6d 65 74 65 72 20 62 65 69 6e 67 20 62 6f 75 6e  meter being boun
4f60: 64 20 74 6f 20 74 68 65 20 63 6f 6d 6d 61 6e 64  d to the command
4f70: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
4f80: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
4f90: 6e 61 6d 65 3d 22 75 73 65 72 44 61 74 61 22 3e  name="userData">
4fa0: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61  ..  /// The data
4fb0: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 75 73 65 64   originally used
4fc0: 20 77 68 65 6e 20 72 65 67 69 73 74 65 72 69 6e   when registerin
4fd0: 67 20 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 2e  g this callback.
4fe0: 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e  ..  /// </param>
4ff0: 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e  ..  /// <param n
5000: 61 6d 65 3d 22 63 6f 6d 70 6c 65 74 65 22 3e 0d  ame="complete">.
5010: 0a 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20  .  /// Non-zero 
5020: 69 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 68  if the default h
5030: 61 6e 64 6c 69 6e 67 20 66 6f 72 20 74 68 65 20  andling for the 
5040: 70 61 72 61 6d 65 74 65 72 20 62 69 6e 64 69 6e  parameter bindin
5050: 67 20 63 61 6c 6c 20 73 68 6f 75 6c 64 0d 0a 20  g call should.. 
5060: 20 2f 2f 2f 20 62 65 20 73 6b 69 70 70 65 64 20   /// be skipped 
5070: 28 69 2e 65 2e 20 74 68 65 20 70 61 72 61 6d 65  (i.e. the parame
5080: 74 65 72 20 73 68 6f 75 6c 64 20 6e 6f 74 20 62  ter should not b
5090: 65 20 62 6f 75 6e 64 20 61 74 20 61 6c 6c 29 2e  e bound at all).
50a0: 20 20 47 72 65 61 74 20 63 61 72 65 0d 0a 20 20    Great care..  
50b0: 2f 2f 2f 20 73 68 6f 75 6c 64 20 62 65 20 75 73  /// should be us
50c0: 65 64 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20  ed when setting 
50d0: 74 68 69 73 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f  this to non-zero
50e0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
50f0: 3e 0d 0a 20 20 70 75 62 6c 69 63 20 64 65 6c 65  >..  public dele
5100: 67 61 74 65 20 76 6f 69 64 20 53 51 4c 69 74 65  gate void SQLite
5110: 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  BindValueCallbac
5120: 6b 28 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  k(..      SQLite
5130: 43 6f 6e 76 65 72 74 20 63 6f 6e 76 65 72 74 2c  Convert convert,
5140: 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f  ..      SQLiteCo
5150: 6d 6d 61 6e 64 20 63 6f 6d 6d 61 6e 64 2c 0d 0a  mmand command,..
5160: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
5170: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
5180: 73 2c 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  s,..      SQLite
5190: 50 61 72 61 6d 65 74 65 72 20 70 61 72 61 6d 65  Parameter parame
51a0: 74 65 72 2c 0d 0a 20 20 20 20 20 20 73 74 72 69  ter,..      stri
51b0: 6e 67 20 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20  ng typeName,..  
51c0: 20 20 20 20 69 6e 74 20 69 6e 64 65 78 2c 0d 0a      int index,..
51d0: 20 20 20 20 20 20 6f 62 6a 65 63 74 20 75 73 65        object use
51e0: 72 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 6f 75  rData,..      ou
51f0: 74 20 62 6f 6f 6c 20 63 6f 6d 70 6c 65 74 65 0d  t bool complete.
5200: 0a 20 20 29 3b 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f  .  );....  /////
5210: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5220: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5230: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5260: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
5270: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5280: 0a 20 20 2f 2f 2f 20 54 68 69 73 20 72 65 70 72  .  /// This repr
5290: 65 73 65 6e 74 73 20 61 20 6d 65 74 68 6f 64 20  esents a method 
52a0: 74 68 61 74 20 77 69 6c 6c 20 62 65 20 63 61 6c  that will be cal
52b0: 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  led in response 
52c0: 74 6f 20 61 20 72 65 71 75 65 73 74 0d 0a 20 20  to a request..  
52d0: 2f 2f 2f 20 74 6f 20 72 65 61 64 20 61 20 76 61  /// to read a va
52e0: 6c 75 65 20 66 72 6f 6d 20 61 20 64 61 74 61 20  lue from a data 
52f0: 72 65 61 64 65 72 2e 20 20 49 66 20 61 6e 20 65  reader.  If an e
5300: 78 63 65 70 74 69 6f 6e 20 69 73 20 74 68 72 6f  xception is thro
5310: 77 6e 2c 20 69 74 20 77 69 6c 6c 0d 0a 20 20 2f  wn, it will..  /
5320: 2f 2f 20 63 61 75 73 65 20 74 68 65 20 64 61 74  // cause the dat
5330: 61 20 72 65 61 64 65 72 20 6f 70 65 72 61 74 69  a reader operati
5340: 6f 6e 20 74 6f 20 66 61 69 6c 20 2d 41 4e 44 2d  on to fail -AND-
5350: 20 69 74 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75   it will continu
5360: 65 20 74 6f 20 75 6e 77 69 6e 64 0d 0a 20 20 2f  e to unwind..  /
5370: 2f 2f 20 74 68 65 20 63 61 6c 6c 20 73 74 61 63  // the call stac
5380: 6b 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  k...  /// </summ
5390: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ary>..  /// <par
53a0: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 76 65 72 74  am name="convert
53b0: 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 3c 73  ">..  /// The <s
53c0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
53d0: 6f 6e 76 65 72 74 22 20 2f 3e 20 69 6e 73 74 61  onvert" /> insta
53e0: 6e 63 65 20 69 6e 20 75 73 65 2e 0d 0a 20 20 2f  nce in use...  /
53f0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  // </param>..  /
5400: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5410: 64 61 74 61 52 65 61 64 65 72 22 3e 0d 0a 20 20  dataReader">..  
5420: 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65  /// The <see cre
5430: 66 3d 22 53 51 4c 69 74 65 44 61 74 61 52 65 61  f="SQLiteDataRea
5440: 64 65 72 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65  der" /> instance
5450: 20 69 6e 20 75 73 65 2e 0d 0a 20 20 2f 2f 2f 20   in use...  /// 
5460: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
5470: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61  <param name="fla
5480: 67 73 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20  gs">..  /// The 
5490: 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64  flags associated
54a0: 20 77 69 74 68 20 74 68 65 20 3c 73 65 65 20 63   with the <see c
54b0: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
54c0: 63 74 69 6f 6e 22 20 2f 3e 20 69 6e 73 74 61 6e  ction" /> instan
54d0: 63 65 0d 0a 20 20 2f 2f 2f 20 69 6e 20 75 73 65  ce..  /// in use
54e0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  ...  /// </param
54f0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  >..  /// <param 
5500: 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73 22  name="eventArgs"
5510: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 70 61 72  >..  /// The par
5520: 61 6d 65 74 65 72 20 61 6e 64 20 72 65 74 75 72  ameter and retur
5530: 6e 20 74 79 70 65 20 64 61 74 61 20 66 6f 72 20  n type data for 
5540: 74 68 65 20 63 6f 6c 75 6d 6e 20 62 65 69 6e 67  the column being
5550: 20 72 65 61 64 20 66 72 6f 6d 20 74 68 65 0d 0a   read from the..
5560: 20 20 2f 2f 2f 20 64 61 74 61 20 72 65 61 64 65    /// data reade
5570: 72 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  r...  /// </para
5580: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  m>..  /// <param
5590: 20 6e 61 6d 65 3d 22 74 79 70 65 4e 61 6d 65 22   name="typeName"
55a0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 64 61 74  >..  /// The dat
55b0: 61 62 61 73 65 20 74 79 70 65 20 6e 61 6d 65 20  abase type name 
55c0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
55d0: 74 68 69 73 20 63 61 6c 6c 62 61 63 6b 2e 0d 0a  this callback...
55e0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
55f0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
5600: 65 3d 22 69 6e 64 65 78 22 3e 0d 0a 20 20 2f 2f  e="index">..  //
5610: 2f 20 54 68 65 20 7a 65 72 6f 20 62 61 73 65 64  / The zero based
5620: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 63 6f   index of the co
5630: 6c 75 6d 6e 20 62 65 69 6e 67 20 72 65 61 64 20  lumn being read 
5640: 66 72 6f 6d 20 74 68 65 20 64 61 74 61 20 72 65  from the data re
5650: 61 64 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70  ader...  /// </p
5660: 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61  aram>..  /// <pa
5670: 72 61 6d 20 6e 61 6d 65 3d 22 75 73 65 72 44 61  ram name="userDa
5680: 74 61 22 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20  ta">..  /// The 
5690: 64 61 74 61 20 6f 72 69 67 69 6e 61 6c 6c 79 20  data originally 
56a0: 75 73 65 64 20 77 68 65 6e 20 72 65 67 69 73 74  used when regist
56b0: 65 72 69 6e 67 20 74 68 69 73 20 63 61 6c 6c 62  ering this callb
56c0: 61 63 6b 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61  ack...  /// </pa
56d0: 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 70 61 72  ram>..  /// <par
56e0: 61 6d 20 6e 61 6d 65 3d 22 63 6f 6d 70 6c 65 74  am name="complet
56f0: 65 22 3e 0d 0a 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  e">..  /// Non-z
5700: 65 72 6f 20 69 66 20 74 68 65 20 64 65 66 61 75  ero if the defau
5710: 6c 74 20 68 61 6e 64 6c 69 6e 67 20 66 6f 72 20  lt handling for 
5720: 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
5730: 63 61 6c 6c 20 73 68 6f 75 6c 64 20 62 65 0d 0a  call should be..
5740: 20 20 2f 2f 2f 20 73 6b 69 70 70 65 64 2e 20 20    /// skipped.  
5750: 49 66 20 74 68 69 73 20 69 73 20 73 65 74 20 74  If this is set t
5760: 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 61 6e 64 20 74  o non-zero and t
5770: 68 65 20 6e 65 63 65 73 73 61 72 79 20 72 65 74  he necessary ret
5780: 75 72 6e 20 76 61 6c 75 65 0d 0a 20 20 2f 2f 2f  urn value..  ///
5790: 20 69 73 20 75 6e 61 76 61 69 6c 61 62 6c 65 20   is unavailable 
57a0: 6f 72 20 75 6e 73 75 69 74 61 62 6c 65 2c 20 61  or unsuitable, a
57b0: 6e 20 65 78 63 65 70 74 69 6f 6e 20 77 69 6c 6c  n exception will
57c0: 20 62 65 20 74 68 72 6f 77 6e 2e 0d 0a 20 20 2f   be thrown...  /
57d0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 70  // </param>..  p
57e0: 75 62 6c 69 63 20 64 65 6c 65 67 61 74 65 20 76  ublic delegate v
57f0: 6f 69 64 20 53 51 4c 69 74 65 52 65 61 64 56 61  oid SQLiteReadVa
5800: 6c 75 65 43 61 6c 6c 62 61 63 6b 28 0d 0a 20 20  lueCallback(..  
5810: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 76 65 72      SQLiteConver
5820: 74 20 63 6f 6e 76 65 72 74 2c 0d 0a 20 20 20 20  t convert,..    
5830: 20 20 53 51 4c 69 74 65 44 61 74 61 52 65 61 64    SQLiteDataRead
5840: 65 72 20 64 61 74 61 52 65 61 64 65 72 2c 0d 0a  er dataReader,..
5850: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
5860: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
5870: 73 2c 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  s,..      SQLite
5880: 52 65 61 64 45 76 65 6e 74 41 72 67 73 20 65 76  ReadEventArgs ev
5890: 65 6e 74 41 72 67 73 2c 0d 0a 20 20 20 20 20 20  entArgs,..      
58a0: 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 2c  string typeName,
58b0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65  ..      int inde
58c0: 78 2c 0d 0a 20 20 20 20 20 20 6f 62 6a 65 63 74  x,..      object
58d0: 20 75 73 65 72 44 61 74 61 2c 0d 0a 20 20 20 20   userData,..    
58e0: 20 20 6f 75 74 20 62 6f 6f 6c 20 63 6f 6d 70 6c    out bool compl
58f0: 65 74 65 0d 0a 20 20 29 3b 0d 0a 0d 0a 20 20 2f  ete..  );....  /
5900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5940: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5950: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5960: 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
5970: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20  ry>..  /// This 
5980: 63 6c 61 73 73 20 72 65 70 72 65 73 65 6e 74 73  class represents
5990: 20 74 68 65 20 63 75 73 74 6f 6d 20 64 61 74 61   the custom data
59a0: 20 74 79 70 65 20 68 61 6e 64 6c 69 6e 67 20 63   type handling c
59b0: 61 6c 6c 62 61 63 6b 73 0d 0a 20 20 2f 2f 2f 20  allbacks..  /// 
59c0: 66 6f 72 20 61 20 73 69 6e 67 6c 65 20 74 79 70  for a single typ
59d0: 65 20 6e 61 6d 65 2e 0d 0a 20 20 2f 2f 2f 20 3c  e name...  /// <
59e0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 70 75 62  /summary>..  pub
59f0: 6c 69 63 20 73 65 61 6c 65 64 20 63 6c 61 73 73  lic sealed class
5a00: 20 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62   SQLiteTypeCallb
5a10: 61 63 6b 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 20  acks..  {..     
5a20: 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65   #region Private
5a30: 20 44 61 74 61 0d 0a 20 20 20 20 20 20 2f 2f 2f   Data..      ///
5a40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5a50: 20 20 2f 2f 2f 20 50 72 6f 76 69 64 65 73 20 74    /// Provides t
5a60: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 73 74  he underlying st
5a70: 6f 72 61 67 65 20 66 6f 72 20 74 68 65 0d 0a 20  orage for the.. 
5a80: 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72       /// <see cr
5a90: 65 66 3d 22 54 79 70 65 4e 61 6d 65 22 20 2f 3e  ef="TypeName" />
5aa0: 20 70 72 6f 70 65 72 74 79 2e 0d 0a 20 20 20 20   property...    
5ab0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5ac0: 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65 20  ..      private 
5ad0: 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d 65 3b  string typeName;
5ae0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
5af0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
5b00: 2f 2f 20 50 72 6f 76 69 64 65 73 20 74 68 65 20  // Provides the 
5b10: 75 6e 64 65 72 6c 79 69 6e 67 20 73 74 6f 72 61  underlying stora
5b20: 67 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ge for the..    
5b30: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
5b40: 22 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61  "BindValueCallba
5b50: 63 6b 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e  ck" /> property.
5b60: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
5b70: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72  mmary>..      pr
5b80: 69 76 61 74 65 20 53 51 4c 69 74 65 42 69 6e 64  ivate SQLiteBind
5b90: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20 62 69  ValueCallback bi
5ba0: 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b  ndValueCallback;
5bb0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
5bc0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
5bd0: 2f 2f 20 50 72 6f 76 69 64 65 73 20 74 68 65 20  // Provides the 
5be0: 75 6e 64 65 72 6c 79 69 6e 67 20 73 74 6f 72 61  underlying stora
5bf0: 67 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ge for the..    
5c00: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
5c10: 22 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  "ReadValueCallba
5c20: 63 6b 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e  ck" /> property.
5c30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
5c40: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72  mmary>..      pr
5c50: 69 76 61 74 65 20 53 51 4c 69 74 65 52 65 61 64  ivate SQLiteRead
5c60: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20 72 65  ValueCallback re
5c70: 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b  adValueCallback;
5c80: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
5c90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
5ca0: 2f 2f 20 50 72 6f 76 69 64 65 73 20 74 68 65 20  // Provides the 
5cb0: 75 6e 64 65 72 6c 79 69 6e 67 20 73 74 6f 72 61  underlying stora
5cc0: 67 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ge for the..    
5cd0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
5ce0: 22 42 69 6e 64 56 61 6c 75 65 55 73 65 72 44 61  "BindValueUserDa
5cf0: 74 61 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e  ta" /> property.
5d00: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
5d10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72  mmary>..      pr
5d20: 69 76 61 74 65 20 6f 62 6a 65 63 74 20 62 69 6e  ivate object bin
5d30: 64 56 61 6c 75 65 55 73 65 72 44 61 74 61 3b 0d  dValueUserData;.
5d40: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
5d50: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
5d60: 2f 20 50 72 6f 76 69 64 65 73 20 74 68 65 20 75  / Provides the u
5d70: 6e 64 65 72 6c 79 69 6e 67 20 73 74 6f 72 61 67  nderlying storag
5d80: 65 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 20  e for the..     
5d90: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
5da0: 52 65 61 64 56 61 6c 75 65 55 73 65 72 44 61 74  ReadValueUserDat
5db0: 61 22 20 2f 3e 20 70 72 6f 70 65 72 74 79 2e 0d  a" /> property..
5dc0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
5dd0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 72 69  mary>..      pri
5de0: 76 61 74 65 20 6f 62 6a 65 63 74 20 72 65 61 64  vate object read
5df0: 56 61 6c 75 65 55 73 65 72 44 61 74 61 3b 0d 0a  ValueUserData;..
5e00: 20 20 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e        #endregion
5e10: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f  ....      //////
5e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e60: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 23 72 65  ///....      #re
5e70: 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f 6e  gion Private Con
5e80: 73 74 72 75 63 74 6f 72 73 0d 0a 20 20 20 20 20  structors..     
5e90: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5ea0: 20 20 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72        /// Constr
5eb0: 75 63 74 73 20 61 6e 20 69 6e 73 74 61 6e 63 65  ucts an instance
5ec0: 20 6f 66 20 74 68 69 73 20 63 6c 61 73 73 2e 0d   of this class..
5ed0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
5ee0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
5ef0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 69   <param name="bi
5f00: 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 22  ndValueCallback"
5f10: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65  >..      /// The
5f20: 20 63 75 73 74 6f 6d 20 70 61 72 61 6d 61 74 65   custom paramate
5f30: 72 20 62 69 6e 64 69 6e 67 20 63 61 6c 6c 62 61  r binding callba
5f40: 63 6b 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65  ck.  This parame
5f50: 74 65 72 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e  ter may be null.
5f60: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
5f70: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ram>..      /// 
5f80: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 61  <param name="rea
5f90: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 22 3e  dValueCallback">
5fa0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20  ..      /// The 
5fb0: 63 75 73 74 6f 6d 20 64 61 74 61 20 72 65 61 64  custom data read
5fc0: 65 72 20 76 61 6c 75 65 20 63 61 6c 6c 62 61 63  er value callbac
5fd0: 6b 2e 20 20 54 68 69 73 20 70 61 72 61 6d 65 74  k.  This paramet
5fe0: 65 72 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e 0d  er may be null..
5ff0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  .      /// </par
6000: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
6010: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 69 6e 64  param name="bind
6020: 56 61 6c 75 65 55 73 65 72 44 61 74 61 22 3e 0d  ValueUserData">.
6030: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65  .      /// The e
6040: 78 74 72 61 20 64 61 74 61 20 74 6f 20 70 61 73  xtra data to pas
6050: 73 20 69 6e 74 6f 20 74 68 65 20 70 61 72 61 6d  s into the param
6060: 65 74 65 72 20 62 69 6e 64 69 6e 67 20 63 61 6c  eter binding cal
6070: 6c 62 61 63 6b 2e 20 20 54 68 69 73 0d 0a 20 20  lback.  This..  
6080: 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65      /// paramete
6090: 72 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e 0d 0a  r may be null...
60a0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61        /// </para
60b0: 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  m>..      /// <p
60c0: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 61 64 56  aram name="readV
60d0: 61 6c 75 65 55 73 65 72 44 61 74 61 22 3e 0d 0a  alueUserData">..
60e0: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 78        /// The ex
60f0: 74 72 61 20 64 61 74 61 20 74 6f 20 70 61 73 73  tra data to pass
6100: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 72   into the data r
6110: 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c 6c  eader value call
6120: 62 61 63 6b 2e 20 20 54 68 69 73 0d 0a 20 20 20  back.  This..   
6130: 20 20 20 2f 2f 2f 20 70 61 72 61 6d 65 74 65 72     /// parameter
6140: 20 6d 61 79 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20   may be null... 
6150: 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d       /// </param
6160: 3e 0d 0a 20 20 20 20 20 20 70 72 69 76 61 74 65  >..      private
6170: 20 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62   SQLiteTypeCallb
6180: 61 63 6b 73 28 0d 0a 20 20 20 20 20 20 20 20 20  acks(..         
6190: 20 53 51 4c 69 74 65 42 69 6e 64 56 61 6c 75 65   SQLiteBindValue
61a0: 43 61 6c 6c 62 61 63 6b 20 62 69 6e 64 56 61 6c  Callback bindVal
61b0: 75 65 43 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20  ueCallback,..   
61c0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 52 65 61         SQLiteRea
61d0: 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20 72  dValueCallback r
61e0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
61f0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a  ,..          obj
6200: 65 63 74 20 62 69 6e 64 56 61 6c 75 65 55 73 65  ect bindValueUse
6210: 72 44 61 74 61 2c 0d 0a 20 20 20 20 20 20 20 20  rData,..        
6220: 20 20 6f 62 6a 65 63 74 20 72 65 61 64 56 61 6c    object readVal
6230: 75 65 55 73 65 72 44 61 74 61 0d 0a 20 20 20 20  ueUserData..    
6240: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20 7b        )..      {
6250: 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 69 73  ..          this
6260: 2e 62 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61  .bindValueCallba
6270: 63 6b 20 3d 20 62 69 6e 64 56 61 6c 75 65 43 61  ck = bindValueCa
6280: 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20 20 20 20 20  llback;..       
6290: 20 20 20 74 68 69 73 2e 72 65 61 64 56 61 6c 75     this.readValu
62a0: 65 43 61 6c 6c 62 61 63 6b 20 3d 20 72 65 61 64  eCallback = read
62b0: 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 3b 0d 0a  ValueCallback;..
62c0: 20 20 20 20 20 20 20 20 20 20 74 68 69 73 2e 62            this.b
62d0: 69 6e 64 56 61 6c 75 65 55 73 65 72 44 61 74 61  indValueUserData
62e0: 20 3d 20 62 69 6e 64 56 61 6c 75 65 55 73 65 72   = bindValueUser
62f0: 44 61 74 61 3b 0d 0a 20 20 20 20 20 20 20 20 20  Data;..         
6300: 20 74 68 69 73 2e 72 65 61 64 56 61 6c 75 65 55   this.readValueU
6310: 73 65 72 44 61 74 61 20 3d 20 72 65 61 64 56 61  serData = readVa
6320: 6c 75 65 55 73 65 72 44 61 74 61 3b 0d 0a 20 20  lueUserData;..  
6330: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e      }..      #en
6340: 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 20  dregion....     
6350: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
6360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
63a0: 20 20 20 20 23 72 65 67 69 6f 6e 20 53 74 61 74      #region Stat
63b0: 69 63 20 22 46 61 63 74 6f 72 79 22 20 4d 65 74  ic "Factory" Met
63c0: 68 6f 64 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  hods..      /// 
63d0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
63e0: 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 6e 20   /// Creates an 
63f0: 69 6e 73 74 61 6e 63 65 20 6f 66 20 74 68 65 20  instance of the 
6400: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
6410: 65 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 22 20  eTypeCallbacks" 
6420: 2f 3e 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20 20  /> class...     
6430: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6440: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  .      /// <para
6450: 6d 20 6e 61 6d 65 3d 22 62 69 6e 64 56 61 6c 75  m name="bindValu
6460: 65 43 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20  eCallback">..   
6470: 20 20 20 2f 2f 2f 20 54 68 65 20 63 75 73 74 6f     /// The custo
6480: 6d 20 70 61 72 61 6d 61 74 65 72 20 62 69 6e 64  m paramater bind
6490: 69 6e 67 20 63 61 6c 6c 62 61 63 6b 2e 20 20 54  ing callback.  T
64a0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 61  his parameter ma
64b0: 79 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20  y be null...    
64c0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
64d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d        /// <param
64e0: 20 6e 61 6d 65 3d 22 72 65 61 64 56 61 6c 75 65   name="readValue
64f0: 43 61 6c 6c 62 61 63 6b 22 3e 0d 0a 20 20 20 20  Callback">..    
6500: 20 20 2f 2f 2f 20 54 68 65 20 63 75 73 74 6f 6d    /// The custom
6510: 20 64 61 74 61 20 72 65 61 64 65 72 20 76 61 6c   data reader val
6520: 75 65 20 63 61 6c 6c 62 61 63 6b 2e 20 20 54 68  ue callback.  Th
6530: 69 73 20 70 61 72 61 6d 65 74 65 72 20 6d 61 79  is parameter may
6540: 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20   be null...     
6550: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
6560: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
6570: 6e 61 6d 65 3d 22 62 69 6e 64 56 61 6c 75 65 55  name="bindValueU
6580: 73 65 72 44 61 74 61 22 3e 0d 0a 20 20 20 20 20  serData">..     
6590: 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64   /// The extra d
65a0: 61 74 61 20 74 6f 20 70 61 73 73 20 69 6e 74 6f  ata to pass into
65b0: 20 74 68 65 20 70 61 72 61 6d 65 74 65 72 20 62   the parameter b
65c0: 69 6e 64 69 6e 67 20 63 61 6c 6c 62 61 63 6b 2e  inding callback.
65d0: 20 20 54 68 69 73 0d 0a 20 20 20 20 20 20 2f 2f    This..      //
65e0: 2f 20 70 61 72 61 6d 65 74 65 72 20 6d 61 79 20  / parameter may 
65f0: 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  be null...      
6600: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
6610: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6620: 61 6d 65 3d 22 72 65 61 64 56 61 6c 75 65 55 73  ame="readValueUs
6630: 65 72 44 61 74 61 22 3e 0d 0a 20 20 20 20 20 20  erData">..      
6640: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
6650: 74 61 20 74 6f 20 70 61 73 73 20 69 6e 74 6f 20  ta to pass into 
6660: 74 68 65 20 64 61 74 61 20 72 65 61 64 65 72 20  the data reader 
6670: 76 61 6c 75 65 20 63 61 6c 6c 62 61 63 6b 2e 20  value callback. 
6680: 20 54 68 69 73 0d 0a 20 20 20 20 20 20 2f 2f 2f   This..      ///
6690: 20 70 61 72 61 6d 65 74 65 72 20 6d 61 79 20 62   parameter may b
66a0: 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 2f  e null...      /
66b0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
66c0: 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
66d0: 20 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62   SQLiteTypeCallb
66e0: 61 63 6b 73 20 43 72 65 61 74 65 28 0d 0a 20 20  acks Create(..  
66f0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 69          SQLiteBi
6700: 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b 20  ndValueCallback 
6710: 62 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63  bindValueCallbac
6720: 6b 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  k,..          SQ
6730: 4c 69 74 65 52 65 61 64 56 61 6c 75 65 43 61 6c  LiteReadValueCal
6740: 6c 62 61 63 6b 20 72 65 61 64 56 61 6c 75 65 43  lback readValueC
6750: 61 6c 6c 62 61 63 6b 2c 0d 0a 20 20 20 20 20 20  allback,..      
6760: 20 20 20 20 6f 62 6a 65 63 74 20 62 69 6e 64 56      object bindV
6770: 61 6c 75 65 55 73 65 72 44 61 74 61 2c 0d 0a 20  alueUserData,.. 
6780: 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
6790: 72 65 61 64 56 61 6c 75 65 55 73 65 72 44 61 74  readValueUserDat
67a0: 61 0d 0a 20 20 20 20 20 20 20 20 20 20 29 0d 0a  a..          )..
67b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
67c0: 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
67d0: 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b  LiteTypeCallback
67e0: 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s(..            
67f0: 20 20 62 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62    bindValueCallb
6800: 61 63 6b 2c 20 72 65 61 64 56 61 6c 75 65 43 61  ack, readValueCa
6810: 6c 6c 62 61 63 6b 2c 20 62 69 6e 64 56 61 6c 75  llback, bindValu
6820: 65 55 73 65 72 44 61 74 61 2c 0d 0a 20 20 20 20  eUserData,..    
6830: 20 20 20 20 20 20 20 20 20 20 72 65 61 64 56 61            readVa
6840: 6c 75 65 55 73 65 72 44 61 74 61 29 3b 0d 0a 20  lueUserData);.. 
6850: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65       }..      #e
6860: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
6870: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6880: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6890: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
68b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
68c0: 20 20 20 20 20 23 72 65 67 69 6f 6e 20 50 75 62       #region Pub
68d0: 6c 69 63 20 50 72 6f 70 65 72 74 69 65 73 0d 0a  lic Properties..
68e0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
68f0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
6900: 68 65 20 64 61 74 61 62 61 73 65 20 74 79 70 65  he database type
6910: 20 6e 61 6d 65 20 74 68 61 74 20 74 68 65 20 63   name that the c
6920: 61 6c 6c 62 61 63 6b 73 20 63 6f 6e 74 61 69 6e  allbacks contain
6930: 65 64 20 69 6e 20 74 68 69 73 20 63 6c 61 73 73  ed in this class
6940: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c 6c  ..      /// will
6950: 20 61 70 70 6c 79 20 74 6f 2e 20 20 54 68 69 73   apply to.  This
6960: 20 76 61 6c 75 65 20 6d 61 79 20 6e 6f 74 20 62   value may not b
6970: 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 2f  e null...      /
6980: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
6990: 20 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69       public stri
69a0: 6e 67 20 54 79 70 65 4e 61 6d 65 0d 0a 20 20 20  ng TypeName..   
69b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
69c0: 67 65 74 20 7b 20 72 65 74 75 72 6e 20 74 79 70  get { return typ
69d0: 65 4e 61 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20  eName; }..      
69e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 74      internal set
69f0: 20 7b 20 74 79 70 65 4e 61 6d 65 20 3d 20 76 61   { typeName = va
6a00: 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 20 20 7d 0d  lue; }..      }.
6a10: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  ...      ///////
6a20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6a60: 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  //....      /// 
6a70: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
6a80: 20 2f 2f 2f 20 54 68 65 20 63 75 73 74 6f 6d 20   /// The custom 
6a90: 70 61 72 61 6d 61 74 65 72 20 62 69 6e 64 69 6e  paramater bindin
6aa0: 67 20 63 61 6c 6c 62 61 63 6b 2e 20 20 54 68 69  g callback.  Thi
6ab0: 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 6e  s value may be n
6ac0: 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ull...      /// 
6ad0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6ae0: 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 42    public SQLiteB
6af0: 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  indValueCallback
6b00: 20 42 69 6e 64 56 61 6c 75 65 43 61 6c 6c 62 61   BindValueCallba
6b10: 63 6b 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ck..      {..   
6b20: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
6b30: 75 72 6e 20 62 69 6e 64 56 61 6c 75 65 43 61 6c  urn bindValueCal
6b40: 6c 62 61 63 6b 3b 20 7d 0d 0a 20 20 20 20 20 20  lback; }..      
6b50: 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 2f 2f  }....      /////
6b60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ba0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ////....      //
6bb0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6bc0: 20 20 20 2f 2f 2f 20 54 68 65 20 63 75 73 74 6f     /// The custo
6bd0: 6d 20 64 61 74 61 20 72 65 61 64 65 72 20 76 61  m data reader va
6be0: 6c 75 65 20 63 61 6c 6c 62 61 63 6b 2e 20 20 54  lue callback.  T
6bf0: 68 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65  his value may be
6c00: 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20 2f 2f   null...      //
6c10: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6c20: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
6c30: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
6c40: 63 6b 20 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ck ReadValueCall
6c50: 62 61 63 6b 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  back..      {.. 
6c60: 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72           get { r
6c70: 65 74 75 72 6e 20 72 65 61 64 56 61 6c 75 65 43  eturn readValueC
6c80: 61 6c 6c 62 61 63 6b 3b 20 7d 0d 0a 20 20 20 20  allback; }..    
6c90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f    }....      ///
6ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ce0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20  //////....      
6cf0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
6d00: 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74       /// The ext
6d10: 72 61 20 64 61 74 61 20 74 6f 20 70 61 73 73 20  ra data to pass 
6d20: 69 6e 74 6f 20 74 68 65 20 70 61 72 61 6d 65 74  into the paramet
6d30: 65 72 20 62 69 6e 64 69 6e 67 20 63 61 6c 6c 62  er binding callb
6d40: 61 63 6b 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  ack.  This..    
6d50: 20 20 2f 2f 2f 20 76 61 6c 75 65 20 6d 61 79 20    /// value may 
6d60: 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20 20  be null...      
6d70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6d80: 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62 6a        public obj
6d90: 65 63 74 20 42 69 6e 64 56 61 6c 75 65 55 73 65  ect BindValueUse
6da0: 72 44 61 74 61 0d 0a 20 20 20 20 20 20 7b 0d 0a  rData..      {..
6db0: 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b 20            get { 
6dc0: 72 65 74 75 72 6e 20 62 69 6e 64 56 61 6c 75 65  return bindValue
6dd0: 55 73 65 72 44 61 74 61 3b 20 7d 0d 0a 20 20 20  UserData; }..   
6de0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f     }....      //
6df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e30: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 20  ///////....     
6e40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6e50: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 78        /// The ex
6e60: 74 72 61 20 64 61 74 61 20 74 6f 20 70 61 73 73  tra data to pass
6e70: 20 69 6e 74 6f 20 74 68 65 20 64 61 74 61 20 72   into the data r
6e80: 65 61 64 65 72 20 76 61 6c 75 65 20 63 61 6c 6c  eader value call
6e90: 62 61 63 6b 2e 20 20 54 68 69 73 0d 0a 20 20 20  back.  This..   
6ea0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 6d 61 79     /// value may
6eb0: 20 62 65 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20 20   be null...     
6ec0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6ed0: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 6f 62  .      public ob
6ee0: 6a 65 63 74 20 52 65 61 64 56 61 6c 75 65 55 73  ject ReadValueUs
6ef0: 65 72 44 61 74 61 0d 0a 20 20 20 20 20 20 7b 0d  erData..      {.
6f00: 0a 20 20 20 20 20 20 20 20 20 20 67 65 74 20 7b  .          get {
6f10: 20 72 65 74 75 72 6e 20 72 65 61 64 56 61 6c 75   return readValu
6f20: 65 55 73 65 72 44 61 74 61 3b 20 7d 0d 0a 20 20  eUserData; }..  
6f30: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 23 65 6e      }..      #en
6f40: 64 72 65 67 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a  dregion..  }....
6f50: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
6f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6fb0: 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75  ///....  /// <su
6fc0: 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68  mmary>..  /// Th
6fd0: 69 73 20 63 6c 61 73 73 20 72 65 70 72 65 73 65  is class represe
6fe0: 6e 74 73 20 74 68 65 20 6d 61 70 70 69 6e 67 73  nts the mappings
6ff0: 20 62 65 74 77 65 65 6e 20 64 61 74 61 62 61 73   between databas
7000: 65 20 74 79 70 65 20 6e 61 6d 65 73 0d 0a 20 20  e type names..  
7010: 2f 2f 2f 20 61 6e 64 20 74 68 65 69 72 20 61 73  /// and their as
7020: 73 6f 63 69 61 74 65 64 20 63 75 73 74 6f 6d 20  sociated custom 
7030: 64 61 74 61 20 74 79 70 65 20 68 61 6e 64 6c 69  data type handli
7040: 6e 67 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a 20  ng callbacks... 
7050: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
7060: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 73 65 61 6c  .  internal seal
7070: 65 64 20 63 6c 61 73 73 20 53 51 4c 69 74 65 54  ed class SQLiteT
7080: 79 70 65 43 61 6c 6c 62 61 63 6b 73 4d 61 70 0d  ypeCallbacksMap.
7090: 0a 20 20 20 20 20 20 3a 20 44 69 63 74 69 6f 6e  .      : Diction
70a0: 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  ary<string, SQLi
70b0: 74 65 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 3e  teTypeCallbacks>
70c0: 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f  ..  {..      ///
70d0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
70e0: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
70f0: 20 61 6e 20 28 65 6d 70 74 79 29 20 69 6e 73 74   an (empty) inst
7100: 61 6e 63 65 20 6f 66 20 74 68 69 73 20 63 6c 61  ance of this cla
7110: 73 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ss...      /// <
7120: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7130: 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 54 79   public SQLiteTy
7140: 70 65 43 61 6c 6c 62 61 63 6b 73 4d 61 70 28 29  peCallbacksMap()
7150: 0d 0a 20 20 20 20 20 20 20 20 20 20 3a 20 62 61  ..          : ba
7160: 73 65 28 6e 65 77 20 54 79 70 65 4e 61 6d 65 53  se(new TypeNameS
7170: 74 72 69 6e 67 43 6f 6d 70 61 72 65 72 28 29 29  tringComparer())
7180: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
7190: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
71a0: 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ng...      }..  
71b0: 7d 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  }....  /////////
71c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
71f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7200: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7210: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 2f 2f  ////////....  //
7220: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f  / <summary>..  /
7230: 2f 2f 20 45 76 65 6e 74 20 64 61 74 61 20 66 6f  // Event data fo
7240: 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 65 76 65  r connection eve
7250: 6e 74 20 68 61 6e 64 6c 65 72 73 2e 0d 0a 20 20  nt handlers...  
7260: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7270: 20 20 70 75 62 6c 69 63 20 63 6c 61 73 73 20 43    public class C
7280: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
7290: 67 73 20 3a 20 45 76 65 6e 74 41 72 67 73 0d 0a  gs : EventArgs..
72a0: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c    {..      /// <
72b0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
72c0: 2f 2f 2f 20 54 68 65 20 74 79 70 65 20 6f 66 20  /// The type of 
72d0: 65 76 65 6e 74 20 62 65 69 6e 67 20 72 61 69 73  event being rais
72e0: 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ed...      /// <
72f0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
7300: 20 70 75 62 6c 69 63 20 72 65 61 64 6f 6e 6c 79   public readonly
7310: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
7320: 6e 45 76 65 6e 74 54 79 70 65 20 45 76 65 6e 74  nEventType Event
7330: 54 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  Type;....      /
7340: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7350: 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65      /// The <see
7360: 20 63 72 65 66 3d 22 53 74 61 74 65 43 68 61 6e   cref="StateChan
7370: 67 65 45 76 65 6e 74 41 72 67 73 22 20 2f 3e 20  geEventArgs" /> 
7380: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
7390: 74 68 69 73 20 65 76 65 6e 74 2c 20 69 66 20 61  this event, if a
73a0: 6e 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ny...      /// <
73b0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
73c0: 20 70 75 62 6c 69 63 20 72 65 61 64 6f 6e 6c 79   public readonly
73d0: 20 53 74 61 74 65 43 68 61 6e 67 65 45 76 65 6e   StateChangeEven
73e0: 74 41 72 67 73 20 45 76 65 6e 74 41 72 67 73 3b  tArgs EventArgs;
73f0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
7400: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
7410: 2f 2f 20 54 68 65 20 74 72 61 6e 73 61 63 74 69  // The transacti
7420: 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  on associated wi
7430: 74 68 20 74 68 69 73 20 65 76 65 6e 74 2c 20 69  th this event, i
7440: 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 2f 2f  f any...      //
7450: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7460: 20 20 20 20 70 75 62 6c 69 63 20 72 65 61 64 6f      public reado
7470: 6e 6c 79 20 49 44 62 54 72 61 6e 73 61 63 74 69  nly IDbTransacti
7480: 6f 6e 20 54 72 61 6e 73 61 63 74 69 6f 6e 3b 0d  on Transaction;.
7490: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
74a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
74b0: 2f 20 54 68 65 20 63 6f 6d 6d 61 6e 64 20 61 73  / The command as
74c0: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
74d0: 69 73 20 65 76 65 6e 74 2c 20 69 66 20 61 6e 79  is event, if any
74e0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
74f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 70  ummary>..      p
7500: 75 62 6c 69 63 20 72 65 61 64 6f 6e 6c 79 20 49  ublic readonly I
7510: 44 62 43 6f 6d 6d 61 6e 64 20 43 6f 6d 6d 61 6e  DbCommand Comman
7520: 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  d;....      /// 
7530: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
7540: 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 20 72 65   /// The data re
7550: 61 64 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ader associated 
7560: 77 69 74 68 20 74 68 69 73 20 65 76 65 6e 74 2c  with this event,
7570: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20   if any...      
7580: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7590: 20 20 20 20 20 20 70 75 62 6c 69 63 20 72 65 61        public rea
75a0: 64 6f 6e 6c 79 20 49 44 61 74 61 52 65 61 64 65  donly IDataReade
75b0: 72 20 44 61 74 61 52 65 61 64 65 72 3b 0d 0a 0d  r DataReader;...
75c0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
75d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
75e0: 54 68 65 20 63 72 69 74 69 63 61 6c 20 68 61 6e  The critical han
75f0: 64 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  dle associated w
7600: 69 74 68 20 74 68 69 73 20 65 76 65 6e 74 2c 20  ith this event, 
7610: 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20 20 2f  if any...      /
7620: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23  // </summary>..#
7630: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7640: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7650: 20 20 20 20 20 70 75 62 6c 69 63 20 72 65 61 64       public read
7660: 6f 6e 6c 79 20 43 72 69 74 69 63 61 6c 48 61 6e  only CriticalHan
7670: 64 6c 65 20 43 72 69 74 69 63 61 6c 48 61 6e 64  dle CriticalHand
7680: 6c 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  le;..#else..    
7690: 20 20 70 75 62 6c 69 63 20 72 65 61 64 6f 6e 6c    public readonl
76a0: 79 20 6f 62 6a 65 63 74 20 43 72 69 74 69 63 61  y object Critica
76b0: 6c 48 61 6e 64 6c 65 3b 0d 0a 23 65 6e 64 69 66  lHandle;..#endif
76c0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
76d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
76e0: 2f 2f 20 43 6f 6d 6d 61 6e 64 20 6f 72 20 6d 65  // Command or me
76f0: 73 73 61 67 65 20 74 65 78 74 20 61 73 73 6f 63  ssage text assoc
7700: 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20  iated with this 
7710: 65 76 65 6e 74 2c 20 69 66 20 61 6e 79 2e 0d 0a  event, if any...
7720: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
7730: 61 72 79 3e 0d 0a 20 20 20 20 20 20 70 75 62 6c  ary>..      publ
7740: 69 63 20 72 65 61 64 6f 6e 6c 79 20 73 74 72 69  ic readonly stri
7750: 6e 67 20 54 65 78 74 3b 0d 0a 0d 0a 20 20 20 20  ng Text;....    
7760: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
7770: 0a 20 20 20 20 20 20 2f 2f 2f 20 45 78 74 72 61  .      /// Extra
7780: 20 64 61 74 61 20 61 73 73 6f 63 69 61 74 65 64   data associated
7790: 20 77 69 74 68 20 74 68 69 73 20 65 76 65 6e 74   with this event
77a0: 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 20  , if any...     
77b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
77c0: 0a 20 20 20 20 20 20 70 75 62 6c 69 63 20 72 65  .      public re
77d0: 61 64 6f 6e 6c 79 20 6f 62 6a 65 63 74 20 44 61  adonly object Da
77e0: 74 61 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  ta;....      ///
77f0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
7800: 20 20 2f 2f 2f 20 43 6f 6e 73 74 72 75 63 74 73    /// Constructs
7810: 20 74 68 65 20 6f 62 6a 65 63 74 2e 0d 0a 20 20   the object...  
7820: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
7830: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 70  y>..      /// <p
7840: 61 72 61 6d 20 6e 61 6d 65 3d 22 65 76 65 6e 74  aram name="event
7850: 54 79 70 65 22 3e 54 68 65 20 74 79 70 65 20 6f  Type">The type o
7860: 66 20 65 76 65 6e 74 20 62 65 69 6e 67 20 72 61  f event being ra
7870: 69 73 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  ised.</param>.. 
7880: 20 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20       /// <param 
7890: 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73 22  name="eventArgs"
78a0: 3e 54 68 65 20 62 61 73 65 20 3c 73 65 65 20 63  >The base <see c
78b0: 72 65 66 3d 22 45 76 65 6e 74 41 72 67 73 22 20  ref="EventArgs" 
78c0: 2f 3e 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20  /> associated.. 
78d0: 20 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68       /// with th
78e0: 69 73 20 65 76 65 6e 74 2c 20 69 66 20 61 6e 79  is event, if any
78f0: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20  .</param>..     
7900: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
7910: 3d 22 74 72 61 6e 73 61 63 74 69 6f 6e 22 3e 54  ="transaction">T
7920: 68 65 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61  he transaction a
7930: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
7940: 68 69 73 20 65 76 65 6e 74 2c 20 69 66 20 61 6e  his event, if an
7950: 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
7960: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7970: 65 3d 22 63 6f 6d 6d 61 6e 64 22 3e 54 68 65 20  e="command">The 
7980: 63 6f 6d 6d 61 6e 64 20 61 73 73 6f 63 69 61 74  command associat
7990: 65 64 20 77 69 74 68 20 74 68 69 73 20 65 76 65  ed with this eve
79a0: 6e 74 2c 20 69 66 20 61 6e 79 2e 3c 2f 70 61 72  nt, if any.</par
79b0: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
79c0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 61  param name="data
79d0: 52 65 61 64 65 72 22 3e 54 68 65 20 64 61 74 61  Reader">The data
79e0: 20 72 65 61 64 65 72 20 61 73 73 6f 63 69 61 74   reader associat
79f0: 65 64 20 77 69 74 68 20 74 68 69 73 20 65 76 65  ed with this eve
7a00: 6e 74 2c 20 69 66 20 61 6e 79 2e 3c 2f 70 61 72  nt, if any.</par
7a10: 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  am>..      /// <
7a20: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 72 69 74  param name="crit
7a30: 69 63 61 6c 48 61 6e 64 6c 65 22 3e 54 68 65 20  icalHandle">The 
7a40: 63 72 69 74 69 63 61 6c 20 68 61 6e 64 6c 65 20  critical handle 
7a50: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
7a60: 74 68 69 73 20 65 76 65 6e 74 2c 20 69 66 20 61  this event, if a
7a70: 6e 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ny.</param>..   
7a80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
7a90: 6d 65 3d 22 74 65 78 74 22 3e 54 68 65 20 63 6f  me="text">The co
7aa0: 6d 6d 61 6e 64 20 6f 72 20 6d 65 73 73 61 67 65  mmand or message
7ab0: 20 74 65 78 74 2c 20 69 66 20 61 6e 79 2e 3c 2f   text, if any.</
7ac0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 20 20 2f 2f  param>..      //
7ad0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
7ae0: 61 74 61 22 3e 54 68 65 20 65 78 74 72 61 20 64  ata">The extra d
7af0: 61 74 61 2c 20 69 66 20 61 6e 79 2e 3c 2f 70 61  ata, if any.</pa
7b00: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 69 6e 74 65  ram>..      inte
7b10: 72 6e 61 6c 20 43 6f 6e 6e 65 63 74 69 6f 6e 45  rnal ConnectionE
7b20: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
7b30: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7b40: 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 20 65  ctionEventType e
7b50: 76 65 6e 74 54 79 70 65 2c 0d 0a 20 20 20 20 20  ventType,..     
7b60: 20 20 20 20 20 53 74 61 74 65 43 68 61 6e 67 65       StateChange
7b70: 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
7b80: 72 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs,..          
7b90: 49 44 62 54 72 61 6e 73 61 63 74 69 6f 6e 20 74  IDbTransaction t
7ba0: 72 61 6e 73 61 63 74 69 6f 6e 2c 0d 0a 20 20 20  ransaction,..   
7bb0: 20 20 20 20 20 20 20 49 44 62 43 6f 6d 6d 61 6e         IDbComman
7bc0: 64 20 63 6f 6d 6d 61 6e 64 2c 0d 0a 20 20 20 20  d command,..    
7bd0: 20 20 20 20 20 20 49 44 61 74 61 52 65 61 64 65        IDataReade
7be0: 72 20 64 61 74 61 52 65 61 64 65 72 2c 0d 0a 23  r dataReader,..#
7bf0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
7c00: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7c10: 20 20 20 20 20 20 20 20 20 43 72 69 74 69 63 61           Critica
7c20: 6c 48 61 6e 64 6c 65 20 63 72 69 74 69 63 61 6c  lHandle critical
7c30: 48 61 6e 64 6c 65 2c 0d 0a 23 65 6c 73 65 0d 0a  Handle,..#else..
7c40: 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74            object
7c50: 20 63 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c   criticalHandle,
7c60: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7c70: 20 20 20 20 73 74 72 69 6e 67 20 74 65 78 74 2c      string text,
7c80: 0d 0a 20 20 20 20 20 20 20 20 20 20 6f 62 6a 65  ..          obje
7c90: 63 74 20 64 61 74 61 0d 0a 20 20 20 20 20 20 20  ct data..       
7ca0: 20 20 20 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20     )..      {.. 
7cb0: 20 20 20 20 20 20 20 20 20 45 76 65 6e 74 54 79           EventTy
7cc0: 70 65 20 3d 20 65 76 65 6e 74 54 79 70 65 3b 0d  pe = eventType;.
7cd0: 0a 20 20 20 20 20 20 20 20 20 20 45 76 65 6e 74  .          Event
7ce0: 41 72 67 73 20 3d 20 65 76 65 6e 74 41 72 67 73  Args = eventArgs
7cf0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 54 72 61  ;..          Tra
7d00: 6e 73 61 63 74 69 6f 6e 20 3d 20 74 72 61 6e 73  nsaction = trans
7d10: 61 63 74 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 20  action;..       
7d20: 20 20 20 43 6f 6d 6d 61 6e 64 20 3d 20 63 6f 6d     Command = com
7d30: 6d 61 6e 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  mand;..         
7d40: 20 44 61 74 61 52 65 61 64 65 72 20 3d 20 64 61   DataReader = da
7d50: 74 61 52 65 61 64 65 72 3b 0d 0a 20 20 20 20 20  taReader;..     
7d60: 20 20 20 20 20 43 72 69 74 69 63 61 6c 48 61 6e       CriticalHan
7d70: 64 6c 65 20 3d 20 63 72 69 74 69 63 61 6c 48 61  dle = criticalHa
7d80: 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  ndle;..         
7d90: 20 54 65 78 74 20 3d 20 74 65 78 74 3b 0d 0a 20   Text = text;.. 
7da0: 20 20 20 20 20 20 20 20 20 44 61 74 61 20 3d 20           Data = 
7db0: 64 61 74 61 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  data;..      }..
7dc0: 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 2f 2f 2f 2f    }....  ///////
7dd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7de0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7df0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
7e30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7e40: 20 2f 2f 2f 20 52 61 69 73 65 64 20 77 68 65 6e   /// Raised when
7e50: 20 61 6e 20 65 76 65 6e 74 20 70 65 72 74 61 69   an event pertai
7e60: 6e 69 6e 67 20 74 6f 20 61 20 63 6f 6e 6e 65 63  ning to a connec
7e70: 74 69 6f 6e 20 6f 63 63 75 72 73 2e 0d 0a 20 20  tion occurs...  
7e80: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7e90: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7ea0: 65 3d 22 73 65 6e 64 65 72 22 3e 54 68 65 20 63  e="sender">The c
7eb0: 6f 6e 6e 65 63 74 69 6f 6e 20 69 6e 76 6f 6c 76  onnection involv
7ec0: 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f  ed.</param>..  /
7ed0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
7ee0: 65 22 3e 45 78 74 72 61 20 69 6e 66 6f 72 6d 61  e">Extra informa
7ef0: 74 69 6f 6e 20 61 62 6f 75 74 20 74 68 65 20 65  tion about the e
7f00: 76 65 6e 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  vent.</param>.. 
7f10: 20 70 75 62 6c 69 63 20 64 65 6c 65 67 61 74 65   public delegate
7f20: 20 76 6f 69 64 20 53 51 4c 69 74 65 43 6f 6e 6e   void SQLiteConn
7f30: 65 63 74 69 6f 6e 45 76 65 6e 74 48 61 6e 64 6c  ectionEventHandl
7f40: 65 72 28 6f 62 6a 65 63 74 20 73 65 6e 64 65 72  er(object sender
7f50: 2c 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  , ConnectionEven
7f60: 74 41 72 67 73 20 65 29 3b 0d 0a 0d 0a 20 20 2f  tArgs e);....  /
7f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fa0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7fd0: 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
7fe0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 53 51 4c 69 74  ry>..  /// SQLit
7ff0: 65 20 69 6d 70 6c 65 6e 74 61 74 69 6f 6e 20 6f  e implentation o
8000: 66 20 44 62 43 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  f DbConnection..
8010: 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79  .  /// </summary
8020: 3e 0d 0a 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b  >..  /// <remark
8030: 73 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 3c 73  s>..  /// The <s
8040: 65 65 20 63 72 65 66 3d 22 43 6f 6e 6e 65 63 74  ee cref="Connect
8050: 69 6f 6e 53 74 72 69 6e 67 22 20 2f 3e 20 70 72  ionString" /> pr
8060: 6f 70 65 72 74 79 20 63 61 6e 20 63 6f 6e 74 61  operty can conta
8070: 69 6e 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  in the following
8080: 20 70 61 72 61 6d 65 74 65 72 28 73 29 2c 20 64   parameter(s), d
8090: 65 6c 69 6d 69 74 65 64 20 77 69 74 68 20 61 20  elimited with a 
80a0: 73 65 6d 69 2d 63 6f 6c 6f 6e 3a 0d 0a 20 20 2f  semi-colon:..  /
80b0: 2f 2f 20 3c 6c 69 73 74 20 74 79 70 65 3d 22 74  // <list type="t
80c0: 61 62 6c 65 22 3e 0d 0a 20 20 2f 2f 2f 20 3c 6c  able">..  /// <l
80d0: 69 73 74 68 65 61 64 65 72 3e 0d 0a 20 20 2f 2f  istheader>..  //
80e0: 2f 20 3c 74 65 72 6d 3e 50 61 72 61 6d 65 74 65  / <term>Paramete
80f0: 72 3c 2f 74 65 72 6d 3e 0d 0a 20 20 2f 2f 2f 20  r</term>..  /// 
8100: 3c 74 65 72 6d 3e 56 61 6c 75 65 73 3c 2f 74 65  <term>Values</te
8110: 72 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 74 65 72 6d  rm>..  /// <term
8120: 3e 52 65 71 75 69 72 65 64 3c 2f 74 65 72 6d 3e  >Required</term>
8130: 0d 0a 20 20 2f 2f 2f 20 3c 74 65 72 6d 3e 44 65  ..  /// <term>De
8140: 66 61 75 6c 74 3c 2f 74 65 72 6d 3e 0d 0a 20 20  fault</term>..  
8150: 2f 2f 2f 20 3c 2f 6c 69 73 74 68 65 61 64 65 72  /// </listheader
8160: 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d  >..  /// <item>.
8170: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
8180: 69 6f 6e 3e 44 61 74 61 20 53 6f 75 72 63 65 3c  ion>Data Source<
8190: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
81a0: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
81b0: 6e 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 6d  n>..  /// This m
81c0: 61 79 20 62 65 20 61 20 66 69 6c 65 20 6e 61 6d  ay be a file nam
81d0: 65 2c 20 74 68 65 20 73 74 72 69 6e 67 20 22 3a  e, the string ":
81e0: 6d 65 6d 6f 72 79 3a 22 2c 20 6f 72 20 61 6e 79  memory:", or any
81f0: 20 73 75 70 70 6f 72 74 65 64 20 55 52 49 20 28   supported URI (
8200: 73 74 61 72 74 69 6e 67 20 77 69 74 68 20 53 51  starting with SQ
8210: 4c 69 74 65 20 33 2e 37 2e 37 29 2e 0d 0a 20 20  Lite 3.7.7)...  
8220: 2f 2f 2f 20 53 74 61 72 74 69 6e 67 20 77 69 74  /// Starting wit
8230: 68 20 72 65 6c 65 61 73 65 20 31 2e 30 2e 38 36  h release 1.0.86
8240: 2e 30 2c 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  .0, in order to 
8250: 75 73 65 20 6d 6f 72 65 20 74 68 61 6e 20 6f 6e  use more than on
8260: 65 20 63 6f 6e 73 65 63 75 74 69 76 65 20 62 61  e consecutive ba
8270: 63 6b 73 6c 61 73 68 20 28 65 2e 67 2e 20 66 6f  ckslash (e.g. fo
8280: 72 20 61 0d 0a 20 20 2f 2f 2f 20 55 4e 43 20 70  r a..  /// UNC p
8290: 61 74 68 29 2c 20 65 61 63 68 20 6f 66 20 74 68  ath), each of th
82a0: 65 20 61 64 6a 6f 69 6e 69 6e 67 20 62 61 63 6b  e adjoining back
82b0: 73 6c 61 73 68 20 63 68 61 72 61 63 74 65 72 73  slash characters
82c0: 20 6d 75 73 74 20 62 65 20 64 6f 75 62 6c 65 64   must be doubled
82d0: 20 28 65 2e 67 2e 20 22 5c 5c 4e 65 74 77 6f 72   (e.g. "\\Networ
82e0: 6b 5c 53 68 61 72 65 5c 74 65 73 74 2e 64 62 22  k\Share\test.db"
82f0: 0d 0a 20 20 2f 2f 2f 20 77 6f 75 6c 64 20 62 65  ..  /// would be
8300: 63 6f 6d 65 20 22 5c 5c 5c 5c 4e 65 74 77 6f 72  come "\\\\Networ
8310: 6b 5c 53 68 61 72 65 5c 74 65 73 74 2e 64 62 22  k\Share\test.db"
8320: 29 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63  )...  /// </desc
8330: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
8340: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 59 3c 2f  <description>Y</
8350: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
8360: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
8370: 3e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  ></description>.
8380: 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a  .  /// </item>..
8390: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20    /// <item>..  
83a0: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
83b0: 3e 55 72 69 3c 2f 64 65 73 63 72 69 70 74 69 6f  >Uri</descriptio
83c0: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72  n>..  /// <descr
83d0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 49  iption>..  /// I
83e0: 66 20 73 70 65 63 69 66 69 65 64 2c 20 74 68 69  f specified, thi
83f0: 73 20 6d 75 73 74 20 62 65 20 61 20 66 69 6c 65  s must be a file
8400: 20 6e 61 6d 65 20 74 68 61 74 20 73 74 61 72 74   name that start
8410: 73 20 77 69 74 68 20 22 66 69 6c 65 3a 2f 2f 22  s with "file://"
8420: 2c 20 22 66 69 6c 65 3a 22 2c 20 6f 72 20 22 2f  , "file:", or "/
8430: 22 2e 20 20 41 6e 79 20 6c 65 61 64 69 6e 67 0d  ".  Any leading.
8440: 0a 20 20 2f 2f 2f 20 22 66 69 6c 65 3a 2f 2f 22  .  /// "file://"
8450: 20 6f 72 20 22 66 69 6c 65 3a 22 20 70 72 65 66   or "file:" pref
8460: 69 78 20 77 69 6c 6c 20 62 65 20 73 74 72 69 70  ix will be strip
8470: 70 65 64 20 6f 66 66 20 61 6e 64 20 74 68 65 20  ped off and the 
8480: 72 65 73 75 6c 74 69 6e 67 20 66 69 6c 65 20 6e  resulting file n
8490: 61 6d 65 20 77 69 6c 6c 20 62 65 20 75 73 65 64  ame will be used
84a0: 20 74 6f 20 6f 70 65 6e 0d 0a 20 20 2f 2f 2f 20   to open..  /// 
84b0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a 20  the database... 
84c0: 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74 69   /// </descripti
84d0: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
84e0: 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72  ription>N</descr
84f0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
8500: 64 65 73 63 72 69 70 74 69 6f 6e 3e 6e 75 6c 6c  description>null
8510: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
8520: 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20    /// </item>.. 
8530: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f   /// <item>..  /
8540: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
8550: 46 75 6c 6c 55 72 69 3c 2f 64 65 73 63 72 69 70  FullUri</descrip
8560: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
8570: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
8580: 2f 20 49 66 20 73 70 65 63 69 66 69 65 64 2c 20  / If specified, 
8590: 74 68 69 73 20 6d 75 73 74 20 62 65 20 61 20 55  this must be a U
85a0: 52 49 20 69 6e 20 61 20 66 6f 72 6d 61 74 20 72  RI in a format r
85b0: 65 63 6f 67 6e 69 7a 65 64 20 62 79 20 74 68 65  ecognized by the
85c0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
85d0: 72 61 72 79 20 28 73 74 61 72 74 69 6e 67 20 77  rary (starting w
85e0: 69 74 68 0d 0a 20 20 2f 2f 2f 20 53 51 4c 69 74  ith..  /// SQLit
85f0: 65 20 33 2e 37 2e 37 29 2e 20 20 49 74 20 77 69  e 3.7.7).  It wi
8600: 6c 6c 20 62 65 20 70 61 73 73 65 64 20 76 65 72  ll be passed ver
8610: 62 61 74 69 6d 20 74 6f 20 74 68 65 20 53 51 4c  batim to the SQL
8620: 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
8630: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72  ...  /// </descr
8640: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
8650: 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64  description>N</d
8660: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
8670: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
8680: 6e 75 6c 6c 3c 2f 64 65 73 63 72 69 70 74 69 6f  null</descriptio
8690: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d  n>..  /// </item
86a0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d  >..  /// <item>.
86b0: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
86c0: 69 6f 6e 3e 56 65 72 73 69 6f 6e 3c 2f 64 65 73  ion>Version</des
86d0: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
86e0: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 33 3c   <description>3<
86f0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
8700: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
8710: 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  n>N</description
8720: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
8730: 70 74 69 6f 6e 3e 33 3c 2f 64 65 73 63 72 69 70  ption>3</descrip
8740: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69  tion>..  /// </i
8750: 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65  tem>..  /// <ite
8760: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72  m>..  /// <descr
8770: 69 70 74 69 6f 6e 3e 55 73 65 55 54 46 31 36 45  iption>UseUTF16E
8780: 6e 63 6f 64 69 6e 67 3c 2f 64 65 73 63 72 69 70  ncoding</descrip
8790: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
87a0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
87b0: 2f 20 3c 62 3e 54 72 75 65 3c 2f 62 3e 20 2d 20  / <b>True</b> - 
87c0: 54 68 65 20 55 54 46 2d 31 36 20 65 6e 63 6f 64  The UTF-16 encod
87d0: 69 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 75 73  ing should be us
87e0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e  ed...  /// <br/>
87f0: 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 46 61 6c 73 65  ..  /// <b>False
8800: 3c 2f 62 3e 20 2d 20 54 68 65 20 55 54 46 2d 38  </b> - The UTF-8
8810: 20 65 6e 63 6f 64 69 6e 67 20 73 68 6f 75 6c 64   encoding should
8820: 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 2f 2f 2f   be used...  ///
8830: 20 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d   </description>.
8840: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
8850: 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69  ion>N</descripti
8860: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
8870: 72 69 70 74 69 6f 6e 3e 46 61 6c 73 65 3c 2f 64  ription>False</d
8880: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
8890: 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f  // </item>..  //
88a0: 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20  / <item>..  /// 
88b0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 44 65 66  <description>Def
88c0: 61 75 6c 74 44 62 54 79 70 65 3c 2f 64 65 73 63  aultDbType</desc
88d0: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
88e0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  <description>.. 
88f0: 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68 65   /// This is the
8900: 20 64 65 66 61 75 6c 74 20 3c 73 65 65 20 63 72   default <see cr
8910: 65 66 3d 22 44 62 54 79 70 65 22 20 2f 3e 20 74  ef="DbType" /> t
8920: 6f 20 75 73 65 20 77 68 65 6e 20 6f 6e 65 20 63  o use when one c
8930: 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69  annot be determi
8940: 6e 65 64 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ned based on the
8950: 0d 0a 20 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 6d  ..  /// column m
8960: 65 74 61 64 61 74 61 20 61 6e 64 20 74 68 65 20  etadata and the 
8970: 63 6f 6e 66 69 67 75 72 65 64 20 74 79 70 65 20  configured type 
8980: 6d 61 70 70 69 6e 67 73 2e 0d 0a 20 20 2f 2f 2f  mappings...  ///
8990: 20 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d   </description>.
89a0: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
89b0: 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69  ion>N</descripti
89c0: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
89d0: 72 69 70 74 69 6f 6e 3e 6e 75 6c 6c 3c 2f 64 65  ription>null</de
89e0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
89f0: 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  / </item>..  ///
8a00: 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c   <item>..  /// <
8a10: 64 65 73 63 72 69 70 74 69 6f 6e 3e 44 65 66 61  description>Defa
8a20: 75 6c 74 54 79 70 65 4e 61 6d 65 3c 2f 64 65 73  ultTypeName</des
8a30: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
8a40: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a   <description>..
8a50: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
8a60: 65 20 64 65 66 61 75 6c 74 20 74 79 70 65 20 6e  e default type n
8a70: 61 6d 65 20 74 6f 20 75 73 65 20 77 68 65 6e 20  ame to use when 
8a80: 6f 6e 65 20 63 61 6e 6e 6f 74 20 62 65 20 64 65  one cannot be de
8a90: 74 65 72 6d 69 6e 65 64 20 62 61 73 65 64 20 6f  termined based o
8aa0: 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 20 6d 65 74  n the column met
8ab0: 61 64 61 74 61 0d 0a 20 20 2f 2f 2f 20 61 6e 64  adata..  /// and
8ac0: 20 74 68 65 20 63 6f 6e 66 69 67 75 72 65 64 20   the configured 
8ad0: 74 79 70 65 20 6d 61 70 70 69 6e 67 73 2e 0d 0a  type mappings...
8ae0: 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74    /// </descript
8af0: 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  ion>..  /// <des
8b00: 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63  cription>N</desc
8b10: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
8b20: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 6e 75 6c  <description>nul
8b30: 6c 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  l</description>.
8b40: 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a  .  /// </item>..
8b50: 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20    /// <item>..  
8b60: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
8b70: 3e 4e 6f 44 65 66 61 75 6c 74 46 6c 61 67 73 3c  >NoDefaultFlags<
8b80: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
8b90: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
8ba0: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 54 72 75  n>..  /// <b>Tru
8bb0: 65 3c 2f 62 3e 20 2d 20 44 6f 20 6e 6f 74 20 63  e</b> - Do not c
8bc0: 6f 6d 62 69 6e 65 20 74 68 65 20 73 70 65 63 69  ombine the speci
8bd0: 66 69 65 64 20 28 6f 72 20 65 78 69 73 74 69 6e  fied (or existin
8be0: 67 29 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  g) connection fl
8bf0: 61 67 73 20 77 69 74 68 20 74 68 65 20 76 61 6c  ags with the val
8c00: 75 65 20 6f 66 20 74 68 65 0d 0a 20 20 2f 2f 2f  ue of the..  ///
8c10: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 66 61   <see cref="Defa
8c20: 75 6c 74 46 6c 61 67 73 22 20 2f 3e 20 70 72 6f  ultFlags" /> pro
8c30: 70 65 72 74 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 62  perty...  /// <b
8c40: 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 46 61  r/>..  /// <b>Fa
8c50: 6c 73 65 3c 2f 62 3e 20 2d 20 43 6f 6d 62 69 6e  lse</b> - Combin
8c60: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified 
8c70: 28 6f 72 20 65 78 69 73 74 69 6e 67 29 20 63 6f  (or existing) co
8c80: 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20 77  nnection flags w
8c90: 69 74 68 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ith the value of
8ca0: 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73 65 65   the..  /// <see
8cb0: 20 63 72 65 66 3d 22 44 65 66 61 75 6c 74 46 6c   cref="DefaultFl
8cc0: 61 67 73 22 20 2f 3e 20 70 72 6f 70 65 72 74 79  ags" /> property
8cd0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72  ...  /// </descr
8ce0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
8cf0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64  description>N</d
8d00: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
8d10: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
8d20: 46 61 6c 73 65 3c 2f 64 65 73 63 72 69 70 74 69  False</descripti
8d30: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65  on>..  /// </ite
8d40: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  m>..  /// <item>
8d50: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
8d60: 74 69 6f 6e 3e 4e 6f 53 68 61 72 65 64 46 6c 61  tion>NoSharedFla
8d70: 67 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  gs</description>
8d80: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
8d90: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e  tion>..  /// <b>
8da0: 54 72 75 65 3c 2f 62 3e 20 2d 20 44 6f 20 6e 6f  True</b> - Do no
8db0: 74 20 63 6f 6d 62 69 6e 65 20 74 68 65 20 73 70  t combine the sp
8dc0: 65 63 69 66 69 65 64 20 28 6f 72 20 65 78 69 73  ecified (or exis
8dd0: 74 69 6e 67 29 20 63 6f 6e 6e 65 63 74 69 6f 6e  ting) connection
8de0: 20 66 6c 61 67 73 20 77 69 74 68 20 74 68 65 20   flags with the 
8df0: 76 61 6c 75 65 20 6f 66 20 74 68 65 0d 0a 20 20  value of the..  
8e00: 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53  /// <see cref="S
8e10: 68 61 72 65 64 46 6c 61 67 73 22 20 2f 3e 20 70  haredFlags" /> p
8e20: 72 6f 70 65 72 74 79 2e 0d 0a 20 20 2f 2f 2f 20  roperty...  /// 
8e30: 3c 62 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e  <br/>..  /// <b>
8e40: 46 61 6c 73 65 3c 2f 62 3e 20 2d 20 43 6f 6d 62  False</b> - Comb
8e50: 69 6e 65 20 74 68 65 20 73 70 65 63 69 66 69 65  ine the specifie
8e60: 64 20 28 6f 72 20 65 78 69 73 74 69 6e 67 29 20  d (or existing) 
8e70: 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
8e80: 20 77 69 74 68 20 74 68 65 20 76 61 6c 75 65 20   with the value 
8e90: 6f 66 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 3c 73  of the..  /// <s
8ea0: 65 65 20 63 72 65 66 3d 22 53 68 61 72 65 64 46  ee cref="SharedF
8eb0: 6c 61 67 73 22 20 2f 3e 20 70 72 6f 70 65 72 74  lags" /> propert
8ec0: 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63  y...  /// </desc
8ed0: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
8ee0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f  <description>N</
8ef0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
8f00: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
8f10: 3e 46 61 6c 73 65 3c 2f 64 65 73 63 72 69 70 74  >False</descript
8f20: 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74  ion>..  /// </it
8f30: 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d  em>..  /// <item
8f40: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
8f50: 70 74 69 6f 6e 3e 56 66 73 4e 61 6d 65 3c 2f 64  ption>VfsName</d
8f60: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
8f70: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
8f80: 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65  ..  /// The name
8f90: 20 6f 66 20 74 68 65 20 56 46 53 20 74 6f 20 75   of the VFS to u
8fa0: 73 65 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20  se when opening 
8fb0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
8fc0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20  nection...  /// 
8fd0: 49 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 73  If this is not s
8fe0: 70 65 63 69 66 69 65 64 2c 20 74 68 65 20 64 65  pecified, the de
8ff0: 66 61 75 6c 74 20 56 46 53 20 77 69 6c 6c 20 62  fault VFS will b
9000: 65 20 75 73 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c  e used...  /// <
9010: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
9020: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
9030: 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  n>N</description
9040: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
9050: 70 74 69 6f 6e 3e 6e 75 6c 6c 3c 2f 64 65 73 63  ption>null</desc
9060: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
9070: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  </item>..  /// <
9080: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  item>..  /// <de
9090: 73 63 72 69 70 74 69 6f 6e 3e 5a 69 70 56 66 73  scription>ZipVfs
90a0: 56 65 72 73 69 6f 6e 3c 2f 64 65 73 63 72 69 70  Version</descrip
90b0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
90c0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
90d0: 2f 20 49 66 20 6e 6f 6e 2d 6e 75 6c 6c 2c 20 74  / If non-null, t
90e0: 68 69 73 20 69 73 20 74 68 65 20 22 76 65 72 73  his is the "vers
90f0: 69 6f 6e 22 20 6f 66 20 5a 69 70 56 46 53 20 74  ion" of ZipVFS t
9100: 6f 20 75 73 65 2e 20 20 54 68 69 73 20 72 65 71  o use.  This req
9110: 75 69 72 65 73 0d 0a 20 20 2f 2f 2f 20 74 68 65  uires..  /// the
9120: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
9130: 69 74 65 20 69 6e 74 65 72 6f 70 20 61 73 73 65  ite interop asse
9140: 6d 62 6c 79 20 2d 41 4e 44 2d 20 70 72 69 6d 61  mbly -AND- prima
9150: 72 79 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d  ry managed assem
9160: 62 6c 79 0d 0a 20 20 2f 2f 2f 20 74 6f 20 62 65  bly..  /// to be
9170: 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20 74   compiled with t
9180: 68 65 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55  he INTEROP_INCLU
9190: 44 45 5f 5a 49 50 56 46 53 20 6f 70 74 69 6f 6e  DE_ZIPVFS option
91a0: 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 69  ; otherwise, thi
91b0: 73 0d 0a 20 20 2f 2f 2f 20 70 72 6f 70 65 72 74  s..  /// propert
91c0: 79 20 64 6f 65 73 20 6e 6f 74 68 69 6e 67 2e 20  y does nothing. 
91d0: 20 54 68 65 20 76 61 6c 69 64 20 76 61 6c 75 65   The valid value
91e0: 73 20 61 72 65 20 22 76 32 22 20 61 6e 64 20 22  s are "v2" and "
91f0: 76 33 22 2e 20 20 55 73 69 6e 67 0d 0a 20 20 2f  v3".  Using..  /
9200: 2f 2f 20 61 6e 79 6f 74 68 65 72 20 76 61 6c 75  // anyother valu
9210: 65 20 77 69 6c 6c 20 63 61 75 73 65 20 61 6e 20  e will cause an 
9220: 65 78 63 65 70 74 69 6f 6e 20 74 6f 20 62 65 20  exception to be 
9230: 74 68 72 6f 77 6e 2e 20 20 50 6c 65 61 73 65 20  thrown.  Please 
9240: 73 65 65 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 5a  see the..  /// Z
9250: 69 70 56 46 53 20 64 6f 63 75 6d 65 6e 74 61 74  ipVFS documentat
9260: 69 6f 6e 20 66 6f 72 20 6d 6f 72 65 20 69 6e 66  ion for more inf
9270: 6f 72 6d 61 74 69 6f 6e 20 6f 6e 20 68 6f 77 20  ormation on how 
9280: 74 6f 20 75 73 65 20 74 68 69 73 20 70 61 72 61  to use this para
9290: 6d 65 74 65 72 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  meter...  /// </
92a0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
92b0: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
92c0: 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >N</description>
92d0: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
92e0: 74 69 6f 6e 3e 6e 75 6c 6c 3c 2f 64 65 73 63 72  tion>null</descr
92f0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
9300: 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69  /item>..  /// <i
9310: 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  tem>..  /// <des
9320: 63 72 69 70 74 69 6f 6e 3e 44 61 74 65 54 69 6d  cription>DateTim
9330: 65 46 6f 72 6d 61 74 3c 2f 64 65 73 63 72 69 70  eFormat</descrip
9340: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
9350: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
9360: 2f 20 3c 62 3e 54 69 63 6b 73 3c 2f 62 3e 20 2d  / <b>Ticks</b> -
9370: 20 55 73 65 20 74 68 65 20 76 61 6c 75 65 20 6f   Use the value o
9380: 66 20 44 61 74 65 54 69 6d 65 2e 54 69 63 6b 73  f DateTime.Ticks
9390: 2e 3c 62 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62  .<br/>..  /// <b
93a0: 3e 49 53 4f 38 36 30 31 3c 2f 62 3e 20 2d 20 55  >ISO8601</b> - U
93b0: 73 65 20 74 68 65 20 49 53 4f 2d 38 36 30 31 20  se the ISO-8601 
93c0: 66 6f 72 6d 61 74 2e 20 20 55 73 65 73 20 74 68  format.  Uses th
93d0: 65 20 22 79 79 79 79 2d 4d 4d 2d 64 64 20 48 48  e "yyyy-MM-dd HH
93e0: 3a 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22  :mm:ss.FFFFFFFK"
93f0: 20 66 6f 72 6d 61 74 20 66 6f 72 20 55 54 43 0d   format for UTC.
9400: 0a 20 20 2f 2f 2f 20 44 61 74 65 54 69 6d 65 20  .  /// DateTime 
9410: 76 61 6c 75 65 73 20 61 6e 64 20 22 79 79 79 79  values and "yyyy
9420: 2d 4d 4d 2d 64 64 20 48 48 3a 6d 6d 3a 73 73 2e  -MM-dd HH:mm:ss.
9430: 46 46 46 46 46 46 46 22 20 66 6f 72 6d 61 74 20  FFFFFFF" format 
9440: 66 6f 72 20 6c 6f 63 61 6c 20 44 61 74 65 54 69  for local DateTi
9450: 6d 65 20 76 61 6c 75 65 73 29 2e 3c 62 72 2f 3e  me values).<br/>
9460: 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 4a 75 6c 69 61  ..  /// <b>Julia
9470: 6e 44 61 79 3c 2f 62 3e 20 2d 20 54 68 65 20 69  nDay</b> - The i
9480: 6e 74 65 72 76 61 6c 20 6f 66 20 74 69 6d 65 20  nterval of time 
9490: 69 6e 20 64 61 79 73 20 61 6e 64 20 66 72 61 63  in days and frac
94a0: 74 69 6f 6e 73 20 6f 66 20 61 20 64 61 79 20 73  tions of a day s
94b0: 69 6e 63 65 20 4a 61 6e 75 61 72 79 20 31 2c 20  ince January 1, 
94c0: 34 37 31 33 20 42 43 2e 3c 62 72 2f 3e 0d 0a 20  4713 BC.<br/>.. 
94d0: 20 2f 2f 2f 20 3c 62 3e 55 6e 69 78 45 70 6f 63   /// <b>UnixEpoc
94e0: 68 3c 2f 62 3e 20 2d 20 54 68 65 20 77 68 6f 6c  h</b> - The whol
94f0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 73 65 63 6f  e number of seco
9500: 6e 64 73 20 73 69 6e 63 65 20 74 68 65 20 55 6e  nds since the Un
9510: 69 78 20 65 70 6f 63 68 20 28 4a 61 6e 75 61 72  ix epoch (Januar
9520: 79 20 31 2c 20 31 39 37 30 29 2e 3c 62 72 2f 3e  y 1, 1970).<br/>
9530: 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 49 6e 76 61 72  ..  /// <b>Invar
9540: 69 61 6e 74 43 75 6c 74 75 72 65 3c 2f 62 3e 20  iantCulture</b> 
9550: 2d 20 41 6e 79 20 63 75 6c 74 75 72 65 2d 69 6e  - Any culture-in
9560: 64 65 70 65 6e 64 65 6e 74 20 73 74 72 69 6e 67  dependent string
9570: 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
9580: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 63  .NET Framework c
9590: 61 6e 20 69 6e 74 65 72 70 72 65 74 20 61 73 20  an interpret as 
95a0: 61 20 76 61 6c 69 64 20 44 61 74 65 54 69 6d 65  a valid DateTime
95b0: 2e 3c 62 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62  .<br/>..  /// <b
95c0: 3e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 3c  >CurrentCulture<
95d0: 2f 62 3e 20 2d 20 41 6e 79 20 73 74 72 69 6e 67  /b> - Any string
95e0: 20 76 61 6c 75 65 20 74 68 61 74 20 74 68 65 20   value that the 
95f0: 2e 4e 45 54 20 46 72 61 6d 65 77 6f 72 6b 20 63  .NET Framework c
9600: 61 6e 20 69 6e 74 65 72 70 72 65 74 20 61 73 20  an interpret as 
9610: 61 20 76 61 6c 69 64 20 44 61 74 65 54 69 6d 65  a valid DateTime
9620: 20 75 73 69 6e 67 20 74 68 65 20 63 75 72 72 65   using the curre
9630: 6e 74 20 63 75 6c 74 75 72 65 2e 3c 2f 64 65 73  nt culture.</des
9640: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
9650: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c   <description>N<
9660: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
9670: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
9680: 6e 3e 49 53 4f 38 36 30 31 3c 2f 64 65 73 63 72  n>ISO8601</descr
9690: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
96a0: 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69  /item>..  /// <i
96b0: 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  tem>..  /// <des
96c0: 63 72 69 70 74 69 6f 6e 3e 44 61 74 65 54 69 6d  cription>DateTim
96d0: 65 4b 69 6e 64 3c 2f 64 65 73 63 72 69 70 74 69  eKind</descripti
96e0: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
96f0: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
9700: 3c 62 3e 55 6e 73 70 65 63 69 66 69 65 64 3c 2f  <b>Unspecified</
9710: 62 3e 20 2d 20 4e 6f 74 20 73 70 65 63 69 66 69  b> - Not specifi
9720: 65 64 20 61 73 20 65 69 74 68 65 72 20 55 54 43  ed as either UTC
9730: 20 6f 72 20 6c 6f 63 61 6c 20 74 69 6d 65 2e 0d   or local time..
9740: 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20  .  /// <br/>..  
9750: 2f 2f 2f 20 3c 62 3e 55 74 63 3c 2f 62 3e 20 2d  /// <b>Utc</b> -
9760: 20 54 68 65 20 74 69 6d 65 20 72 65 70 72 65 73   The time repres
9770: 65 6e 74 65 64 20 69 73 20 55 54 43 2e 0d 0a 20  ented is UTC... 
9780: 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20 2f 2f   /// <br/>..  //
9790: 2f 20 3c 62 3e 4c 6f 63 61 6c 3c 2f 62 3e 20 2d  / <b>Local</b> -
97a0: 20 54 68 65 20 74 69 6d 65 20 72 65 70 72 65 73   The time repres
97b0: 65 6e 74 65 64 20 69 73 20 6c 6f 63 61 6c 20 74  ented is local t
97c0: 69 6d 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65  ime...  /// </de
97d0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
97e0: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e  / <description>N
97f0: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
9800: 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69    /// <descripti
9810: 6f 6e 3e 55 6e 73 70 65 63 69 66 69 65 64 3c 2f  on>Unspecified</
9820: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
9830: 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f  /// </item>..  /
9840: 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  // <item>..  ///
9850: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 44 61   <description>Da
9860: 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74 72 69  teTimeFormatStri
9870: 6e 67 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  ng</description>
9880: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
9890: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  tion>..  /// The
98a0: 20 65 78 61 63 74 20 44 61 74 65 54 69 6d 65 20   exact DateTime 
98b0: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 6f  format string to
98c0: 20 75 73 65 20 66 6f 72 20 61 6c 6c 20 66 6f 72   use for all for
98d0: 6d 61 74 74 69 6e 67 20 61 6e 64 20 70 61 72 73  matting and pars
98e0: 69 6e 67 20 6f 66 20 61 6c 6c 20 44 61 74 65 54  ing of all DateT
98f0: 69 6d 65 0d 0a 20 20 2f 2f 2f 20 76 61 6c 75 65  ime..  /// value
9900: 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65  s for this conne
9910: 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ction...  /// </
9920: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
9930: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
9940: 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >N</description>
9950: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
9960: 74 69 6f 6e 3e 6e 75 6c 6c 3c 2f 64 65 73 63 72  tion>null</descr
9970: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
9980: 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69  /item>..  /// <i
9990: 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  tem>..  /// <des
99a0: 63 72 69 70 74 69 6f 6e 3e 42 61 73 65 53 63 68  cription>BaseSch
99b0: 65 6d 61 4e 61 6d 65 3c 2f 64 65 73 63 72 69 70  emaName</descrip
99c0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
99d0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
99e0: 2f 20 53 6f 6d 65 20 62 61 73 65 20 64 61 74 61  / Some base data
99f0: 20 63 6c 61 73 73 65 73 20 69 6e 20 74 68 65 20   classes in the 
9a00: 66 72 61 6d 65 77 6f 72 6b 20 28 65 2e 67 2e 20  framework (e.g. 
9a10: 74 68 6f 73 65 20 74 68 61 74 20 62 75 69 6c 64  those that build
9a20: 20 53 51 4c 20 71 75 65 72 69 65 73 20 64 79 6e   SQL queries dyn
9a30: 61 6d 69 63 61 6c 6c 79 29 0d 0a 20 20 2f 2f 2f  amically)..  ///
9a40: 20 61 73 73 75 6d 65 20 74 68 61 74 20 61 6e 20   assume that an 
9a50: 41 44 4f 2e 4e 45 54 20 70 72 6f 76 69 64 65 72  ADO.NET provider
9a60: 20 63 61 6e 6e 6f 74 20 73 75 70 70 6f 72 74 20   cannot support 
9a70: 61 6e 20 61 6c 74 65 72 6e 61 74 65 20 63 61 74  an alternate cat
9a80: 61 6c 6f 67 20 28 69 2e 65 2e 20 64 61 74 61 62  alog (i.e. datab
9a90: 61 73 65 29 20 77 69 74 68 6f 75 74 20 73 75 70  ase) without sup
9aa0: 70 6f 72 74 69 6e 67 0d 0a 20 20 2f 2f 2f 20 61  porting..  /// a
9ab0: 6c 74 65 72 6e 61 74 65 20 73 63 68 65 6d 61 73  lternate schemas
9ac0: 20 61 73 20 77 65 6c 6c 3b 20 68 6f 77 65 76 65   as well; howeve
9ad0: 72 2c 20 53 51 4c 69 74 65 20 64 6f 65 73 20 6e  r, SQLite does n
9ae0: 6f 74 20 66 69 74 20 69 6e 74 6f 20 74 68 69 73  ot fit into this
9af0: 20 6d 6f 64 65 6c 2e 20 20 54 68 65 72 65 66 6f   model.  Therefo
9b00: 72 65 2c 20 74 68 69 73 20 76 61 6c 75 65 20 69  re, this value i
9b10: 73 20 75 73 65 64 0d 0a 20 20 2f 2f 2f 20 61 73  s used..  /// as
9b20: 20 61 20 70 6c 61 63 65 68 6f 6c 64 65 72 20 61   a placeholder a
9b30: 6e 64 20 72 65 6d 6f 76 65 64 20 70 72 69 6f 72  nd removed prior
9b40: 20 74 6f 20 70 72 65 70 61 72 69 6e 67 20 61 6e   to preparing an
9b50: 79 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73  y SQL statements
9b60: 20 74 68 61 74 20 6d 61 79 20 63 6f 6e 74 61 69   that may contai
9b70: 6e 20 69 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64  n it...  /// </d
9b80: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
9b90: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
9ba0: 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  N</description>.
9bb0: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
9bc0: 69 6f 6e 3e 73 71 6c 69 74 65 5f 64 65 66 61 75  ion>sqlite_defau
9bd0: 6c 74 5f 73 63 68 65 6d 61 3c 2f 64 65 73 63 72  lt_schema</descr
9be0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
9bf0: 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69  /item>..  /// <i
9c00: 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  tem>..  /// <des
9c10: 63 72 69 70 74 69 6f 6e 3e 42 69 6e 61 72 79 47  cription>BinaryG
9c20: 55 49 44 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  UID</description
9c30: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
9c40: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62  ption>..  /// <b
9c50: 3e 54 72 75 65 3c 2f 62 3e 20 2d 20 53 74 6f 72  >True</b> - Stor
9c60: 65 20 47 55 49 44 20 63 6f 6c 75 6d 6e 73 20 69  e GUID columns i
9c70: 6e 20 62 69 6e 61 72 79 20 66 6f 72 6d 0d 0a 20  n binary form.. 
9c80: 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20 2f 2f   /// <br/>..  //
9c90: 2f 20 3c 62 3e 46 61 6c 73 65 3c 2f 62 3e 20 2d  / <b>False</b> -
9ca0: 20 53 74 6f 72 65 20 47 55 49 44 20 63 6f 6c 75   Store GUID colu
9cb0: 6d 6e 73 20 61 73 20 74 65 78 74 0d 0a 20 20 2f  mns as text..  /
9cc0: 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  // </description
9cd0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
9ce0: 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72 69 70  ption>N</descrip
9cf0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
9d00: 73 63 72 69 70 74 69 6f 6e 3e 54 72 75 65 3c 2f  scription>True</
9d10: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
9d20: 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f  /// </item>..  /
9d30: 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  // <item>..  ///
9d40: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 43 61   <description>Ca
9d50: 63 68 65 20 53 69 7a 65 3c 2f 64 65 73 63 72 69  che Size</descri
9d60: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64  ption>..  /// <d
9d70: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
9d80: 2f 2f 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  // If the argume
9d90: 6e 74 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65  nt N is positive
9da0: 20 74 68 65 6e 20 74 68 65 20 73 75 67 67 65 73   then the sugges
9db0: 74 65 64 20 63 61 63 68 65 20 73 69 7a 65 20 69  ted cache size i
9dc0: 73 20 73 65 74 20 74 6f 20 4e 2e 0d 0a 20 20 2f  s set to N...  /
9dd0: 2f 2f 20 49 66 20 74 68 65 20 61 72 67 75 6d 65  // If the argume
9de0: 6e 74 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  nt N is negative
9df0: 2c 20 74 68 65 6e 20 74 68 65 20 6e 75 6d 62 65  , then the numbe
9e00: 72 20 6f 66 20 63 61 63 68 65 20 70 61 67 65 73  r of cache pages
9e10: 20 69 73 20 61 64 6a 75 73 74 65 64 0d 0a 20 20   is adjusted..  
9e20: 2f 2f 2f 20 74 6f 20 75 73 65 20 61 70 70 72 6f  /// to use appro
9e30: 78 69 6d 61 74 65 6c 79 20 61 62 73 28 4e 2a 34  ximately abs(N*4
9e40: 30 39 36 29 20 62 79 74 65 73 20 6f 66 20 6d 65  096) bytes of me
9e50: 6d 6f 72 79 2e 20 42 61 63 6b 77 61 72 64 73 20  mory. Backwards 
9e60: 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 0d 0a 20  compatibility.. 
9e70: 20 2f 2f 2f 20 6e 6f 74 65 3a 20 54 68 65 20 62   /// note: The b
9e80: 65 68 61 76 69 6f 72 20 6f 66 20 63 61 63 68 65  ehavior of cache
9e90: 5f 73 69 7a 65 20 77 69 74 68 20 61 20 6e 65 67  _size with a neg
9ea0: 61 74 69 76 65 20 4e 20 77 61 73 20 64 69 66 66  ative N was diff
9eb0: 65 72 65 6e 74 20 69 6e 20 53 51 4c 69 74 65 0d  erent in SQLite.
9ec0: 0a 20 20 2f 2f 2f 20 76 65 72 73 69 6f 6e 73 20  .  /// versions 
9ed0: 70 72 69 6f 72 20 74 6f 20 33 2e 37 2e 31 30 2e  prior to 3.7.10.
9ee0: 20 49 6e 20 76 65 72 73 69 6f 6e 20 33 2e 37 2e   In version 3.7.
9ef0: 39 20 61 6e 64 20 65 61 72 6c 69 65 72 2c 20 74  9 and earlier, t
9f00: 68 65 20 6e 75 6d 62 65 72 20 6f 66 0d 0a 20 20  he number of..  
9f10: 2f 2f 2f 20 70 61 67 65 73 20 69 6e 20 74 68 65  /// pages in the
9f20: 20 63 61 63 68 65 20 77 61 73 20 73 65 74 20 74   cache was set t
9f30: 6f 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  o the absolute v
9f40: 61 6c 75 65 20 6f 66 20 4e 2e 0d 0a 20 20 2f 2f  alue of N...  //
9f50: 2f 20 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  / </description>
9f60: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
9f70: 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74  tion>N</descript
9f80: 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  ion>..  /// <des
9f90: 63 72 69 70 74 69 6f 6e 3e 2d 32 30 30 30 3c 2f  cription>-2000</
9fa0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
9fb0: 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f  /// </item>..  /
9fc0: 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  // <item>..  ///
9fd0: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 53 79   <description>Sy
9fe0: 6e 63 68 72 6f 6e 6f 75 73 3c 2f 64 65 73 63 72  nchronous</descr
9ff0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
a000: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
a010: 2f 2f 2f 20 3c 62 3e 4e 6f 72 6d 61 6c 3c 2f 62  /// <b>Normal</b
a020: 3e 20 2d 20 4e 6f 72 6d 61 6c 20 66 69 6c 65 20  > - Normal file 
a030: 66 6c 75 73 68 69 6e 67 20 62 65 68 61 76 69 6f  flushing behavio
a040: 72 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a  r..  /// <br/>..
a050: 20 20 2f 2f 2f 20 3c 62 3e 46 75 6c 6c 3c 2f 62    /// <b>Full</b
a060: 3e 20 2d 20 46 75 6c 6c 20 66 6c 75 73 68 69 6e  > - Full flushin
a070: 67 20 61 66 74 65 72 20 61 6c 6c 20 77 72 69 74  g after all writ
a080: 65 73 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d  es..  /// <br/>.
a090: 0a 20 20 2f 2f 2f 20 3c 62 3e 4f 66 66 3c 2f 62  .  /// <b>Off</b
a0a0: 3e 20 2d 20 55 6e 64 65 72 6c 79 69 6e 67 20 4f  > - Underlying O
a0b0: 53 20 66 6c 75 73 68 65 73 20 49 2f 4f 27 73 0d  S flushes I/O's.
a0c0: 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70  .  /// </descrip
a0d0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
a0e0: 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73  scription>N</des
a0f0: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
a100: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 46 75   <description>Fu
a110: 6c 6c 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  ll</description>
a120: 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d  ..  /// </item>.
a130: 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20  .  /// <item>.. 
a140: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
a150: 6e 3e 50 61 67 65 20 53 69 7a 65 3c 2f 64 65 73  n>Page Size</des
a160: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
a170: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 7b 73   <description>{s
a180: 69 7a 65 20 69 6e 20 62 79 74 65 73 7d 3c 2f 64  ize in bytes}</d
a190: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
a1a0: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
a1b0: 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  N</description>.
a1c0: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
a1d0: 69 6f 6e 3e 34 30 39 36 3c 2f 64 65 73 63 72 69  ion>4096</descri
a1e0: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ption>..  /// </
a1f0: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74  item>..  /// <it
a200: 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  em>..  /// <desc
a210: 72 69 70 74 69 6f 6e 3e 50 61 73 73 77 6f 72 64  ription>Password
a220: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
a230: 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69    /// <descripti
a240: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 7b 70 61 73 73  on>..  /// {pass
a250: 77 6f 72 64 7d 20 2d 20 55 73 69 6e 67 20 74 68  word} - Using th
a260: 69 73 20 70 61 72 61 6d 65 74 65 72 20 72 65 71  is parameter req
a270: 75 69 72 65 73 20 74 68 61 74 20 74 68 65 20 6c  uires that the l
a280: 65 67 61 63 79 20 43 72 79 70 74 6f 41 50 49 20  egacy CryptoAPI 
a290: 62 61 73 65 64 0d 0a 20 20 2f 2f 2f 20 63 6f 64  based..  /// cod
a2a0: 65 63 20 28 6f 72 20 74 68 65 20 53 51 4c 69 74  ec (or the SQLit
a2b0: 65 20 45 6e 63 72 79 70 74 69 6f 6e 20 45 78 74  e Encryption Ext
a2c0: 65 6e 73 69 6f 6e 29 20 62 65 20 65 6e 61 62 6c  ension) be enabl
a2d0: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
a2e0: 6d 65 20 66 6f 72 0d 0a 20 20 2f 2f 2f 20 62 6f  me for..  /// bo
a2f0: 74 68 20 74 68 65 20 6e 61 74 69 76 65 20 69 6e  th the native in
a300: 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 61  terop assembly a
a310: 6e 64 20 74 68 65 20 63 6f 72 65 20 6d 61 6e 61  nd the core mana
a320: 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 3b 20  ged assemblies; 
a330: 6f 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 2f 2f  otherwise,..  //
a340: 2f 20 75 73 69 6e 67 20 74 68 69 73 20 70 61 72  / using this par
a350: 61 6d 65 74 65 72 20 6d 61 79 20 72 65 73 75 6c  ameter may resul
a360: 74 20 69 6e 20 61 6e 20 65 78 63 65 70 74 69 6f  t in an exceptio
a370: 6e 20 62 65 69 6e 67 20 74 68 72 6f 77 6e 20 77  n being thrown w
a380: 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a  hen attempting..
a390: 20 20 2f 2f 2f 20 74 6f 20 6f 70 65 6e 20 74 68    /// to open th
a3a0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
a3b0: 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74 69   /// </descripti
a3c0: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
a3d0: 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72  ription>N</descr
a3e0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
a3f0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 3c 2f 64 65  description></de
a400: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
a410: 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  / </item>..  ///
a420: 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c   <item>..  /// <
a430: 64 65 73 63 72 69 70 74 69 6f 6e 3e 48 65 78 50  description>HexP
a440: 61 73 73 77 6f 72 64 3c 2f 64 65 73 63 72 69 70  assword</descrip
a450: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
a460: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
a470: 2f 20 7b 68 65 78 50 61 73 73 77 6f 72 64 7d 20  / {hexPassword} 
a480: 2d 20 4d 75 73 74 20 63 6f 6e 74 61 69 6e 20 61  - Must contain a
a490: 20 73 65 71 75 65 6e 63 65 20 6f 66 20 7a 65 72   sequence of zer
a4a0: 6f 20 6f 72 20 6d 6f 72 65 20 68 65 78 61 64 65  o or more hexade
a4b0: 63 69 6d 61 6c 20 65 6e 63 6f 64 65 64 0d 0a 20  cimal encoded.. 
a4c0: 20 2f 2f 2f 20 62 79 74 65 20 76 61 6c 75 65 73   /// byte values
a4d0: 20 77 69 74 68 6f 75 74 20 61 20 6c 65 61 64 69   without a leadi
a4e0: 6e 67 20 22 30 78 22 20 70 72 65 66 69 78 2e 20  ng "0x" prefix. 
a4f0: 20 55 73 69 6e 67 20 74 68 69 73 20 70 61 72 61   Using this para
a500: 6d 65 74 65 72 20 72 65 71 75 69 72 65 73 0d 0a  meter requires..
a510: 20 20 2f 2f 2f 20 74 68 61 74 20 74 68 65 20 6c    /// that the l
a520: 65 67 61 63 79 20 43 72 79 70 74 6f 41 50 49 20  egacy CryptoAPI 
a530: 62 61 73 65 64 20 63 6f 64 65 63 20 28 6f 72 20  based codec (or 
a540: 74 68 65 20 53 51 4c 69 74 65 20 45 6e 63 72 79  the SQLite Encry
a550: 70 74 69 6f 6e 20 45 78 74 65 6e 73 69 6f 6e 29  ption Extension)
a560: 0d 0a 20 20 2f 2f 2f 20 62 65 20 65 6e 61 62 6c  ..  /// be enabl
a570: 65 64 20 61 74 20 63 6f 6d 70 69 6c 65 2d 74 69  ed at compile-ti
a580: 6d 65 20 66 6f 72 20 62 6f 74 68 20 74 68 65 20  me for both the 
a590: 6e 61 74 69 76 65 20 69 6e 74 65 72 6f 70 20 61  native interop a
a5a0: 73 73 65 6d 62 6c 79 20 61 6e 64 20 74 68 65 0d  ssembly and the.
a5b0: 0a 20 20 2f 2f 2f 20 63 6f 72 65 20 6d 61 6e 61  .  /// core mana
a5c0: 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73 3b 20  ged assemblies; 
a5d0: 6f 74 68 65 72 77 69 73 65 2c 20 75 73 69 6e 67  otherwise, using
a5e0: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
a5f0: 6d 61 79 20 72 65 73 75 6c 74 20 69 6e 20 61 6e  may result in an
a600: 0d 0a 20 20 2f 2f 2f 20 65 78 63 65 70 74 69 6f  ..  /// exceptio
a610: 6e 20 62 65 69 6e 67 20 74 68 72 6f 77 6e 20 77  n being thrown w
a620: 68 65 6e 20 61 74 74 65 6d 70 74 69 6e 67 20 74  hen attempting t
a630: 6f 20 6f 70 65 6e 20 74 68 65 20 63 6f 6e 6e 65  o open the conne
a640: 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ction...  /// </
a650: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
a660: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
a670: 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >N</description>
a680: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
a690: 74 69 6f 6e 3e 3c 2f 64 65 73 63 72 69 70 74 69  tion></descripti
a6a0: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65  on>..  /// </ite
a6b0: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  m>..  /// <item>
a6c0: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
a6d0: 74 69 6f 6e 3e 45 6e 6c 69 73 74 3c 2f 64 65 73  tion>Enlist</des
a6e0: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
a6f0: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a   <description>..
a700: 20 20 2f 2f 2f 20 3c 62 3e 59 3c 2f 62 3e 20 2d    /// <b>Y</b> -
a710: 20 41 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 65   Automatically e
a720: 6e 6c 69 73 74 20 69 6e 20 64 69 73 74 72 69 62  nlist in distrib
a730: 75 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e  uted transaction
a740: 73 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a  s..  /// <br/>..
a750: 20 20 2f 2f 2f 20 3c 62 3e 4e 3c 2f 62 3e 20 2d    /// <b>N</b> -
a760: 20 4e 6f 20 61 75 74 6f 6d 61 74 69 63 20 65 6e   No automatic en
a770: 6c 69 73 74 6d 65 6e 74 0d 0a 20 20 2f 2f 2f 20  listment..  /// 
a780: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
a790: 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69    /// <descripti
a7a0: 6f 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f  on>N</descriptio
a7b0: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72  n>..  /// <descr
a7c0: 69 70 74 69 6f 6e 3e 59 3c 2f 64 65 73 63 72 69  iption>Y</descri
a7d0: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ption>..  /// </
a7e0: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74  item>..  /// <it
a7f0: 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  em>..  /// <desc
a800: 72 69 70 74 69 6f 6e 3e 50 6f 6f 6c 69 6e 67 3c  ription>Pooling<
a810: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
a820: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
a830: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 54 72 75  n>..  /// <b>Tru
a840: 65 3c 2f 62 3e 20 2d 20 55 73 65 20 63 6f 6e 6e  e</b> - Use conn
a850: 65 63 74 69 6f 6e 20 70 6f 6f 6c 69 6e 67 2e 3c  ection pooling.<
a860: 62 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 46  br/>..  /// <b>F
a870: 61 6c 73 65 3c 2f 62 3e 20 2d 20 44 6f 20 6e 6f  alse</b> - Do no
a880: 74 20 75 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  t use connection
a890: 20 70 6f 6f 6c 69 6e 67 2e 3c 62 72 2f 3e 3c 62   pooling.<br/><b
a8a0: 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 57 41  r/>..  /// <b>WA
a8b0: 52 4e 49 4e 47 3a 3c 2f 62 3e 20 57 68 65 6e 20  RNING:</b> When 
a8c0: 75 73 69 6e 67 20 74 68 65 20 64 65 66 61 75 6c  using the defaul
a8d0: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f  t connection poo
a8e0: 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e  l implementation
a8f0: 2c 0d 0a 20 20 2f 2f 2f 20 73 65 74 74 69 6e 67  ,..  /// setting
a900: 20 74 68 69 73 20 70 72 6f 70 65 72 74 79 20 74   this property t
a910: 6f 20 54 72 75 65 20 73 68 6f 75 6c 64 20 62 65  o True should be
a920: 20 61 76 6f 69 64 65 64 20 62 79 20 61 70 70 6c   avoided by appl
a930: 69 63 61 74 69 6f 6e 73 20 74 68 61 74 20 6d 61  ications that ma
a940: 6b 65 0d 0a 20 20 2f 2f 2f 20 75 73 65 20 6f 66  ke..  /// use of
a950: 20 43 4f 4d 20 28 65 69 74 68 65 72 20 64 69 72   COM (either dir
a960: 65 63 74 6c 79 20 6f 72 20 69 6e 64 69 72 65 63  ectly or indirec
a970: 74 6c 79 29 20 64 75 65 20 74 6f 20 70 6f 73 73  tly) due to poss
a980: 69 62 6c 65 20 64 65 61 64 6c 6f 63 6b 73 20 74  ible deadlocks t
a990: 68 61 74 0d 0a 20 20 2f 2f 2f 20 63 61 6e 20 6f  hat..  /// can o
a9a0: 63 63 75 72 20 64 75 72 69 6e 67 20 74 68 65 20  ccur during the 
a9b0: 66 69 6e 61 6c 69 7a 61 74 69 6f 6e 20 6f 66 20  finalization of 
a9c0: 73 6f 6d 65 20 43 4f 4d 20 6f 62 6a 65 63 74 73  some COM objects
a9d0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72  ...  /// </descr
a9e0: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
a9f0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64  description>N</d
aa00: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
aa10: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
aa20: 46 61 6c 73 65 3c 2f 64 65 73 63 72 69 70 74 69  False</descripti
aa30: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65  on>..  /// </ite
aa40: 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e  m>..  /// <item>
aa50: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
aa60: 74 69 6f 6e 3e 46 61 69 6c 49 66 4d 69 73 73 69  tion>FailIfMissi
aa70: 6e 67 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  ng</description>
aa80: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
aa90: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e  tion>..  /// <b>
aaa0: 54 72 75 65 3c 2f 62 3e 20 2d 20 44 6f 6e 27 74  True</b> - Don't
aab0: 20 63 72 65 61 74 65 20 74 68 65 20 64 61 74 61   create the data
aac0: 62 61 73 65 20 69 66 20 69 74 20 64 6f 65 73 20  base if it does 
aad0: 6e 6f 74 20 65 78 69 73 74 2c 20 74 68 72 6f 77  not exist, throw
aae0: 20 61 6e 20 65 72 72 6f 72 20 69 6e 73 74 65 61   an error instea
aaf0: 64 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a  d..  /// <br/>..
ab00: 20 20 2f 2f 2f 20 3c 62 3e 46 61 6c 73 65 3c 2f    /// <b>False</
ab10: 62 3e 20 2d 20 41 75 74 6f 6d 61 74 69 63 61 6c  b> - Automatical
ab20: 6c 79 20 63 72 65 61 74 65 20 74 68 65 20 64 61  ly create the da
ab30: 74 61 62 61 73 65 20 69 66 20 69 74 20 64 6f 65  tabase if it doe
ab40: 73 20 6e 6f 74 20 65 78 69 73 74 0d 0a 20 20 2f  s not exist..  /
ab50: 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  // </description
ab60: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
ab70: 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72 69 70  ption>N</descrip
ab80: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
ab90: 73 63 72 69 70 74 69 6f 6e 3e 46 61 6c 73 65 3c  scription>False<
aba0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
abb0: 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20   /// </item>..  
abc0: 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f  /// <item>..  //
abd0: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4d  / <description>M
abe0: 61 78 20 50 61 67 65 20 43 6f 75 6e 74 3c 2f 64  ax Page Count</d
abf0: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
ac00: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
ac10: 7b 73 69 7a 65 20 69 6e 20 70 61 67 65 73 7d 20  {size in pages} 
ac20: 2d 20 4c 69 6d 69 74 73 20 74 68 65 20 6d 61 78  - Limits the max
ac30: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70  imum number of p
ac40: 61 67 65 73 20 28 6c 69 6d 69 74 73 20 74 68 65  ages (limits the
ac50: 20 73 69 7a 65 29 20 6f 66 20 74 68 65 20 64 61   size) of the da
ac60: 74 61 62 61 73 65 3c 2f 64 65 73 63 72 69 70 74  tabase</descript
ac70: 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73  ion>..  /// <des
ac80: 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63  cription>N</desc
ac90: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
aca0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 30 3c 2f  <description>0</
acb0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
acc0: 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f  /// </item>..  /
acd0: 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  // <item>..  ///
ace0: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4c 65   <description>Le
acf0: 67 61 63 79 20 46 6f 72 6d 61 74 3c 2f 64 65 73  gacy Format</des
ad00: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
ad10: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a   <description>..
ad20: 20 20 2f 2f 2f 20 3c 62 3e 54 72 75 65 3c 2f 62    /// <b>True</b
ad30: 3e 20 2d 20 55 73 65 20 74 68 65 20 6d 6f 72 65  > - Use the more
ad40: 20 63 6f 6d 70 61 74 69 62 6c 65 20 6c 65 67 61   compatible lega
ad50: 63 79 20 33 2e 78 20 64 61 74 61 62 61 73 65 20  cy 3.x database 
ad60: 66 6f 72 6d 61 74 0d 0a 20 20 2f 2f 2f 20 3c 62  format..  /// <b
ad70: 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 46 61  r/>..  /// <b>Fa
ad80: 6c 73 65 3c 2f 62 3e 20 2d 20 55 73 65 20 74 68  lse</b> - Use th
ad90: 65 20 6e 65 77 65 72 20 33 2e 33 78 20 64 61 74  e newer 3.3x dat
ada0: 61 62 61 73 65 20 66 6f 72 6d 61 74 20 77 68 69  abase format whi
adb0: 63 68 20 63 6f 6d 70 72 65 73 73 65 73 20 6e 75  ch compresses nu
adc0: 6d 62 65 72 73 20 6d 6f 72 65 20 65 66 66 65 63  mbers more effec
add0: 74 69 76 65 6c 79 0d 0a 20 20 2f 2f 2f 20 3c 2f  tively..  /// </
ade0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
adf0: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
ae00: 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >N</description>
ae10: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
ae20: 74 69 6f 6e 3e 46 61 6c 73 65 3c 2f 64 65 73 63  tion>False</desc
ae30: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
ae40: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  </item>..  /// <
ae50: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  item>..  /// <de
ae60: 73 63 72 69 70 74 69 6f 6e 3e 44 65 66 61 75 6c  scription>Defaul
ae70: 74 20 54 69 6d 65 6f 75 74 3c 2f 64 65 73 63 72  t Timeout</descr
ae80: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
ae90: 64 65 73 63 72 69 70 74 69 6f 6e 3e 7b 74 69 6d  description>{tim
aea0: 65 20 69 6e 20 73 65 63 6f 6e 64 73 7d 3c 62 72  e in seconds}<br
aeb0: 2f 3e 54 68 65 20 64 65 66 61 75 6c 74 20 63 6f  />The default co
aec0: 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 3c 2f 64  mmand timeout</d
aed0: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
aee0: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
aef0: 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  N</description>.
af00: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
af10: 69 6f 6e 3e 33 30 3c 2f 64 65 73 63 72 69 70 74  ion>30</descript
af20: 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74  ion>..  /// </it
af30: 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d  em>..  /// <item
af40: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
af50: 70 74 69 6f 6e 3e 42 75 73 79 54 69 6d 65 6f 75  ption>BusyTimeou
af60: 74 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  t</description>.
af70: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
af80: 69 6f 6e 3e 7b 74 69 6d 65 20 69 6e 20 6d 69 6c  ion>{time in mil
af90: 6c 69 73 65 63 6f 6e 64 73 7d 3c 62 72 2f 3e 53  liseconds}<br/>S
afa0: 65 74 73 20 74 68 65 20 62 75 73 79 20 74 69 6d  ets the busy tim
afb0: 65 6f 75 74 20 66 6f 72 20 74 68 65 20 63 6f 72  eout for the cor
afc0: 65 20 6c 69 62 72 61 72 79 2e 3c 2f 64 65 73 63  e library.</desc
afd0: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
afe0: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f  <description>N</
aff0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
b000: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
b010: 3e 30 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >0</description>
b020: 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d  ..  /// </item>.
b030: 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20  .  /// <item>.. 
b040: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
b050: 6e 3e 57 61 69 74 54 69 6d 65 6f 75 74 3c 2f 64  n>WaitTimeout</d
b060: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
b070: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
b080: 7b 74 69 6d 65 20 69 6e 20 6d 69 6c 6c 69 73 65  {time in millise
b090: 63 6f 6e 64 73 7d 3c 62 72 2f 3e 0d 0a 20 20 2f  conds}<br/>..  /
b0a0: 2f 2f 20 3c 62 3e 45 58 50 45 52 49 4d 45 4e 54  // <b>EXPERIMENT
b0b0: 41 4c 3c 2f 62 3e 20 2d 2d 20 54 68 65 20 77 61  AL</b> -- The wa
b0c0: 69 74 20 74 69 6d 65 6f 75 74 20 74 6f 20 75 73  it timeout to us
b0d0: 65 20 77 69 74 68 0d 0a 20 20 2f 2f 2f 20 3c 73  e with..  /// <s
b0e0: 65 65 20 63 72 65 66 3d 22 57 61 69 74 46 6f 72  ee cref="WaitFor
b0f0: 45 6e 6c 69 73 74 6d 65 6e 74 52 65 73 65 74 22  EnlistmentReset"
b100: 20 2f 3e 20 6d 65 74 68 6f 64 2e 20 20 54 68 69   /> method.  Thi
b110: 73 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77  s is only used w
b120: 68 65 6e 0d 0a 20 20 2f 2f 2f 20 77 61 69 74 69  hen..  /// waiti
b130: 6e 67 20 66 6f 72 20 74 68 65 20 65 6e 6c 69 73  ng for the enlis
b140: 74 6d 65 6e 74 20 74 6f 20 62 65 20 72 65 73 65  tment to be rese
b150: 74 20 70 72 69 6f 72 20 74 6f 20 65 6e 6c 69 73  t prior to enlis
b160: 74 69 6e 67 20 69 6e 20 61 20 74 72 61 6e 73 61  ting in a transa
b170: 63 74 69 6f 6e 2c 0d 0a 20 20 2f 2f 2f 20 61 6e  ction,..  /// an
b180: 64 20 74 68 65 6e 20 6f 6e 6c 79 20 77 68 65 6e  d then only when
b190: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
b1a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67   connection flag
b1b0: 20 69 73 20 73 65 74 2e 3c 2f 64 65 73 63 72 69   is set.</descri
b1c0: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64  ption>..  /// <d
b1d0: 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65  escription>N</de
b1e0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
b1f0: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 33  / <description>3
b200: 30 30 30 30 3c 2f 64 65 73 63 72 69 70 74 69 6f  0000</descriptio
b210: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d  n>..  /// </item
b220: 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d  >..  /// <item>.
b230: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
b240: 69 6f 6e 3e 4a 6f 75 72 6e 61 6c 20 4d 6f 64 65  ion>Journal Mode
b250: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
b260: 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69    /// <descripti
b270: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 44 65  on>..  /// <b>De
b280: 6c 65 74 65 3c 2f 62 3e 20 2d 20 44 65 6c 65 74  lete</b> - Delet
b290: 65 20 74 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69  e the journal fi
b2a0: 6c 65 20 61 66 74 65 72 20 61 20 63 6f 6d 6d 69  le after a commi
b2b0: 74 2e 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d  t...  /// <br/>.
b2c0: 0a 20 20 2f 2f 2f 20 3c 62 3e 50 65 72 73 69 73  .  /// <b>Persis
b2d0: 74 3c 2f 62 3e 20 2d 20 5a 65 72 6f 20 6f 75 74  t</b> - Zero out
b2e0: 20 61 6e 64 20 6c 65 61 76 65 20 74 68 65 20 6a   and leave the j
b2f0: 6f 75 72 6e 61 6c 20 66 69 6c 65 20 6f 6e 20 64  ournal file on d
b300: 69 73 6b 20 61 66 74 65 72 20 61 0d 0a 20 20 2f  isk after a..  /
b310: 2f 2f 20 63 6f 6d 6d 69 74 2e 0d 0a 20 20 2f 2f  // commit...  //
b320: 2f 20 3c 62 72 2f 3e 0d 0a 20 20 2f 2f 2f 20 3c  / <br/>..  /// <
b330: 62 3e 4f 66 66 3c 2f 62 3e 20 2d 20 44 69 73 61  b>Off</b> - Disa
b340: 62 6c 65 20 74 68 65 20 72 6f 6c 6c 62 61 63 6b  ble the rollback
b350: 20 6a 6f 75 72 6e 61 6c 20 65 6e 74 69 72 65 6c   journal entirel
b360: 79 2e 20 20 54 68 69 73 20 73 61 76 65 73 20 64  y.  This saves d
b370: 69 73 6b 20 49 2f 4f 0d 0a 20 20 2f 2f 2f 20 62  isk I/O..  /// b
b380: 75 74 20 61 74 20 74 68 65 20 65 78 70 65 6e 73  ut at the expens
b390: 65 20 6f 66 20 64 61 74 61 62 61 73 65 20 73 61  e of database sa
b3a0: 66 65 74 79 20 61 6e 64 20 69 6e 74 65 67 72 69  fety and integri
b3b0: 74 79 2e 20 20 49 66 20 74 68 65 20 61 70 70 6c  ty.  If the appl
b3c0: 69 63 61 74 69 6f 6e 0d 0a 20 20 2f 2f 2f 20 75  ication..  /// u
b3d0: 73 69 6e 67 20 53 51 4c 69 74 65 20 63 72 61 73  sing SQLite cras
b3e0: 68 65 73 20 69 6e 20 74 68 65 20 6d 69 64 64 6c  hes in the middl
b3f0: 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63 74 69  e of a transacti
b400: 6f 6e 20 77 68 65 6e 20 74 68 69 73 20 6a 6f 75  on when this jou
b410: 72 6e 61 6c 69 6e 67 0d 0a 20 20 2f 2f 2f 20 6d  rnaling..  /// m
b420: 6f 64 65 20 69 73 20 73 65 74 2c 20 74 68 65 6e  ode is set, then
b430: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
b440: 6c 65 20 77 69 6c 6c 20 76 65 72 79 20 6c 69 6b  le will very lik
b450: 65 6c 79 20 67 6f 20 63 6f 72 72 75 70 74 2e 0d  ely go corrupt..
b460: 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20  .  /// <br/>..  
b470: 2f 2f 2f 20 3c 62 3e 54 72 75 6e 63 61 74 65 3c  /// <b>Truncate<
b480: 2f 62 3e 20 2d 20 54 72 75 6e 63 61 74 65 20 74  /b> - Truncate t
b490: 68 65 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 20  he journal file 
b4a0: 74 6f 20 7a 65 72 6f 2d 6c 65 6e 67 74 68 20 69  to zero-length i
b4b0: 6e 73 74 65 61 64 20 6f 66 0d 0a 20 20 2f 2f 2f  nstead of..  ///
b4c0: 20 64 65 6c 65 74 69 6e 67 20 69 74 2e 0d 0a 20   deleting it... 
b4d0: 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20 20 2f 2f   /// <br/>..  //
b4e0: 2f 20 3c 62 3e 4d 65 6d 6f 72 79 3c 2f 62 3e 20  / <b>Memory</b> 
b4f0: 2d 20 53 74 6f 72 65 20 74 68 65 20 6a 6f 75 72  - Store the jour
b500: 6e 61 6c 20 69 6e 20 76 6f 6c 61 74 69 6c 65 20  nal in volatile 
b510: 52 41 4d 2e 20 20 54 68 69 73 20 73 61 76 65 73  RAM.  This saves
b520: 20 64 69 73 6b 20 49 2f 4f 0d 0a 20 20 2f 2f 2f   disk I/O..  ///
b530: 20 62 75 74 20 61 74 20 74 68 65 20 65 78 70 65   but at the expe
b540: 6e 73 65 20 6f 66 20 64 61 74 61 62 61 73 65 20  nse of database 
b550: 73 61 66 65 74 79 20 61 6e 64 20 69 6e 74 65 67  safety and integ
b560: 72 69 74 79 2e 20 20 49 66 20 74 68 65 20 61 70  rity.  If the ap
b570: 70 6c 69 63 61 74 69 6f 6e 0d 0a 20 20 2f 2f 2f  plication..  ///
b580: 20 75 73 69 6e 67 20 53 51 4c 69 74 65 20 63 72   using SQLite cr
b590: 61 73 68 65 73 20 69 6e 20 74 68 65 20 6d 69 64  ashes in the mid
b5a0: 64 6c 65 20 6f 66 20 61 20 74 72 61 6e 73 61 63  dle of a transac
b5b0: 74 69 6f 6e 20 77 68 65 6e 20 74 68 69 73 20 6a  tion when this j
b5c0: 6f 75 72 6e 61 6c 69 6e 67 0d 0a 20 20 2f 2f 2f  ournaling..  ///
b5d0: 20 6d 6f 64 65 20 69 73 20 73 65 74 2c 20 74 68   mode is set, th
b5e0: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
b5f0: 66 69 6c 65 20 77 69 6c 6c 20 76 65 72 79 20 6c  file will very l
b600: 69 6b 65 6c 79 20 67 6f 20 63 6f 72 72 75 70 74  ikely go corrupt
b610: 2e 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a  ...  /// <br/>..
b620: 20 20 2f 2f 2f 20 3c 62 3e 57 61 6c 3c 2f 62 3e    /// <b>Wal</b>
b630: 20 2d 20 55 73 65 20 61 20 77 72 69 74 65 2d 61   - Use a write-a
b640: 68 65 61 64 20 6c 6f 67 20 69 6e 73 74 65 61 64  head log instead
b650: 20 6f 66 20 61 20 72 6f 6c 6c 62 61 63 6b 20 6a   of a rollback j
b660: 6f 75 72 6e 61 6c 2e 0d 0a 20 20 2f 2f 2f 20 3c  ournal...  /// <
b670: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
b680: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
b690: 6e 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  n>N</description
b6a0: 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  >..  /// <descri
b6b0: 70 74 69 6f 6e 3e 44 65 6c 65 74 65 3c 2f 64 65  ption>Delete</de
b6c0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
b6d0: 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f  / </item>..  ///
b6e0: 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c   <item>..  /// <
b6f0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 52 65 61 64  description>Read
b700: 20 4f 6e 6c 79 3c 2f 64 65 73 63 72 69 70 74 69   Only</descripti
b710: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
b720: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
b730: 3c 62 3e 54 72 75 65 3c 2f 62 3e 20 2d 20 4f 70  <b>True</b> - Op
b740: 65 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  en the database 
b750: 66 6f 72 20 72 65 61 64 20 6f 6e 6c 79 20 61 63  for read only ac
b760: 63 65 73 73 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f  cess..  /// <br/
b770: 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 46 61 6c 73  >..  /// <b>Fals
b780: 65 3c 2f 62 3e 20 2d 20 4f 70 65 6e 20 74 68 65  e</b> - Open the
b790: 20 64 61 74 61 62 61 73 65 20 66 6f 72 20 6e 6f   database for no
b7a0: 72 6d 61 6c 20 72 65 61 64 2f 77 72 69 74 65 20  rmal read/write 
b7b0: 61 63 63 65 73 73 0d 0a 20 20 2f 2f 2f 20 3c 2f  access..  /// </
b7c0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
b7d0: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
b7e0: 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >N</description>
b7f0: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
b800: 74 69 6f 6e 3e 46 61 6c 73 65 3c 2f 64 65 73 63  tion>False</desc
b810: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
b820: 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c  </item>..  /// <
b830: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  item>..  /// <de
b840: 73 63 72 69 70 74 69 6f 6e 3e 4d 61 78 20 50 6f  scription>Max Po
b850: 6f 6c 20 53 69 7a 65 3c 2f 64 65 73 63 72 69 70  ol Size</descrip
b860: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
b870: 73 63 72 69 70 74 69 6f 6e 3e 54 68 65 20 6d 61  scription>The ma
b880: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
b890: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 66 6f 72 20  connections for 
b8a0: 74 68 65 20 67 69 76 65 6e 20 63 6f 6e 6e 65 63  the given connec
b8b0: 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 68 61 74  tion string that
b8c0: 20 63 61 6e 20 62 65 20 69 6e 20 74 68 65 20 63   can be in the c
b8d0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 3c 2f  onnection pool</
b8e0: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
b8f0: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
b900: 3e 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  >N</description>
b910: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
b920: 74 69 6f 6e 3e 31 30 30 3c 2f 64 65 73 63 72 69  tion>100</descri
b930: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ption>..  /// </
b940: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74  item>..  /// <it
b950: 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  em>..  /// <desc
b960: 72 69 70 74 69 6f 6e 3e 44 65 66 61 75 6c 74 20  ription>Default 
b970: 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 3c 2f  IsolationLevel</
b980: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
b990: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
b9a0: 3e 54 68 65 20 64 65 66 61 75 6c 74 20 74 72 61  >The default tra
b9b0: 6e 73 61 63 69 74 6f 6e 20 69 73 6f 6c 61 74 69  nsaciton isolati
b9c0: 6f 6e 20 6c 65 76 65 6c 3c 2f 64 65 73 63 72 69  on level</descri
b9d0: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64  ption>..  /// <d
b9e0: 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65  escription>N</de
b9f0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
ba00: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 53  / <description>S
ba10: 65 72 69 61 6c 69 7a 61 62 6c 65 3c 2f 64 65 73  erializable</des
ba20: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
ba30: 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20   </item>..  /// 
ba40: 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64  <item>..  /// <d
ba50: 65 73 63 72 69 70 74 69 6f 6e 3e 46 6f 72 65 69  escription>Forei
ba60: 67 6e 20 4b 65 79 73 3c 2f 64 65 73 63 72 69 70  gn Keys</descrip
ba70: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
ba80: 73 63 72 69 70 74 69 6f 6e 3e 45 6e 61 62 6c 65  scription>Enable
ba90: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
baa0: 73 74 72 61 69 6e 74 73 3c 2f 64 65 73 63 72 69  straints</descri
bab0: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64  ption>..  /// <d
bac0: 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65  escription>N</de
bad0: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
bae0: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 46  / <description>F
baf0: 61 6c 73 65 3c 2f 64 65 73 63 72 69 70 74 69 6f  alse</descriptio
bb00: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d  n>..  /// </item
bb10: 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d  >..  /// <item>.
bb20: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
bb30: 69 6f 6e 3e 46 6c 61 67 73 3c 2f 64 65 73 63 72  ion>Flags</descr
bb40: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
bb50: 64 65 73 63 72 69 70 74 69 6f 6e 3e 45 78 74 72  description>Extr
bb60: 61 20 62 65 68 61 76 69 6f 72 61 6c 20 66 6c 61  a behavioral fla
bb70: 67 73 20 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65  gs for the conne
bb80: 63 74 69 6f 6e 2e 20 20 53 65 65 20 74 68 65 20  ction.  See the 
bb90: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
bba0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
bbb0: 22 20 2f 3e 20 65 6e 75 6d 65 72 61 74 69 6f 6e  " /> enumeration
bbc0: 20 66 6f 72 20 70 6f 73 73 69 62 6c 65 20 76 61   for possible va
bbd0: 6c 75 65 73 2e 3c 2f 64 65 73 63 72 69 70 74 69  lues.</descripti
bbe0: 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  on>..  /// <desc
bbf0: 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73 63 72  ription>N</descr
bc00: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
bc10: 64 65 73 63 72 69 70 74 69 6f 6e 3e 44 65 66 61  description>Defa
bc20: 75 6c 74 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  ult</description
bc30: 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e  >..  /// </item>
bc40: 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a  ..  /// <item>..
bc50: 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69    /// <descripti
bc60: 6f 6e 3e 53 65 74 44 65 66 61 75 6c 74 73 3c 2f  on>SetDefaults</
bc70: 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
bc80: 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
bc90: 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 54 72 75 65  >..  /// <b>True
bca0: 3c 2f 62 3e 20 2d 20 41 70 70 6c 79 20 74 68 65  </b> - Apply the
bcb0: 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63 74   default connect
bcc0: 69 6f 6e 20 73 65 74 74 69 6e 67 73 20 74 6f 20  ion settings to 
bcd0: 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61 62  the opened datab
bce0: 61 73 65 2e 3c 62 72 2f 3e 0d 0a 20 20 2f 2f 2f  ase.<br/>..  ///
bcf0: 20 3c 62 3e 46 61 6c 73 65 3c 2f 62 3e 20 2d 20   <b>False</b> - 
bd00: 53 6b 69 70 20 61 70 70 6c 79 69 6e 67 20 74 68  Skip applying th
bd10: 65 20 64 65 66 61 75 6c 74 20 63 6f 6e 6e 65 63  e default connec
bd20: 74 69 6f 6e 20 73 65 74 74 69 6e 67 73 20 74 6f  tion settings to
bd30: 20 74 68 65 20 6f 70 65 6e 65 64 20 64 61 74 61   the opened data
bd40: 62 61 73 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64  base...  /// </d
bd50: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
bd60: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
bd70: 4e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d  N</description>.
bd80: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
bd90: 69 6f 6e 3e 54 72 75 65 3c 2f 64 65 73 63 72 69  ion>True</descri
bda0: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f  ption>..  /// </
bdb0: 69 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74  item>..  /// <it
bdc0: 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63  em>..  /// <desc
bdd0: 72 69 70 74 69 6f 6e 3e 54 6f 46 75 6c 6c 50 61  ription>ToFullPa
bde0: 74 68 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  th</description>
bdf0: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
be00: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e  tion>..  /// <b>
be10: 54 72 75 65 3c 2f 62 3e 20 2d 20 41 74 74 65 6d  True</b> - Attem
be20: 70 74 20 74 6f 20 65 78 70 61 6e 64 20 74 68 65  pt to expand the
be30: 20 64 61 74 61 20 73 6f 75 72 63 65 20 66 69 6c   data source fil
be40: 65 20 6e 61 6d 65 20 74 6f 20 61 20 66 75 6c 6c  e name to a full
be50: 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74 68  y qualified path
be60: 20 62 65 66 6f 72 65 20 6f 70 65 6e 69 6e 67 2e   before opening.
be70: 0d 0a 20 20 2f 2f 2f 20 3c 62 72 2f 3e 0d 0a 20  ..  /// <br/>.. 
be80: 20 2f 2f 2f 20 3c 62 3e 46 61 6c 73 65 3c 2f 62   /// <b>False</b
be90: 3e 20 2d 20 53 6b 69 70 20 61 74 74 65 6d 70 74  > - Skip attempt
bea0: 69 6e 67 20 74 6f 20 65 78 70 61 6e 64 20 74 68  ing to expand th
beb0: 65 20 64 61 74 61 20 73 6f 75 72 63 65 20 66 69  e data source fi
bec0: 6c 65 20 6e 61 6d 65 20 74 6f 20 61 20 66 75 6c  le name to a ful
bed0: 6c 79 20 71 75 61 6c 69 66 69 65 64 20 70 61 74  ly qualified pat
bee0: 68 20 62 65 66 6f 72 65 20 6f 70 65 6e 69 6e 67  h before opening
bef0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72  ...  /// </descr
bf00: 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c  iption>..  /// <
bf10: 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64  description>N</d
bf20: 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f  escription>..  /
bf30: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
bf40: 54 72 75 65 3c 2f 64 65 73 63 72 69 70 74 69 6f  True</descriptio
bf50: 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d  n>..  /// </item
bf60: 3e 0d 0a 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d  >..  /// <item>.
bf70: 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74  .  /// <descript
bf80: 69 6f 6e 3e 50 72 65 70 61 72 65 52 65 74 72 69  ion>PrepareRetri
bf90: 65 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  es</description>
bfa0: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
bfb0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65  tion>..  /// The
bfc0: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
bfd0: 6f 66 20 72 65 74 72 69 65 73 20 77 68 65 6e 20  of retries when 
bfe0: 70 72 65 70 61 72 69 6e 67 20 53 51 4c 20 74 6f  preparing SQL to
bff0: 20 62 65 20 65 78 65 63 75 74 65 64 2e 20 20 54   be executed.  T
c000: 68 69 73 0d 0a 20 20 2f 2f 2f 20 6e 6f 72 6d 61  his..  /// norma
c010: 6c 6c 79 20 6f 6e 6c 79 20 61 70 70 6c 69 65 73  lly only applies
c020: 20 74 6f 20 70 72 65 70 61 72 61 74 69 6f 6e 20   to preparation 
c030: 65 72 72 6f 72 73 20 72 65 73 75 6c 74 69 6e 67  errors resulting
c040: 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62 61   from the databa
c050: 73 65 0d 0a 20 20 2f 2f 2f 20 73 63 68 65 6d 61  se..  /// schema
c060: 20 62 65 69 6e 67 20 63 68 61 6e 67 65 64 2e 0d   being changed..
c070: 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70  .  /// </descrip
c080: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64 65  tion>..  /// <de
c090: 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65 73  scription>N</des
c0a0: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
c0b0: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 33 3c   <description>3<
c0c0: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
c0d0: 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20   /// </item>..  
c0e0: 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f 2f  /// <item>..  //
c0f0: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 50  / <description>P
c100: 72 6f 67 72 65 73 73 4f 70 73 3c 2f 64 65 73 63  rogressOps</desc
c110: 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20  ription>..  /// 
c120: 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  <description>.. 
c130: 20 2f 2f 2f 20 54 68 65 20 61 70 70 72 6f 78 69   /// The approxi
c140: 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f 66 20 76  mate number of v
c150: 69 72 74 75 61 6c 20 6d 61 63 68 69 6e 65 20 69  irtual machine i
c160: 6e 73 74 72 75 63 74 69 6f 6e 73 20 62 65 74 77  nstructions betw
c170: 65 65 6e 20 70 72 6f 67 72 65 73 73 0d 0a 20 20  een progress..  
c180: 2f 2f 2f 20 65 76 65 6e 74 73 2e 20 20 49 6e 20  /// events.  In 
c190: 6f 72 64 65 72 20 66 6f 72 20 70 72 6f 67 72 65  order for progre
c1a0: 73 73 20 65 76 65 6e 74 73 20 74 6f 20 61 63 74  ss events to act
c1b0: 75 61 6c 6c 79 20 66 69 72 65 2c 20 74 68 65 20  ually fire, the 
c1c0: 65 76 65 6e 74 20 68 61 6e 64 6c 65 72 0d 0a 20  event handler.. 
c1d0: 20 2f 2f 2f 20 6d 75 73 74 20 62 65 20 61 64 64   /// must be add
c1e0: 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
c1f0: 72 65 66 3d 22 50 72 6f 67 72 65 73 73 22 20 2f  ref="Progress" /
c200: 3e 20 65 76 65 6e 74 20 61 73 20 77 65 6c 6c 2e  > event as well.
c210: 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69  ..  /// </descri
c220: 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 64  ption>..  /// <d
c230: 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c 2f 64 65  escription>N</de
c240: 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f  scription>..  //
c250: 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 30  / <description>0
c260: 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
c270: 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20    /// </item>.. 
c280: 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 2f   /// <item>..  /
c290: 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e  // <description>
c2a0: 52 65 63 75 72 73 69 76 65 20 54 72 69 67 67 65  Recursive Trigge
c2b0: 72 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  rs</description>
c2c0: 0d 0a 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70  ..  /// <descrip
c2d0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e  tion>..  /// <b>
c2e0: 54 72 75 65 3c 2f 62 3e 20 2d 20 45 6e 61 62 6c  True</b> - Enabl
c2f0: 65 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  e the recursive 
c300: 74 72 69 67 67 65 72 20 63 61 70 61 62 69 6c 69  trigger capabili
c310: 74 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 62 3e 46 61  ty...  /// <b>Fa
c320: 6c 73 65 3c 2f 62 3e 20 2d 20 44 69 73 61 62 6c  lse</b> - Disabl
c330: 65 20 74 68 65 20 72 65 63 75 72 73 69 76 65 20  e the recursive 
c340: 74 72 69 67 67 65 72 20 63 61 70 61 62 69 6c 69  trigger capabili
c350: 74 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 64 65 73  ty...  /// </des
c360: 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f  cription>..  ///
c370: 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 4e 3c   <description>N<
c380: 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
c390: 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
c3a0: 6e 3e 46 61 6c 73 65 3c 2f 64 65 73 63 72 69 70  n>False</descrip
c3b0: 74 69 6f 6e 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 69  tion>..  /// </i
c3c0: 74 65 6d 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 6c 69  tem>..  /// </li
c3d0: 73 74 3e 0d 0a 20 20 2f 2f 2f 20 3c 2f 72 65 6d  st>..  /// </rem
c3e0: 61 72 6b 73 3e 0d 0a 20 20 70 75 62 6c 69 63 20  arks>..  public 
c3f0: 73 65 61 6c 65 64 20 70 61 72 74 69 61 6c 20 63  sealed partial c
c400: 6c 61 73 73 20 53 51 4c 69 74 65 43 6f 6e 6e 65  lass SQLiteConne
c410: 63 74 69 6f 6e 20 3a 20 44 62 43 6f 6e 6e 65 63  ction : DbConnec
c420: 74 69 6f 6e 2c 20 49 43 6c 6f 6e 65 61 62 6c 65  tion, ICloneable
c430: 2c 20 49 44 69 73 70 6f 73 61 62 6c 65 0d 0a 20  , IDisposable.. 
c440: 20 7b 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20   {..    #region 
c450: 50 72 69 76 61 74 65 20 43 6f 6e 73 74 61 6e 74  Private Constant
c460: 73 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  s..    /// <summ
c470: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
c480: 65 20 22 69 6e 76 61 6c 69 64 20 76 61 6c 75 65  e "invalid value
c490: 22 20 66 6f 72 20 74 68 65 20 3c 73 65 65 20 63  " for the <see c
c4a0: 72 65 66 3d 22 44 62 54 79 70 65 22 20 2f 3e 20  ref="DbType" /> 
c4b0: 65 6e 75 6d 65 72 61 74 69 6f 6e 20 75 73 65 64  enumeration used
c4c0: 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65  ..    /// by the
c4d0: 20 3c 73 65 65 20 63 72 65 66 3d 22 44 65 66 61   <see cref="Defa
c4e0: 75 6c 74 44 62 54 79 70 65 22 20 2f 3e 20 70 72  ultDbType" /> pr
c4f0: 6f 70 65 72 74 79 2e 20 20 54 68 69 73 20 63 6f  operty.  This co
c500: 6e 73 74 61 6e 74 20 69 73 20 73 68 61 72 65 64  nstant is shared
c510: 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69  ..    /// by thi
c520: 73 20 63 6c 61 73 73 20 61 6e 64 20 74 68 65 20  s class and the 
c530: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
c540: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 20 63 6c  StringBuilder cl
c550: 61 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ass...    /// </
c560: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
c570: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 44 62 54  ternal const DbT
c580: 79 70 65 20 42 61 64 44 62 54 79 70 65 20 3d 20  ype BadDbType = 
c590: 28 44 62 54 79 70 65 29 28 2d 31 29 3b 0d 0a 0d  (DbType)(-1);...
c5a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
c5b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
c5c0: 64 65 66 61 75 6c 74 20 22 73 74 75 62 22 20 28  default "stub" (
c5d0: 69 2e 65 2e 20 70 6c 61 63 65 68 6f 6c 64 65 72  i.e. placeholder
c5e0: 29 20 62 61 73 65 20 73 63 68 65 6d 61 20 6e 61  ) base schema na
c5f0: 6d 65 20 74 6f 20 75 73 65 20 77 68 65 6e 0d 0a  me to use when..
c600: 20 20 20 20 2f 2f 2f 20 72 65 74 75 72 6e 69 6e      /// returnin
c610: 67 20 63 6f 6c 75 6d 6e 20 73 63 68 65 6d 61 20  g column schema 
c620: 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 20 20 55 73  information.  Us
c630: 65 64 20 61 73 20 74 68 65 20 69 6e 69 74 69 61  ed as the initia
c640: 6c 20 76 61 6c 75 65 20 6f 66 0d 0a 20 20 20 20  l value of..    
c650: 2f 2f 2f 20 74 68 65 20 42 61 73 65 53 63 68 65  /// the BaseSche
c660: 6d 61 4e 61 6d 65 20 70 72 6f 70 65 72 74 79 2e  maName property.
c670: 20 20 54 68 69 73 20 73 68 6f 75 6c 64 20 73 74    This should st
c680: 61 72 74 20 77 69 74 68 20 22 73 71 6c 69 74 65  art with "sqlite
c690: 5f 2a 22 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 63  _*"..    /// bec
c6a0: 61 75 73 65 20 74 68 6f 73 65 20 6e 61 6d 65 73  ause those names
c6b0: 20 61 72 65 20 72 65 73 65 72 76 65 64 20 66 6f   are reserved fo
c6c0: 72 20 75 73 65 20 62 79 20 53 51 4c 69 74 65 20  r use by SQLite 
c6d0: 28 69 2e 65 2e 20 74 68 65 79 20 63 61 6e 6e 6f  (i.e. they canno
c6e0: 74 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 63 6f  t..    /// be co
c6f0: 6e 66 75 73 65 64 20 77 69 74 68 20 74 68 65 20  nfused with the 
c700: 6e 61 6d 65 73 20 6f 66 20 75 73 65 72 20 6f 62  names of user ob
c710: 6a 65 63 74 73 29 2e 0d 0a 20 20 20 20 2f 2f 2f  jects)...    ///
c720: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c730: 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20   internal const 
c740: 73 74 72 69 6e 67 20 44 65 66 61 75 6c 74 42 61  string DefaultBa
c750: 73 65 53 63 68 65 6d 61 4e 61 6d 65 20 3d 20 22  seSchemaName = "
c760: 73 71 6c 69 74 65 5f 64 65 66 61 75 6c 74 5f 73  sqlite_default_s
c770: 63 68 65 6d 61 22 3b 0d 0a 0d 0a 20 20 20 20 70  chema";....    p
c780: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
c790: 69 6e 67 20 4d 65 6d 6f 72 79 46 69 6c 65 4e 61  ing MemoryFileNa
c7a0: 6d 65 20 3d 20 22 3a 6d 65 6d 6f 72 79 3a 22 3b  me = ":memory:";
c7b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
c7c0: 20 63 6f 6e 73 74 20 49 73 6f 6c 61 74 69 6f 6e   const Isolation
c7d0: 4c 65 76 65 6c 20 44 65 66 65 72 72 65 64 49 73  Level DeferredIs
c7e0: 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 3d 20 49  olationLevel = I
c7f0: 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 2e 52 65  solationLevel.Re
c800: 61 64 43 6f 6d 6d 69 74 74 65 64 3b 0d 0a 20 20  adCommitted;..  
c810: 20 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74    internal const
c820: 20 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20   IsolationLevel 
c830: 49 6d 6d 65 64 69 61 74 65 49 73 6f 6c 61 74 69  ImmediateIsolati
c840: 6f 6e 4c 65 76 65 6c 20 3d 20 49 73 6f 6c 61 74  onLevel = Isolat
c850: 69 6f 6e 4c 65 76 65 6c 2e 53 65 72 69 61 6c 69  ionLevel.Seriali
c860: 7a 61 62 6c 65 3b 0d 0a 0d 0a 20 20 20 20 70 72  zable;....    pr
c870: 69 76 61 74 65 20 63 6f 6e 73 74 20 53 51 4c 69  ivate const SQLi
c880: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
c890: 73 20 46 61 6c 6c 62 61 63 6b 44 65 66 61 75 6c  s FallbackDefaul
c8a0: 74 46 6c 61 67 73 20 3d 20 53 51 4c 69 74 65 43  tFlags = SQLiteC
c8b0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 44  onnectionFlags.D
c8c0: 65 66 61 75 6c 74 3b 0d 0a 20 20 20 20 70 72 69  efault;..    pri
c8d0: 76 61 74 65 20 63 6f 6e 73 74 20 53 51 4c 69 74  vate const SQLit
c8e0: 65 53 79 6e 63 68 72 6f 6e 6f 75 73 45 6e 75 6d  eSynchronousEnum
c8f0: 20 44 65 66 61 75 6c 74 53 79 6e 63 68 72 6f 6e   DefaultSynchron
c900: 6f 75 73 20 3d 20 53 51 4c 69 74 65 53 79 6e 63  ous = SQLiteSync
c910: 68 72 6f 6e 6f 75 73 45 6e 75 6d 2e 44 65 66 61  hronousEnum.Defa
c920: 75 6c 74 3b 0d 0a 20 20 20 20 70 72 69 76 61 74  ult;..    privat
c930: 65 20 63 6f 6e 73 74 20 53 51 4c 69 74 65 4a 6f  e const SQLiteJo
c940: 75 72 6e 61 6c 4d 6f 64 65 45 6e 75 6d 20 44 65  urnalModeEnum De
c950: 66 61 75 6c 74 4a 6f 75 72 6e 61 6c 4d 6f 64 65  faultJournalMode
c960: 20 3d 20 53 51 4c 69 74 65 4a 6f 75 72 6e 61 6c   = SQLiteJournal
c970: 4d 6f 64 65 45 6e 75 6d 2e 44 65 66 61 75 6c 74  ModeEnum.Default
c980: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63  ;..    private c
c990: 6f 6e 73 74 20 49 73 6f 6c 61 74 69 6f 6e 4c 65  onst IsolationLe
c9a0: 76 65 6c 20 44 65 66 61 75 6c 74 49 73 6f 6c 61  vel DefaultIsola
c9b0: 74 69 6f 6e 4c 65 76 65 6c 20 3d 20 49 73 6f 6c  tionLevel = Isol
c9c0: 61 74 69 6f 6e 4c 65 76 65 6c 2e 53 65 72 69 61  ationLevel.Seria
c9d0: 6c 69 7a 61 62 6c 65 3b 0d 0a 20 20 20 20 69 6e  lizable;..    in
c9e0: 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 53 51 4c  ternal const SQL
c9f0: 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 44  iteDateFormats D
ca00: 65 66 61 75 6c 74 44 61 74 65 54 69 6d 65 46 6f  efaultDateTimeFo
ca10: 72 6d 61 74 20 3d 20 53 51 4c 69 74 65 44 61 74  rmat = SQLiteDat
ca20: 65 46 6f 72 6d 61 74 73 2e 44 65 66 61 75 6c 74  eFormats.Default
ca30: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
ca40: 63 6f 6e 73 74 20 44 61 74 65 54 69 6d 65 4b 69  const DateTimeKi
ca50: 6e 64 20 44 65 66 61 75 6c 74 44 61 74 65 54 69  nd DefaultDateTi
ca60: 6d 65 4b 69 6e 64 20 3d 20 44 61 74 65 54 69 6d  meKind = DateTim
ca70: 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65  eKind.Unspecifie
ca80: 64 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  d;..    internal
ca90: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
caa0: 66 61 75 6c 74 44 61 74 65 54 69 6d 65 46 6f 72  faultDateTimeFor
cab0: 6d 61 74 53 74 72 69 6e 67 20 3d 20 6e 75 6c 6c  matString = null
cac0: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63  ;..    private c
cad0: 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66 61  onst string Defa
cae0: 75 6c 74 44 61 74 61 53 6f 75 72 63 65 20 3d 20  ultDataSource = 
caf0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 70 72 69 76 61  null;..    priva
cb00: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
cb10: 44 65 66 61 75 6c 74 55 72 69 20 3d 20 6e 75 6c  DefaultUri = nul
cb20: 6c 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  l;..    private 
cb30: 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65 66  const string Def
cb40: 61 75 6c 74 46 75 6c 6c 55 72 69 20 3d 20 6e 75  aultFullUri = nu
cb50: 6c 6c 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ll;..    private
cb60: 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44 65   const string De
cb70: 66 61 75 6c 74 48 65 78 50 61 73 73 77 6f 72 64  faultHexPassword
cb80: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 70 72   = null;..    pr
cb90: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
cba0: 6e 67 20 44 65 66 61 75 6c 74 50 61 73 73 77 6f  ng DefaultPasswo
cbb0: 72 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  rd = null;..    
cbc0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e  private const in
cbd0: 74 20 44 65 66 61 75 6c 74 56 65 72 73 69 6f 6e  t DefaultVersion
cbe0: 20 3d 20 33 3b 0d 0a 20 20 20 20 70 72 69 76 61   = 3;..    priva
cbf0: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 65 66  te const int Def
cc00: 61 75 6c 74 50 61 67 65 53 69 7a 65 20 3d 20 34  aultPageSize = 4
cc10: 30 39 36 3b 0d 0a 20 20 20 20 70 72 69 76 61 74  096;..    privat
cc20: 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 65 66 61  e const int Defa
cc30: 75 6c 74 4d 61 78 50 61 67 65 43 6f 75 6e 74 20  ultMaxPageCount 
cc40: 3d 20 30 3b 0d 0a 20 20 20 20 70 72 69 76 61 74  = 0;..    privat
cc50: 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 65 66 61  e const int Defa
cc60: 75 6c 74 43 61 63 68 65 53 69 7a 65 20 3d 20 2d  ultCacheSize = -
cc70: 32 30 30 30 3b 0d 0a 20 20 20 20 70 72 69 76 61  2000;..    priva
cc80: 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 65 66  te const int Def
cc90: 61 75 6c 74 4d 61 78 50 6f 6f 6c 53 69 7a 65 20  aultMaxPoolSize 
cca0: 3d 20 31 30 30 3b 0d 0a 20 20 20 20 70 72 69 76  = 100;..    priv
ccb0: 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20 44 65  ate const int De
ccc0: 66 61 75 6c 74 43 6f 6e 6e 65 63 74 69 6f 6e 54  faultConnectionT
ccd0: 69 6d 65 6f 75 74 20 3d 20 33 30 3b 0d 0a 20 20  imeout = 30;..  
cce0: 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20    private const 
ccf0: 69 6e 74 20 44 65 66 61 75 6c 74 42 75 73 79 54  int DefaultBusyT
cd00: 69 6d 65 6f 75 74 20 3d 20 30 3b 0d 0a 20 20 20  imeout = 0;..   
cd10: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69   private const i
cd20: 6e 74 20 44 65 66 61 75 6c 74 57 61 69 74 54 69  nt DefaultWaitTi
cd30: 6d 65 6f 75 74 20 3d 20 33 30 30 30 30 3b 0d 0a  meout = 30000;..
cd40: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
cd50: 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74 4e 6f  t bool DefaultNo
cd60: 44 65 66 61 75 6c 74 46 6c 61 67 73 20 3d 20 66  DefaultFlags = f
cd70: 61 6c 73 65 3b 0d 0a 20 20 20 20 70 72 69 76 61  alse;..    priva
cd80: 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65  te const bool De
cd90: 66 61 75 6c 74 4e 6f 53 68 61 72 65 64 46 6c 61  faultNoSharedFla
cda0: 67 73 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  gs = false;..   
cdb0: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 62   private const b
cdc0: 6f 6f 6c 20 44 65 66 61 75 6c 74 46 61 69 6c 49  ool DefaultFailI
cdd0: 66 4d 69 73 73 69 6e 67 20 3d 20 66 61 6c 73 65  fMissing = false
cde0: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63  ;..    private c
cdf0: 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c  onst bool Defaul
ce00: 74 52 65 61 64 4f 6e 6c 79 20 3d 20 66 61 6c 73  tReadOnly = fals
ce10: 65 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  e;..    internal
ce20: 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61   const bool Defa
ce30: 75 6c 74 42 69 6e 61 72 79 47 55 49 44 20 3d 20  ultBinaryGUID = 
ce40: 74 72 75 65 3b 0d 0a 20 20 20 20 70 72 69 76 61  true;..    priva
ce50: 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65  te const bool De
ce60: 66 61 75 6c 74 55 73 65 55 54 46 31 36 45 6e 63  faultUseUTF16Enc
ce70: 6f 64 69 6e 67 20 3d 20 66 61 6c 73 65 3b 0d 0a  oding = false;..
ce80: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
ce90: 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74 54 6f  t bool DefaultTo
cea0: 46 75 6c 6c 50 61 74 68 20 3d 20 74 72 75 65 3b  FullPath = true;
ceb0: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63 6f  ..    private co
cec0: 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74  nst bool Default
ced0: 50 6f 6f 6c 69 6e 67 20 3d 20 66 61 6c 73 65 3b  Pooling = false;
cee0: 20 2f 2f 20 54 4f 44 4f 3a 20 4d 61 79 62 65 20   // TODO: Maybe 
cef0: 70 72 6f 6d 6f 74 65 20 74 68 69 73 20 74 6f 20  promote this to 
cf00: 73 74 61 74 69 63 20 70 72 6f 70 65 72 74 79 3f  static property?
cf10: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63 6f  ..    private co
cf20: 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c 74  nst bool Default
cf30: 4c 65 67 61 63 79 46 6f 72 6d 61 74 20 3d 20 66  LegacyFormat = f
cf40: 61 6c 73 65 3b 0d 0a 20 20 20 20 70 72 69 76 61  alse;..    priva
cf50: 74 65 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65  te const bool De
cf60: 66 61 75 6c 74 46 6f 72 65 69 67 6e 4b 65 79 73  faultForeignKeys
cf70: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 70   = false;..    p
cf80: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 62 6f 6f  rivate const boo
cf90: 6c 20 44 65 66 61 75 6c 74 52 65 63 75 72 73 69  l DefaultRecursi
cfa0: 76 65 54 72 69 67 67 65 72 73 20 3d 20 66 61 6c  veTriggers = fal
cfb0: 73 65 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  se;..    private
cfc0: 20 63 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61   const bool Defa
cfd0: 75 6c 74 45 6e 6c 69 73 74 20 3d 20 74 72 75 65  ultEnlist = true
cfe0: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 63  ;..    private c
cff0: 6f 6e 73 74 20 62 6f 6f 6c 20 44 65 66 61 75 6c  onst bool Defaul
d000: 74 53 65 74 44 65 66 61 75 6c 74 73 20 3d 20 74  tSetDefaults = t
d010: 72 75 65 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rue;..    intern
d020: 61 6c 20 63 6f 6e 73 74 20 69 6e 74 20 44 65 66  al const int Def
d030: 61 75 6c 74 50 72 65 70 61 72 65 52 65 74 72 69  aultPrepareRetri
d040: 65 73 20 3d 20 33 3b 0d 0a 20 20 20 20 70 72 69  es = 3;..    pri
d050: 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e  vate const strin
d060: 67 20 44 65 66 61 75 6c 74 56 66 73 4e 61 6d 65  g DefaultVfsName
d070: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 70 72   = null;..    pr
d080: 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e 74 20  ivate const int 
d090: 44 65 66 61 75 6c 74 50 72 6f 67 72 65 73 73 4f  DefaultProgressO
d0a0: 70 73 20 3d 20 30 3b 0d 0a 0d 0a 23 69 66 20 49  ps = 0;....#if I
d0b0: 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a  NTEROP_INCLUDE_Z
d0c0: 49 50 56 46 53 0d 0a 20 20 20 20 70 72 69 76 61  IPVFS..    priva
d0d0: 74 65 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20  te const string 
d0e0: 5a 69 70 56 66 73 5f 41 75 74 6f 6d 61 74 69 63  ZipVfs_Automatic
d0f0: 20 3d 20 22 61 75 74 6f 6d 61 74 69 63 22 3b 0d   = "automatic";.
d100: 0a 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e  .    private con
d110: 73 74 20 73 74 72 69 6e 67 20 5a 69 70 56 66 73  st string ZipVfs
d120: 5f 56 32 20 3d 20 22 76 32 22 3b 0d 0a 20 20 20  _V2 = "v2";..   
d130: 20 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73   private const s
d140: 74 72 69 6e 67 20 5a 69 70 56 66 73 5f 56 33 20  tring ZipVfs_V3 
d150: 3d 20 22 76 33 22 3b 0d 0a 0d 0a 20 20 20 20 70  = "v3";....    p
d160: 72 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72  rivate const str
d170: 69 6e 67 20 44 65 66 61 75 6c 74 5a 69 70 56 66  ing DefaultZipVf
d180: 73 56 65 72 73 69 6f 6e 20 3d 20 6e 75 6c 6c 3b  sVersion = null;
d190: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
d1a0: 70 72 69 76 61 74 65 20 63 6f 6e 73 74 20 69 6e  private const in
d1b0: 74 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 43  t SQLITE_FCNTL_C
d1c0: 48 55 4e 4b 5f 53 49 5a 45 20 3d 20 36 3b 0d 0a  HUNK_SIZE = 6;..
d1d0: 20 20 20 20 70 72 69 76 61 74 65 20 63 6f 6e 73      private cons
d1e0: 74 20 69 6e 74 20 53 51 4c 49 54 45 5f 46 43 4e  t int SQLITE_FCN
d1f0: 54 4c 5f 57 49 4e 33 32 5f 41 56 5f 52 45 54 52  TL_WIN32_AV_RETR
d200: 59 20 3d 20 39 3b 0d 0a 0d 0a 20 20 20 20 70 72  Y = 9;....    pr
d210: 69 76 61 74 65 20 63 6f 6e 73 74 20 73 74 72 69  ivate const stri
d220: 6e 67 20 5f 64 61 74 61 44 69 72 65 63 74 6f 72  ng _dataDirector
d230: 79 20 3d 20 22 7c 44 61 74 61 44 69 72 65 63 74  y = "|DataDirect
d240: 6f 72 79 7c 22 3b 0d 0a 0d 0a 20 20 20 20 70 72  ory|";....    pr
d250: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
d260: 69 6e 67 20 5f 64 65 66 61 75 6c 74 43 61 74 61  ing _defaultCata
d270: 6c 6f 67 4e 61 6d 65 20 3d 20 22 6d 61 69 6e 22  logName = "main"
d280: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  ;..    private s
d290: 74 61 74 69 63 20 73 74 72 69 6e 67 20 5f 64 65  tatic string _de
d2a0: 66 61 75 6c 74 4d 61 73 74 65 72 54 61 62 6c 65  faultMasterTable
d2b0: 4e 61 6d 65 20 3d 20 22 73 71 6c 69 74 65 5f 6d  Name = "sqlite_m
d2c0: 61 73 74 65 72 22 3b 0d 0a 0d 0a 20 20 20 20 70  aster";....    p
d2d0: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
d2e0: 72 69 6e 67 20 5f 74 65 6d 70 6f 72 61 72 79 43  ring _temporaryC
d2f0: 61 74 61 6c 6f 67 4e 61 6d 65 20 3d 20 22 74 65  atalogName = "te
d300: 6d 70 22 3b 0d 0a 20 20 20 20 70 72 69 76 61 74  mp";..    privat
d310: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  e static string 
d320: 5f 74 65 6d 70 6f 72 61 72 79 4d 61 73 74 65 72  _temporaryMaster
d330: 54 61 62 6c 65 4e 61 6d 65 20 3d 20 22 73 71 6c  TableName = "sql
d340: 69 74 65 5f 74 65 6d 70 5f 6d 61 73 74 65 72 22  ite_temp_master"
d350: 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f  ;..    #endregio
d360: 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  n....    ///////
d370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d3c0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
d3d0: 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20  #region Private 
d3e0: 53 74 61 74 69 63 20 44 61 74 61 0d 0a 20 20 20  Static Data..   
d3f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d400: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 61 6e 61      /// The mana
d410: 67 65 64 20 61 73 73 65 6d 62 6c 79 20 63 6f 6e  ged assembly con
d420: 74 61 69 6e 69 6e 67 20 74 68 69 73 20 74 79 70  taining this typ
d430: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
d440: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
d450: 61 74 65 20 73 74 61 74 69 63 20 72 65 61 64 6f  ate static reado
d460: 6e 6c 79 20 41 73 73 65 6d 62 6c 79 20 5f 61 73  nly Assembly _as
d470: 73 65 6d 62 6c 79 20 3d 20 74 79 70 65 6f 66 28  sembly = typeof(
d480: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d490: 29 2e 41 73 73 65 6d 62 6c 79 3b 0d 0a 0d 0a 20  ).Assembly;.... 
d4a0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d4b0: 0d 0a 20 20 20 20 2f 2f 2f 20 4f 62 6a 65 63 74  ..    /// Object
d4c0: 20 75 73 65 64 20 74 6f 20 73 79 6e 63 68 72 6f   used to synchro
d4d0: 6e 69 7a 65 20 61 63 63 65 73 73 20 74 6f 20 74  nize access to t
d4e0: 68 65 20 73 74 61 74 69 63 20 69 6e 73 74 61 6e  he static instan
d4f0: 63 65 20 64 61 74 61 0d 0a 20 20 20 20 2f 2f 2f  ce data..    ///
d500: 20 66 6f 72 20 74 68 69 73 20 63 6c 61 73 73 2e   for this class.
d510: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
d520: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
d530: 65 20 73 74 61 74 69 63 20 72 65 61 64 6f 6e 6c  e static readonl
d540: 79 20 6f 62 6a 65 63 74 20 5f 73 79 6e 63 52 6f  y object _syncRo
d550: 6f 74 20 3d 20 6e 65 77 20 6f 62 6a 65 63 74 28  ot = new object(
d560: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
d570: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d580: 20 53 74 61 74 69 63 20 76 61 72 69 61 62 6c 65   Static variable
d590: 20 74 6f 20 73 74 6f 72 65 20 74 68 65 20 63 6f   to store the co
d5a0: 6e 6e 65 63 74 69 6f 6e 20 65 76 65 6e 74 20 68  nnection event h
d5b0: 61 6e 64 6c 65 72 73 20 74 6f 20 63 61 6c 6c 2e  andlers to call.
d5c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
d5d0: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
d5e0: 65 20 73 74 61 74 69 63 20 65 76 65 6e 74 20 53  e static event S
d5f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45  QLiteConnectionE
d600: 76 65 6e 74 48 61 6e 64 6c 65 72 20 5f 68 61 6e  ventHandler _han
d610: 64 6c 65 72 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  dlers;....    //
d620: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
d630: 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 63   /// The extra c
d640: 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73 20  onnection flags 
d650: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 61  to be used for a
d660: 6c 6c 20 6f 70 65 6e 65 64 20 63 6f 6e 6e 65 63  ll opened connec
d670: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tions...    /// 
d680: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d690: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 53  private static S
d6a0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
d6b0: 6c 61 67 73 20 5f 73 68 61 72 65 64 46 6c 61 67  lags _sharedFlag
d6c0: 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  s;....    /// <s
d6d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
d6e0: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
d6f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
d700: 22 20 2f 3e 20 69 6e 73 74 61 6e 63 65 20 28 66  " /> instance (f
d710: 6f 72 20 74 68 69 73 20 74 68 72 65 61 64 29 20  or this thread) 
d720: 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f 20 68 61  that..    /// ha
d730: 64 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  d the most recen
d740: 74 20 63 61 6c 6c 20 74 6f 20 3c 73 65 65 20 63  t call to <see c
d750: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65  ref="SQLiteConne
d760: 63 74 69 6f 6e 2e 4f 70 65 6e 22 20 2f 3e 2e 0d  ction.Open" />..
d770: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
d780: 72 79 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ry>..#if !PLATFO
d790: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
d7a0: 4f 52 4b 0d 0a 20 20 20 20 5b 54 68 72 65 61 64  ORK..    [Thread
d7b0: 53 74 61 74 69 63 28 29 5d 0d 0a 23 65 6e 64 69  Static()]..#endi
d7c0: 66 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  f..    private s
d7d0: 74 61 74 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e  tatic SQLiteConn
d7e0: 65 63 74 69 6f 6e 20 5f 6c 61 73 74 43 6f 6e 6e  ection _lastConn
d7f0: 65 63 74 69 6f 6e 49 6e 4f 70 65 6e 3b 0d 0a 0d  ectionInOpen;...
d800: 0a 23 69 66 20 53 51 4c 49 54 45 5f 53 54 41 4e  .#if SQLITE_STAN
d810: 44 41 52 44 20 26 26 20 21 50 4c 41 54 46 4f 52  DARD && !PLATFOR
d820: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
d830: 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  RK..    /// <sum
d840: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55  mary>..    /// U
d850: 73 65 64 20 74 6f 20 68 6f 6c 64 20 74 68 65 20  sed to hold the 
d860: 61 63 74 69 76 65 20 6c 69 62 72 61 72 79 20 76  active library v
d870: 65 72 73 69 6f 6e 20 6e 75 6d 62 65 72 20 6f 66  ersion number of
d880: 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f   SQLite...    //
d890: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
d8a0: 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
d8b0: 20 69 6e 74 20 5f 76 65 72 73 69 6f 6e 4e 75 6d   int _versionNum
d8c0: 62 65 72 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ber;..#endif..  
d8d0: 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a    #endregion....
d8e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
d8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
d940: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
d950: 6f 6e 20 50 72 69 76 61 74 65 20 44 61 74 61 0d  on Private Data.
d960: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
d970: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 74 61 74  y>..    /// Stat
d980: 65 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74  e of the current
d990: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..   
d9a0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d9b0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 43 6f 6e  .    private Con
d9c0: 6e 65 63 74 69 6f 6e 53 74 61 74 65 20 5f 63 6f  nectionState _co
d9d0: 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65 3b 0d 0a  nnectionState;..
d9e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
d9f0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
da00: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
da10: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ng..    /// </su
da20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
da30: 61 74 65 20 73 74 72 69 6e 67 20 5f 63 6f 6e 6e  ate string _conn
da40: 65 63 74 69 6f 6e 53 74 72 69 6e 67 3b 0d 0a 0d  ectionString;...
da50: 0a 23 69 66 20 44 45 42 55 47 0d 0a 20 20 20 20  .#if DEBUG..    
da60: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
da70: 20 20 20 2f 2f 2f 20 54 68 69 73 20 73 74 72 69     /// This stri
da80: 6e 67 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e 20  ng will contain 
da90: 65 6e 6f 75 67 68 20 69 6e 66 6f 72 6d 61 74 69  enough informati
daa0: 6f 6e 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74  on to identify t
dab0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d  his connection,.
dac0: 0a 20 20 20 20 2f 2f 2f 20 65 2e 67 2e 20 74 68  .    /// e.g. th
dad0: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  e database file 
dae0: 6e 61 6d 65 2c 20 6f 72 69 67 69 6e 61 6c 20 74  name, original t
daf0: 68 72 65 61 64 2c 20 65 74 63 2e 20 20 49 74 20  hread, etc.  It 
db00: 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
db10: 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 70 6f 73 65  ..    /// expose
db20: 64 20 76 69 61 20 74 68 65 20 70 75 62 6c 69 63  d via the public
db30: 20 69 6e 74 65 72 66 61 63 65 20 61 73 20 69 74   interface as it
db40: 20 69 73 20 69 6e 74 65 6e 64 65 64 20 66 6f 72   is intended for
db50: 20 75 73 65 20 6f 6e 6c 79 20 77 68 65 6e 0d 0a   use only when..
db60: 20 20 20 20 2f 2f 2f 20 64 65 62 75 67 67 69 6e      /// debuggin
db70: 67 20 74 68 69 73 20 6c 69 62 72 61 72 79 2e 0d  g this library..
db80: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
db90: 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ry>..    private
dba0: 20 73 74 72 69 6e 67 20 5f 64 65 62 75 67 53 74   string _debugSt
dbb0: 72 69 6e 67 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ring;..#endif...
dbc0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
dbd0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 65 73 74  y>..    /// Nest
dbe0: 69 6e 67 20 6c 65 76 65 6c 20 6f 66 20 74 68 65  ing level of the
dbf0: 20 74 72 61 6e 73 61 63 74 69 6f 6e 73 20 6f 70   transactions op
dc00: 65 6e 20 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63  en on the connec
dc10: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
dc20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
dc30: 74 65 72 6e 61 6c 20 69 6e 74 20 5f 74 72 61 6e  ternal int _tran
dc40: 73 61 63 74 69 6f 6e 4c 65 76 65 6c 3b 0d 0a 0d  sactionLevel;...
dc50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
dc60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 61 6e  y>..    /// Tran
dc70: 73 61 63 74 69 6f 6e 20 63 6f 75 6e 74 65 72 20  saction counter 
dc80: 66 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  for the connecti
dc90: 6f 6e 2e 20 20 43 75 72 72 65 6e 74 6c 79 2c 20  on.  Currently, 
dca0: 74 68 69 73 20 69 73 20 6f 6e 6c 79 20 75 73 65  this is only use
dcb0: 64 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 62 75  d..    /// to bu
dcc0: 69 6c 64 20 53 41 56 45 50 4f 49 4e 54 20 6e 61  ild SAVEPOINT na
dcd0: 6d 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  mes...    /// </
dce0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
dcf0: 74 65 72 6e 61 6c 20 69 6e 74 20 5f 74 72 61 6e  ternal int _tran
dd00: 73 61 63 74 69 6f 6e 53 65 71 75 65 6e 63 65 3b  sactionSequence;
dd10: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
dd20: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  mary>..    /// I
dd30: 66 20 74 68 69 73 20 66 6c 61 67 20 69 73 20 6e  f this flag is n
dd40: 6f 6e 2d 7a 65 72 6f 2c 20 74 68 65 20 3c 73 65  on-zero, the <se
dd50: 65 20 63 72 65 66 3d 22 44 69 73 70 6f 73 65 28  e cref="Dispose(
dd60: 29 22 20 2f 3e 20 6d 65 74 68 6f 64 20 77 69 6c  )" /> method wil
dd70: 6c 20 68 61 76 65 0d 0a 20 20 20 20 2f 2f 2f 20  l have..    /// 
dd80: 6e 6f 20 65 66 66 65 63 74 3b 20 68 6f 77 65 76  no effect; howev
dd90: 65 72 2c 20 74 68 65 20 3c 73 65 65 20 63 72 65  er, the <see cre
dda0: 66 3d 22 43 6c 6f 73 65 22 20 2f 3e 20 6d 65 74  f="Close" /> met
ddb0: 68 6f 64 20 77 69 6c 6c 20 63 6f 6e 74 69 6e 75  hod will continu
ddc0: 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  e to..    /// be
ddd0: 68 61 76 65 20 61 73 20 6e 6f 72 6d 61 6c 2e 0d  have as normal..
dde0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
ddf0: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
de00: 6c 20 62 6f 6f 6c 20 5f 6e 6f 44 69 73 70 6f 73  l bool _noDispos
de10: 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  e;....    /// <s
de20: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
de30: 20 49 66 20 73 65 74 2c 20 74 68 65 6e 20 74 68   If set, then th
de40: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20  e connection is 
de50: 63 75 72 72 65 6e 74 6c 79 20 62 65 69 6e 67 20  currently being 
de60: 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20 20 2f  disposed...    /
de70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
de80: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
de90: 5f 64 69 73 70 6f 73 69 6e 67 3b 0d 0a 0d 0a 20  _disposing;.... 
dea0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
deb0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65  ..    /// The de
dec0: 66 61 75 6c 74 20 69 73 6f 6c 61 74 69 6f 6e 20  fault isolation 
ded0: 6c 65 76 65 6c 20 66 6f 72 20 6e 65 77 20 74 72  level for new tr
dee0: 61 6e 73 61 63 74 69 6f 6e 73 0d 0a 20 20 20 20  ansactions..    
def0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
df00: 20 20 20 20 70 72 69 76 61 74 65 20 49 73 6f 6c      private Isol
df10: 61 74 69 6f 6e 4c 65 76 65 6c 20 5f 64 65 66 61  ationLevel _defa
df20: 75 6c 74 49 73 6f 6c 61 74 69 6f 6e 3b 0d 0a 0d  ultIsolation;...
df30: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
df40: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
df50: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
df60: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
df70: 20 6f 62 6a 65 63 74 20 69 73 20 75 73 65 64 20   object is used 
df80: 77 69 74 68 20 6c 6f 63 6b 20 73 74 61 74 65 6d  with lock statem
df90: 65 6e 74 73 20 74 6f 20 73 79 6e 63 68 72 6f 6e  ents to synchron
dfa0: 69 7a 65 20 61 63 63 65 73 73 20 74 6f 20 74 68  ize access to th
dfb0: 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  e..    /// <see 
dfc0: 63 72 65 66 3d 22 5f 65 6e 6c 69 73 74 6d 65 6e  cref="_enlistmen
dfd0: 74 22 20 2f 3e 20 66 69 65 6c 64 2c 20 62 65 6c  t" /> field, bel
dfe0: 6f 77 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ow...    /// </s
dff0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
e000: 65 72 6e 61 6c 20 72 65 61 64 6f 6e 6c 79 20 6f  ernal readonly o
e010: 62 6a 65 63 74 20 5f 65 6e 6c 69 73 74 6d 65 6e  bject _enlistmen
e020: 74 53 79 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20  tSyncRoot = new 
e030: 6f 62 6a 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20  object();....   
e040: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e050: 20 20 20 20 2f 2f 2f 20 57 68 65 74 68 65 72 20      /// Whether 
e060: 6f 72 20 6e 6f 74 20 74 68 65 20 63 6f 6e 6e 65  or not the conne
e070: 63 74 69 6f 6e 20 69 73 20 65 6e 6c 69 73 74 65  ction is enliste
e080: 64 20 69 6e 20 61 20 64 69 73 74 72 75 62 75 74  d in a distrubut
e090: 65 64 20 74 72 61 6e 73 61 63 74 69 6f 6e 0d 0a  ed transaction..
e0a0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e0b0: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
e0c0: 20 53 51 4c 69 74 65 45 6e 6c 69 73 74 6d 65 6e   SQLiteEnlistmen
e0d0: 74 20 5f 65 6e 6c 69 73 74 6d 65 6e 74 3b 0d 0a  t _enlistment;..
e0e0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f  #endif....    //
e0f0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e100: 20 2f 2f 2f 20 54 68 65 20 70 65 72 2d 63 6f 6e   /// The per-con
e110: 6e 65 63 74 69 6f 6e 20 6d 61 70 70 69 6e 67 73  nection mappings
e120: 20 62 65 74 77 65 65 6e 20 74 79 70 65 20 6e 61   between type na
e130: 6d 65 73 20 61 6e 64 20 3c 73 65 65 20 63 72 65  mes and <see cre
e140: 66 3d 22 44 62 54 79 70 65 22 20 2f 3e 0d 0a 20  f="DbType" />.. 
e150: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 20 20     /// values.  
e160: 54 68 65 73 65 20 6d 61 70 70 69 6e 67 73 20 6f  These mappings o
e170: 76 65 72 72 69 64 65 20 74 68 65 20 63 6f 72 72  verride the corr
e180: 65 73 70 6f 6e 64 69 6e 67 20 67 6c 6f 62 61 6c  esponding global
e190: 20 6d 61 70 70 69 6e 67 73 2e 0d 0a 20 20 20 20   mappings...    
e1a0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e1b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
e1c0: 69 74 65 44 62 54 79 70 65 4d 61 70 20 5f 74 79  iteDbTypeMap _ty
e1d0: 70 65 4e 61 6d 65 73 3b 0d 0a 0d 0a 20 20 20 20  peNames;....    
e1e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e1f0: 20 20 20 2f 2f 2f 20 54 68 65 20 70 65 72 2d 63     /// The per-c
e200: 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 70 70 69 6e  onnection mappin
e210: 67 73 20 62 65 74 77 65 65 6e 20 74 79 70 65 20  gs between type 
e220: 6e 61 6d 65 73 20 61 6e 64 20 6f 70 74 69 6f 6e  names and option
e230: 61 6c 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20  al callbacks..  
e240: 20 20 2f 2f 2f 20 66 6f 72 20 70 61 72 61 6d 65    /// for parame
e250: 74 65 72 20 62 69 6e 64 69 6e 67 20 61 6e 64 20  ter binding and 
e260: 76 61 6c 75 65 20 72 65 61 64 69 6e 67 2e 0d 0a  value reading...
e270: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e280: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
e290: 53 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61  SQLiteTypeCallba
e2a0: 63 6b 73 4d 61 70 20 5f 74 79 70 65 43 61 6c 6c  cksMap _typeCall
e2b0: 62 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  backs;....    //
e2c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
e2d0: 20 2f 2f 2f 20 54 68 65 20 62 61 73 65 20 53 51   /// The base SQ
e2e0: 4c 69 74 65 20 6f 62 6a 65 63 74 20 74 6f 20 69  Lite object to i
e2f0: 6e 74 65 72 6f 70 20 77 69 74 68 0d 0a 20 20 20  nterop with..   
e300: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e310: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51  .    internal SQ
e320: 4c 69 74 65 42 61 73 65 20 5f 73 71 6c 3b 0d 0a  LiteBase _sql;..
e330: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
e340: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64  >..    /// The d
e350: 61 74 61 62 61 73 65 20 66 69 6c 65 6e 61 6d 65  atabase filename
e360: 20 6d 69 6e 75 73 20 70 61 74 68 20 61 6e 64 20   minus path and 
e370: 65 78 74 65 6e 73 69 6f 6e 0d 0a 20 20 20 20 2f  extension..    /
e380: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
e390: 20 20 20 70 72 69 76 61 74 65 20 73 74 72 69 6e     private strin
e3a0: 67 20 5f 64 61 74 61 53 6f 75 72 63 65 3b 0d 0a  g _dataSource;..
e3b0: 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f  ..#if INTEROP_CO
e3c0: 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49  DEC || INTEROP_I
e3d0: 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20  NCLUDE_SEE..    
e3e0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e3f0: 20 20 20 2f 2f 2f 20 54 65 6d 70 6f 72 61 72 79     /// Temporary
e400: 20 70 61 73 73 77 6f 72 64 20 73 74 6f 72 61 67   password storag
e410: 65 2c 20 65 6d 70 74 69 65 64 20 61 66 74 65 72  e, emptied after
e420: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
e430: 73 20 62 65 65 6e 20 6f 70 65 6e 65 64 0d 0a 20  s been opened.. 
e440: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
e450: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  >..    private b
e460: 79 74 65 5b 5d 20 5f 70 61 73 73 77 6f 72 64 3b  yte[] _password;
e470: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
e480: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
e490: 20 20 20 2f 2f 2f 20 54 68 65 20 22 73 74 75 62     /// The "stub
e4a0: 22 20 28 69 2e 65 2e 20 70 6c 61 63 65 68 6f 6c  " (i.e. placehol
e4b0: 64 65 72 29 20 62 61 73 65 20 73 63 68 65 6d 61  der) base schema
e4c0: 20 6e 61 6d 65 20 74 6f 20 75 73 65 20 77 68 65   name to use whe
e4d0: 6e 20 72 65 74 75 72 6e 69 6e 67 0d 0a 20 20 20  n returning..   
e4e0: 20 2f 2f 2f 20 63 6f 6c 75 6d 6e 20 73 63 68 65   /// column sche
e4f0: 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 0d  ma information..
e500: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
e510: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
e520: 6c 20 73 74 72 69 6e 67 20 5f 62 61 73 65 53 63  l string _baseSc
e530: 68 65 6d 61 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  hemaName;....   
e540: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e550: 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72      /// The extr
e560: 61 20 62 65 68 61 76 69 6f 72 61 6c 20 66 6c 61  a behavioral fla
e570: 67 73 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e  gs for this conn
e580: 65 63 74 69 6f 6e 2c 20 69 66 20 61 6e 79 2e 20  ection, if any. 
e590: 20 53 65 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f   See the..    //
e5a0: 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
e5b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e5c0: 67 73 22 20 2f 3e 20 65 6e 75 6d 65 72 61 74 69  gs" /> enumerati
e5d0: 6f 6e 20 66 6f 72 20 61 20 6c 69 73 74 20 6f 66  on for a list of
e5e0: 0d 0a 20 20 20 20 2f 2f 2f 20 70 6f 73 73 69 62  ..    /// possib
e5f0: 6c 65 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20  le values...    
e600: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
e610: 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c 69      private SQLi
e620: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
e630: 73 20 5f 66 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20  s _flags;....   
e640: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
e650: 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 61 63 68      /// The cach
e660: 65 64 20 76 61 6c 75 65 73 20 66 6f 72 20 61 6c  ed values for al
e670: 6c 20 73 65 74 74 69 6e 67 73 20 74 68 61 74 20  l settings that 
e680: 68 61 76 65 20 62 65 65 6e 20 66 65 74 63 68 65  have been fetche
e690: 64 20 6f 6e 20 62 65 68 61 6c 66 0d 0a 20 20 20  d on behalf..   
e6a0: 20 2f 2f 2f 20 6f 66 20 74 68 69 73 20 63 6f 6e   /// of this con
e6b0: 6e 65 63 74 69 6f 6e 2e 20 20 54 68 69 73 20 63  nection.  This c
e6c0: 61 63 68 65 20 6d 61 79 20 62 65 20 63 6c 65 61  ache may be clea
e6d0: 72 65 64 20 62 79 20 63 61 6c 6c 69 6e 67 20 74  red by calling t
e6e0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65 65  he..    /// <see
e6f0: 20 63 72 65 66 3d 22 43 6c 65 61 72 43 61 63 68   cref="ClearCach
e700: 65 64 53 65 74 74 69 6e 67 73 22 20 2f 3e 20 6d  edSettings" /> m
e710: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
e720: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e730: 70 72 69 76 61 74 65 20 44 69 63 74 69 6f 6e 61  private Dictiona
e740: 72 79 3c 73 74 72 69 6e 67 2c 20 6f 62 6a 65 63  ry<string, objec
e750: 74 3e 20 5f 63 61 63 68 65 64 53 65 74 74 69 6e  t> _cachedSettin
e760: 67 73 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  gs;....    /// <
e770: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
e780: 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 64 61  / The default da
e790: 74 61 62 73 65 20 74 79 70 65 20 66 6f 72 20 74  tabse type for t
e7a0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  his connection. 
e7b0: 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
e7c0: 20 6f 6e 6c 79 0d 0a 20 20 20 20 2f 2f 2f 20 62   only..    /// b
e7d0: 65 20 75 73 65 64 20 69 66 20 74 68 65 20 3c 73  e used if the <s
e7e0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
e7f0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 55  onnectionFlags.U
e800: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 54 79 70 65  seConnectionType
e810: 73 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 66  s" />..    /// f
e820: 6c 61 67 20 69 73 20 73 65 74 2e 0d 0a 20 20 20  lag is set...   
e830: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
e840: 0a 20 20 20 20 70 72 69 76 61 74 65 20 44 62 54  .    private DbT
e850: 79 70 65 3f 20 5f 64 65 66 61 75 6c 74 44 62 54  ype? _defaultDbT
e860: 79 70 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ype;....    /// 
e870: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
e880: 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20 64  // The default d
e890: 61 74 61 62 73 65 20 74 79 70 65 20 6e 61 6d 65  atabse type name
e8a0: 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63   for this connec
e8b0: 74 69 6f 6e 2e 20 20 54 68 69 73 20 76 61 6c 75  tion.  This valu
e8c0: 65 20 77 69 6c 6c 20 6f 6e 6c 79 0d 0a 20 20 20  e will only..   
e8d0: 20 2f 2f 2f 20 62 65 20 75 73 65 64 20 69 66 20   /// be used if 
e8e0: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
e8f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e900: 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69  lags.UseConnecti
e910: 6f 6e 54 79 70 65 73 22 20 2f 3e 0d 0a 20 20 20  onTypes" />..   
e920: 20 2f 2f 2f 20 66 6c 61 67 20 69 73 20 73 65 74   /// flag is set
e930: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
e940: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
e950: 74 65 20 73 74 72 69 6e 67 20 5f 64 65 66 61 75  te string _defau
e960: 6c 74 54 79 70 65 4e 61 6d 65 3b 0d 0a 0d 0a 20  ltTypeName;.... 
e970: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e980: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
e990: 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20 74 6f  me of the VFS to
e9a0: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 6f 70   be used when op
e9b0: 65 6e 69 6e 67 20 74 68 65 20 64 61 74 61 62 61  ening the databa
e9c0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  se connection...
e9d0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
e9e0: 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  y>..    private 
e9f0: 73 74 72 69 6e 67 20 5f 76 66 73 4e 61 6d 65 3b  string _vfsName;
ea00: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
ea10: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
ea20: 65 66 61 75 6c 74 20 63 6f 6d 6d 61 6e 64 20 74  efault command t
ea30: 69 6d 65 6f 75 74 0d 0a 20 20 20 20 2f 2f 2f 20  imeout..    /// 
ea40: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ea50: 70 72 69 76 61 74 65 20 69 6e 74 20 5f 64 65 66  private int _def
ea60: 61 75 6c 74 54 69 6d 65 6f 75 74 20 3d 20 44 65  aultTimeout = De
ea70: 66 61 75 6c 74 43 6f 6e 6e 65 63 74 69 6f 6e 54  faultConnectionT
ea80: 69 6d 65 6f 75 74 3b 0d 0a 0d 0a 20 20 20 20 2f  imeout;....    /
ea90: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
eaa0: 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c    /// The defaul
eab0: 74 20 62 75 73 79 20 74 69 6d 65 6f 75 74 20 74  t busy timeout t
eac0: 6f 20 75 73 65 20 77 69 74 68 20 74 68 65 20 53  o use with the S
ead0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
eae0: 72 79 2e 20 20 54 68 69 73 20 69 73 0d 0a 20 20  ry.  This is..  
eaf0: 20 20 2f 2f 2f 20 6f 6e 6c 79 20 75 73 65 64 20    /// only used 
eb00: 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 61 20 63  when opening a c
eb10: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
eb20: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
eb30: 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74 20      private int 
eb40: 5f 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 44  _busyTimeout = D
eb50: 65 66 61 75 6c 74 42 75 73 79 54 69 6d 65 6f 75  efaultBusyTimeou
eb60: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
eb70: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
eb80: 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  WORK..    /// <s
eb90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
eba0: 20 54 68 65 20 64 65 66 61 75 6c 74 20 77 61 69   The default wai
ebb0: 74 20 74 69 6d 65 6f 75 74 20 74 6f 20 75 73 65  t timeout to use
ebc0: 20 77 69 74 68 20 3c 73 65 65 20 63 72 65 66 3d   with <see cref=
ebd0: 22 57 61 69 74 46 6f 72 45 6e 6c 69 73 74 6d 65  "WaitForEnlistme
ebe0: 6e 74 52 65 73 65 74 22 20 2f 3e 0d 0a 20 20 20  ntReset" />..   
ebf0: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 20 20 54 68   /// method.  Th
ec00: 69 73 20 69 73 20 6f 6e 6c 79 20 75 73 65 64 20  is is only used 
ec10: 77 68 65 6e 20 77 61 69 74 69 6e 67 20 66 6f 72  when waiting for
ec20: 20 74 68 65 20 65 6e 6c 69 73 74 6d 65 6e 74 20   the enlistment 
ec30: 74 6f 20 62 65 20 72 65 73 65 74 0d 0a 20 20 20  to be reset..   
ec40: 20 2f 2f 2f 20 70 72 69 6f 72 20 74 6f 20 65 6e   /// prior to en
ec50: 6c 69 73 74 69 6e 67 20 69 6e 20 61 20 74 72 61  listing in a tra
ec60: 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20 74 68  nsaction, and th
ec70: 65 6e 20 6f 6e 6c 79 20 77 68 65 6e 20 74 68 65  en only when the
ec80: 20 61 70 70 72 6f 70 72 69 61 74 65 0d 0a 20 20   appropriate..  
ec90: 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e    /// connection
eca0: 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0d 0a 20   flag is set... 
ecb0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ecc0: 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 69  >..    private i
ecd0: 6e 74 20 5f 77 61 69 74 54 69 6d 65 6f 75 74 20  nt _waitTimeout 
ece0: 3d 20 44 65 66 61 75 6c 74 57 61 69 74 54 69 6d  = DefaultWaitTim
ecf0: 65 6f 75 74 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  eout;..#endif...
ed00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
ed10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  y>..    /// The 
ed20: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
ed30: 66 20 72 65 74 72 69 65 73 20 77 68 65 6e 20 70  f retries when p
ed40: 72 65 70 61 72 69 6e 67 20 53 51 4c 20 74 6f 20  reparing SQL to 
ed50: 62 65 20 65 78 65 63 75 74 65 64 2e 20 20 54 68  be executed.  Th
ed60: 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6e 6f 72 6d  is..    /// norm
ed70: 61 6c 6c 79 20 6f 6e 6c 79 20 61 70 70 6c 69 65  ally only applie
ed80: 73 20 74 6f 20 70 72 65 70 61 72 61 74 69 6f 6e  s to preparation
ed90: 20 65 72 72 6f 72 73 20 72 65 73 75 6c 74 69 6e   errors resultin
eda0: 67 20 66 72 6f 6d 20 74 68 65 20 64 61 74 61 62  g from the datab
edb0: 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 73 63 68  ase..    /// sch
edc0: 65 6d 61 20 62 65 69 6e 67 20 63 68 61 6e 67 65  ema being change
edd0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
ede0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65  mmary>..    inte
edf0: 72 6e 61 6c 20 69 6e 74 20 5f 70 72 65 70 61 72  rnal int _prepar
ee00: 65 52 65 74 72 69 65 73 20 3d 20 44 65 66 61 75  eRetries = Defau
ee10: 6c 74 50 72 65 70 61 72 65 52 65 74 72 69 65 73  ltPrepareRetries
ee20: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
ee30: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
ee40: 54 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20  The approximate 
ee50: 6e 75 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61  number of virtua
ee60: 6c 20 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75  l machine instru
ee70: 63 74 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 70  ctions between p
ee80: 72 6f 67 72 65 73 73 0d 0a 20 20 20 20 2f 2f 2f  rogress..    ///
ee90: 20 65 76 65 6e 74 73 2e 20 20 49 6e 20 6f 72 64   events.  In ord
eea0: 65 72 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20  er for progress 
eeb0: 65 76 65 6e 74 73 20 74 6f 20 61 63 74 75 61 6c  events to actual
eec0: 6c 79 20 66 69 72 65 2c 20 74 68 65 20 65 76 65  ly fire, the eve
eed0: 6e 74 20 68 61 6e 64 6c 65 72 0d 0a 20 20 20 20  nt handler..    
eee0: 2f 2f 2f 20 6d 75 73 74 20 62 65 20 61 64 64 65  /// must be adde
eef0: 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  d to the <see cr
ef00: 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
ef10: 74 69 6f 6e 2e 50 72 6f 67 72 65 73 73 22 20 2f  tion.Progress" /
ef20: 3e 20 65 76 65 6e 74 20 61 73 0d 0a 20 20 20 20  > event as..    
ef30: 2f 2f 2f 20 77 65 6c 6c 2e 20 20 54 68 69 73 20  /// well.  This 
ef40: 76 61 6c 75 65 20 77 69 6c 6c 20 6f 6e 6c 79 20  value will only 
ef50: 62 65 20 75 73 65 64 20 77 68 65 6e 20 6f 70 65  be used when ope
ef60: 6e 69 6e 67 20 74 68 65 20 64 61 74 61 62 61 73  ning the databas
ef70: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
ef80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
ef90: 61 74 65 20 69 6e 74 20 5f 70 72 6f 67 72 65 73  ate int _progres
efa0: 73 4f 70 73 20 3d 20 44 65 66 61 75 6c 74 50 72  sOps = DefaultPr
efb0: 6f 67 72 65 73 73 4f 70 73 3b 0d 0a 0d 0a 20 20  ogressOps;....  
efc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
efd0: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
efe0: 6f 20 69 66 20 74 68 65 20 62 75 69 6c 74 2d 69  o if the built-i
eff0: 6e 20 28 69 2e 65 2e 20 66 72 61 6d 65 77 6f 72  n (i.e. framewor
f000: 6b 20 70 72 6f 76 69 64 65 64 29 20 63 6f 6e 6e  k provided) conn
f010: 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 0d 0a 20  ection string.. 
f020: 20 20 20 2f 2f 2f 20 70 61 72 73 65 72 20 73 68     /// parser sh
f030: 6f 75 6c 64 20 62 65 20 75 73 65 64 20 77 68 65  ould be used whe
f040: 6e 20 6f 70 65 6e 69 6e 67 20 74 68 65 20 63 6f  n opening the co
f050: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
f060: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f070: 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20     private bool 
f080: 5f 70 61 72 73 65 56 69 61 46 72 61 6d 65 77 6f  _parseViaFramewo
f090: 72 6b 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  rk;....    inter
f0a0: 6e 61 6c 20 62 6f 6f 6c 20 5f 62 69 6e 61 72 79  nal bool _binary
f0b0: 47 75 69 64 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  Guid;....    int
f0c0: 65 72 6e 61 6c 20 69 6e 74 20 5f 76 65 72 73 69  ernal int _versi
f0d0: 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61  on;....    priva
f0e0: 74 65 20 65 76 65 6e 74 20 53 51 4c 69 74 65 50  te event SQLiteP
f0f0: 72 6f 67 72 65 73 73 45 76 65 6e 74 48 61 6e 64  rogressEventHand
f100: 6c 65 72 20 5f 70 72 6f 67 72 65 73 73 48 61 6e  ler _progressHan
f110: 64 6c 65 72 3b 0d 0a 20 20 20 20 70 72 69 76 61  dler;..    priva
f120: 74 65 20 65 76 65 6e 74 20 53 51 4c 69 74 65 41  te event SQLiteA
f130: 75 74 68 6f 72 69 7a 65 72 45 76 65 6e 74 48 61  uthorizerEventHa
f140: 6e 64 6c 65 72 20 5f 61 75 74 68 6f 72 69 7a 65  ndler _authorize
f150: 72 48 61 6e 64 6c 65 72 3b 0d 0a 20 20 20 20 70  rHandler;..    p
f160: 72 69 76 61 74 65 20 65 76 65 6e 74 20 53 51 4c  rivate event SQL
f170: 69 74 65 55 70 64 61 74 65 45 76 65 6e 74 48 61  iteUpdateEventHa
f180: 6e 64 6c 65 72 20 5f 75 70 64 61 74 65 48 61 6e  ndler _updateHan
f190: 64 6c 65 72 3b 0d 0a 20 20 20 20 70 72 69 76 61  dler;..    priva
f1a0: 74 65 20 65 76 65 6e 74 20 53 51 4c 69 74 65 43  te event SQLiteC
f1b0: 6f 6d 6d 69 74 48 61 6e 64 6c 65 72 20 5f 63 6f  ommitHandler _co
f1c0: 6d 6d 69 74 48 61 6e 64 6c 65 72 3b 0d 0a 20 20  mmitHandler;..  
f1d0: 20 20 70 72 69 76 61 74 65 20 65 76 65 6e 74 20    private event 
f1e0: 53 51 4c 69 74 65 54 72 61 63 65 45 76 65 6e 74  SQLiteTraceEvent
f1f0: 48 61 6e 64 6c 65 72 20 5f 74 72 61 63 65 48 61  Handler _traceHa
f200: 6e 64 6c 65 72 3b 0d 0a 20 20 20 20 70 72 69 76  ndler;..    priv
f210: 61 74 65 20 65 76 65 6e 74 20 45 76 65 6e 74 48  ate event EventH
f220: 61 6e 64 6c 65 72 20 5f 72 6f 6c 6c 62 61 63 6b  andler _rollback
f230: 48 61 6e 64 6c 65 72 3b 0d 0a 0d 0a 20 20 20 20  Handler;....    
f240: 70 72 69 76 61 74 65 20 53 51 4c 69 74 65 50 72  private SQLitePr
f250: 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b 20 5f  ogressCallback _
f260: 70 72 6f 67 72 65 73 73 43 61 6c 6c 62 61 63 6b  progressCallback
f270: 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 53  ;..    private S
f280: 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65 72 43  QLiteAuthorizerC
f290: 61 6c 6c 62 61 63 6b 20 5f 61 75 74 68 6f 72 69  allback _authori
f2a0: 7a 65 72 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20  zerCallback;..  
f2b0: 20 20 70 72 69 76 61 74 65 20 53 51 4c 69 74 65    private SQLite
f2c0: 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20 5f  UpdateCallback _
f2d0: 75 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 3b 0d  updateCallback;.
f2e0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 53 51 4c  .    private SQL
f2f0: 69 74 65 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  iteCommitCallbac
f300: 6b 20 5f 63 6f 6d 6d 69 74 43 61 6c 6c 62 61 63  k _commitCallbac
f310: 6b 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  k;..    private 
f320: 53 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62  SQLiteTraceCallb
f330: 61 63 6b 20 5f 74 72 61 63 65 43 61 6c 6c 62 61  ack _traceCallba
f340: 63 6b 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ck;..    private
f350: 20 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43   SQLiteRollbackC
f360: 61 6c 6c 62 61 63 6b 20 5f 72 6f 6c 6c 62 61 63  allback _rollbac
f370: 6b 43 61 6c 6c 62 61 63 6b 3b 0d 0a 20 20 20 20  kCallback;..    
f380: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
f390: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
f3a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f3f0: 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65  /....    private
f400: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
f410: 65 74 44 65 66 61 75 6c 74 43 61 74 61 6c 6f 67  etDefaultCatalog
f420: 4e 61 6d 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Name()..    {.. 
f430: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 64         return _d
f440: 65 66 61 75 6c 74 43 61 74 61 6c 6f 67 4e 61 6d  efaultCatalogNam
f450: 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  e;..    }....   
f460: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
f470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f480: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f490: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f4c0: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
f4d0: 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 44 65  static bool IsDe
f4e0: 66 61 75 6c 74 43 61 74 61 6c 6f 67 4e 61 6d 65  faultCatalogName
f4f0: 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  (..        strin
f500: 67 20 63 61 74 61 6c 6f 67 4e 61 6d 65 0d 0a 20  g catalogName.. 
f510: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
f520: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
f530: 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63  String.Compare(c
f540: 61 74 61 6c 6f 67 4e 61 6d 65 2c 20 47 65 74 44  atalogName, GetD
f550: 65 66 61 75 6c 74 43 61 74 61 6c 6f 67 4e 61 6d  efaultCatalogNam
f560: 65 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e(),..          
f570: 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
f580: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
f590: 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20  Case) == 0;..   
f5a0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
f5b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f5f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f610: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f620: 73 74 72 69 6e 67 20 47 65 74 54 65 6d 70 6f 72  string GetTempor
f630: 61 72 79 43 61 74 61 6c 6f 67 4e 61 6d 65 28 29  aryCatalogName()
f640: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
f650: 20 72 65 74 75 72 6e 20 5f 74 65 6d 70 6f 72 61   return _tempora
f660: 72 79 43 61 74 61 6c 6f 67 4e 61 6d 65 3b 0d 0a  ryCatalogName;..
f670: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
f680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f6d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
f6e0: 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74      private stat
f6f0: 69 63 20 62 6f 6f 6c 20 49 73 54 65 6d 70 6f 72  ic bool IsTempor
f700: 61 72 79 43 61 74 61 6c 6f 67 4e 61 6d 65 28 0d  aryCatalogName(.
f710: 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
f720: 63 61 74 61 6c 6f 67 4e 61 6d 65 0d 0a 20 20 20  catalogName..   
f730: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
f740: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
f750: 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 61 74  ring.Compare(cat
f760: 61 6c 6f 67 4e 61 6d 65 2c 20 47 65 74 54 65 6d  alogName, GetTem
f770: 70 6f 72 61 72 79 43 61 74 61 6c 6f 67 4e 61 6d  poraryCatalogNam
f780: 65 28 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  e(),..          
f790: 20 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73    StringComparis
f7a0: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
f7b0: 43 61 73 65 29 20 3d 3d 20 30 3b 0d 0a 20 20 20  Case) == 0;..   
f7c0: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
f7d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f7f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
f830: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
f840: 73 74 72 69 6e 67 20 47 65 74 4d 61 73 74 65 72  string GetMaster
f850: 54 61 62 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20  TableName(..    
f860: 20 20 20 20 62 6f 6f 6c 20 74 65 6d 70 6f 72 61      bool tempora
f870: 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ry..        ).. 
f880: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
f890: 74 75 72 6e 20 74 65 6d 70 6f 72 61 72 79 20 3f  turn temporary ?
f8a0: 20 5f 74 65 6d 70 6f 72 61 72 79 4d 61 73 74 65   _temporaryMaste
f8b0: 72 54 61 62 6c 65 4e 61 6d 65 20 3a 20 5f 64 65  rTableName : _de
f8c0: 66 61 75 6c 74 4d 61 73 74 65 72 54 61 62 6c 65  faultMasterTable
f8d0: 4e 61 6d 65 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  Name;..    }....
f8e0: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
f8f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f900: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
f940: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
f950: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
f960: 2f 20 54 68 69 73 20 65 76 65 6e 74 20 69 73 20  / This event is 
f970: 72 61 69 73 65 64 20 77 68 65 6e 65 76 65 72 20  raised whenever 
f980: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20  the database is 
f990: 6f 70 65 6e 65 64 20 6f 72 20 63 6c 6f 73 65 64  opened or closed
f9a0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
f9b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
f9c0: 63 20 6f 76 65 72 72 69 64 65 20 65 76 65 6e 74  c override event
f9d0: 20 53 74 61 74 65 43 68 61 6e 67 65 45 76 65 6e   StateChangeEven
f9e0: 74 48 61 6e 64 6c 65 72 20 53 74 61 74 65 43 68  tHandler StateCh
f9f0: 61 6e 67 65 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  ange;....    ///
fa00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
fa50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
fa60: 20 20 20 20 2f 2f 2f 3c 6f 76 65 72 6c 6f 61 64      ///<overload
fa70: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73  s>..    /// Cons
fa80: 74 72 75 63 74 73 20 61 20 6e 65 77 20 53 51 4c  tructs a new SQL
fa90: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62  iteConnection ob
faa0: 6a 65 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ject..    /// </
fab0: 6f 76 65 72 6c 6f 61 64 73 3e 0d 0a 20 20 20 20  overloads>..    
fac0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fad0: 20 20 20 2f 2f 2f 20 44 65 66 61 75 6c 74 20 63     /// Default c
fae0: 6f 6e 73 74 72 75 63 74 6f 72 0d 0a 20 20 20 20  onstructor..    
faf0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
fb00: 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
fb10: 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 29 0d 0a 20  eConnection().. 
fb20: 20 20 20 20 20 3a 20 74 68 69 73 28 28 73 74 72       : this((str
fb30: 69 6e 67 29 6e 75 6c 6c 29 0d 0a 20 20 20 20 7b  ing)null)..    {
fb40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
fb50: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
fb60: 20 20 2f 2f 2f 20 49 6e 69 74 69 61 6c 69 7a 65    /// Initialize
fb70: 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  s the connection
fb80: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
fb90: 69 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  ied connection s
fba0: 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tring...    /// 
fbb0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
fbc0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
fbd0: 22 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  "connectionStrin
fbe0: 67 22 3e 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f  g">The connectio
fbf0: 6e 20 73 74 72 69 6e 67 20 74 6f 20 75 73 65 2e  n string to use.
fc00: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75  </param>..    pu
fc10: 62 6c 69 63 20 53 51 4c 69 74 65 43 6f 6e 6e 65  blic SQLiteConne
fc20: 63 74 69 6f 6e 28 73 74 72 69 6e 67 20 63 6f 6e  ction(string con
fc30: 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 29 0d 0a  nectionString)..
fc40: 20 20 20 20 20 20 20 20 3a 20 74 68 69 73 28 63          : this(c
fc50: 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 2c  onnectionString,
fc60: 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 7b 0d 0a   false)..    {..
fc70: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
fc80: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 7d 0d 0a 0d  thing...    }...
fc90: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
fca0: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
fcb0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
fcc0: 20 20 20 2f 2f 2f 20 49 6e 69 74 69 61 6c 69 7a     /// Initializ
fcd0: 65 73 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  es the connectio
fce0: 6e 20 77 69 74 68 20 61 20 70 72 65 2d 65 78 69  n with a pre-exi
fcf0: 73 74 69 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e  sting native con
fd00: 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 0d  nection handle..
fd10: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 63 6f  .    /// This co
fd20: 6e 73 74 72 75 63 74 6f 72 20 6f 76 65 72 6c 6f  nstructor overlo
fd30: 61 64 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74  ad is intended t
fd40: 6f 20 62 65 20 75 73 65 64 20 6f 6e 6c 79 20 62  o be used only b
fd50: 79 20 74 68 65 20 70 72 69 76 61 74 65 0d 0a 20  y the private.. 
fd60: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
fd70: 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c 65 2e 43  ="SQLiteModule.C
fd80: 72 65 61 74 65 4f 72 43 6f 6e 6e 65 63 74 22 20  reateOrConnect" 
fd90: 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20 20  /> method...    
fda0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
fdb0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
fdc0: 61 6d 65 3d 22 64 62 22 3e 0d 0a 20 20 20 20 2f  ame="db">..    /
fdd0: 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20 63 6f  // The native co
fde0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
fdf0: 74 6f 20 75 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  to use...    ///
fe00: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
fe10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
fe20: 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20  fileName">..    
fe30: 2f 2f 2f 20 54 68 65 20 66 69 6c 65 20 6e 61 6d  /// The file nam
fe40: 65 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e 67 20  e corresponding 
fe50: 74 6f 20 74 68 65 20 6e 61 74 69 76 65 20 63 6f  to the native co
fe60: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 2e  nnection handle.
fe70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
fe80: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
fe90: 61 6d 20 6e 61 6d 65 3d 22 6f 77 6e 48 61 6e 64  am name="ownHand
fea0: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  le">..    /// No
feb0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69 73 20 69  n-zero if this i
fec0: 6e 73 74 61 6e 63 65 20 6f 77 6e 73 20 74 68 65  nstance owns the
fed0: 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69   native connecti
fee0: 6f 6e 20 68 61 6e 64 6c 65 20 61 6e 64 0d 0a 20  on handle and.. 
fef0: 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20 64 69     /// should di
ff00: 73 70 6f 73 65 20 6f 66 20 69 74 20 77 68 65 6e  spose of it when
ff10: 20 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72   it is no longer
ff20: 20 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 2f 2f   needed...    //
ff30: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
ff40: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43  internal SQLiteC
ff50: 6f 6e 6e 65 63 74 69 6f 6e 28 49 6e 74 50 74 72  onnection(IntPtr
ff60: 20 64 62 2c 20 73 74 72 69 6e 67 20 66 69 6c 65   db, string file
ff70: 4e 61 6d 65 2c 20 62 6f 6f 6c 20 6f 77 6e 48 61  Name, bool ownHa
ff80: 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 3a  ndle)..        :
ff90: 20 74 68 69 73 28 29 0d 0a 20 20 20 20 7b 0d 0a   this()..    {..
ffa0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
ffb0: 65 77 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20  ew SQLite3(..   
ffc0: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 44           SQLiteD
ffd0: 61 74 65 46 6f 72 6d 61 74 73 2e 44 65 66 61 75  ateFormats.Defau
ffe0: 6c 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64  lt, DateTimeKind
fff0: 2e 55 6e 73 70 65 63 69 66 69 65 64 2c 20 6e 75  .Unspecified, nu
10000 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
10010 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6f   db, fileName, o
10020 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 0d 0a 20 20  wnHandle);....  
10030 20 20 20 20 20 20 5f 66 6c 61 67 73 20 3d 20 53        _flags = S
10040 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
10050 6c 61 67 73 2e 4e 6f 6e 65 3b 0d 0a 0d 0a 20 20  lags.None;....  
10060 20 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69 6f        _connectio
10070 6e 53 74 61 74 65 20 3d 20 28 64 62 20 21 3d 20  nState = (db != 
10080 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 3f 0d 0a  IntPtr.Zero) ?..
10090 20 20 20 20 20 20 20 20 20 20 20 20 43 6f 6e 6e              Conn
100a0 65 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e  ectionState.Open
100b0 20 3a 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 61   : ConnectionSta
100c0 74 65 2e 43 6c 6f 73 65 64 3b 0d 0a 0d 0a 20 20  te.Closed;....  
100d0 20 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69 6f        _connectio
100e0 6e 53 74 72 69 6e 67 20 3d 20 6e 75 6c 6c 3b 20  nString = null; 
100f0 2f 2a 20 75 6e 6b 6e 6f 77 6e 20 2a 2f 0d 0a 0d  /* unknown */...
10100 0a 23 69 66 20 44 45 42 55 47 0d 0a 20 20 20 20  .#if DEBUG..    
10110 20 20 20 20 5f 64 65 62 75 67 53 74 72 69 6e 67      _debugString
10120 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73   = HelperMethods
10130 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
10140 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
10150 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
10160 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
10170 20 20 20 20 20 20 20 22 64 62 20 3d 20 7b 30 7d         "db = {0}
10180 2c 20 66 69 6c 65 4e 61 6d 65 20 3d 20 7b 31 7d  , fileName = {1}
10190 2c 20 6f 77 6e 48 61 6e 64 6c 65 20 3d 20 7b 32  , ownHandle = {2
101a0 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }",..           
101b0 20 64 62 2c 20 66 69 6c 65 4e 61 6d 65 2c 20 6f   db, fileName, o
101c0 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 23 65 6e 64  wnHandle);..#end
101d0 69 66 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69  if..    }..#endi
101e0 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  f....    /// <su
101f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
10200 49 6e 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20  Initializes the 
10210 63 6f 6e 6e 65 63 74 69 6f 6e 20 77 69 74 68 20  connection with 
10220 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f  the specified co
10230 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e  nnection string.
10240 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
10250 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
10260 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65  aram name="conne
10270 63 74 69 6f 6e 53 74 72 69 6e 67 22 3e 0d 0a 20  ctionString">.. 
10280 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65     /// The conne
10290 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 6f 20  ction string to 
102a0 75 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  use...    /// </
102b0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
102c0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 72  <param name="par
102d0 73 65 56 69 61 46 72 61 6d 65 77 6f 72 6b 22 3e  seViaFramework">
102e0 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
102f0 72 6f 20 74 6f 20 70 61 72 73 65 20 74 68 65 20  ro to parse the 
10300 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
10310 67 20 75 73 69 6e 67 20 74 68 65 20 62 75 69 6c  g using the buil
10320 74 2d 69 6e 20 28 69 2e 65 2e 0d 0a 20 20 20 20  t-in (i.e...    
10330 2f 2f 2f 20 66 72 61 6d 65 77 6f 72 6b 20 70 72  /// framework pr
10340 6f 76 69 64 65 64 29 20 70 61 72 73 65 72 20 77  ovided) parser w
10350 68 65 6e 20 6f 70 65 6e 69 6e 67 20 74 68 65 20  hen opening the 
10360 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
10370 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
10380 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65     public SQLite
10390 43 6f 6e 6e 65 63 74 69 6f 6e 28 73 74 72 69 6e  Connection(strin
103a0 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  g connectionStri
103b0 6e 67 2c 20 62 6f 6f 6c 20 70 61 72 73 65 56 69  ng, bool parseVi
103c0 61 46 72 61 6d 65 77 6f 72 6b 29 0d 0a 20 20 20  aFramework)..   
103d0 20 7b 0d 0a 20 20 20 20 20 20 5f 6e 6f 44 69 73   {..      _noDis
103e0 70 6f 73 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  pose = false;...
103f0 0a 23 69 66 20 28 53 51 4c 49 54 45 5f 53 54 41  .#if (SQLITE_STA
10400 4e 44 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54  NDARD || USE_INT
10410 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54  EROP_DLL || PLAT
10420 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
10430 45 57 4f 52 4b 29 20 26 26 20 50 52 45 4c 4f 41  EWORK) && PRELOA
10440 44 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59  D_NATIVE_LIBRARY
10450 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
10460 74 69 76 65 4d 65 74 68 6f 64 73 2e 49 6e 69 74  tiveMethods.Init
10470 69 61 6c 69 7a 65 28 29 3b 0d 0a 23 65 6e 64 69  ialize();..#endi
10480 66 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74  f....      SQLit
10490 65 4c 6f 67 2e 49 6e 69 74 69 61 6c 69 7a 65 28  eLog.Initialize(
104a0 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
104b0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
104c0 57 4f 52 4b 20 26 26 20 21 49 4e 54 45 52 4f 50  WORK && !INTEROP
104d0 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 20 26 26  _LEGACY_CLOSE &&
104e0 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44   SQLITE_STANDARD
104f0 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20  ..      //..    
10500 20 20 2f 2f 20 4e 4f 54 45 3a 20 43 68 65 63 6b    // NOTE: Check
10510 20 69 66 20 74 68 65 20 73 71 6c 69 74 65 33 5f   if the sqlite3_
10520 63 6c 6f 73 65 5f 76 32 28 29 20 6e 61 74 69 76  close_v2() nativ
10530 65 20 41 50 49 20 73 68 6f 75 6c 64 20 62 65 20  e API should be 
10540 61 76 61 69 6c 61 62 6c 65 0d 0a 20 20 20 20 20  available..     
10550 20 2f 2f 20 20 20 20 20 20 20 74 6f 20 75 73 65   //       to use
10560 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20  .  This must be 
10570 64 6f 6e 65 20 64 79 6e 61 6d 69 63 61 6c 6c 79  done dynamically
10580 20 62 65 63 61 75 73 65 20 74 68 65 20 64 65 6c   because the del
10590 65 67 61 74 65 20 73 65 74 0d 0a 20 20 20 20 20  egate set..     
105a0 20 2f 2f 20 20 20 20 20 20 20 68 65 72 65 20 69   //       here i
105b0 73 20 75 73 65 64 20 62 79 20 74 68 65 20 53 51  s used by the SQ
105c0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
105d0 6e 64 6c 65 20 63 6c 61 73 73 2c 20 77 68 69 63  ndle class, whic
105e0 68 20 69 73 20 61 0d 0a 20 20 20 20 20 20 2f 2f  h is a..      //
105f0 20 20 20 20 20 20 20 43 72 69 74 69 63 61 6c 48         CriticalH
10600 61 6e 64 6c 65 20 64 65 72 69 76 65 64 20 63 6c  andle derived cl
10610 61 73 73 20 28 69 2e 65 2e 20 70 72 6f 74 65 63  ass (i.e. protec
10620 74 65 64 20 62 79 20 61 20 63 6f 6e 73 74 72 61  ted by a constra
10630 69 6e 65 64 0d 0a 20 20 20 20 20 20 2f 2f 20 20  ined..      //  
10640 20 20 20 20 20 65 78 65 63 75 74 69 6f 6e 20 72       execution r
10650 65 67 69 6f 6e 29 2e 20 20 54 68 65 72 65 66 6f  egion).  Therefo
10660 72 65 2c 20 69 66 20 74 68 65 20 75 6e 64 65 72  re, if the under
10670 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 65 6e 74  lying native ent
10680 72 79 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  ry..      //    
10690 20 20 20 70 6f 69 6e 74 20 69 73 20 75 6e 61 76     point is unav
106a0 61 69 6c 61 62 6c 65 2c 20 61 6e 20 65 78 63 65  ailable, an exce
106b0 70 74 69 6f 6e 20 77 69 6c 6c 20 62 65 20 72 61  ption will be ra
106c0 69 73 65 64 20 65 76 65 6e 20 69 66 20 69 74 20  ised even if it 
106d0 69 73 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  is..      //    
106e0 20 20 20 6e 65 76 65 72 20 61 63 74 75 61 6c 6c     never actuall
106f0 79 20 63 61 6c 6c 65 64 20 28 69 2e 65 2e 20 62  y called (i.e. b
10700 65 63 61 75 73 65 20 74 68 65 20 72 75 6e 74 69  ecause the runti
10710 6d 65 20 65 61 67 65 72 6c 79 20 70 72 65 70 61  me eagerly prepa
10720 72 65 73 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20  res..      //   
10730 20 20 20 20 61 6c 6c 20 74 68 65 20 6d 65 74 68      all the meth
10740 6f 64 73 20 69 6e 20 74 68 65 20 63 61 6c 6c 20  ods in the call 
10750 67 72 61 70 68 20 6f 66 20 74 68 65 20 63 6f 6e  graph of the con
10760 73 74 72 61 69 6e 65 64 20 65 78 65 63 75 74 69  strained executi
10770 6f 6e 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  on..      //    
10780 20 20 20 72 65 67 69 6f 6e 29 2e 0d 0a 20 20 20     region)...   
10790 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 6c 6f 63     //..      loc
107a0 6b 20 28 5f 73 79 6e 63 52 6f 6f 74 29 0d 0a 20  k (_syncRoot).. 
107b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
107c0 20 20 69 66 20 28 5f 76 65 72 73 69 6f 6e 4e 75    if (_versionNu
107d0 6d 62 65 72 20 3d 3d 20 30 29 0d 0a 20 20 20 20  mber == 0)..    
107e0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
107f0 20 20 20 20 20 20 20 5f 76 65 72 73 69 6f 6e 4e         _versionN
10800 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 33 2e  umber = SQLite3.
10810 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
10820 62 65 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ber;....        
10830 20 20 20 20 20 20 69 66 20 28 5f 76 65 72 73 69        if (_versi
10840 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30 37  onNumber >= 3007
10850 30 31 34 29 0d 0a 20 20 20 20 20 20 20 20 20 20  014)..          
10860 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
10870 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 2e 63  nnectionHandle.c
10880 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 3d  loseConnection =
10890 20 53 51 4c 69 74 65 42 61 73 65 2e 43 6c 6f 73   SQLiteBase.Clos
108a0 65 43 6f 6e 6e 65 63 74 69 6f 6e 56 32 3b 0d 0a  eConnectionV2;..
108b0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
108c0 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
108d0 23 69 66 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f  #if USE_INTEROP_
108e0 44 4c 4c 20 26 26 20 49 4e 54 45 52 4f 50 5f 4c  DLL && INTEROP_L
108f0 4f 47 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  OG..      SQLite
10900 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
10910 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10920 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  ds.sqlite3_confi
10930 67 5f 6c 6f 67 5f 69 6e 74 65 72 6f 70 28 29 3b  g_log_interop();
10940 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63  ....      if (rc
10950 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
10960 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 7b  ode.Ok)..      {
10970 0d 0a 20 20 20 20 20 20 20 20 20 20 55 6e 73 61  ..          Unsa
10980 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
10990 73 71 6c 69 74 65 33 5f 6c 6f 67 28 0d 0a 20 20  sqlite3_log(..  
109a0 20 20 20 20 20 20 20 20 20 20 20 20 72 63 2c 20              rc, 
109b0 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f  SQLiteConvert.To
109c0 55 54 46 38 28 22 6c 6f 67 67 69 6e 67 20 69 6e  UTF8("logging in
109d0 69 74 69 61 6c 69 7a 65 64 20 76 69 61 20 53 51  itialized via SQ
109e0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 22  LiteConnection."
109f0 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65  ));..      }..#e
10a00 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 5f 63  ndif....      _c
10a10 61 63 68 65 64 53 65 74 74 69 6e 67 73 20 3d 20  achedSettings = 
10a20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 73  new Dictionary<s
10a30 74 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 28 0d  tring, object>(.
10a40 0a 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 54  .          new T
10a50 79 70 65 4e 61 6d 65 53 74 72 69 6e 67 43 6f 6d  ypeNameStringCom
10a60 70 61 72 65 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  parer());....   
10a70 20 20 20 5f 74 79 70 65 4e 61 6d 65 73 20 3d 20     _typeNames = 
10a80 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79 70 65  new SQLiteDbType
10a90 4d 61 70 28 29 3b 0d 0a 20 20 20 20 20 20 5f 74  Map();..      _t
10aa0 79 70 65 43 61 6c 6c 62 61 63 6b 73 20 3d 20 6e  ypeCallbacks = n
10ab0 65 77 20 53 51 4c 69 74 65 54 79 70 65 43 61 6c  ew SQLiteTypeCal
10ac0 6c 62 61 63 6b 73 4d 61 70 28 29 3b 0d 0a 20 20  lbacksMap();..  
10ad0 20 20 20 20 5f 70 61 72 73 65 56 69 61 46 72 61      _parseViaFra
10ae0 6d 65 77 6f 72 6b 20 3d 20 70 61 72 73 65 56 69  mework = parseVi
10af0 61 46 72 61 6d 65 77 6f 72 6b 3b 0d 0a 20 20 20  aFramework;..   
10b00 20 20 20 5f 66 6c 61 67 73 20 3d 20 53 51 4c 69     _flags = SQLi
10b10 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
10b20 73 2e 4e 6f 6e 65 3b 0d 0a 20 20 20 20 20 20 5f  s.None;..      _
10b30 64 65 66 61 75 6c 74 44 62 54 79 70 65 20 3d 20  defaultDbType = 
10b40 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 5f 64 65  null;..      _de
10b50 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 20 3d 20  faultTypeName = 
10b60 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 5f 76 66  null;..      _vf
10b70 73 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  sName = null;.. 
10b80 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e       _connection
10b90 53 74 61 74 65 20 3d 20 43 6f 6e 6e 65 63 74 69  State = Connecti
10ba0 6f 6e 53 74 61 74 65 2e 43 6c 6f 73 65 64 3b 0d  onState.Closed;.
10bb0 0a 20 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69  .      _connecti
10bc0 6f 6e 53 74 72 69 6e 67 20 3d 20 6e 75 6c 6c 3b  onString = null;
10bd0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 63 6f  ....      if (co
10be0 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 21  nnectionString !
10bf0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
10c00 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e   ConnectionStrin
10c10 67 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  g = connectionSt
10c20 72 69 6e 67 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ring;..    }....
10c30 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
10c40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 6f 6e 65  >..    /// Clone
10c50 73 20 74 68 65 20 73 65 74 74 69 6e 67 73 20 61  s the settings a
10c60 6e 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  nd connection st
10c70 72 69 6e 67 20 66 72 6f 6d 20 61 6e 20 65 78 69  ring from an exi
10c80 73 74 69 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e  sting connection
10c90 2e 20 20 49 66 20 74 68 65 20 65 78 69 73 74 69  .  If the existi
10ca0 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73  ng connection is
10cb0 20 61 6c 72 65 61 64 79 20 6f 70 65 6e 2c 20 74   already open, t
10cc0 68 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e  his..    /// fun
10cd0 63 74 69 6f 6e 20 77 69 6c 6c 20 6f 70 65 6e 20  ction will open 
10ce0 69 74 73 20 6f 77 6e 20 63 6f 6e 6e 65 63 74 69  its own connecti
10cf0 6f 6e 2c 20 65 6e 75 6d 65 72 61 74 65 20 61 6e  on, enumerate an
10d00 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  y attached datab
10d10 61 73 65 73 20 6f 66 20 74 68 65 20 6f 72 69 67  ases of the orig
10d20 69 6e 61 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c  inal connection,
10d30 20 61 6e 64 20 61 75 74 6f 6d 61 74 69 63 61 6c   and automatical
10d40 6c 79 0d 0a 20 20 20 20 2f 2f 2f 20 61 74 74 61  ly..    /// atta
10d50 63 68 20 74 6f 20 74 68 65 6d 2e 0d 0a 20 20 20  ch to them...   
10d60 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10d70 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
10d80 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e  name="connection
10d90 22 3e 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ">The connection
10da0 20 74 6f 20 63 6f 70 79 20 74 68 65 20 73 65 74   to copy the set
10db0 74 69 6e 67 73 20 66 72 6f 6d 2e 3c 2f 70 61 72  tings from.</par
10dc0 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  am>..    public 
10dd0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
10de0 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
10df0 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 0d 0a 20  n connection).. 
10e00 20 20 20 20 20 3a 20 74 68 69 73 28 63 6f 6e 6e       : this(conn
10e10 65 63 74 69 6f 6e 2e 43 6f 6e 6e 65 63 74 69 6f  ection.Connectio
10e20 6e 53 74 72 69 6e 67 2c 20 63 6f 6e 6e 65 63 74  nString, connect
10e30 69 6f 6e 2e 50 61 72 73 65 56 69 61 46 72 61 6d  ion.ParseViaFram
10e40 65 77 6f 72 6b 29 0d 0a 20 20 20 20 7b 0d 0a 23  ework)..    {..#
10e50 69 66 20 44 45 42 55 47 0d 0a 20 20 20 20 20 20  if DEBUG..      
10e60 5f 64 65 62 75 67 53 74 72 69 6e 67 20 3d 20 63  _debugString = c
10e70 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 64 65 62 75 67  onnection._debug
10e80 53 74 72 69 6e 67 3b 0d 0a 23 65 6e 64 69 66 0d  String;..#endif.
10e90 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 63 6f 6e  ...      if (con
10ea0 6e 65 63 74 69 6f 6e 2e 53 74 61 74 65 20 3d 3d  nection.State ==
10eb0 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65   ConnectionState
10ec0 2e 4f 70 65 6e 29 0d 0a 20 20 20 20 20 20 7b 0d  .Open)..      {.
10ed0 0a 20 20 20 20 20 20 20 20 4f 70 65 6e 28 29 3b  .        Open();
10ee0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52  ....        // R
10ef0 65 61 74 74 61 63 68 20 61 6c 6c 20 61 74 74 61  eattach all atta
10f00 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20 66  ched databases f
10f10 72 6f 6d 20 74 68 65 20 65 78 69 73 74 69 6e 67  rom the existing
10f20 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..   
10f30 20 20 20 20 20 75 73 69 6e 67 20 28 44 61 74 61       using (Data
10f40 54 61 62 6c 65 20 74 62 6c 20 3d 20 63 6f 6e 6e  Table tbl = conn
10f50 65 63 74 69 6f 6e 2e 47 65 74 53 63 68 65 6d 61  ection.GetSchema
10f60 28 22 43 61 74 61 6c 6f 67 73 22 29 29 0d 0a 20  ("Catalogs")).. 
10f70 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10f80 20 20 20 20 66 6f 72 65 61 63 68 20 28 44 61 74      foreach (Dat
10f90 61 52 6f 77 20 72 6f 77 20 69 6e 20 74 62 6c 2e  aRow row in tbl.
10fa0 52 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20  Rows)..         
10fb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10fc0 73 74 72 69 6e 67 20 73 74 72 20 3d 20 72 6f 77  string str = row
10fd0 5b 30 5d 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d  [0].ToString();.
10fe0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
10ff0 66 20 28 21 49 73 44 65 66 61 75 6c 74 43 61 74  f (!IsDefaultCat
11000 61 6c 6f 67 4e 61 6d 65 28 73 74 72 29 20 26 26  alogName(str) &&
11010 20 21 49 73 54 65 6d 70 6f 72 61 72 79 43 61 74   !IsTemporaryCat
11020 61 6c 6f 67 4e 61 6d 65 28 73 74 72 29 29 0d 0a  alogName(str))..
11030 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
11040 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69               usi
11050 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e  ng (SQLiteComman
11060 64 20 63 6d 64 20 3d 20 43 72 65 61 74 65 43 6f  d cmd = CreateCo
11070 6d 6d 61 6e 64 28 29 29 0d 0a 20 20 20 20 20 20  mmand())..      
11080 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11090 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 43             cmd.C
110a0 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 48 65 6c  ommandText = Hel
110b0 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
110c0 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  gFormat(CultureI
110d0 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
110e0 74 75 72 65 2c 20 22 41 54 54 41 43 48 20 44 41  ture, "ATTACH DA
110f0 54 41 42 41 53 45 20 27 7b 30 7d 27 20 41 53 20  TABASE '{0}' AS 
11100 5b 7b 31 7d 5d 22 2c 20 72 6f 77 5b 31 5d 2c 20  [{1}]", row[1], 
11110 72 6f 77 5b 30 5d 29 3b 0d 0a 20 20 20 20 20 20  row[0]);..      
11120 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 45 78            cmd.Ex
11130 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
11140 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11150 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
11160 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
11170 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
11180 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
11190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
111e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
111f0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
11200 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
11210 74 65 6d 70 74 73 20 74 6f 20 6c 6f 6f 6b 75 70  tempts to lookup
11220 20 74 68 65 20 6e 61 74 69 76 65 20 68 61 6e 64   the native hand
11230 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
11240 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
11250 6e 2e 20 20 41 6e 20 65 78 63 65 70 74 69 6f 6e  n.  An exception
11260 20 77 69 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 62   will..    /// b
11270 65 20 74 68 72 6f 77 6e 20 69 66 20 74 68 69 73  e thrown if this
11280 20 63 61 6e 6e 6f 74 20 62 65 20 61 63 63 6f 6d   cannot be accom
11290 70 6c 69 73 68 65 64 2e 0d 0a 20 20 20 20 2f 2f  plished...    //
112a0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
112b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
112c0 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d  e="connection">.
112d0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e  .    /// The con
112e0 6e 65 63 74 69 6f 6e 20 61 73 73 6f 63 69 61 74  nection associat
112f0 65 64 20 77 69 74 68 20 74 68 65 20 64 65 73 69  ed with the desi
11300 72 65 64 20 6e 61 74 69 76 65 20 68 61 6e 64 6c  red native handl
11310 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
11320 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
11330 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
11340 20 54 68 65 20 6e 61 74 69 76 65 20 68 61 6e 64   The native hand
11350 6c 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  le associated wi
11360 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
11370 6e 20 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22  n or <see cref="
11380 49 6e 74 50 74 72 2e 5a 65 72 6f 22 20 2f 3e 20  IntPtr.Zero" /> 
11390 69 66 20 69 74 0d 0a 20 20 20 20 2f 2f 2f 20 63  if it..    /// c
113a0 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69  annot be determi
113b0 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ned...    /// </
113c0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
113d0 69 76 61 74 65 20 73 74 61 74 69 63 20 53 51 4c  ivate static SQL
113e0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
113f0 64 6c 65 20 47 65 74 4e 61 74 69 76 65 48 61 6e  dle GetNativeHan
11400 64 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53 51  dle(..        SQ
11410 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63  LiteConnection c
11420 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 20  onnection..     
11430 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
11440 20 20 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74       if (connect
11450 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
11460 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
11470 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
11480 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e 6e 65  Exception("conne
11490 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ction");....    
114a0 20 20 20 20 53 51 4c 69 74 65 33 20 73 71 6c 69      SQLite3 sqli
114b0 74 65 33 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  te3 = connection
114c0 2e 5f 73 71 6c 20 61 73 20 53 51 4c 69 74 65 33  ._sql as SQLite3
114d0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
114e0 28 73 71 6c 69 74 65 33 20 3d 3d 20 6e 75 6c 6c  (sqlite3 == null
114f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
11500 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
11510 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
11520 6f 6e 28 22 43 6f 6e 6e 65 63 74 69 6f 6e 20 68  on("Connection h
11530 61 73 20 6e 6f 20 77 72 61 70 70 65 72 22 29 3b  as no wrapper");
11540 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
11550 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
11560 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 71 6c 69  le handle = sqli
11570 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  te3._sql;....   
11580 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
11590 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
115a0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
115b0 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
115c0 45 78 63 65 70 74 69 6f 6e 28 22 43 6f 6e 6e 65  Exception("Conne
115d0 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76  ction has an inv
115e0 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b 0d  alid handle.");.
115f0 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  ...        IntPt
11600 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68 61  r handlePtr = ha
11610 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ndle;....       
11620 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20 3d   if (handlePtr =
11630 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
11640 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
11650 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
11660 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
11670 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20  nException(..   
11680 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 6f               "Co
11690 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20  nnection has an 
116a0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20 70  invalid handle p
116b0 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 20 20 20 20  ointer.");..    
116c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
116d0 20 72 65 74 75 72 6e 20 68 61 6e 64 6c 65 3b 0d   return handle;.
116e0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
116f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
11750 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
11760 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 61 69 73  y>..    /// Rais
11770 65 73 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  es the <see cref
11780 3d 22 43 68 61 6e 67 65 64 22 20 2f 3e 20 65 76  ="Changed" /> ev
11790 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
117a0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
117b0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
117c0 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20  onnection">..   
117d0 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74   /// The connect
117e0 69 6f 6e 20 61 73 73 6f 63 69 61 74 65 64 20 77  ion associated w
117f0 69 74 68 20 74 68 69 73 20 65 76 65 6e 74 2e 20  ith this event. 
11800 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   If this paramet
11810 65 72 20 69 73 20 6e 6f 74 0d 0a 20 20 20 20 2f  er is not..    /
11820 2f 2f 20 6e 75 6c 6c 20 61 6e 64 20 74 68 65 20  // null and the 
11830 73 70 65 63 69 66 69 65 64 20 63 6f 6e 6e 65 63  specified connec
11840 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 72 61 69 73  tion cannot rais
11850 65 20 65 76 65 6e 74 73 2c 20 74 68 65 6e 20 74  e events, then t
11860 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 69  he..    /// regi
11870 73 74 65 72 65 64 20 65 76 65 6e 74 20 68 61 6e  stered event han
11880 64 6c 65 72 73 20 77 69 6c 6c 20 6e 6f 74 20 62  dlers will not b
11890 65 20 69 6e 76 6f 6b 65 64 2e 0d 0a 20 20 20 20  e invoked...    
118a0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
118b0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
118c0 65 3d 22 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  e="e">..    /// 
118d0 41 20 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6e  A <see cref="Con
118e0 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
118f0 22 20 2f 3e 20 74 68 61 74 20 63 6f 6e 74 61 69  " /> that contai
11900 6e 73 20 74 68 65 20 65 76 65 6e 74 20 64 61 74  ns the event dat
11910 61 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  a...    /// </pa
11920 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
11930 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20 4f  al static void O
11940 6e 43 68 61 6e 67 65 64 28 0d 0a 20 20 20 20 20  nChanged(..     
11950 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
11960 69 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d  ion connection,.
11970 0a 20 20 20 20 20 20 20 20 43 6f 6e 6e 65 63 74  .        Connect
11980 69 6f 6e 45 76 65 6e 74 41 72 67 73 20 65 0d 0a  ionEventArgs e..
11990 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
119a0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
119b0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
119c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 63  ..        if ((c
119d0 6f 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c  onnection != nul
119e0 6c 29 20 26 26 20 21 63 6f 6e 6e 65 63 74 69 6f  l) && !connectio
119f0 6e 2e 43 61 6e 52 61 69 73 65 45 76 65 6e 74 73  n.CanRaiseEvents
11a00 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
11a10 65 74 75 72 6e 3b 0d 0a 23 65 6e 64 69 66 0d 0a  eturn;..#endif..
11a20 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
11a30 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 48  ConnectionEventH
11a40 61 6e 64 6c 65 72 20 68 61 6e 64 6c 65 72 73 3b  andler handlers;
11a50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b  ....        lock
11a60 20 28 5f 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20   (_syncRoot)..  
11a70 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11a80 20 20 20 20 20 69 66 20 28 5f 68 61 6e 64 6c 65       if (_handle
11a90 72 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rs != null)..   
11aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
11ab0 64 6c 65 72 73 20 3d 20 5f 68 61 6e 64 6c 65 72  dlers = _handler
11ac0 73 2e 43 6c 6f 6e 65 28 29 20 61 73 20 53 51 4c  s.Clone() as SQL
11ad0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
11ae0 6e 74 48 61 6e 64 6c 65 72 3b 0d 0a 20 20 20 20  ntHandler;..    
11af0 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
11b10 6e 64 6c 65 72 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  ndlers = null;..
11b20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
11b30 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 72       if (handler
11b40 73 20 21 3d 20 6e 75 6c 6c 29 20 68 61 6e 64 6c  s != null) handl
11b50 65 72 73 28 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20  ers(connection, 
11b60 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
11b70 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
11b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11bd0 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
11be0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
11bf0 54 68 69 73 20 65 76 65 6e 74 20 69 73 20 72 61  This event is ra
11c00 69 73 65 64 20 77 68 65 6e 20 65 76 65 6e 74 73  ised when events
11c10 20 72 65 6c 61 74 65 64 20 74 6f 20 74 68 65 20   related to the 
11c20 6c 69 66 65 63 79 63 6c 65 20 6f 66 20 61 0d 0a  lifecycle of a..
11c30 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74 65 43 6f      /// SQLiteCo
11c40 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 20  nnection object 
11c50 6f 63 63 75 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  occur...    /// 
11c60 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
11c70 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 65 76  public static ev
11c80 65 6e 74 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ent SQLiteConnec
11c90 74 69 6f 6e 45 76 65 6e 74 48 61 6e 64 6c 65 72  tionEventHandler
11ca0 20 43 68 61 6e 67 65 64 0d 0a 20 20 20 20 7b 0d   Changed..    {.
11cb0 0a 20 20 20 20 20 20 20 20 61 64 64 0d 0a 20 20  .        add..  
11cc0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
11cd0 20 20 20 20 20 6c 6f 63 6b 20 28 5f 73 79 6e 63       lock (_sync
11ce0 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20 20 20 20  Root)..         
11cf0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11d00 20 20 20 20 20 20 2f 2f 20 52 65 6d 6f 76 65 20        // Remove 
11d10 61 6e 79 20 63 6f 70 69 65 73 20 6f 66 20 74 68  any copies of th
11d20 69 73 20 65 76 65 6e 74 20 68 61 6e 64 6c 65 72  is event handler
11d30 20 66 72 6f 6d 20 72 65 67 69 73 74 65 72 65 64   from registered
11d40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11d50 20 20 2f 2f 20 6c 69 73 74 2e 20 20 54 68 69 73    // list.  This
11d60 20 65 73 73 65 6e 74 69 61 6c 6c 79 20 6d 65 61   essentially mea
11d70 6e 73 20 74 68 61 74 20 61 20 68 61 6e 64 6c 65  ns that a handle
11d80 72 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20 20 20  r will be..     
11d90 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 63 61             // ca
11da0 6c 6c 65 64 20 6f 6e 6c 79 20 6f 6e 63 65 20 6e  lled only once n
11db0 6f 20 6d 61 74 74 65 72 20 68 6f 77 20 6d 61 6e  o matter how man
11dc0 79 20 74 69 6d 65 73 20 69 74 20 69 73 20 61 64  y times it is ad
11dd0 64 65 64 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  ded...          
11de0 20 20 20 20 20 20 5f 68 61 6e 64 6c 65 72 73 20        _handlers 
11df0 2d 3d 20 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20  -= value;....   
11e00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
11e10 41 64 64 20 74 68 69 73 20 74 6f 20 74 68 65 20  Add this to the 
11e20 6c 69 73 74 20 6f 66 20 65 76 65 6e 74 20 68 61  list of event ha
11e30 6e 64 6c 65 72 73 2e 0d 0a 20 20 20 20 20 20 20  ndlers...       
11e40 20 20 20 20 20 20 20 20 20 5f 68 61 6e 64 6c 65           _handle
11e50 72 73 20 2b 3d 20 76 61 6c 75 65 3b 0d 0a 20 20  rs += value;..  
11e60 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
11e70 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11e80 72 65 6d 6f 76 65 0d 0a 20 20 20 20 20 20 20 20  remove..        
11e90 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  {..            l
11ea0 6f 63 6b 20 28 5f 73 79 6e 63 52 6f 6f 74 29 0d  ock (_syncRoot).
11eb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
11ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ed0 5f 68 61 6e 64 6c 65 72 73 20 2d 3d 20 76 61 6c  _handlers -= val
11ee0 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
11ef0 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
11f00 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
11f10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
11f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
11f70 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
11f80 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 70  ..    /// This p
11f90 72 6f 70 65 72 74 79 20 69 73 20 75 73 65 64 20  roperty is used 
11fa0 74 6f 20 6f 62 74 61 69 6e 20 6f 72 20 73 65 74  to obtain or set
11fb0 20 74 68 65 20 63 75 73 74 6f 6d 20 63 6f 6e 6e   the custom conn
11fc0 65 63 74 69 6f 6e 20 70 6f 6f 6c 0d 0a 20 20 20  ection pool..   
11fd0 20 2f 2f 2f 20 69 6d 70 6c 65 6d 65 6e 74 61 74   /// implementat
11fe0 69 6f 6e 20 74 6f 20 75 73 65 2c 20 69 66 20 61  ion to use, if a
11ff0 6e 79 2e 20 20 53 65 74 74 69 6e 67 20 74 68 69  ny.  Setting thi
12000 73 20 70 72 6f 70 65 72 74 79 20 74 6f 20 6e 75  s property to nu
12010 6c 6c 20 77 69 6c 6c 0d 0a 20 20 20 20 2f 2f 2f  ll will..    ///
12020 20 63 61 75 73 65 20 74 68 65 20 64 65 66 61 75   cause the defau
12030 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f  lt connection po
12040 6f 6c 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  ol implementatio
12050 6e 20 74 6f 20 62 65 20 75 73 65 64 2e 0d 0a 20  n to be used... 
12060 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
12070 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74  >..    public st
12080 61 74 69 63 20 49 53 51 4c 69 74 65 43 6f 6e 6e  atic ISQLiteConn
12090 65 63 74 69 6f 6e 50 6f 6f 6c 20 43 6f 6e 6e 65  ectionPool Conne
120a0 63 74 69 6f 6e 50 6f 6f 6c 0d 0a 20 20 20 20 7b  ctionPool..    {
120b0 0d 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20  ..        get { 
120c0 72 65 74 75 72 6e 20 53 51 4c 69 74 65 43 6f 6e  return SQLiteCon
120d0 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 47 65 74 43  nectionPool.GetC
120e0 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 28 29 3b  onnectionPool();
120f0 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   }..        set 
12100 7b 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  { SQLiteConnecti
12110 6f 6e 50 6f 6f 6c 2e 53 65 74 43 6f 6e 6e 65 63  onPool.SetConnec
12120 74 69 6f 6e 50 6f 6f 6c 28 76 61 6c 75 65 29 3b  tionPool(value);
12130 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
12140 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
12150 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
121a0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
121b0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
121c0 72 65 61 74 65 73 20 61 6e 64 20 72 65 74 75 72  reates and retur
121d0 6e 73 20 61 20 6e 65 77 20 6d 61 6e 61 67 65 64  ns a new managed
121e0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
121f0 74 69 6f 6e 20 68 61 6e 64 6c 65 2e 20 20 54 68  tion handle.  Th
12200 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68  is..    /// meth
12210 6f 64 20 69 73 20 69 6e 74 65 6e 64 65 64 20 74  od is intended t
12220 6f 20 62 65 20 75 73 65 64 20 62 79 20 69 6d 70  o be used by imp
12230 6c 65 6d 65 6e 74 61 74 69 6f 6e 73 20 6f 66 20  lementations of 
12240 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  the..    /// <se
12250 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 43  e cref="ISQLiteC
12260 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 22 20 2f  onnectionPool" /
12270 3e 20 69 6e 74 65 72 66 61 63 65 20 6f 6e 6c 79  > interface only
12280 2e 20 20 49 6e 20 74 68 65 6f 72 79 2c 20 69 74  .  In theory, it
12290 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 75 6c 64 20  ..    /// could 
122a0 62 65 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  be used by other
122b0 20 63 6c 61 73 73 65 73 3b 20 68 6f 77 65 76 65   classes; howeve
122c0 72 2c 20 74 68 61 74 20 75 73 61 67 65 20 69 73  r, that usage is
122d0 20 6e 6f 74 20 73 75 70 70 6f 72 74 65 64 2e 0d   not supported..
122e0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
122f0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
12300 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 74 69 76 65  ram name="native
12310 48 61 6e 64 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  Handle">..    //
12320 2f 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 61  / This must be a
12330 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73 65   native database
12340 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
12350 6c 65 20 72 65 74 75 72 6e 65 64 20 62 79 20 74  le returned by t
12360 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69  he..    /// SQLi
12370 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
12380 61 6e 64 20 69 74 20 6d 75 73 74 20 72 65 6d 61  and it must rema
12390 69 6e 20 76 61 6c 69 64 20 61 6e 64 20 6f 70 65  in valid and ope
123a0 6e 20 64 75 72 69 6e 67 20 74 68 65 0d 0a 20 20  n during the..  
123b0 20 20 2f 2f 2f 20 65 6e 74 69 72 65 20 64 75 72    /// entire dur
123c0 61 74 69 6f 6e 20 6f 66 20 74 68 65 20 63 61 6c  ation of the cal
123d0 6c 69 6e 67 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  ling method...  
123e0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
123f0 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
12400 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
12410 65 77 20 6d 61 6e 61 67 65 64 20 64 61 74 61 62  ew managed datab
12420 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ase connection h
12430 61 6e 64 6c 65 20 6f 72 20 6e 75 6c 6c 20 69 66  andle or null if
12440 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 0d 0a 20   it cannot be.. 
12450 20 20 20 2f 2f 2f 20 63 72 65 61 74 65 64 2e 0d     /// created..
12460 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
12470 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
12480 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 43 72  static object Cr
12490 65 61 74 65 48 61 6e 64 6c 65 28 0d 0a 20 20 20  eateHandle(..   
124a0 20 20 20 20 20 49 6e 74 50 74 72 20 6e 61 74 69       IntPtr nati
124b0 76 65 48 61 6e 64 6c 65 0d 0a 20 20 20 20 20 20  veHandle..      
124c0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
124d0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
124e0 74 69 6f 6e 48 61 6e 64 6c 65 20 72 65 73 75 6c  tionHandle resul
124f0 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  t;....        tr
12500 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
12510 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
12520 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
12530 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
12540 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
12550 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
12560 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
12570 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
12580 20 20 20 20 72 65 73 75 6c 74 20 3d 20 28 6e 61      result = (na
12590 74 69 76 65 48 61 6e 64 6c 65 20 21 3d 20 49 6e  tiveHandle != In
125a0 74 50 74 72 2e 5a 65 72 6f 29 20 3f 0d 0a 20 20  tPtr.Zero) ?..  
125b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 65                ne
125c0 77 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  w SQLiteConnecti
125d0 6f 6e 48 61 6e 64 6c 65 28 6e 61 74 69 76 65 48  onHandle(nativeH
125e0 61 6e 64 6c 65 2c 20 74 72 75 65 29 20 3a 20 6e  andle, true) : n
125f0 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ull;..        }.
12600 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72  ...        if (r
12610 65 73 75 6c 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a  esult != null)..
12620 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
12630 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
12640 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
12650 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e  d(null, new Conn
12660 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
12670 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
12680 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
12690 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43  onEventType.NewC
126a0 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e  riticalHandle, n
126b0 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ull,..          
126c0 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
126d0 2c 20 6e 75 6c 6c 2c 20 72 65 73 75 6c 74 2c 20  , null, result, 
126e0 6e 75 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74  null, new object
126f0 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
12700 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
12710 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 2c 20  iteConnection), 
12720 6e 61 74 69 76 65 48 61 6e 64 6c 65 20 7d 29 29  nativeHandle }))
12730 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
12740 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
12750 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  esult;..    }...
12760 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
12770 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12780 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
12790 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
127a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
127b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
127c0 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
127d0 69 6f 6e 20 42 61 63 6b 75 70 20 41 50 49 20 4d  ion Backup API M
127e0 65 6d 62 65 72 73 0d 0a 20 20 20 20 2f 2f 2f 20  embers..    /// 
127f0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
12800 2f 2f 20 42 61 63 6b 73 20 75 70 20 74 68 65 20  // Backs up the 
12810 64 61 74 61 62 61 73 65 2c 20 75 73 69 6e 67 20  database, using 
12820 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61  the specified da
12830 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
12840 6e 20 61 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f  n as the..    //
12850 2f 20 64 65 73 74 69 6e 61 74 69 6f 6e 2e 0d 0a  / destination...
12860 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
12870 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
12880 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 69 6e 61  am name="destina
12890 74 69 6f 6e 22 3e 54 68 65 20 64 65 73 74 69 6e  tion">The destin
128a0 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63  ation database c
128b0 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
128c0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
128d0 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 69 6e 61  am name="destina
128e0 74 69 6f 6e 4e 61 6d 65 22 3e 54 68 65 20 64 65  tionName">The de
128f0 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62 61  stination databa
12900 73 65 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e  se name.</param>
12910 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
12920 20 6e 61 6d 65 3d 22 73 6f 75 72 63 65 4e 61 6d   name="sourceNam
12930 65 22 3e 54 68 65 20 73 6f 75 72 63 65 20 64 61  e">The source da
12940 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70 61  tabase name.</pa
12950 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
12960 61 72 61 6d 20 6e 61 6d 65 3d 22 70 61 67 65 73  aram name="pages
12970 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
12980 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
12990 74 6f 20 63 6f 70 79 20 61 74 20 61 20 74 69 6d  to copy at a tim
129a0 65 20 2d 4f 52 2d 20 61 20 6e 65 67 61 74 69 76  e -OR- a negativ
129b0 65 20 76 61 6c 75 65 20 74 6f 20 63 6f 70 79 20  e value to copy 
129c0 61 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 70 61 67  all..    /// pag
129d0 65 73 2e 20 20 57 68 65 6e 20 61 20 6e 65 67 61  es.  When a nega
129e0 74 69 76 65 20 76 61 6c 75 65 20 69 73 20 75 73  tive value is us
129f0 65 64 2c 20 74 68 65 20 3c 70 61 72 61 6d 72 65  ed, the <paramre
12a00 66 20 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b  f name="callback
12a10 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 61  " />..    /// ma
12a20 79 20 6e 65 76 65 72 20 62 65 20 69 6e 76 6f 6b  y never be invok
12a30 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
12a40 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
12a50 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c 6c  param name="call
12a60 62 61 63 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  back">..    /// 
12a70 54 68 65 20 6d 65 74 68 6f 64 20 74 6f 20 69 6e  The method to in
12a80 76 6f 6b 65 20 62 65 74 77 65 65 6e 20 65 61 63  voke between eac
12a90 68 20 73 74 65 70 20 6f 66 20 74 68 65 20 62 61  h step of the ba
12aa0 63 6b 75 70 20 70 72 6f 63 65 73 73 2e 20 20 54  ckup process.  T
12ab0 68 69 73 0d 0a 20 20 20 20 2f 2f 2f 20 70 61 72  his..    /// par
12ac0 61 6d 65 74 65 72 20 6d 61 79 20 62 65 20 6e 75  ameter may be nu
12ad0 6c 6c 20 28 69 2e 65 2e 20 6e 6f 20 63 61 6c 6c  ll (i.e. no call
12ae0 62 61 63 6b 73 20 77 69 6c 6c 20 62 65 20 70 65  backs will be pe
12af0 72 66 6f 72 6d 65 64 29 2e 20 20 49 66 20 74 68  rformed).  If th
12b00 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 62  e..    /// callb
12b10 61 63 6b 20 72 65 74 75 72 6e 73 20 66 61 6c 73  ack returns fals
12b20 65 20 2d 4f 52 2d 20 74 68 72 6f 77 73 20 61 6e  e -OR- throws an
12b30 20 65 78 63 65 70 74 69 6f 6e 2c 20 74 68 65 20   exception, the 
12b40 62 61 63 6b 75 70 20 69 73 20 63 61 6e 63 65 6c  backup is cancel
12b50 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
12b60 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
12b70 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72  param name="retr
12b80 79 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 22 3e 0d  yMilliseconds">.
12b90 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
12ba0 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
12bb0 6e 64 73 20 74 6f 20 73 6c 65 65 70 20 61 66 74  nds to sleep aft
12bc0 65 72 20 65 6e 63 6f 75 6e 74 65 72 69 6e 67 20  er encountering 
12bd0 61 20 6c 6f 63 6b 69 6e 67 20 65 72 72 6f 72 0d  a locking error.
12be0 0a 20 20 20 20 2f 2f 2f 20 64 75 72 69 6e 67 20  .    /// during 
12bf0 74 68 65 20 62 61 63 6b 75 70 20 70 72 6f 63 65  the backup proce
12c00 73 73 2e 20 20 41 20 76 61 6c 75 65 20 6c 65 73  ss.  A value les
12c10 73 20 74 68 61 6e 20 7a 65 72 6f 20 6d 65 61 6e  s than zero mean
12c20 73 20 74 68 61 74 20 6e 6f 20 73 6c 65 65 70 0d  s that no sleep.
12c30 0a 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64 20  .    /// should 
12c40 62 65 20 70 65 72 66 6f 72 6d 65 64 2e 0d 0a 20  be performed... 
12c50 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
12c60 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64  .    public void
12c70 20 42 61 63 6b 75 70 44 61 74 61 62 61 73 65 28   BackupDatabase(
12c80 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
12c90 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 69  Connection desti
12ca0 6e 61 74 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20  nation,..       
12cb0 20 73 74 72 69 6e 67 20 64 65 73 74 69 6e 61 74   string destinat
12cc0 69 6f 6e 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ionName,..      
12cd0 20 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 4e    string sourceN
12ce0 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 69 6e  ame,..        in
12cf0 74 20 70 61 67 65 73 2c 0d 0a 20 20 20 20 20 20  t pages,..      
12d00 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 43 61    SQLiteBackupCa
12d10 6c 6c 62 61 63 6b 20 63 61 6c 6c 62 61 63 6b 2c  llback callback,
12d20 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  ..        int re
12d30 74 72 79 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 0d  tryMilliseconds.
12d40 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20  .        )..    
12d50 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
12d60 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
12d70 20 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6e 6e         if (_conn
12d80 65 63 74 69 6f 6e 53 74 61 74 65 20 21 3d 20 43  ectionState != C
12d90 6f 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65 2e 4f  onnectionState.O
12da0 70 65 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20  pen)..          
12db0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
12dc0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
12dd0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
12de0 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20          "Source 
12df0 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
12e00 6f 70 65 6e 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  open.");....    
12e10 20 20 20 20 69 66 20 28 64 65 73 74 69 6e 61 74      if (destinat
12e20 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
12e30 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
12e40 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
12e50 45 78 63 65 70 74 69 6f 6e 28 22 64 65 73 74 69  Exception("desti
12e60 6e 61 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20  nation");....   
12e70 20 20 20 20 20 69 66 20 28 64 65 73 74 69 6e 61       if (destina
12e80 74 69 6f 6e 2e 5f 63 6f 6e 6e 65 63 74 69 6f 6e  tion._connection
12e90 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74  State != Connect
12ea0 69 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29 0d 0a  ionState.Open)..
12eb0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
12ec0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78  w new ArgumentEx
12ed0 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
12ee0 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74 69            "Desti
12ef0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
12f00 69 73 20 6e 6f 74 20 6f 70 65 6e 2e 22 2c 20 22  is not open.", "
12f10 64 65 73 74 69 6e 61 74 69 6f 6e 22 29 3b 0d 0a  destination");..
12f20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65  ..        if (de
12f30 73 74 69 6e 61 74 69 6f 6e 4e 61 6d 65 20 3d 3d  stinationName ==
12f40 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
12f50 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
12f60 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
12f70 69 6f 6e 28 22 64 65 73 74 69 6e 61 74 69 6f 6e  ion("destination
12f80 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
12f90 20 20 20 69 66 20 28 73 6f 75 72 63 65 4e 61 6d     if (sourceNam
12fa0 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  e == null)..    
12fb0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
12fc0 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78  w ArgumentNullEx
12fd0 63 65 70 74 69 6f 6e 28 22 73 6f 75 72 63 65 4e  ception("sourceN
12fe0 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ame");....      
12ff0 20 20 53 51 4c 69 74 65 42 61 73 65 20 73 71 6c    SQLiteBase sql
13000 69 74 65 42 61 73 65 20 3d 20 5f 73 71 6c 3b 0d  iteBase = _sql;.
13010 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
13020 71 6c 69 74 65 42 61 73 65 20 3d 3d 20 6e 75 6c  qliteBase == nul
13030 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
13040 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
13050 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
13060 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
13070 20 20 20 20 20 20 22 43 6f 6e 6e 65 63 74 69 6f        "Connectio
13080 6e 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  n object has an 
13090 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
130a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  );....        SQ
130b0 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
130c0 70 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  p = null;....   
130d0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
130e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
130f0 20 62 61 63 6b 75 70 20 3d 20 73 71 6c 69 74 65   backup = sqlite
13100 42 61 73 65 2e 49 6e 69 74 69 61 6c 69 7a 65 42  Base.InitializeB
13110 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
13120 20 20 20 20 20 20 20 20 64 65 73 74 69 6e 61 74          destinat
13130 69 6f 6e 2c 20 64 65 73 74 69 6e 61 74 69 6f 6e  ion, destination
13140 4e 61 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65  Name, sourceName
13150 29 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a  ); /* throw */..
13160 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 6f  ..            bo
13170 6f 6c 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65  ol retry = false
13180 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
13190 20 77 68 69 6c 65 20 28 73 71 6c 69 74 65 42 61   while (sqliteBa
131a0 73 65 2e 53 74 65 70 42 61 63 6b 75 70 28 62 61  se.StepBackup(ba
131b0 63 6b 75 70 2c 20 70 61 67 65 73 2c 20 72 65 66  ckup, pages, ref
131c0 20 72 65 74 72 79 29 29 20 2f 2a 20 74 68 72 6f   retry)) /* thro
131d0 77 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 20 20  w */..          
131e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
131f0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
13200 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
13210 3a 20 49 66 20 61 20 63 61 6c 6c 62 61 63 6b 20  : If a callback 
13220 77 61 73 20 73 75 70 70 6c 69 65 64 20 62 79 20  was supplied by 
13230 6f 75 72 20 63 61 6c 6c 65 72 2c 20 63 61 6c 6c  our caller, call
13240 20 69 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20   it...          
13250 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 49        //       I
13260 66 20 69 74 20 72 65 74 75 72 6e 73 20 66 61 6c  f it returns fal
13270 73 65 2c 20 68 61 6c 74 20 74 68 65 20 62 61 63  se, halt the bac
13280 6b 75 70 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20  kup process...  
13290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
132a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
132b0 20 20 69 66 20 28 28 63 61 6c 6c 62 61 63 6b 20    if ((callback 
132c0 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 63 61 6c  != null) && !cal
132d0 6c 62 61 63 6b 28 74 68 69 73 2c 20 73 6f 75 72  lback(this, sour
132e0 63 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20  ceName,..       
132f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13300 20 64 65 73 74 69 6e 61 74 69 6f 6e 2c 20 64 65   destination, de
13310 73 74 69 6e 61 74 69 6f 6e 4e 61 6d 65 2c 20 70  stinationName, p
13320 61 67 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 20  ages,..         
13330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73                 s
13340 71 6c 69 74 65 42 61 73 65 2e 52 65 6d 61 69 6e  qliteBase.Remain
13350 69 6e 67 42 61 63 6b 75 70 28 62 61 63 6b 75 70  ingBackup(backup
13360 29 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ),..            
13370 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
13380 74 65 42 61 73 65 2e 50 61 67 65 43 6f 75 6e 74  teBase.PageCount
13390 42 61 63 6b 75 70 28 62 61 63 6b 75 70 29 2c 20  Backup(backup), 
133a0 72 65 74 72 79 29 29 0d 0a 20 20 20 20 20 20 20  retry))..       
133b0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
133c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
133d0 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20  break;..        
133e0 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
133f0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d               //.
13400 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13410 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 77 65 20   // NOTE: If we 
13420 6e 65 65 64 20 74 6f 20 72 65 74 72 79 20 74 68  need to retry th
13430 65 20 70 72 65 76 69 6f 75 73 20 6f 70 65 72 61  e previous opera
13440 74 69 6f 6e 2c 20 77 61 69 74 20 66 6f 72 0d 0a  tion, wait for..
13450 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13460 2f 2f 20 20 20 20 20 20 20 74 68 65 20 6e 75 6d  //       the num
13470 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
13480 6e 64 73 20 73 70 65 63 69 66 69 65 64 20 62 79  nds specified by
13490 20 6f 75 72 20 63 61 6c 6c 65 72 0d 0a 20 20 20   our caller..   
134a0 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
134b0 20 20 20 20 20 20 75 6e 6c 65 73 73 20 74 68 65        unless the
134c0 20 63 61 6c 6c 65 72 20 75 73 65 64 20 61 20 6e   caller used a n
134d0 65 67 61 74 69 76 65 20 6e 75 6d 62 65 72 2c 20  egative number, 
134e0 69 6e 20 74 68 61 74 20 63 61 73 65 0d 0a 20 20  in that case..  
134f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
13500 20 20 20 20 20 20 20 73 6b 69 70 20 73 6c 65 65         skip slee
13510 70 69 6e 67 20 61 74 20 61 6c 6c 20 62 65 63 61  ping at all beca
13520 75 73 65 20 77 65 20 64 6f 20 6e 6f 74 20 77 61  use we do not wa
13530 6e 74 20 74 6f 20 62 6c 6f 63 6b 0d 0a 20 20 20  nt to block..   
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
13550 20 20 20 20 20 20 74 68 69 73 20 74 68 72 65 61        this threa
13560 64 20 66 6f 72 65 76 65 72 2e 0d 0a 20 20 20 20  d forever...    
13570 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
13580 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13590 69 66 20 28 72 65 74 72 79 20 26 26 20 28 72 65  if (retry && (re
135a0 74 72 79 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  tryMilliseconds 
135b0 3e 3d 20 30 29 29 0d 0a 20 20 20 20 20 20 20 20  >= 0))..        
135c0 20 20 20 20 20 20 20 20 20 20 20 20 54 68 72 65              Thre
135d0 61 64 2e 53 6c 65 65 70 28 72 65 74 72 79 4d 69  ad.Sleep(retryMi
135e0 6c 6c 69 73 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a  lliseconds);....
135f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13600 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
13610 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68 65      // NOTE: The
13620 72 65 20 69 73 20 6e 6f 20 70 6f 69 6e 74 20 69  re is no point i
13630 6e 20 63 61 6c 6c 69 6e 67 20 74 68 65 20 6e 61  n calling the na
13640 74 69 76 65 20 41 50 49 20 74 6f 20 63 6f 70 79  tive API to copy
13650 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
13660 20 20 2f 2f 20 20 20 20 20 20 20 7a 65 72 6f 20    //       zero 
13670 70 61 67 65 73 20 61 73 20 69 74 20 64 6f 65 73  pages as it does
13680 20 6e 6f 74 68 69 6e 67 3b 20 74 68 65 72 65 66   nothing; theref
13690 6f 72 65 2c 20 73 74 6f 70 20 6e 6f 77 2e 0d 0a  ore, stop now...
136a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
136b0 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
136c0 20 20 20 20 69 66 20 28 70 61 67 65 73 20 3d 3d      if (pages ==
136d0 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
136e0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
136f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
13700 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
13710 20 20 20 63 61 74 63 68 20 28 45 78 63 65 70 74     catch (Except
13720 69 6f 6e 20 65 29 0d 0a 20 20 20 20 20 20 20 20  ion e)..        
13730 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
13740 66 20 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  f (HelperMethods
13750 2e 4c 6f 67 42 61 63 6b 75 70 28 5f 66 6c 61 67  .LogBackup(_flag
13760 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  s))..           
13770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13780 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f      SQLiteLog.Lo
13790 67 4d 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d  gMessage(HelperM
137a0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
137b0 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
137c0 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
137d0 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
137e0 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
137f0 20 20 20 20 20 20 20 20 20 20 20 22 43 61 75 67             "Caug
13800 68 74 20 65 78 63 65 70 74 69 6f 6e 20 77 68 69  ht exception whi
13810 6c 65 20 62 61 63 6b 69 6e 67 20 75 70 20 64 61  le backing up da
13820 74 61 62 61 73 65 3a 20 7b 30 7d 22 2c 20 65 29  tabase: {0}", e)
13830 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
13840 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
13850 20 74 68 72 6f 77 3b 0d 0a 20 20 20 20 20 20 20   throw;..       
13860 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
13870 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
13880 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
13890 62 61 63 6b 75 70 20 21 3d 20 6e 75 6c 6c 29 0d  backup != null).
138a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
138b0 20 73 71 6c 69 74 65 42 61 73 65 2e 46 69 6e 69   sqliteBase.Fini
138c0 73 68 42 61 63 6b 75 70 28 62 61 63 6b 75 70 29  shBackup(backup)
138d0 3b 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20  ; /* throw */.. 
138e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
138f0 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
13900 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
13910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13920 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13930 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13940 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13960 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
13970 65 67 69 6f 6e 20 50 65 72 2d 43 6f 6e 6e 65 63  egion Per-Connec
13980 74 69 6f 6e 20 53 65 74 74 69 6e 67 73 0d 0a 20  tion Settings.. 
13990 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
139a0 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c 65 61 72 73  ..    /// Clears
139b0 20 74 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63 74   the per-connect
139c0 69 6f 6e 20 63 61 63 68 65 64 20 73 65 74 74 69  ion cached setti
139d0 6e 67 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ngs...    /// </
139e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
139f0 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
13a00 20 2f 2f 2f 20 54 68 65 20 74 6f 74 61 6c 20 6e   /// The total n
13a10 75 6d 62 65 72 20 6f 66 20 70 65 72 2d 63 6f 6e  umber of per-con
13a20 6e 65 63 74 69 6f 6e 20 73 65 74 74 69 6e 67 73  nection settings
13a30 20 63 6c 65 61 72 65 64 2e 0d 0a 20 20 20 20 2f   cleared...    /
13a40 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
13a50 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 43 6c     public int Cl
13a60 65 61 72 43 61 63 68 65 64 53 65 74 74 69 6e 67  earCachedSetting
13a70 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  s()..    {..    
13a80 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
13a90 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
13aa0 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 2d 31 3b  int result = -1;
13ab0 20 2f 2a 20 4e 4f 20 53 45 54 54 49 4e 47 53 20   /* NO SETTINGS 
13ac0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  */....        if
13ad0 20 28 5f 63 61 63 68 65 64 53 65 74 74 69 6e 67   (_cachedSetting
13ae0 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
13af0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
13b00 20 20 20 72 65 73 75 6c 74 20 3d 20 5f 63 61 63     result = _cac
13b10 68 65 64 53 65 74 74 69 6e 67 73 2e 43 6f 75 6e  hedSettings.Coun
13b20 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
13b30 5f 63 61 63 68 65 64 53 65 74 74 69 6e 67 73 2e  _cachedSettings.
13b40 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20  Clear();..      
13b50 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
13b60 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
13b70 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
13b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
13bd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
13be0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
13bf0 0d 0a 20 20 20 20 2f 2f 2f 20 51 75 65 72 69 65  ..    /// Querie
13c00 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
13c10 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73  e value of the s
13c20 70 65 63 69 66 69 65 64 20 73 65 74 74 69 6e 67  pecified setting
13c30 2c 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  , using the..   
13c40 20 2f 2f 2f 20 63 61 63 68 65 64 20 73 65 74 74   /// cached sett
13c50 69 6e 67 20 6e 61 6d 65 73 20 61 6e 64 20 76 61  ing names and va
13c60 6c 75 65 73 20 66 6f 72 20 74 68 69 73 20 63 6f  lues for this co
13c70 6e 6e 65 63 74 69 6f 6e 2c 20 77 68 65 6e 20 61  nnection, when a
13c80 76 61 69 6c 61 62 6c 65 2e 0d 0a 20 20 20 20 2f  vailable...    /
13c90 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
13ca0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
13cb0 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20  me="name">..    
13cc0 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20  /// The name of 
13cd0 74 68 65 20 73 65 74 74 69 6e 67 2e 0d 0a 20 20  the setting...  
13ce0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
13cf0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
13d00 61 6d 65 3d 22 64 65 66 61 75 6c 74 22 3e 0d 0a  ame="default">..
13d10 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75      /// The valu
13d20 65 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64  e to be returned
13d30 20 69 66 20 74 68 65 20 73 65 74 74 69 6e 67 20   if the setting 
13d40 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 73 65 74  has not been set
13d50 20 65 78 70 6c 69 63 69 74 6c 79 0d 0a 20 20 20   explicitly..   
13d60 20 2f 2f 2f 20 6f 72 20 63 61 6e 6e 6f 74 20 62   /// or cannot b
13d70 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20  e determined... 
13d80 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
13d90 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
13da0 6e 61 6d 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20  name="value">.. 
13db0 20 20 20 2f 2f 2f 20 54 68 65 20 76 61 6c 75 65     /// The value
13dc0 20 6f 66 20 74 68 65 20 63 61 63 68 65 64 20 73   of the cached s
13dd0 65 74 74 69 6e 67 20 69 73 20 73 74 6f 72 65 64  etting is stored
13de0 20 68 65 72 65 20 69 66 20 66 6f 75 6e 64 3b 20   here if found; 
13df0 6f 74 68 65 72 77 69 73 65 2c 0d 0a 20 20 20 20  otherwise,..    
13e00 2f 2f 2f 20 74 68 65 20 76 61 6c 75 65 20 6f 66  /// the value of
13e10 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
13e20 22 64 65 66 61 75 6c 74 22 20 2f 3e 20 69 73 20  "default" /> is 
13e30 73 74 6f 72 65 64 20 68 65 72 65 2e 0d 0a 20 20  stored here...  
13e40 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
13e50 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
13e60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
13e70 65 72 6f 20 69 66 20 74 68 65 20 63 61 63 68 65  ero if the cache
13e80 64 20 73 65 74 74 69 6e 67 20 77 61 73 20 66 6f  d setting was fo
13e90 75 6e 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  und; otherwise, 
13ea0 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
13eb0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
13ec0 6e 74 65 72 6e 61 6c 20 62 6f 6f 6c 20 54 72 79  nternal bool Try
13ed0 47 65 74 43 61 63 68 65 64 53 65 74 74 69 6e 67  GetCachedSetting
13ee0 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  (..        strin
13ef0 67 20 6e 61 6d 65 2c 20 20 20 20 20 2f 2a 20 69  g name,     /* i
13f00 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 6f 62  n */..        ob
13f10 6a 65 63 74 20 40 64 65 66 61 75 6c 74 2c 20 2f  ject @default, /
13f20 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
13f30 20 6f 75 74 20 6f 62 6a 65 63 74 20 76 61 6c 75   out object valu
13f40 65 20 2f 2a 20 6f 75 74 20 2a 2f 0d 0a 20 20 20  e /* out */..   
13f50 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
13f60 20 20 20 20 20 20 20 69 66 20 28 28 6e 61 6d 65         if ((name
13f70 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 5f 63   == null) || (_c
13f80 61 63 68 65 64 53 65 74 74 69 6e 67 73 20 3d 3d  achedSettings ==
13f90 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20 20   null))..       
13fa0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
13fb0 76 61 6c 75 65 20 3d 20 40 64 65 66 61 75 6c 74  value = @default
13fc0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ;..            r
13fd0 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
13fe0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
13ff0 20 20 20 72 65 74 75 72 6e 20 5f 63 61 63 68 65     return _cache
14000 64 53 65 74 74 69 6e 67 73 2e 54 72 79 47 65 74  dSettings.TryGet
14010 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6f 75 74 20  Value(name, out 
14020 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  value);..    }..
14030 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
14040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14090 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  /////....    ///
140a0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
140b0 2f 2f 2f 20 41 64 64 73 20 6f 72 20 73 65 74 73  /// Adds or sets
140c0 20 74 68 65 20 63 61 63 68 65 64 20 73 65 74 74   the cached sett
140d0 69 6e 67 20 73 70 65 63 69 66 69 65 64 20 62 79  ing specified by
140e0 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d   <paramref name=
140f0 22 6e 61 6d 65 22 20 2f 3e 0d 0a 20 20 20 20 2f  "name" />..    /
14100 2f 2f 20 74 6f 20 74 68 65 20 76 61 6c 75 65 20  // to the value 
14110 73 70 65 63 69 66 69 65 64 20 62 79 20 3c 70 61  specified by <pa
14120 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 76 61 6c  ramref name="val
14130 75 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f  ue" />...    ///
14140 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
14150 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
14160 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ="name">..    //
14170 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
14180 65 20 63 61 63 68 65 64 20 73 65 74 74 69 6e 67  e cached setting
14190 20 74 6f 20 61 64 64 20 6f 72 20 72 65 70 6c 61   to add or repla
141a0 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
141b0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
141c0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
141d0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
141e0 20 6e 65 77 20 76 61 6c 75 65 20 6f 66 20 74 68   new value of th
141f0 65 20 63 61 63 68 65 64 20 73 65 74 74 69 6e 67  e cached setting
14200 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
14210 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
14220 6c 20 76 6f 69 64 20 53 65 74 43 61 63 68 65 64  l void SetCached
14230 53 65 74 74 69 6e 67 28 0d 0a 20 20 20 20 20 20  Setting(..      
14240 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20 2f    string name, /
14250 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
14260 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 2f 2a   object value /*
14270 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20   in */..        
14280 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14290 20 20 69 66 20 28 28 6e 61 6d 65 20 3d 3d 20 6e    if ((name == n
142a0 75 6c 6c 29 20 7c 7c 20 28 5f 63 61 63 68 65 64  ull) || (_cached
142b0 53 65 74 74 69 6e 67 73 20 3d 3d 20 6e 75 6c 6c  Settings == null
142c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
142d0 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
142e0 20 20 20 5f 63 61 63 68 65 64 53 65 74 74 69 6e     _cachedSettin
142f0 67 73 5b 6e 61 6d 65 5d 20 3d 20 76 61 6c 75 65  gs[name] = value
14300 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  ;..    }..    #e
14310 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
14320 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14330 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14340 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
14380 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 50  ...    #region P
14390 65 72 2d 43 6f 6e 6e 65 63 74 69 6f 6e 20 54 79  er-Connection Ty
143a0 70 65 20 4d 61 70 70 69 6e 67 73 0d 0a 20 20 20  pe Mappings..   
143b0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
143c0 20 20 20 20 2f 2f 2f 20 43 6c 65 61 72 73 20 74      /// Clears t
143d0 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  he per-connectio
143e0 6e 20 74 79 70 65 20 6d 61 70 70 69 6e 67 73 2e  n type mappings.
143f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
14400 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
14410 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
14420 20 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   The total numbe
14430 72 20 6f 66 20 70 65 72 2d 63 6f 6e 6e 65 63 74  r of per-connect
14440 69 6f 6e 20 74 79 70 65 20 6d 61 70 70 69 6e 67  ion type mapping
14450 73 20 63 6c 65 61 72 65 64 2e 0d 0a 20 20 20 20  s cleared...    
14460 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
14470 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 43      public int C
14480 6c 65 61 72 54 79 70 65 4d 61 70 70 69 6e 67 73  learTypeMappings
14490 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
144a0 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
144b0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
144c0 6e 74 20 72 65 73 75 6c 74 20 3d 20 2d 31 3b 20  nt result = -1; 
144d0 2f 2a 20 4e 4f 20 4d 41 50 50 49 4e 47 53 20 2a  /* NO MAPPINGS *
144e0 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  /....        if 
144f0 28 5f 74 79 70 65 4e 61 6d 65 73 20 21 3d 20 6e  (_typeNames != n
14500 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
14510 20 20 72 65 73 75 6c 74 20 3d 20 5f 74 79 70 65    result = _type
14520 4e 61 6d 65 73 2e 43 6c 65 61 72 28 29 3b 0d 0a  Names.Clear();..
14530 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
14540 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d   result;..    }.
14550 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
14560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
145b0 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
145c0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
145d0 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
145e0 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20   per-connection 
145f0 74 79 70 65 20 6d 61 70 70 69 6e 67 73 2e 0d 0a  type mappings...
14600 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
14610 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
14620 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
14630 68 65 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  he per-connectio
14640 6e 20 74 79 70 65 20 6d 61 70 70 69 6e 67 73 20  n type mappings 
14650 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 74 68 65  -OR- null if the
14660 79 20 61 72 65 20 75 6e 61 76 61 69 6c 61 62 6c  y are unavailabl
14670 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  e...    /// </re
14680 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c  turns>..    publ
14690 69 63 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74  ic Dictionary<st
146a0 72 69 6e 67 2c 20 6f 62 6a 65 63 74 3e 20 47 65  ring, object> Ge
146b0 74 54 79 70 65 4d 61 70 70 69 6e 67 73 28 29 0d  tTypeMappings().
146c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
146d0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
146e0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74  ....        Dict
146f0 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 6f  ionary<string, o
14700 62 6a 65 63 74 3e 20 72 65 73 75 6c 74 20 3d 20  bject> result = 
14710 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
14720 20 69 66 20 28 5f 74 79 70 65 4e 61 6d 65 73 20   if (_typeNames 
14730 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
14740 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14750 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 44 69   result = new Di
14760 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e 67 2c  ctionary<string,
14770 20 6f 62 6a 65 63 74 3e 28 5f 74 79 70 65 4e 61   object>(_typeNa
14780 6d 65 73 2e 43 6f 75 6e 74 2c 20 5f 74 79 70 65  mes.Count, _type
14790 4e 61 6d 65 73 2e 43 6f 6d 70 61 72 65 72 29 3b  Names.Comparer);
147a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
147b0 66 6f 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75  foreach (KeyValu
147c0 65 50 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51  ePair<string, SQ
147d0 4c 69 74 65 44 62 54 79 70 65 4d 61 70 70 69 6e  LiteDbTypeMappin
147e0 67 3e 20 70 61 69 72 20 69 6e 20 5f 74 79 70 65  g> pair in _type
147f0 4e 61 6d 65 73 29 0d 0a 20 20 20 20 20 20 20 20  Names)..        
14800 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
14810 20 20 20 20 20 20 20 53 51 4c 69 74 65 44 62 54         SQLiteDbT
14820 79 70 65 4d 61 70 70 69 6e 67 20 6d 61 70 70 69  ypeMapping mappi
14830 6e 67 20 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b  ng = pair.Value;
14840 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
14850 20 20 20 20 6f 62 6a 65 63 74 20 74 79 70 65 4e      object typeN
14860 61 6d 65 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 53  ame = null; /* S
14870 79 73 74 65 6d 2e 53 74 72 69 6e 67 20 2a 2f 0d  ystem.String */.
14880 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14890 20 6f 62 6a 65 63 74 20 64 61 74 61 54 79 70 65   object dataType
148a0 20 3d 20 6e 75 6c 6c 3b 20 2f 2a 20 53 79 73 74   = null; /* Syst
148b0 65 6d 2e 44 61 74 61 2e 44 62 54 79 70 65 20 2a  em.Data.DbType *
148c0 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
148d0 20 20 20 6f 62 6a 65 63 74 20 70 72 69 6d 61 72     object primar
148e0 79 20 3d 20 6e 75 6c 6c 3b 20 20 2f 2a 20 53 79  y = null;  /* Sy
148f0 73 74 65 6d 2e 42 6f 6f 6c 65 61 6e 20 2a 2f 0d  stem.Boolean */.
14900 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
14910 20 20 20 69 66 20 28 6d 61 70 70 69 6e 67 20 21     if (mapping !
14920 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
14930 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
14940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14950 74 79 70 65 4e 61 6d 65 20 3d 20 6d 61 70 70 69  typeName = mappi
14960 6e 67 2e 74 79 70 65 4e 61 6d 65 3b 0d 0a 20 20  ng.typeName;..  
14970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14980 20 20 64 61 74 61 54 79 70 65 20 3d 20 6d 61 70    dataType = map
14990 70 69 6e 67 2e 64 61 74 61 54 79 70 65 3b 0d 0a  ping.dataType;..
149a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149b0 20 20 20 20 70 72 69 6d 61 72 79 20 3d 20 6d 61      primary = ma
149c0 70 70 69 6e 67 2e 70 72 69 6d 61 72 79 3b 0d 0a  pping.primary;..
149d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149e0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
149f0 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
14a00 70 61 69 72 2e 4b 65 79 2c 20 6e 65 77 20 6f 62  pair.Key, new ob
14a10 6a 65 63 74 5b 5d 20 7b 20 74 79 70 65 4e 61 6d  ject[] { typeNam
14a20 65 2c 20 64 61 74 61 54 79 70 65 2c 20 70 72 69  e, dataType, pri
14a30 6d 61 72 79 20 7d 29 3b 0d 0a 20 20 20 20 20 20  mary });..      
14a40 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
14a50 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
14a60 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
14a70 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
14a80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14a90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14aa0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ab0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ac0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
14ad0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
14ae0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
14af0 0a 20 20 20 20 2f 2f 2f 20 41 64 64 73 20 61 20  .    /// Adds a 
14b00 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  per-connection t
14b10 79 70 65 20 6d 61 70 70 69 6e 67 2c 20 70 6f 73  ype mapping, pos
14b20 73 69 62 6c 79 20 72 65 70 6c 61 63 69 6e 67 20  sibly replacing 
14b30 6f 6e 65 20 6f 72 20 6d 6f 72 65 0d 0a 20 20 20  one or more..   
14b40 20 2f 2f 2f 20 74 68 61 74 20 61 6c 72 65 61 64   /// that alread
14b50 79 20 65 78 69 73 74 2e 0d 0a 20 20 20 20 2f 2f  y exist...    //
14b60 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
14b70 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14b80 65 3d 22 74 79 70 65 4e 61 6d 65 22 3e 0d 0a 20  e="typeName">.. 
14b90 20 20 20 2f 2f 2f 20 54 68 65 20 63 61 73 65 2d     /// The case-
14ba0 69 6e 73 65 6e 73 69 74 69 76 65 20 64 61 74 61  insensitive data
14bb0 62 61 73 65 20 74 79 70 65 20 6e 61 6d 65 20 28  base type name (
14bc0 65 2e 67 2e 20 22 4d 59 44 41 54 45 22 29 2e 20  e.g. "MYDATE"). 
14bd0 20 54 68 65 20 76 61 6c 75 65 0d 0a 20 20 20 20   The value..    
14be0 2f 2f 2f 20 6f 66 20 74 68 69 73 20 70 61 72 61  /// of this para
14bf0 6d 65 74 65 72 20 63 61 6e 6e 6f 74 20 62 65 20  meter cannot be 
14c00 6e 75 6c 6c 2e 20 20 55 73 69 6e 67 20 61 6e 20  null.  Using an 
14c10 65 6d 70 74 79 20 73 74 72 69 6e 67 20 76 61 6c  empty string val
14c20 75 65 20 28 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20  ue (or..    /// 
14c30 61 20 73 74 72 69 6e 67 20 76 61 6c 75 65 20 63  a string value c
14c40 6f 6e 73 69 73 74 69 6e 67 20 65 6e 74 69 72 65  onsisting entire
14c50 6c 79 20 6f 66 20 77 68 69 74 65 73 70 61 63 65  ly of whitespace
14c60 29 20 66 6f 72 20 74 68 69 73 20 70 61 72 61 6d  ) for this param
14c70 65 74 65 72 0d 0a 20 20 20 20 2f 2f 2f 20 69 73  eter..    /// is
14c80 20 6e 6f 74 20 72 65 63 6f 6d 6d 65 6e 64 65 64   not recommended
14c90 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
14ca0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
14cb0 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 61 54 79  ram name="dataTy
14cc0 70 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  pe">..    /// Th
14cd0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44 62 54  e <see cref="DbT
14ce0 79 70 65 22 20 2f 3e 20 76 61 6c 75 65 20 74 68  ype" /> value th
14cf0 61 74 20 73 68 6f 75 6c 64 20 62 65 20 61 73 73  at should be ass
14d00 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
14d10 0d 0a 20 20 20 20 2f 2f 2f 20 73 70 65 63 69 66  ..    /// specif
14d20 69 65 64 20 74 79 70 65 20 6e 61 6d 65 2e 0d 0a  ied type name...
14d30 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
14d40 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
14d50 20 6e 61 6d 65 3d 22 70 72 69 6d 61 72 79 22 3e   name="primary">
14d60 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
14d70 72 6f 20 69 66 20 74 68 69 73 20 6d 61 70 70 69  ro if this mappi
14d80 6e 67 20 73 68 6f 75 6c 64 20 62 65 20 63 6f 6e  ng should be con
14d90 73 69 64 65 72 65 64 20 74 6f 20 62 65 20 74 68  sidered to be th
14da0 65 20 70 72 69 6d 61 72 79 20 6f 6e 65 0d 0a 20  e primary one.. 
14db0 20 20 20 2f 2f 2f 20 66 6f 72 20 74 68 65 20 73     /// for the s
14dc0 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
14dd0 65 66 3d 22 44 62 54 79 70 65 22 20 2f 3e 2e 0d  ef="DbType" />..
14de0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
14df0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
14e00 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
14e10 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65 20 69  negative value i
14e20 66 20 6e 6f 74 68 69 6e 67 20 77 61 73 20 64 6f  f nothing was do
14e30 6e 65 2e 20 20 5a 65 72 6f 20 69 66 20 6e 6f 20  ne.  Zero if no 
14e40 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  per-connection t
14e50 79 70 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 61 70  ype..    /// map
14e60 70 69 6e 67 73 20 77 65 72 65 20 72 65 70 6c 61  pings were repla
14e70 63 65 64 20 28 69 2e 65 2e 20 69 74 20 77 61 73  ced (i.e. it was
14e80 20 61 20 70 75 72 65 20 61 64 64 20 6f 70 65 72   a pure add oper
14e90 61 74 69 6f 6e 29 2e 20 20 4d 6f 72 65 20 74 68  ation).  More th
14ea0 61 6e 0d 0a 20 20 20 20 2f 2f 2f 20 7a 65 72 6f  an..    /// zero
14eb0 20 69 66 20 73 6f 6d 65 20 70 65 72 2d 63 6f 6e   if some per-con
14ec0 6e 65 63 74 69 6f 6e 20 74 79 70 65 20 6d 61 70  nection type map
14ed0 70 69 6e 67 73 20 77 65 72 65 20 72 65 70 6c 61  pings were repla
14ee0 63 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ced...    /// </
14ef0 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
14f00 62 6c 69 63 20 69 6e 74 20 41 64 64 54 79 70 65  blic int AddType
14f10 4d 61 70 70 69 6e 67 28 0d 0a 20 20 20 20 20 20  Mapping(..      
14f20 20 20 73 74 72 69 6e 67 20 74 79 70 65 4e 61 6d    string typeNam
14f30 65 2c 0d 0a 20 20 20 20 20 20 20 20 44 62 54 79  e,..        DbTy
14f40 70 65 20 64 61 74 61 54 79 70 65 2c 0d 0a 20 20  pe dataType,..  
14f50 20 20 20 20 20 20 62 6f 6f 6c 20 70 72 69 6d 61        bool prima
14f60 72 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ry..        ).. 
14f70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
14f80 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
14f90 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 74 79  ..        if (ty
14fa0 70 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  peName == null).
14fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
14fc0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
14fd0 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 74 79  ullException("ty
14fe0 70 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20  peName");....   
14ff0 20 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20       int result 
15000 3d 20 2d 31 3b 20 2f 2a 20 4e 4f 20 4d 41 50 50  = -1; /* NO MAPP
15010 49 4e 47 53 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20  INGS */....     
15020 20 20 20 69 66 20 28 5f 74 79 70 65 4e 61 6d 65     if (_typeName
15030 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
15040 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15050 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d 0a     result = 0;..
15060 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
15070 20 28 70 72 69 6d 61 72 79 20 26 26 20 5f 74 79   (primary && _ty
15080 70 65 4e 61 6d 65 73 2e 43 6f 6e 74 61 69 6e 73  peNames.Contains
15090 4b 65 79 28 64 61 74 61 54 79 70 65 29 29 0d 0a  Key(dataType))..
150a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150b0 72 65 73 75 6c 74 20 2b 3d 20 5f 74 79 70 65 4e  result += _typeN
150c0 61 6d 65 73 2e 52 65 6d 6f 76 65 28 64 61 74 61  ames.Remove(data
150d0 54 79 70 65 29 20 3f 20 31 20 3a 20 30 3b 0d 0a  Type) ? 1 : 0;..
150e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
150f0 20 28 5f 74 79 70 65 4e 61 6d 65 73 2e 43 6f 6e   (_typeNames.Con
15100 74 61 69 6e 73 4b 65 79 28 74 79 70 65 4e 61 6d  tainsKey(typeNam
15110 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e))..           
15120 20 20 20 20 20 72 65 73 75 6c 74 20 2b 3d 20 5f       result += _
15130 74 79 70 65 4e 61 6d 65 73 2e 52 65 6d 6f 76 65  typeNames.Remove
15140 28 74 79 70 65 4e 61 6d 65 29 20 3f 20 31 20 3a  (typeName) ? 1 :
15150 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   0;....         
15160 20 20 20 5f 74 79 70 65 4e 61 6d 65 73 2e 41 64     _typeNames.Ad
15170 64 28 6e 65 77 20 53 51 4c 69 74 65 44 62 54 79  d(new SQLiteDbTy
15180 70 65 4d 61 70 70 69 6e 67 28 74 79 70 65 4e 61  peMapping(typeNa
15190 6d 65 2c 20 64 61 74 61 54 79 70 65 2c 20 70 72  me, dataType, pr
151a0 69 6d 61 72 79 29 29 3b 0d 0a 20 20 20 20 20 20  imary));..      
151b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
151c0 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20  eturn result;.. 
151d0 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
151e0 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
151f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15200 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15210 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15220 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15230 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15240 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
15250 20 20 20 23 72 65 67 69 6f 6e 20 50 65 72 2d 43     #region Per-C
15260 6f 6e 6e 65 63 74 69 6f 6e 20 54 79 70 65 20 43  onnection Type C
15270 61 6c 6c 62 61 63 6b 73 0d 0a 20 20 20 20 2f 2f  allbacks..    //
15280 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
15290 20 2f 2f 2f 20 43 6c 65 61 72 73 20 74 68 65 20   /// Clears the 
152a0 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  per-connection t
152b0 79 70 65 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a  ype callbacks...
152c0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
152d0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
152e0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
152f0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
15300 6f 66 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f  of per-connectio
15310 6e 20 74 79 70 65 20 63 61 6c 6c 62 61 63 6b 73  n type callbacks
15320 20 63 6c 65 61 72 65 64 2e 0d 0a 20 20 20 20 2f   cleared...    /
15330 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
15340 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 43 6c     public int Cl
15350 65 61 72 54 79 70 65 43 61 6c 6c 62 61 63 6b 73  earTypeCallbacks
15360 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
15370 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
15380 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ();....        i
15390 6e 74 20 72 65 73 75 6c 74 20 3d 20 2d 31 3b 20  nt result = -1; 
153a0 2f 2a 20 4e 4f 20 43 41 4c 4c 42 41 43 4b 53 20  /* NO CALLBACKS 
153b0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  */....        if
153c0 20 28 5f 74 79 70 65 43 61 6c 6c 62 61 63 6b 73   (_typeCallbacks
153d0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
153e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
153f0 20 20 72 65 73 75 6c 74 20 3d 20 5f 74 79 70 65    result = _type
15400 43 61 6c 6c 62 61 63 6b 73 2e 43 6f 75 6e 74 3b  Callbacks.Count;
15410 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 74  ..            _t
15420 79 70 65 43 61 6c 6c 62 61 63 6b 73 2e 43 6c 65  ypeCallbacks.Cle
15430 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ar();..        }
15440 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
15450 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
15460 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
15470 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15480 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15490 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
154c0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
154d0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
154e0 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20     /// Attempts 
154f0 74 6f 20 67 65 74 20 74 68 65 20 70 65 72 2d 63  to get the per-c
15500 6f 6e 6e 65 63 74 69 6f 6e 20 74 79 70 65 20 63  onnection type c
15510 61 6c 6c 62 61 63 6b 73 20 66 6f 72 20 74 68 65  allbacks for the
15520 20 73 70 65 63 69 66 69 65 64 0d 0a 20 20 20 20   specified..    
15530 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 79 70  /// database typ
15540 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f  e name...    ///
15550 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
15560 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15570 3d 22 74 79 70 65 4e 61 6d 65 22 3e 0d 0a 20 20  ="typeName">..  
15580 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62 61    /// The databa
15590 73 65 20 74 79 70 65 20 6e 61 6d 65 2e 0d 0a 20  se type name... 
155a0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
155b0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
155c0 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 73 22  name="callbacks"
155d0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
155e0 73 75 63 63 65 73 73 2c 20 74 68 69 73 20 70 61  success, this pa
155f0 72 61 6d 65 74 65 72 20 77 69 6c 6c 20 63 6f 6e  rameter will con
15600 74 61 69 6e 20 74 68 65 20 6f 62 6a 65 63 74 20  tain the object 
15610 68 6f 6c 64 69 6e 67 20 74 68 65 0d 0a 20 20 20  holding the..   
15620 20 2f 2f 2f 20 63 61 6c 6c 62 61 63 6b 73 20 66   /// callbacks f
15630 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65 20  or the database 
15640 74 79 70 65 20 6e 61 6d 65 2e 20 20 55 70 6f 6e  type name.  Upon
15650 20 66 61 69 6c 75 72 65 2c 20 74 68 69 73 20 70   failure, this p
15660 61 72 61 6d 65 74 65 72 0d 0a 20 20 20 20 2f 2f  arameter..    //
15670 2f 20 77 69 6c 6c 20 62 65 20 6e 75 6c 6c 2e 0d  / will be null..
15680 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
15690 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
156a0 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
156b0 6e 2d 7a 65 72 6f 20 75 70 6f 6e 20 73 75 63 63  n-zero upon succ
156c0 65 73 73 3b 20 6f 74 68 65 72 77 69 73 65 2c 20  ess; otherwise, 
156d0 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
156e0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
156f0 75 62 6c 69 63 20 62 6f 6f 6c 20 54 72 79 47 65  ublic bool TryGe
15700 74 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 28 0d  tTypeCallbacks(.
15710 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
15720 74 79 70 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  typeName,..     
15730 20 20 20 6f 75 74 20 53 51 4c 69 74 65 54 79 70     out SQLiteTyp
15740 65 43 61 6c 6c 62 61 63 6b 73 20 63 61 6c 6c 62  eCallbacks callb
15750 61 63 6b 73 0d 0a 20 20 20 20 20 20 20 20 29 0d  acks..        ).
15760 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
15770 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
15780 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
15790 74 79 70 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c  typeName == null
157a0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
157b0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
157c0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
157d0 74 79 70 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  typeName");.... 
157e0 20 20 20 20 20 20 20 69 66 20 28 5f 74 79 70 65         if (_type
157f0 43 61 6c 6c 62 61 63 6b 73 20 3d 3d 20 6e 75 6c  Callbacks == nul
15800 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
15810 20 20 20 20 20 20 20 20 20 20 20 63 61 6c 6c 62             callb
15820 61 63 6b 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  acks = null;..  
15830 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
15840 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
15850 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
15860 74 75 72 6e 20 5f 74 79 70 65 43 61 6c 6c 62 61  turn _typeCallba
15870 63 6b 73 2e 54 72 79 47 65 74 56 61 6c 75 65 28  cks.TryGetValue(
15880 74 79 70 65 4e 61 6d 65 2c 20 6f 75 74 20 63 61  typeName, out ca
15890 6c 6c 62 61 63 6b 73 29 3b 0d 0a 20 20 20 20 7d  llbacks);..    }
158a0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
158b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
158f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15900 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
15910 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
15920 20 20 2f 2f 2f 20 53 65 74 73 2c 20 72 65 73 65    /// Sets, rese
15930 74 73 2c 20 6f 72 20 63 6c 65 61 72 73 20 74 68  ts, or clears th
15940 65 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e  e per-connection
15950 20 74 79 70 65 20 63 61 6c 6c 62 61 63 6b 73 20   type callbacks 
15960 66 6f 72 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  for the..    ///
15970 20 73 70 65 63 69 66 69 65 64 20 64 61 74 61 62   specified datab
15980 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2e 0d 0a  ase type name...
15990 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
159a0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
159b0 61 6d 20 6e 61 6d 65 3d 22 74 79 70 65 4e 61 6d  am name="typeNam
159c0 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
159d0 20 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e   database type n
159e0 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ame...    /// </
159f0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15a00 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61 6c  <param name="cal
15a10 6c 62 61 63 6b 73 22 3e 0d 0a 20 20 20 20 2f 2f  lbacks">..    //
15a20 2f 20 54 68 65 20 6f 62 6a 65 63 74 20 68 6f 6c  / The object hol
15a30 64 69 6e 67 20 74 68 65 20 63 61 6c 6c 62 61 63  ding the callbac
15a40 6b 73 20 66 6f 72 20 74 68 65 20 64 61 74 61 62  ks for the datab
15a50 61 73 65 20 74 79 70 65 20 6e 61 6d 65 2e 20 20  ase type name.  
15a60 49 66 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69 73  If..    /// this
15a70 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 6e 75   parameter is nu
15a80 6c 6c 2c 20 61 6e 79 20 63 61 6c 6c 62 61 63 6b  ll, any callback
15a90 73 20 66 6f 72 20 74 68 65 20 64 61 74 61 62 61  s for the databa
15aa0 73 65 20 74 79 70 65 20 6e 61 6d 65 0d 0a 20 20  se type name..  
15ab0 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20 72 65    /// will be re
15ac0 6d 6f 76 65 64 20 69 66 20 74 68 65 79 20 61 72  moved if they ar
15ad0 65 20 70 72 65 73 65 6e 74 2e 0d 0a 20 20 20 20  e present...    
15ae0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
15af0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
15b00 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
15b10 6f 20 69 66 20 63 61 6c 6c 62 61 63 6b 73 20 77  o if callbacks w
15b20 65 72 65 20 73 65 74 20 6f 72 20 72 65 6d 6f 76  ere set or remov
15b30 65 64 3b 20 6f 74 68 65 72 77 69 73 65 2c 20 7a  ed; otherwise, z
15b40 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
15b50 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 75  returns>..    pu
15b60 62 6c 69 63 20 62 6f 6f 6c 20 53 65 74 54 79 70  blic bool SetTyp
15b70 65 43 61 6c 6c 62 61 63 6b 73 28 0d 0a 20 20 20  eCallbacks(..   
15b80 20 20 20 20 20 73 74 72 69 6e 67 20 74 79 70 65       string type
15b90 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 53  Name,..        S
15ba0 51 4c 69 74 65 54 79 70 65 43 61 6c 6c 62 61 63  QLiteTypeCallbac
15bb0 6b 73 20 63 61 6c 6c 62 61 63 6b 73 0d 0a 20 20  ks callbacks..  
15bc0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
15bd0 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
15be0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
15bf0 20 20 20 20 69 66 20 28 74 79 70 65 4e 61 6d 65      if (typeName
15c00 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
15c10 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
15c20 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
15c30 65 70 74 69 6f 6e 28 22 74 79 70 65 4e 61 6d 65  eption("typeName
15c40 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ");....        i
15c50 66 20 28 5f 74 79 70 65 43 61 6c 6c 62 61 63 6b  f (_typeCallback
15c60 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
15c70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
15c80 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  alse;....       
15c90 20 69 66 20 28 63 61 6c 6c 62 61 63 6b 73 20 3d   if (callbacks =
15ca0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15cb0 20 20 20 20 20 72 65 74 75 72 6e 20 5f 74 79 70       return _typ
15cc0 65 43 61 6c 6c 62 61 63 6b 73 2e 52 65 6d 6f 76  eCallbacks.Remov
15cd0 65 28 74 79 70 65 4e 61 6d 65 29 3b 0d 0a 0d 0a  e(typeName);....
15ce0 20 20 20 20 20 20 20 20 63 61 6c 6c 62 61 63 6b          callback
15cf0 73 2e 54 79 70 65 4e 61 6d 65 20 3d 20 74 79 70  s.TypeName = typ
15d00 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20 20 20 20  eName;..        
15d10 5f 74 79 70 65 43 61 6c 6c 62 61 63 6b 73 5b 74  _typeCallbacks[t
15d20 79 70 65 4e 61 6d 65 5d 20 3d 20 63 61 6c 6c 62  ypeName] = callb
15d30 61 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  acks;....       
15d40 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
15d50 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65     }..    #endre
15d60 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
15d70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15d90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15da0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15db0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
15dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
15dd0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
15de0 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70  ..    /// Attemp
15df0 74 73 20 74 6f 20 62 69 6e 64 20 74 68 65 20 73  ts to bind the s
15e00 70 65 63 69 66 69 65 64 20 3c 73 65 65 20 63 72  pecified <see cr
15e10 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69  ef="SQLiteFuncti
15e20 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 0d 0a 20  on" /> object.. 
15e30 20 20 20 2f 2f 2f 20 69 6e 73 74 61 6e 63 65 20     /// instance 
15e40 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  to this connecti
15e50 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
15e60 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15e70 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75   <param name="fu
15e80 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
15e90 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c  >..    /// The <
15ea0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
15eb0 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
15ec0 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
15ed0 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
15ee0 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
15ef0 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
15f00 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f  unction to be bo
15f10 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  und...    /// </
15f20 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15f30 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e  <param name="fun
15f40 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ction">..    ///
15f50 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
15f60 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 22 20  SQLiteFunction" 
15f70 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
15f80 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65 6e  ce that implemen
15f90 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20  ts the..    /// 
15fa0 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 62  function to be b
15fb0 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ound...    /// <
15fc0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62  /param>..    pub
15fd0 6c 69 63 20 76 6f 69 64 20 42 69 6e 64 46 75 6e  lic void BindFun
15fe0 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
15ff0 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
16000 74 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f 6e  tribute function
16010 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20  Attribute,..    
16020 20 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69      SQLiteFuncti
16030 6f 6e 20 66 75 6e 63 74 69 6f 6e 0d 0a 20 20 20  on function..   
16040 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
16050 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
16060 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
16070 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
16080 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
16090 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
160a0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
160b0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
160c0 20 20 20 20 20 20 20 20 22 44 61 74 61 62 61 73          "Databas
160d0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74  e connection not
160e0 20 76 61 6c 69 64 20 66 6f 72 20 62 69 6e 64 69   valid for bindi
160f0 6e 67 20 66 75 6e 63 74 69 6f 6e 73 2e 22 29 3b  ng functions.");
16100 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c  ....        _sql
16110 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 66 75  .BindFunction(fu
16120 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 2c  nctionAttribute,
16130 20 66 75 6e 63 74 69 6f 6e 2c 20 5f 66 6c 61 67   function, _flag
16140 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  s);..    }....  
16150 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
16160 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16170 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16180 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16190 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
161b0 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
161c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
161d0 41 74 74 65 6d 70 74 73 20 74 6f 20 62 69 6e 64  Attempts to bind
161e0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 3c   the specified <
161f0 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
16200 46 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  Function" /> obj
16210 65 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 73  ect..    /// ins
16220 74 61 6e 63 65 20 74 6f 20 74 68 69 73 20 63 6f  tance to this co
16230 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
16240 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
16250 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
16260 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72  me="functionAttr
16270 69 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ibute">..    ///
16280 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
16290 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
162a0 74 72 69 62 75 74 65 22 20 2f 3e 20 6f 62 6a 65  tribute" /> obje
162b0 63 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74  ct instance cont
162c0 61 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20  aining..    /// 
162d0 74 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72  the metadata for
162e0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f   the function to
162f0 20 62 65 20 62 6f 75 6e 64 2e 0d 0a 20 20 20 20   be bound...    
16300 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
16310 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
16320 65 3d 22 63 61 6c 6c 62 61 63 6b 31 22 3e 0d 0a  e="callback1">..
16330 20 20 20 20 2f 2f 2f 20 41 20 3c 73 65 65 20 63      /// A <see c
16340 72 65 66 3d 22 44 65 6c 65 67 61 74 65 22 20 2f  ref="Delegate" /
16350 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
16360 65 20 74 68 61 74 20 68 65 6c 70 73 20 69 6d 70  e that helps imp
16370 6c 65 6d 65 6e 74 20 74 68 65 0d 0a 20 20 20 20  lement the..    
16380 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  /// function to 
16390 62 65 20 62 6f 75 6e 64 2e 20 20 46 6f 72 20 73  be bound.  For s
163a0 63 61 6c 61 72 20 66 75 6e 63 74 69 6f 6e 73 2c  calar functions,
163b0 20 74 68 69 73 20 63 6f 72 72 65 73 70 6f 6e 64   this correspond
163c0 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 2f 2f  s to the..    //
163d0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
163e0 69 74 65 49 6e 76 6f 6b 65 44 65 6c 65 67 61 74  iteInvokeDelegat
163f0 65 22 20 2f 3e 20 74 79 70 65 2e 20 20 46 6f 72  e" /> type.  For
16400 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63 74   aggregate funct
16410 69 6f 6e 73 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74  ions,..    /// t
16420 68 69 73 20 63 6f 72 72 65 73 70 6f 6e 64 73 20  his corresponds 
16430 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
16440 3d 22 53 51 4c 69 74 65 53 74 65 70 44 65 6c 65  ="SQLiteStepDele
16450 67 61 74 65 22 20 2f 3e 20 74 79 70 65 2e 20 20  gate" /> type.  
16460 46 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6c  For..    /// col
16470 6c 61 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73  lation functions
16480 2c 20 74 68 69 73 20 63 6f 72 72 65 73 70 6f 6e  , this correspon
16490 64 73 20 74 6f 20 74 68 65 0d 0a 20 20 20 20 2f  ds to the..    /
164a0 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
164b0 4c 69 74 65 43 6f 6d 70 61 72 65 44 65 6c 65 67  LiteCompareDeleg
164c0 61 74 65 22 20 2f 3e 20 74 79 70 65 2e 0d 0a 20  ate" /> type... 
164d0 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
164e0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
164f0 6e 61 6d 65 3d 22 63 61 6c 6c 62 61 63 6b 32 22  name="callback2"
16500 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 3c 73 65  >..    /// A <se
16510 65 20 63 72 65 66 3d 22 44 65 6c 65 67 61 74 65  e cref="Delegate
16520 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74  " /> object inst
16530 61 6e 63 65 20 74 68 61 74 20 68 65 6c 70 73 20  ance that helps 
16540 69 6d 70 6c 65 6d 65 6e 74 20 74 68 65 0d 0a 20  implement the.. 
16550 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20     /// function 
16560 74 6f 20 62 65 20 62 6f 75 6e 64 2e 20 20 46 6f  to be bound.  Fo
16570 72 20 61 67 67 72 65 67 61 74 65 20 66 75 6e 63  r aggregate func
16580 74 69 6f 6e 73 2c 20 74 68 69 73 20 63 6f 72 72  tions, this corr
16590 65 73 70 6f 6e 64 73 20 74 6f 20 74 68 65 0d 0a  esponds to the..
165a0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
165b0 66 3d 22 53 51 4c 69 74 65 46 69 6e 61 6c 44 65  f="SQLiteFinalDe
165c0 6c 65 67 61 74 65 22 20 2f 3e 20 74 79 70 65 2e  legate" /> type.
165d0 20 20 46 6f 72 20 6f 74 68 65 72 20 63 61 6c 6c    For other call
165e0 62 61 63 6b 20 74 79 70 65 73 2c 20 69 74 0d 0a  back types, it..
165f0 20 20 20 20 2f 2f 2f 20 69 73 20 6e 6f 74 20 75      /// is not u
16600 73 65 64 20 61 6e 64 20 6d 75 73 74 20 62 65 20  sed and must be 
16610 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  null...    /// <
16620 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62  /param>..    pub
16630 6c 69 63 20 76 6f 69 64 20 42 69 6e 64 46 75 6e  lic void BindFun
16640 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ction(..        
16650 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
16660 74 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f 6e  tribute function
16670 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20  Attribute,..    
16680 20 20 20 20 44 65 6c 65 67 61 74 65 20 63 61 6c      Delegate cal
16690 6c 62 61 63 6b 31 2c 0d 0a 20 20 20 20 20 20 20  lback1,..       
166a0 20 44 65 6c 65 67 61 74 65 20 63 61 6c 6c 62 61   Delegate callba
166b0 63 6b 32 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ck2..        )..
166c0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
166d0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
166e0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
166f0 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
16700 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
16710 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
16720 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
16730 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16740 22 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  "Database connec
16750 74 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66  tion not valid f
16760 6f 72 20 62 69 6e 64 69 6e 67 20 66 75 6e 63 74  or binding funct
16770 69 6f 6e 73 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ions.");....    
16780 20 20 20 20 5f 73 71 6c 2e 42 69 6e 64 46 75 6e      _sql.BindFun
16790 63 74 69 6f 6e 28 66 75 6e 63 74 69 6f 6e 41 74  ction(functionAt
167a0 74 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20  tribute,..      
167b0 20 20 20 20 20 20 6e 65 77 20 53 51 4c 69 74 65        new SQLite
167c0 44 65 6c 65 67 61 74 65 46 75 6e 63 74 69 6f 6e  DelegateFunction
167d0 28 63 61 6c 6c 62 61 63 6b 31 2c 20 63 61 6c 6c  (callback1, call
167e0 62 61 63 6b 32 29 2c 20 5f 66 6c 61 67 73 29 3b  back2), _flags);
167f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
16800 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16810 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16820 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16830 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16860 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
16870 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
16880 65 6d 70 74 73 20 74 6f 20 75 6e 62 69 6e 64 20  empts to unbind 
16890 74 68 65 20 73 70 65 63 69 66 69 65 64 20 3c 73  the specified <s
168a0 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46  ee cref="SQLiteF
168b0 75 6e 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65  unction" /> obje
168c0 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 73 74  ct..    /// inst
168d0 61 6e 63 65 20 74 6f 20 74 68 69 73 20 63 6f 6e  ance to this con
168e0 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
168f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
16900 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
16910 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69  e="functionAttri
16920 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  bute">..    /// 
16930 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  The <see cref="S
16940 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
16950 72 69 62 75 74 65 22 20 2f 3e 20 6f 62 6a 65 63  ribute" /> objec
16960 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61  t instance conta
16970 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  ining..    /// t
16980 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20  he metadata for 
16990 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
169a0 62 65 20 75 6e 62 6f 75 6e 64 2e 0d 0a 20 20 20  be unbound...   
169b0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
169c0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
169d0 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
169e0 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 75 6e 62  function was unb
169f0 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ound.</returns>.
16a00 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c  .    public bool
16a10 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28   UnbindFunction(
16a20 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
16a30 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  FunctionAttribut
16a40 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e functionAttrib
16a50 75 74 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ute..        )..
16a60 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43      {..        C
16a70 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
16a80 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f  ...        if (_
16a90 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
16aa0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
16ab0 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
16ac0 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
16ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
16ae0 22 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  "Database connec
16af0 74 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66  tion not valid f
16b00 6f 72 20 75 6e 62 69 6e 64 69 6e 67 20 66 75 6e  or unbinding fun
16b10 63 74 69 6f 6e 73 2e 22 29 3b 0d 0a 0d 0a 20 20  ctions.");....  
16b20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71        return _sq
16b30 6c 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  l.UnbindFunction
16b40 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
16b50 74 65 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20  te, _flags);..  
16b60 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
16b70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16ba0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
16bd0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16be0 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65  .    /// This me
16bf0 74 68 6f 64 20 75 6e 62 69 6e 64 73 20 61 6c 6c  thod unbinds all
16c00 20 72 65 67 69 73 74 65 72 65 64 20 28 6b 6e 6f   registered (kno
16c10 77 6e 29 20 66 75 6e 63 74 69 6f 6e 73 20 2d 4f  wn) functions -O
16c20 52 2d 20 61 6c 6c 20 70 72 65 76 69 6f 75 73 6c  R- all previousl
16c30 79 0d 0a 20 20 20 20 2f 2f 2f 20 62 6f 75 6e 64  y..    /// bound
16c40 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
16c50 6e 63 74 69 6f 6e 73 20 66 72 6f 6d 20 74 68 69  nctions from thi
16c60 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  s connection... 
16c70 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
16c80 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
16c90 6d 20 6e 61 6d 65 3d 22 72 65 67 69 73 74 65 72  m name="register
16ca0 65 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  ed">..    /// No
16cb0 6e 2d 7a 65 72 6f 20 74 6f 20 75 6e 62 69 6e 64  n-zero to unbind
16cc0 20 61 6c 6c 20 72 65 67 69 73 74 65 72 65 64 20   all registered 
16cd0 28 6b 6e 6f 77 6e 29 20 66 75 6e 63 74 69 6f 6e  (known) function
16ce0 73 20 2d 4f 52 2d 20 7a 65 72 6f 20 74 6f 20 75  s -OR- zero to u
16cf0 6e 62 69 6e 64 0d 0a 20 20 20 20 2f 2f 2f 20 61  nbind..    /// a
16d00 6c 6c 20 66 75 6e 63 74 69 6f 6e 73 20 63 75 72  ll functions cur
16d10 72 65 6e 74 6c 79 20 62 6f 75 6e 64 20 74 6f 20  rently bound to 
16d20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
16d30 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
16d40 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
16d50 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  rns>..    /// No
16d60 6e 2d 7a 65 72 6f 20 69 66 20 61 6c 6c 20 74 68  n-zero if all th
16d70 65 20 73 70 65 63 69 66 69 65 64 20 75 73 65 72  e specified user
16d80 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
16d90 6e 73 20 77 65 72 65 20 75 6e 62 6f 75 6e 64 2e  ns were unbound.
16da0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
16db0 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
16dc0 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 41 6c 6c 46   bool UnbindAllF
16dd0 75 6e 63 74 69 6f 6e 73 28 0d 0a 20 20 20 20 20  unctions(..     
16de0 20 20 20 62 6f 6f 6c 20 72 65 67 69 73 74 65 72     bool register
16df0 65 64 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  ed..        ).. 
16e00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
16e10 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
16e20 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73  ..        if (_s
16e30 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
16e40 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
16e50 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
16e60 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20  ionException(.. 
16e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
16e80 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
16e90 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66 6f  ion not valid fo
16ea0 72 20 75 6e 62 69 6e 64 69 6e 67 20 66 75 6e 63  r unbinding func
16eb0 74 69 6f 6e 73 2e 22 29 3b 0d 0a 0d 0a 20 20 20  tions.");....   
16ec0 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
16ed0 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e  teFunction.Unbin
16ee0 64 41 6c 6c 46 75 6e 63 74 69 6f 6e 73 28 5f 73  dAllFunctions(_s
16ef0 71 6c 2c 20 5f 66 6c 61 67 73 2c 20 72 65 67 69  ql, _flags, regi
16f00 73 74 65 72 65 64 29 3b 0d 0a 20 20 20 20 7d 0d  stered);..    }.
16f10 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
16f20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16f70 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 5b 43  //////....    [C
16f80 6f 6e 64 69 74 69 6f 6e 61 6c 28 22 43 48 45 43  onditional("CHEC
16f90 4b 5f 53 54 41 54 45 22 29 5d 0d 0a 20 20 20 20  K_STATE")]..    
16fa0 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
16fb0 76 6f 69 64 20 43 68 65 63 6b 28 53 51 4c 69 74  void Check(SQLit
16fc0 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e  eConnection conn
16fd0 65 63 74 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a  ection)..    {..
16fe0 20 20 20 20 20 20 20 20 69 66 20 28 63 6f 6e 6e          if (conn
16ff0 65 63 74 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d  ection == null).
17000 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17010 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
17020 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 63 6f  ullException("co
17030 6e 6e 65 63 74 69 6f 6e 22 29 3b 0d 0a 0d 0a 20  nnection");.... 
17040 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
17050 6e 2e 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  n.CheckDisposed(
17060 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
17070 20 28 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 63 6f   (connection._co
17080 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65 20 21 3d  nnectionState !=
17090 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65   ConnectionState
170a0 2e 4f 70 65 6e 29 0d 0a 20 20 20 20 20 20 20 20  .Open)..        
170b0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
170c0 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
170d0 63 65 70 74 69 6f 6e 28 22 54 68 65 20 63 6f 6e  ception("The con
170e0 6e 65 63 74 69 6f 6e 20 69 73 20 6e 6f 74 20 6f  nection is not o
170f0 70 65 6e 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  pen.");....     
17100 20 20 20 53 51 4c 69 74 65 33 20 73 71 6c 20 3d     SQLite3 sql =
17110 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c   connection._sql
17120 20 61 73 20 53 51 4c 69 74 65 33 3b 0d 0a 0d 0a   as SQLite3;....
17130 20 20 20 20 20 20 20 20 69 66 20 28 73 71 6c 20          if (sql 
17140 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17150 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
17160 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
17170 45 78 63 65 70 74 69 6f 6e 28 22 54 68 65 20 63  Exception("The c
17180 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
17190 20 77 72 61 70 70 65 72 20 69 73 20 6e 75 6c 6c   wrapper is null
171a0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
171b0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
171c0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
171d0 73 71 6c 2e 5f 73 71 6c 3b 0d 0a 0d 0a 20 20 20  sql._sql;....   
171e0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20       if (handle 
171f0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17200 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
17210 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
17220 45 78 63 65 70 74 69 6f 6e 28 22 54 68 65 20 63  Exception("The c
17230 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
17240 20 69 73 20 6e 75 6c 6c 2e 22 29 3b 0d 0a 0d 0a   is null.");....
17250 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e 64          if (hand
17260 6c 65 2e 49 73 49 6e 76 61 6c 69 64 29 0d 0a 20  le.IsInvalid).. 
17270 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
17280 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
17290 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22  ationException("
172a0 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  The connection h
172b0 61 6e 64 6c 65 20 69 73 20 69 6e 76 61 6c 69 64  andle is invalid
172c0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
172d0 69 66 20 28 68 61 6e 64 6c 65 2e 49 73 43 6c 6f  if (handle.IsClo
172e0 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
172f0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
17300 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
17310 70 74 69 6f 6e 28 22 54 68 65 20 63 6f 6e 6e 65  ption("The conne
17320 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
17330 63 6c 6f 73 65 64 2e 22 29 3b 0d 0a 20 20 20 20  closed.");..    
17340 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
17350 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17360 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17370 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17380 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17390 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
173a0 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
173b0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
173c0 20 20 20 2f 2f 2f 20 50 61 72 73 65 73 20 61 20     /// Parses a 
173d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
173e0 67 20 69 6e 74 6f 20 63 6f 6d 70 6f 6e 65 6e 74  g into component
173f0 20 70 61 72 74 73 20 75 73 69 6e 67 20 74 68 65   parts using the
17400 20 63 75 73 74 6f 6d 0d 0a 20 20 20 20 2f 2f 2f   custom..    ///
17410 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
17420 6e 67 20 70 61 72 73 65 72 2e 20 20 41 6e 20 65  ng parser.  An e
17430 78 63 65 70 74 69 6f 6e 20 6d 61 79 20 62 65 20  xception may be 
17440 74 68 72 6f 77 6e 20 69 66 20 74 68 65 20 73 79  thrown if the sy
17450 6e 74 61 78 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66  ntax..    /// of
17460 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
17470 73 74 72 69 6e 67 20 69 73 20 69 6e 63 6f 72 72  string is incorr
17480 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
17490 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
174a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
174b0 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 22  onnectionString"
174c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  >..    /// The c
174d0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
174e0 20 74 6f 20 70 61 72 73 65 2e 0d 0a 20 20 20 20   to parse...    
174f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
17500 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
17510 65 3d 22 70 61 72 73 65 56 69 61 46 72 61 6d 65  e="parseViaFrame
17520 77 6f 72 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  work">..    /// 
17530 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 70 61 72 73  Non-zero to pars
17540 65 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  e the connection
17550 20 73 74 72 69 6e 67 20 75 73 69 6e 67 20 74 68   string using th
17560 65 20 61 6c 67 6f 72 69 74 68 6d 20 70 72 6f 76  e algorithm prov
17570 69 64 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 79  ided..    /// by
17580 20 74 68 65 20 66 72 61 6d 65 77 6f 72 6b 20 69   the framework i
17590 74 73 65 6c 66 2e 20 20 54 68 69 73 20 69 73 20  tself.  This is 
175a0 6e 6f 74 20 61 70 70 6c 69 63 61 62 6c 65 20 77  not applicable w
175b0 68 65 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74  hen running on t
175c0 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 2e 4e 45 54  he..    /// .NET
175d0 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f   Compact Framewo
175e0 72 6b 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  rk...    /// </p
175f0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
17600 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 6c 6c 6f  param name="allo
17610 77 4e 61 6d 65 4f 6e 6c 79 22 3e 0d 0a 20 20 20  wNameOnly">..   
17620 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
17630 20 6e 61 6d 65 73 20 61 72 65 20 61 6c 6c 6f 77   names are allow
17640 65 64 20 77 69 74 68 6f 75 74 20 76 61 6c 75 65  ed without value
17650 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
17660 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
17670 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
17680 20 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79   The list of key
17690 2f 76 61 6c 75 65 20 70 61 69 72 73 20 63 6f 72  /value pairs cor
176a0 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
176b0 65 20 70 61 72 61 6d 65 74 65 72 73 20 73 70 65  e parameters spe
176c0 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
176d0 77 69 74 68 69 6e 20 74 68 65 20 63 6f 6e 6e 65  within the conne
176e0 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20  ction string... 
176f0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
17700 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
17710 73 74 61 74 69 63 20 53 6f 72 74 65 64 4c 69 73  static SortedLis
17720 74 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e 67  t<string, string
17730 3e 20 50 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f  > ParseConnectio
17740 6e 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20  nString(..      
17750 20 20 73 74 72 69 6e 67 20 63 6f 6e 6e 65 63 74    string connect
17760 69 6f 6e 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20  ionString,..    
17770 20 20 20 20 62 6f 6f 6c 20 70 61 72 73 65 56 69      bool parseVi
17780 61 46 72 61 6d 65 77 6f 72 6b 2c 0d 0a 20 20 20  aFramework,..   
17790 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 6f 77 4e       bool allowN
177a0 61 6d 65 4f 6e 6c 79 0d 0a 20 20 20 20 20 20 20  ameOnly..       
177b0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
177c0 20 20 20 72 65 74 75 72 6e 20 50 61 72 73 65 43     return ParseC
177d0 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 28  onnectionString(
177e0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75  ..            nu
177f0 6c 6c 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  ll, connectionSt
17800 72 69 6e 67 2c 20 70 61 72 73 65 56 69 61 46 72  ring, parseViaFr
17810 61 6d 65 77 6f 72 6b 2c 20 61 6c 6c 6f 77 4e 61  amework, allowNa
17820 6d 65 4f 6e 6c 79 29 3b 0d 0a 20 20 20 20 7d 0d  meOnly);..    }.
17830 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
17840 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17850 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17860 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17870 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17880 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17890 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
178a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
178b0 20 2f 2f 2f 20 50 61 72 73 65 73 20 61 20 63 6f   /// Parses a co
178c0 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string 
178d0 69 6e 74 6f 20 63 6f 6d 70 6f 6e 65 6e 74 20 70  into component p
178e0 61 72 74 73 20 75 73 69 6e 67 20 74 68 65 20 63  arts using the c
178f0 75 73 74 6f 6d 0d 0a 20 20 20 20 2f 2f 2f 20 63  ustom..    /// c
17900 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
17910 20 70 61 72 73 65 72 2e 20 20 41 6e 20 65 78 63   parser.  An exc
17920 65 70 74 69 6f 6e 20 6d 61 79 20 62 65 20 74 68  eption may be th
17930 72 6f 77 6e 20 69 66 20 74 68 65 20 73 79 6e 74  rown if the synt
17940 61 78 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 74  ax..    /// of t
17950 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
17960 72 69 6e 67 20 69 73 20 69 6e 63 6f 72 72 65 63  ring is incorrec
17970 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  t...    /// </su
17980 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
17990 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e  <param name="con
179a0 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f  nection">..    /
179b0 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f  // The connectio
179c0 6e 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75  n that will be u
179d0 73 69 6e 67 20 74 68 65 20 70 61 72 73 65 64 20  sing the parsed 
179e0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
179f0 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  g...    /// </pa
17a00 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
17a10 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65  aram name="conne
17a20 63 74 69 6f 6e 53 74 72 69 6e 67 22 3e 0d 0a 20  ctionString">.. 
17a30 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65     /// The conne
17a40 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 6f 20  ction string to 
17a50 70 61 72 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  parse...    /// 
17a60 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
17a70 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70  / <param name="p
17a80 61 72 73 65 56 69 61 46 72 61 6d 65 77 6f 72 6b  arseViaFramework
17a90 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  ">..    /// Non-
17aa0 7a 65 72 6f 20 74 6f 20 70 61 72 73 65 20 74 68  zero to parse th
17ab0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
17ac0 69 6e 67 20 75 73 69 6e 67 20 74 68 65 20 61 6c  ing using the al
17ad0 67 6f 72 69 74 68 6d 20 70 72 6f 76 69 64 65 64  gorithm provided
17ae0 0d 0a 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 65  ..    /// by the
17af0 20 66 72 61 6d 65 77 6f 72 6b 20 69 74 73 65 6c   framework itsel
17b00 66 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  f.  This is not 
17b10 61 70 70 6c 69 63 61 62 6c 65 20 77 68 65 6e 20  applicable when 
17b20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 0d 0a  running on the..
17b30 20 20 20 20 2f 2f 2f 20 2e 4e 45 54 20 43 6f 6d      /// .NET Com
17b40 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b 2e 0d  pact Framework..
17b50 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
17b60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
17b70 6d 20 6e 61 6d 65 3d 22 61 6c 6c 6f 77 4e 61 6d  m name="allowNam
17b80 65 4f 6e 6c 79 22 3e 0d 0a 20 20 20 20 2f 2f 2f  eOnly">..    ///
17b90 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 6e 61 6d   Non-zero if nam
17ba0 65 73 20 61 72 65 20 61 6c 6c 6f 77 65 64 20 77  es are allowed w
17bb0 69 74 68 6f 75 74 20 76 61 6c 75 65 73 2e 0d 0a  ithout values...
17bc0 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
17bd0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
17be0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
17bf0 20 6c 69 73 74 20 6f 66 20 6b 65 79 2f 76 61 6c   list of key/val
17c00 75 65 20 70 61 69 72 73 20 63 6f 72 72 65 73 70  ue pairs corresp
17c10 6f 6e 64 69 6e 67 20 74 6f 20 74 68 65 20 70 61  onding to the pa
17c20 72 61 6d 65 74 65 72 73 20 73 70 65 63 69 66 69  rameters specifi
17c30 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68  ed..    /// with
17c40 69 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  in the connectio
17c50 6e 20 73 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f  n string...    /
17c60 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
17c70 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
17c80 63 20 53 6f 72 74 65 64 4c 69 73 74 3c 73 74 72  c SortedList<str
17c90 69 6e 67 2c 20 73 74 72 69 6e 67 3e 20 50 61 72  ing, string> Par
17ca0 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  seConnectionStri
17cb0 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ng(..        SQL
17cc0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6f  iteConnection co
17cd0 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  nnection,..     
17ce0 20 20 20 73 74 72 69 6e 67 20 63 6f 6e 6e 65 63     string connec
17cf0 74 69 6f 6e 53 74 72 69 6e 67 2c 0d 0a 20 20 20  tionString,..   
17d00 20 20 20 20 20 62 6f 6f 6c 20 70 61 72 73 65 56       bool parseV
17d10 69 61 46 72 61 6d 65 77 6f 72 6b 2c 0d 0a 20 20  iaFramework,..  
17d20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c 6c 6f 77        bool allow
17d30 4e 61 6d 65 4f 6e 6c 79 0d 0a 20 20 20 20 20 20  NameOnly..      
17d40 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
17d50 20 20 20 20 72 65 74 75 72 6e 20 70 61 72 73 65      return parse
17d60 56 69 61 46 72 61 6d 65 77 6f 72 6b 20 3f 0d 0a  ViaFramework ?..
17d70 20 20 20 20 20 20 20 20 20 20 20 20 50 61 72 73              Pars
17d80 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  eConnectionStrin
17d90 67 56 69 61 46 72 61 6d 65 77 6f 72 6b 28 63 6f  gViaFramework(co
17da0 6e 6e 65 63 74 69 6f 6e 2c 20 63 6f 6e 6e 65 63  nnection, connec
17db0 74 69 6f 6e 53 74 72 69 6e 67 2c 20 66 61 6c 73  tionString, fals
17dc0 65 29 20 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  e) :..          
17dd0 20 20 50 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f    ParseConnectio
17de0 6e 53 74 72 69 6e 67 28 63 6f 6e 6e 65 63 74 69  nString(connecti
17df0 6f 6e 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  on, connectionSt
17e00 72 69 6e 67 2c 20 61 6c 6c 6f 77 4e 61 6d 65 4f  ring, allowNameO
17e10 6e 6c 79 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  nly);..    }....
17e20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
17e30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e60 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17e80 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61  ///....    priva
17e90 74 65 20 76 6f 69 64 20 53 65 74 75 70 53 51 4c  te void SetupSQL
17ea0 69 74 65 42 61 73 65 28 53 6f 72 74 65 64 4c 69  iteBase(SortedLi
17eb0 73 74 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e  st<string, strin
17ec0 67 3e 20 6f 70 74 73 29 0d 0a 20 20 20 20 7b 0d  g> opts)..    {.
17ed0 0a 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20  .        object 
17ee0 65 6e 75 6d 56 61 6c 75 65 3b 0d 0a 0d 0a 20 20  enumValue;....  
17ef0 20 20 20 20 20 20 65 6e 75 6d 56 61 6c 75 65 20        enumValue 
17f00 3d 20 54 72 79 50 61 72 73 65 45 6e 75 6d 28 0d  = TryParseEnum(.
17f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70  .            typ
17f20 65 6f 66 28 53 51 4c 69 74 65 44 61 74 65 46 6f  eof(SQLiteDateFo
17f30 72 6d 61 74 73 29 2c 20 46 69 6e 64 4b 65 79 28  rmats), FindKey(
17f40 6f 70 74 73 2c 20 22 44 61 74 65 54 69 6d 65 46  opts, "DateTimeF
17f50 6f 72 6d 61 74 22 2c 0d 0a 20 20 20 20 20 20 20  ormat",..       
17f60 20 20 20 20 20 44 65 66 61 75 6c 74 44 61 74 65       DefaultDate
17f70 54 69 6d 65 46 6f 72 6d 61 74 2e 54 6f 53 74 72  TimeFormat.ToStr
17f80 69 6e 67 28 29 29 2c 20 74 72 75 65 29 3b 0d 0a  ing()), true);..
17f90 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
17fa0 44 61 74 65 46 6f 72 6d 61 74 73 20 64 61 74 65  DateFormats date
17fb0 46 6f 72 6d 61 74 20 3d 20 28 65 6e 75 6d 56 61  Format = (enumVa
17fc0 6c 75 65 20 69 73 20 53 51 4c 69 74 65 44 61 74  lue is SQLiteDat
17fd0 65 46 6f 72 6d 61 74 73 29 20 3f 0d 0a 20 20 20  eFormats) ?..   
17fe0 20 20 20 20 20 20 20 20 20 28 53 51 4c 69 74 65           (SQLite
17ff0 44 61 74 65 46 6f 72 6d 61 74 73 29 65 6e 75 6d  DateFormats)enum
18000 56 61 6c 75 65 20 3a 20 44 65 66 61 75 6c 74 44  Value : DefaultD
18010 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 3b 0d 0a  ateTimeFormat;..
18020 0d 0a 20 20 20 20 20 20 20 20 65 6e 75 6d 56 61  ..        enumVa
18030 6c 75 65 20 3d 20 54 72 79 50 61 72 73 65 45 6e  lue = TryParseEn
18040 75 6d 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  um(..           
18050 20 74 79 70 65 6f 66 28 44 61 74 65 54 69 6d 65   typeof(DateTime
18060 4b 69 6e 64 29 2c 20 46 69 6e 64 4b 65 79 28 6f  Kind), FindKey(o
18070 70 74 73 2c 20 22 44 61 74 65 54 69 6d 65 4b 69  pts, "DateTimeKi
18080 6e 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  nd",..          
18090 20 20 44 65 66 61 75 6c 74 44 61 74 65 54 69 6d    DefaultDateTim
180a0 65 4b 69 6e 64 2e 54 6f 53 74 72 69 6e 67 28 29  eKind.ToString()
180b0 29 2c 20 74 72 75 65 29 3b 0d 0a 0d 0a 20 20 20  ), true);....   
180c0 20 20 20 20 20 44 61 74 65 54 69 6d 65 4b 69 6e       DateTimeKin
180d0 64 20 6b 69 6e 64 20 3d 20 28 65 6e 75 6d 56 61  d kind = (enumVa
180e0 6c 75 65 20 69 73 20 44 61 74 65 54 69 6d 65 4b  lue is DateTimeK
180f0 69 6e 64 29 20 3f 0d 0a 20 20 20 20 20 20 20 20  ind) ?..        
18100 20 20 20 20 28 44 61 74 65 54 69 6d 65 4b 69 6e      (DateTimeKin
18110 64 29 65 6e 75 6d 56 61 6c 75 65 20 3a 20 44 65  d)enumValue : De
18120 66 61 75 6c 74 44 61 74 65 54 69 6d 65 4b 69 6e  faultDateTimeKin
18130 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  d;....        st
18140 72 69 6e 67 20 64 61 74 65 54 69 6d 65 46 6f 72  ring dateTimeFor
18150 6d 61 74 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70  mat = FindKey(op
18160 74 73 2c 20 22 44 61 74 65 54 69 6d 65 46 6f 72  ts, "DateTimeFor
18170 6d 61 74 53 74 72 69 6e 67 22 2c 0d 0a 20 20 20  matString",..   
18180 20 20 20 20 20 20 20 20 20 44 65 66 61 75 6c 74           Default
18190 44 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 53 74  DateTimeFormatSt
181a0 72 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ring);....      
181b0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f    //..        //
181c0 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65 20 61 75   NOTE: SQLite au
181d0 74 6f 6d 61 74 69 63 61 6c 6c 79 20 73 65 74 73  tomatically sets
181e0 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
181f0 20 74 68 65 20 64 61 74 61 62 61 73 65 0d 0a 20   the database.. 
18200 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
18210 74 6f 20 55 54 46 31 36 20 69 66 20 63 61 6c 6c  to UTF16 if call
18220 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 33 5f  ed from sqlite3_
18230 6f 70 65 6e 31 36 28 29 2e 0d 0a 20 20 20 20 20  open16()...     
18240 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 69     //..        i
18250 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  f (SQLiteConvert
18260 2e 54 6f 42 6f 6f 6c 65 61 6e 28 46 69 6e 64 4b  .ToBoolean(FindK
18270 65 79 28 6f 70 74 73 2c 20 22 55 73 65 55 54 46  ey(opts, "UseUTF
18280 31 36 45 6e 63 6f 64 69 6e 67 22 2c 0d 0a 20 20  16Encoding",..  
18290 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
182a0 44 65 66 61 75 6c 74 55 73 65 55 54 46 31 36 45  DefaultUseUTF16E
182b0 6e 63 6f 64 69 6e 67 2e 54 6f 53 74 72 69 6e 67  ncoding.ToString
182c0 28 29 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ())))..        {
182d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 73  ..            _s
182e0 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 33  ql = new SQLite3
182f0 5f 55 54 46 31 36 28 0d 0a 20 20 20 20 20 20 20  _UTF16(..       
18300 20 20 20 20 20 20 20 20 20 64 61 74 65 46 6f 72           dateFor
18310 6d 61 74 2c 20 6b 69 6e 64 2c 20 64 61 74 65 54  mat, kind, dateT
18320 69 6d 65 46 6f 72 6d 61 74 2c 20 49 6e 74 50 74  imeFormat, IntPt
18330 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c 2c 0d 0a 20  r.Zero, null,.. 
18340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 66                 f
18350 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alse);..        
18360 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
18370 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
18380 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
18390 65 77 20 53 51 4c 69 74 65 33 28 0d 0a 20 20 20  ew SQLite3(..   
183a0 20 20 20 20 20 20 20 20 20 20 20 20 20 64 61 74               dat
183b0 65 46 6f 72 6d 61 74 2c 20 6b 69 6e 64 2c 20 64  eFormat, kind, d
183c0 61 74 65 54 69 6d 65 46 6f 72 6d 61 74 2c 20 49  ateTimeFormat, I
183d0 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 6e 75 6c 6c  ntPtr.Zero, null
183e0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
183f0 20 20 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20     false);..    
18400 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
18410 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18420 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18430 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18440 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18450 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18460 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18470 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
18480 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 4d  on IDisposable M
18490 65 6d 62 65 72 73 0d 0a 20 20 20 20 2f 2f 2f 20  embers..    /// 
184a0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
184b0 2f 2f 20 44 69 73 70 6f 73 65 73 20 61 6e 64 20  // Disposes and 
184c0 66 69 6e 61 6c 69 7a 65 73 20 74 68 65 20 63 6f  finalizes the co
184d0 6e 6e 65 63 74 69 6f 6e 2c 20 69 66 20 61 70 70  nnection, if app
184e0 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  licable...    //
184f0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
18500 20 20 70 75 62 6c 69 63 20 6e 65 77 20 76 6f 69    public new voi
18510 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
18520 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
18530 5f 6e 6f 44 69 73 70 6f 73 65 29 0d 0a 20 20 20  _noDispose)..   
18540 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
18550 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 61 73 65  ....        base
18560 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
18570 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
18580 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
18590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
185e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
185f0 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f 73   #region IDispos
18600 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20 4d  able "Pattern" M
18610 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69 76  embers..    priv
18620 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73 65  ate bool dispose
18630 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  d;..    private 
18640 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f 73  void CheckDispos
18650 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a 2f  ed() /* throw */
18660 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48 52  ..    {..#if THR
18670 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d 0a  OW_ON_DISPOSED..
18680 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73 70          if (disp
18690 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20  osed)..         
186a0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62 6a     throw new Obj
186b0 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65 70  ectDisposedExcep
186c0 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c 69  tion(typeof(SQLi
186d0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 29 2e 4e 61  teConnection).Na
186e0 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  me);..#endif..  
186f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
18700 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18710 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18720 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18730 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18740 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18750 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
18760 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
18770 0a 20 20 20 20 2f 2f 2f 20 43 6c 65 61 6e 73 20  .    /// Cleans 
18780 75 70 20 72 65 73 6f 75 72 63 65 73 20 28 6e 61  up resources (na
18790 74 69 76 65 20 61 6e 64 20 6d 61 6e 61 67 65 64  tive and managed
187a0 29 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  ) associated wit
187b0 68 20 74 68 65 20 63 75 72 72 65 6e 74 20 69 6e  h the current in
187c0 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
187d0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
187e0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
187f0 3d 22 64 69 73 70 6f 73 69 6e 67 22 3e 0d 0a 20  ="disposing">.. 
18800 20 20 20 2f 2f 2f 20 5a 65 72 6f 20 77 68 65 6e     /// Zero when
18810 20 62 65 69 6e 67 20 64 69 73 70 6f 73 65 64 20   being disposed 
18820 76 69 61 20 67 61 72 62 61 67 65 20 63 6f 6c 6c  via garbage coll
18830 65 63 74 69 6f 6e 3b 20 6f 74 68 65 72 77 69 73  ection; otherwis
18840 65 2c 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a 20 20  e, non-zero...  
18850 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
18860 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76      protected ov
18870 65 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70  erride void Disp
18880 6f 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69  ose(bool disposi
18890 6e 67 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ng)..    {..#if 
188a0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
188b0 26 26 20 54 52 41 43 45 5f 57 41 52 4e 49 4e 47  && TRACE_WARNING
188c0 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 5f  ..        if ((_
188d0 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
188e0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 54 72  nnectionFlags.Tr
188f0 61 63 65 57 61 72 6e 69 6e 67 29 20 3d 3d 20 53  aceWarning) == S
18900 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
18910 6c 61 67 73 2e 54 72 61 63 65 57 61 72 6e 69 6e  lags.TraceWarnin
18920 67 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  g)..        {.. 
18930 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f             if (_
18940 6e 6f 44 69 73 70 6f 73 65 29 0d 0a 20 20 20 20  noDispose)..    
18950 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18960 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
18970 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 54 72  m.Diagnostics.Tr
18980 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
18990 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
189a0 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
189b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
189c0 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
189d0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
189e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
189f0 22 57 41 52 4e 49 4e 47 3a 20 44 69 73 70 6f 73  "WARNING: Dispos
18a00 69 6e 67 20 6f 66 20 63 6f 6e 6e 65 63 74 69 6f  ing of connectio
18a10 6e 20 5c 22 7b 30 7d 5c 22 20 77 69 74 68 20 74  n \"{0}\" with t
18a20 68 65 20 6e 6f 2d 64 69 73 70 6f 73 65 20 66 6c  he no-dispose fl
18a30 61 67 20 73 65 74 2e 22 2c 0d 0a 20 20 20 20 20  ag set.",..     
18a40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f                 _
18a50 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67  connectionString
18a60 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
18a70 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 23   }..        }..#
18a80 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
18a90 20 5f 64 69 73 70 6f 73 69 6e 67 20 3d 20 74 72   _disposing = tr
18aa0 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  ue;....        t
18ab0 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
18ac0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
18ad0 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
18ae0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18af0 20 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28            //if (
18b00 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20  disposing)..    
18b10 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d              //{.
18b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18b30 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f   //    /////////
18b40 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18b50 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20  ///////////..   
18b60 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
18b70 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61     // dispose ma
18b80 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
18b90 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
18ba0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f           //    /
18bb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18bd0 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
18be0 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20       //}....    
18bf0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
18c00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
18c30 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75      // release u
18c40 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63  nmanaged resourc
18c50 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20  es here.....    
18c60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f              ////
18c70 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18c90 2f 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  //....          
18ca0 20 20 20 20 20 20 43 6c 6f 73 65 28 29 3b 0d 0a        Close();..
18cb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
18cc0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18cd0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
18ce0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18cf0 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64    base.Dispose(d
18d00 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  isposing);....  
18d10 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
18d20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
18d30 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73 68  E: Everything sh
18d40 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69  ould be fully di
18d50 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20 70  sposed at this p
18d60 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  oint...         
18d70 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
18d80 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
18d90 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
18da0 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
18db0 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
18dc0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18dd0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18de0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18df0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18e10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
18e20 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
18e30 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
18e40 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
18e50 0d 0a 20 20 20 20 2f 2f 2f 20 4f 62 73 6f 6c 65  ..    /// Obsole
18e60 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  te..    /// </su
18e70 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
18e80 69 63 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20  ic override int 
18e90 43 6f 6e 6e 65 63 74 69 6f 6e 54 69 6d 65 6f 75  ConnectionTimeou
18ea0 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
18eb0 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  get..      {..  
18ec0 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
18ed0 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  sed();..        
18ee0 72 65 74 75 72 6e 20 44 65 66 61 75 6c 74 43 6f  return DefaultCo
18ef0 6e 6e 65 63 74 69 6f 6e 54 69 6d 65 6f 75 74 3b  nnectionTimeout;
18f00 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
18f10 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
18f20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
18f30 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61     /// Creates a
18f40 20 63 6c 6f 6e 65 20 6f 66 20 74 68 65 20 63 6f   clone of the co
18f50 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 6c 6c 20 61  nnection.  All a
18f60 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
18f70 73 20 61 6e 64 20 75 73 65 72 2d 64 65 66 69 6e  s and user-defin
18f80 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 72 65  ed functions are
18f90 20 63 6c 6f 6e 65 64 2e 20 20 49 66 20 74 68 65   cloned.  If the
18fa0 20 65 78 69 73 74 69 6e 67 20 63 6f 6e 6e 65 63   existing connec
18fb0 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2c 20 74 68  tion is open, th
18fc0 65 20 63 6c 6f 6e 65 64 20 63 6f 6e 6e 65 63 74  e cloned connect
18fd0 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c  ion..    /// wil
18fe0 6c 20 61 6c 73 6f 20 62 65 20 6f 70 65 6e 65 64  l also be opened
18ff0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
19000 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
19010 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e  returns></return
19020 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 6f  s>..    public o
19030 62 6a 65 63 74 20 43 6c 6f 6e 65 28 29 0d 0a 20  bject Clone().. 
19040 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
19050 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
19060 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53      return new S
19070 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
19080 74 68 69 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  this);..    }...
19090 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
190a0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61  y>..    /// Crea
190b0 74 65 73 20 61 20 64 61 74 61 62 61 73 65 20 66  tes a database f
190c0 69 6c 65 2e 20 20 54 68 69 73 20 6a 75 73 74 20  ile.  This just 
190d0 63 72 65 61 74 65 73 20 61 20 7a 65 72 6f 2d 62  creates a zero-b
190e0 79 74 65 20 66 69 6c 65 20 77 68 69 63 68 20 53  yte file which S
190f0 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 77  QLite..    /// w
19100 69 6c 6c 20 74 75 72 6e 20 69 6e 74 6f 20 61 20  ill turn into a 
19110 64 61 74 61 62 61 73 65 20 77 68 65 6e 20 74 68  database when th
19120 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64  e file is opened
19130 20 70 72 6f 70 65 72 6c 79 2e 0d 0a 20 20 20 20   properly...    
19140 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
19150 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
19160 61 6d 65 3d 22 64 61 74 61 62 61 73 65 46 69 6c  ame="databaseFil
19170 65 4e 61 6d 65 22 3e 54 68 65 20 66 69 6c 65 20  eName">The file 
19180 74 6f 20 63 72 65 61 74 65 3c 2f 70 61 72 61 6d  to create</param
19190 3e 0d 0a 20 20 20 20 73 74 61 74 69 63 20 70 75  >..    static pu
191a0 62 6c 69 63 20 76 6f 69 64 20 43 72 65 61 74 65  blic void Create
191b0 46 69 6c 65 28 73 74 72 69 6e 67 20 64 61 74 61  File(string data
191c0 62 61 73 65 46 69 6c 65 4e 61 6d 65 29 0d 0a 20  baseFileName).. 
191d0 20 20 20 7b 0d 0a 20 20 20 20 20 20 46 69 6c 65     {..      File
191e0 53 74 72 65 61 6d 20 66 73 20 3d 20 46 69 6c 65  Stream fs = File
191f0 2e 43 72 65 61 74 65 28 64 61 74 61 62 61 73 65  .Create(database
19200 46 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20  FileName);..    
19210 20 20 66 73 2e 43 6c 6f 73 65 28 29 3b 0d 0a 20    fs.Close();.. 
19220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
19230 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
19240 2f 2f 20 52 61 69 73 65 73 20 74 68 65 20 73 74  // Raises the st
19250 61 74 65 20 63 68 61 6e 67 65 20 65 76 65 6e 74  ate change event
19260 20 77 68 65 6e 20 74 68 65 20 73 74 61 74 65 20   when the state 
19270 6f 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  of the connectio
19280 6e 20 63 68 61 6e 67 65 73 0d 0a 20 20 20 20 2f  n changes..    /
19290 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
192a0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
192b0 6d 65 3d 22 6e 65 77 53 74 61 74 65 22 3e 54 68  me="newState">Th
192c0 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e  e new connection
192d0 20 73 74 61 74 65 2e 20 20 49 66 20 74 68 69 73   state.  If this
192e0 20 69 73 20 64 69 66 66 65 72 65 6e 74 0d 0a 20   is different.. 
192f0 20 20 20 2f 2f 2f 20 66 72 6f 6d 20 74 68 65 20     /// from the 
19300 70 72 65 76 69 6f 75 73 20 73 74 61 74 65 2c 20  previous state, 
19310 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
19320 74 61 74 65 43 68 61 6e 67 65 22 20 2f 3e 20 65  tateChange" /> e
19330 76 65 6e 74 20 69 73 0d 0a 20 20 20 20 2f 2f 2f  vent is..    ///
19340 20 72 61 69 73 65 64 2e 3c 2f 70 61 72 61 6d 3e   raised.</param>
19350 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
19360 20 6e 61 6d 65 3d 22 65 76 65 6e 74 41 72 67 73   name="eventArgs
19370 22 3e 54 68 65 20 65 76 65 6e 74 20 64 61 74 61  ">The event data
19380 20 63 72 65 61 74 65 64 20 66 6f 72 20 74 68 65   created for the
19390 20 72 61 69 73 65 64 20 65 76 65 6e 74 2c 20 69   raised event, i
193a0 66 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 77 61  f..    /// it wa
193b0 73 20 61 63 74 75 61 6c 6c 79 20 72 61 69 73 65  s actually raise
193c0 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  d.</param>..    
193d0 69 6e 74 65 72 6e 61 6c 20 76 6f 69 64 20 4f 6e  internal void On
193e0 53 74 61 74 65 43 68 61 6e 67 65 28 0d 0a 20 20  StateChange(..  
193f0 20 20 20 20 20 20 43 6f 6e 6e 65 63 74 69 6f 6e        Connection
19400 53 74 61 74 65 20 6e 65 77 53 74 61 74 65 2c 0d  State newState,.
19410 0a 20 20 20 20 20 20 20 20 72 65 66 20 53 74 61  .        ref Sta
19420 74 65 43 68 61 6e 67 65 45 76 65 6e 74 41 72 67  teChangeEventArg
19430 73 20 65 76 65 6e 74 41 72 67 73 0d 0a 20 20 20  s eventArgs..   
19440 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
19450 20 20 20 20 20 20 20 43 6f 6e 6e 65 63 74 69 6f         Connectio
19460 6e 53 74 61 74 65 20 6f 6c 64 53 74 61 74 65 20  nState oldState 
19470 3d 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 61  = _connectionSta
19480 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f  te;....        _
19490 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65 20  connectionState 
194a0 3d 20 6e 65 77 53 74 61 74 65 3b 0d 0a 0d 0a 20  = newState;.... 
194b0 20 20 20 20 20 20 20 69 66 20 28 28 53 74 61 74         if ((Stat
194c0 65 43 68 61 6e 67 65 20 21 3d 20 6e 75 6c 6c 29  eChange != null)
194d0 20 26 26 20 28 6e 65 77 53 74 61 74 65 20 21 3d   && (newState !=
194e0 20 6f 6c 64 53 74 61 74 65 29 29 0d 0a 20 20 20   oldState))..   
194f0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
19500 20 20 20 20 53 74 61 74 65 43 68 61 6e 67 65 45      StateChangeE
19510 76 65 6e 74 41 72 67 73 20 6c 6f 63 61 6c 45 76  ventArgs localEv
19520 65 6e 74 41 72 67 73 20 3d 0d 0a 20 20 20 20 20  entArgs =..     
19530 20 20 20 20 20 20 20 20 20 20 20 6e 65 77 20 53             new S
19540 74 61 74 65 43 68 61 6e 67 65 45 76 65 6e 74 41  tateChangeEventA
19550 72 67 73 28 6f 6c 64 53 74 61 74 65 2c 20 6e 65  rgs(oldState, ne
19560 77 53 74 61 74 65 29 3b 0d 0a 0d 0a 20 20 20 20  wState);....    
19570 20 20 20 20 20 20 20 20 53 74 61 74 65 43 68 61          StateCha
19580 6e 67 65 28 74 68 69 73 2c 20 6c 6f 63 61 6c 45  nge(this, localE
19590 76 65 6e 74 41 72 67 73 29 3b 0d 0a 0d 0a 20 20  ventArgs);....  
195a0 20 20 20 20 20 20 20 20 20 20 65 76 65 6e 74 41            eventA
195b0 72 67 73 20 3d 20 6c 6f 63 61 6c 45 76 65 6e 74  rgs = localEvent
195c0 41 72 67 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d  Args;..        }
195d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
195e0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
195f0 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73    /// Determines
19600 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65   and returns the
19610 20 66 61 6c 6c 62 61 63 6b 20 64 65 66 61 75 6c   fallback defaul
19620 74 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65 76 65  t isolation leve
19630 6c 20 77 68 65 6e 20 6f 6e 65 20 63 61 6e 6e 6f  l when one canno
19640 74 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62  t be..    /// ob
19650 74 61 69 6e 65 64 20 66 72 6f 6d 20 61 6e 20 65  tained from an e
19660 78 69 73 74 69 6e 67 20 63 6f 6e 6e 65 63 74 69  xisting connecti
19670 6f 6e 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  on instance...  
19680 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
19690 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
196a0 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
196b0 20 66 61 6c 6c 62 61 63 6b 20 64 65 66 61 75 6c   fallback defaul
196c0 74 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65 76 65  t isolation leve
196d0 6c 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65  l for this conne
196e0 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 20 2d  ction instance -
196f0 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 65  OR-..    /// <se
19700 65 20 63 72 65 66 3d 22 49 73 6f 6c 61 74 69 6f  e cref="Isolatio
19710 6e 4c 65 76 65 6c 2e 55 6e 73 70 65 63 69 66 69  nLevel.Unspecifi
19720 65 64 22 20 2f 3e 20 69 66 20 69 74 20 63 61 6e  ed" /> if it can
19730 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e 65  not be determine
19740 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  d...    /// </re
19750 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
19760 61 74 65 20 73 74 61 74 69 63 20 49 73 6f 6c 61  ate static Isola
19770 74 69 6f 6e 4c 65 76 65 6c 20 47 65 74 46 61 6c  tionLevel GetFal
19780 6c 62 61 63 6b 44 65 66 61 75 6c 74 49 73 6f 6c  lbackDefaultIsol
19790 61 74 69 6f 6e 4c 65 76 65 6c 28 29 0d 0a 20 20  ationLevel()..  
197a0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74    {..        ret
197b0 75 72 6e 20 44 65 66 61 75 6c 74 49 73 6f 6c 61  urn DefaultIsola
197c0 74 69 6f 6e 4c 65 76 65 6c 3b 0d 0a 20 20 20 20  tionLevel;..    
197d0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
197e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
197f0 44 65 74 65 72 6d 69 6e 65 73 20 61 6e 64 20 72  Determines and r
19800 65 74 75 72 6e 73 20 74 68 65 20 64 65 66 61 75  eturns the defau
19810 6c 74 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65 76  lt isolation lev
19820 65 6c 20 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e  el for this conn
19830 65 63 74 69 6f 6e 20 69 6e 73 74 61 6e 63 65 2e  ection instance.
19840 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
19850 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
19860 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
19870 20 54 68 65 20 64 65 66 61 75 6c 74 20 69 73 6f   The default iso
19880 6c 61 74 69 6f 6e 20 6c 65 76 65 6c 20 66 6f 72  lation level for
19890 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
198a0 20 69 6e 73 74 61 6e 63 65 20 2d 4f 52 2d 0d 0a   instance -OR-..
198b0 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
198c0 66 3d 22 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65  f="IsolationLeve
198d0 6c 2e 55 6e 73 70 65 63 69 66 69 65 64 22 20 2f  l.Unspecified" /
198e0 3e 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  > if it cannot b
198f0 65 20 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20  e determined... 
19900 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
19910 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
19920 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 47  IsolationLevel G
19930 65 74 44 65 66 61 75 6c 74 49 73 6f 6c 61 74 69  etDefaultIsolati
19940 6f 6e 4c 65 76 65 6c 28 29 0d 0a 20 20 20 20 7b  onLevel()..    {
19950 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
19960 20 5f 64 65 66 61 75 6c 74 49 73 6f 6c 61 74 69   _defaultIsolati
19970 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  on;..    }....  
19980 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
19990 0a 20 20 20 20 2f 2f 2f 20 4f 42 53 4f 4c 45 54  .    /// OBSOLET
199a0 45 2e 20 20 43 72 65 61 74 65 73 20 61 20 6e 65  E.  Creates a ne
199b0 77 20 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74  w SQLiteTransact
199c0 69 6f 6e 20 69 66 20 6f 6e 65 20 69 73 6e 27 74  ion if one isn't
199d0 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65 20   already active 
199e0 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  on the connectio
199f0 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
19a00 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
19a10 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 73 6f  <param name="iso
19a20 6c 61 74 69 6f 6e 4c 65 76 65 6c 22 3e 54 68 69  lationLevel">Thi
19a30 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 69  s parameter is i
19a40 67 6e 6f 72 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d  gnored.</param>.
19a50 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
19a60 6e 61 6d 65 3d 22 64 65 66 65 72 72 65 64 4c 6f  name="deferredLo
19a70 63 6b 22 3e 57 68 65 6e 20 54 52 55 45 2c 20 53  ck">When TRUE, S
19a80 51 4c 69 74 65 20 64 65 66 65 72 73 20 6f 62 74  QLite defers obt
19a90 61 69 6e 69 6e 67 20 61 20 77 72 69 74 65 20 6c  aining a write l
19aa0 6f 63 6b 20 75 6e 74 69 6c 20 61 20 77 72 69 74  ock until a writ
19ab0 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20 72  e operation is r
19ac0 65 71 75 65 73 74 65 64 2e 0d 0a 20 20 20 20 2f  equested...    /
19ad0 2f 2f 20 57 68 65 6e 20 46 41 4c 53 45 2c 20 61  // When FALSE, a
19ae0 20 77 72 69 74 65 6c 6f 63 6b 20 69 73 20 6f 62   writelock is ob
19af0 74 61 69 6e 65 64 20 69 6d 6d 65 64 69 61 74 65  tained immediate
19b00 6c 79 2e 20 20 54 68 65 20 64 65 66 61 75 6c 74  ly.  The default
19b10 20 69 73 20 54 52 55 45 2c 20 62 75 74 20 69 6e   is TRUE, but in
19b20 20 61 20 6d 75 6c 74 69 2d 74 68 72 65 61 64 65   a multi-threade
19b30 64 20 6d 75 6c 74 69 2d 77 72 69 74 65 72 0d 0a  d multi-writer..
19b40 20 20 20 20 2f 2f 2f 20 65 6e 76 69 72 6f 6e 6d      /// environm
19b50 65 6e 74 2c 20 6f 6e 65 20 6d 61 79 20 69 6e 73  ent, one may ins
19b60 74 65 61 64 20 63 68 6f 6f 73 65 20 74 6f 20 6c  tead choose to l
19b70 6f 63 6b 20 74 68 65 20 64 61 74 61 62 61 73 65  ock the database
19b80 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74 6f 20   immediately to 
19b90 61 76 6f 69 64 20 61 6e 79 20 70 6f 73 73 69 62  avoid any possib
19ba0 6c 65 20 77 72 69 74 65 72 20 64 65 61 64 6c 6f  le writer deadlo
19bb0 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
19bc0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
19bd0 74 75 72 6e 73 20 61 20 53 51 4c 69 74 65 54 72  turns a SQLiteTr
19be0 61 6e 73 61 63 74 69 6f 6e 20 6f 62 6a 65 63 74  ansaction object
19bf0 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
19c00 20 5b 4f 62 73 6f 6c 65 74 65 28 22 55 73 65 20   [Obsolete("Use 
19c10 6f 6e 65 20 6f 66 20 74 68 65 20 73 74 61 6e 64  one of the stand
19c20 61 72 64 20 42 65 67 69 6e 54 72 61 6e 73 61 63  ard BeginTransac
19c30 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2c 20 74 68  tion methods, th
19c40 69 73 20 6f 6e 65 20 77 69 6c 6c 20 62 65 20 72  is one will be r
19c50 65 6d 6f 76 65 64 20 73 6f 6f 6e 22 29 5d 0d 0a  emoved soon")]..
19c60 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74      public SQLit
19c70 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 42 65 67  eTransaction Beg
19c80 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28 49 73  inTransaction(Is
19c90 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 69 73 6f  olationLevel iso
19ca0 6c 61 74 69 6f 6e 4c 65 76 65 6c 2c 20 62 6f 6f  lationLevel, boo
19cb0 6c 20 64 65 66 65 72 72 65 64 4c 6f 63 6b 29 0d  l deferredLock).
19cc0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68  .    {..      Ch
19cd0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
19ce0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 53 51        return (SQ
19cf0 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 29  LiteTransaction)
19d00 42 65 67 69 6e 44 62 54 72 61 6e 73 61 63 74 69  BeginDbTransacti
19d10 6f 6e 28 64 65 66 65 72 72 65 64 4c 6f 63 6b 20  on(deferredLock 
19d20 3d 3d 20 66 61 6c 73 65 20 3f 20 49 6d 6d 65 64  == false ? Immed
19d30 69 61 74 65 49 73 6f 6c 61 74 69 6f 6e 4c 65 76  iateIsolationLev
19d40 65 6c 20 3a 20 44 65 66 65 72 72 65 64 49 73 6f  el : DeferredIso
19d50 6c 61 74 69 6f 6e 4c 65 76 65 6c 29 3b 0d 0a 20  lationLevel);.. 
19d60 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
19d70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
19d80 2f 2f 20 4f 42 53 4f 4c 45 54 45 2e 20 20 43 72  // OBSOLETE.  Cr
19d90 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69  eates a new SQLi
19da0 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 69 66  teTransaction if
19db0 20 6f 6e 65 20 69 73 6e 27 74 20 61 6c 72 65 61   one isn't alrea
19dc0 64 79 20 61 63 74 69 76 65 20 6f 6e 20 74 68 65  dy active on the
19dd0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
19de0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
19df0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
19e00 20 6e 61 6d 65 3d 22 64 65 66 65 72 72 65 64 4c   name="deferredL
19e10 6f 63 6b 22 3e 57 68 65 6e 20 54 52 55 45 2c 20  ock">When TRUE, 
19e20 53 51 4c 69 74 65 20 64 65 66 65 72 73 20 6f 62  SQLite defers ob
19e30 74 61 69 6e 69 6e 67 20 61 20 77 72 69 74 65 20  taining a write 
19e40 6c 6f 63 6b 20 75 6e 74 69 6c 20 61 20 77 72 69  lock until a wri
19e50 74 65 20 6f 70 65 72 61 74 69 6f 6e 20 69 73 20  te operation is 
19e60 72 65 71 75 65 73 74 65 64 2e 0d 0a 20 20 20 20  requested...    
19e70 2f 2f 2f 20 57 68 65 6e 20 46 41 4c 53 45 2c 20  /// When FALSE, 
19e80 61 20 77 72 69 74 65 6c 6f 63 6b 20 69 73 20 6f  a writelock is o
19e90 62 74 61 69 6e 65 64 20 69 6d 6d 65 64 69 61 74  btained immediat
19ea0 65 6c 79 2e 20 20 54 68 65 20 64 65 66 61 75 6c  ely.  The defaul
19eb0 74 20 69 73 20 66 61 6c 73 65 2c 20 62 75 74 20  t is false, but 
19ec0 69 6e 20 61 20 6d 75 6c 74 69 2d 74 68 72 65 61  in a multi-threa
19ed0 64 65 64 20 6d 75 6c 74 69 2d 77 72 69 74 65 72  ded multi-writer
19ee0 0d 0a 20 20 20 20 2f 2f 2f 20 65 6e 76 69 72 6f  ..    /// enviro
19ef0 6e 6d 65 6e 74 2c 20 6f 6e 65 20 6d 61 79 20 69  nment, one may i
19f00 6e 73 74 65 61 64 20 63 68 6f 6f 73 65 20 74 6f  nstead choose to
19f10 20 6c 6f 63 6b 20 74 68 65 20 64 61 74 61 62 61   lock the databa
19f20 73 65 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 74  se immediately t
19f30 6f 20 61 76 6f 69 64 20 61 6e 79 20 70 6f 73 73  o avoid any poss
19f40 69 62 6c 65 20 77 72 69 74 65 72 20 64 65 61 64  ible writer dead
19f50 6c 6f 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  lock.</param>.. 
19f60 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
19f70 52 65 74 75 72 6e 73 20 61 20 53 51 4c 69 74 65  Returns a SQLite
19f80 54 72 61 6e 73 61 63 74 69 6f 6e 20 6f 62 6a 65  Transaction obje
19f90 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ct.</returns>.. 
19fa0 20 20 20 5b 4f 62 73 6f 6c 65 74 65 28 22 55 73     [Obsolete("Us
19fb0 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 73 74 61  e one of the sta
19fc0 6e 64 61 72 64 20 42 65 67 69 6e 54 72 61 6e 73  ndard BeginTrans
19fd0 61 63 74 69 6f 6e 20 6d 65 74 68 6f 64 73 2c 20  action methods, 
19fe0 74 68 69 73 20 6f 6e 65 20 77 69 6c 6c 20 62 65  this one will be
19ff0 20 72 65 6d 6f 76 65 64 20 73 6f 6f 6e 22 29 5d   removed soon")]
1a000 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c  ..    public SQL
1a010 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 42  iteTransaction B
1a020 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f 6e 28  eginTransaction(
1a030 62 6f 6f 6c 20 64 65 66 65 72 72 65 64 4c 6f 63  bool deferredLoc
1a040 6b 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  k)..    {..     
1a050 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
1a060 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
1a070 28 53 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69  (SQLiteTransacti
1a080 6f 6e 29 42 65 67 69 6e 44 62 54 72 61 6e 73 61  on)BeginDbTransa
1a090 63 74 69 6f 6e 28 64 65 66 65 72 72 65 64 4c 6f  ction(deferredLo
1a0a0 63 6b 20 3d 3d 20 66 61 6c 73 65 20 3f 20 49 6d  ck == false ? Im
1a0b0 6d 65 64 69 61 74 65 49 73 6f 6c 61 74 69 6f 6e  mediateIsolation
1a0c0 4c 65 76 65 6c 20 3a 20 44 65 66 65 72 72 65 64  Level : Deferred
1a0d0 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 29 3b  IsolationLevel);
1a0e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a0f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1a100 20 20 2f 2f 2f 20 43 72 65 61 74 65 73 20 61 20    /// Creates a 
1a110 6e 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53  new <see cref="S
1a120 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
1a130 22 20 2f 3e 20 69 66 20 6f 6e 65 20 69 73 6e 27  " /> if one isn'
1a140 74 20 61 6c 72 65 61 64 79 20 61 63 74 69 76 65  t already active
1a150 20 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   on the connecti
1a160 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
1a170 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1a180 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 73   <param name="is
1a190 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 22 3e 53 75  olationLevel">Su
1a1a0 70 70 6f 72 74 65 64 20 69 73 6f 6c 61 74 69 6f  pported isolatio
1a1b0 6e 20 6c 65 76 65 6c 73 20 61 72 65 20 53 65 72  n levels are Ser
1a1c0 69 61 6c 69 7a 61 62 6c 65 2c 20 52 65 61 64 43  ializable, ReadC
1a1d0 6f 6d 6d 69 74 74 65 64 20 61 6e 64 20 55 6e 73  ommitted and Uns
1a1e0 70 65 63 69 66 69 65 64 2e 3c 2f 70 61 72 61 6d  pecified.</param
1a1f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d 61  >..    /// <rema
1a200 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 6e  rks>..    /// Un
1a210 73 70 65 63 69 66 69 65 64 20 77 69 6c 6c 20 75  specified will u
1a220 73 65 20 74 68 65 20 64 65 66 61 75 6c 74 20 69  se the default i
1a230 73 6f 6c 61 74 69 6f 6e 20 6c 65 76 65 6c 20 73  solation level s
1a240 70 65 63 69 66 69 65 64 20 69 6e 20 74 68 65 20  pecified in the 
1a250 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
1a260 67 2e 20 20 49 66 20 6e 6f 20 69 73 6f 6c 61 74  g.  If no isolat
1a270 69 6f 6e 20 6c 65 76 65 6c 20 69 73 20 73 70 65  ion level is spe
1a280 63 69 66 69 65 64 20 69 6e 20 74 68 65 0d 0a 20  cified in the.. 
1a290 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f     /// connectio
1a2a0 6e 20 73 74 72 69 6e 67 2c 20 53 65 72 69 61 6c  n string, Serial
1a2b0 69 7a 61 62 6c 65 20 69 73 20 75 73 65 64 2e 0d  izable is used..
1a2c0 0a 20 20 20 20 2f 2f 2f 20 53 65 72 69 61 6c 69  .    /// Seriali
1a2d0 7a 61 62 6c 65 20 74 72 61 6e 73 61 63 74 69 6f  zable transactio
1a2e0 6e 73 20 61 72 65 20 74 68 65 20 64 65 66 61 75  ns are the defau
1a2f0 6c 74 2e 20 20 49 6e 20 74 68 69 73 20 6d 6f 64  lt.  In this mod
1a300 65 2c 20 74 68 65 20 65 6e 67 69 6e 65 20 67 65  e, the engine ge
1a310 74 73 20 61 6e 20 69 6d 6d 65 64 69 61 74 65 20  ts an immediate 
1a320 6c 6f 63 6b 20 6f 6e 20 74 68 65 20 64 61 74 61  lock on the data
1a330 62 61 73 65 2c 20 61 6e 64 20 6e 6f 20 6f 74 68  base, and no oth
1a340 65 72 20 74 68 72 65 61 64 73 0d 0a 20 20 20 20  er threads..    
1a350 2f 2f 2f 20 6d 61 79 20 62 65 67 69 6e 20 61 20  /// may begin a 
1a360 74 72 61 6e 73 61 63 74 69 6f 6e 2e 20 20 4f 74  transaction.  Ot
1a370 68 65 72 20 74 68 72 65 61 64 73 20 6d 61 79 20  her threads may 
1a380 72 65 61 64 20 66 72 6f 6d 20 74 68 65 20 64 61  read from the da
1a390 74 61 62 61 73 65 2c 20 62 75 74 20 6e 6f 74 20  tabase, but not 
1a3a0 77 72 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  write...    /// 
1a3b0 57 69 74 68 20 61 20 52 65 61 64 43 6f 6d 6d 69  With a ReadCommi
1a3c0 74 74 65 64 20 69 73 6f 6c 61 74 69 6f 6e 20 6c  tted isolation l
1a3d0 65 76 65 6c 2c 20 6c 6f 63 6b 73 20 61 72 65 20  evel, locks are 
1a3e0 64 65 66 65 72 72 65 64 20 61 6e 64 20 65 6c 65  deferred and ele
1a3f0 76 61 74 65 64 20 61 73 20 6e 65 65 64 65 64 2e  vated as needed.
1a400 20 20 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65    It is possible
1a410 20 66 6f 72 20 6d 75 6c 74 69 70 6c 65 20 74 68   for multiple th
1a420 72 65 61 64 73 20 74 6f 20 73 74 61 72 74 0d 0a  reads to start..
1a430 20 20 20 20 2f 2f 2f 20 61 20 74 72 61 6e 73 61      /// a transa
1a440 63 74 69 6f 6e 20 69 6e 20 52 65 61 64 43 6f 6d  ction in ReadCom
1a450 6d 69 74 74 65 64 20 6d 6f 64 65 2c 20 62 75 74  mitted mode, but
1a460 20 69 66 20 61 20 74 68 72 65 61 64 20 61 74 74   if a thread att
1a470 65 6d 70 74 73 20 74 6f 20 63 6f 6d 6d 69 74 20  empts to commit 
1a480 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 77 68  a transaction wh
1a490 69 6c 65 20 61 6e 6f 74 68 65 72 20 74 68 72 65  ile another thre
1a4a0 61 64 0d 0a 20 20 20 20 2f 2f 2f 20 68 61 73 20  ad..    /// has 
1a4b0 61 20 52 65 61 64 43 6f 6d 6d 69 74 74 65 64 20  a ReadCommitted 
1a4c0 6c 6f 63 6b 2c 20 69 74 20 6d 61 79 20 74 69 6d  lock, it may tim
1a4d0 65 6f 75 74 20 6f 72 20 63 61 75 73 65 20 61 20  eout or cause a 
1a4e0 64 65 61 64 6c 6f 63 6b 20 6f 6e 20 62 6f 74 68  deadlock on both
1a4f0 20 74 68 72 65 61 64 73 20 75 6e 74 69 6c 20 62   threads until b
1a500 6f 74 68 20 74 68 72 65 61 64 73 27 20 43 6f 6d  oth threads' Com
1a510 6d 61 6e 64 54 69 6d 65 6f 75 74 27 73 20 61 72  mandTimeout's ar
1a520 65 20 72 65 61 63 68 65 64 2e 0d 0a 20 20 20 20  e reached...    
1a530 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
1a540 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1a550 3e 52 65 74 75 72 6e 73 20 61 20 53 51 4c 69 74  >Returns a SQLit
1a560 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 6f 62 6a  eTransaction obj
1a570 65 63 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ect.</returns>..
1a580 20 20 20 20 70 75 62 6c 69 63 20 6e 65 77 20 53      public new S
1a590 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
1a5a0 20 42 65 67 69 6e 54 72 61 6e 73 61 63 74 69 6f   BeginTransactio
1a5b0 6e 28 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c  n(IsolationLevel
1a5c0 20 69 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 29   isolationLevel)
1a5d0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43  ..    {..      C
1a5e0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d  heckDisposed();.
1a5f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 53  .      return (S
1a600 51 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e  QLiteTransaction
1a610 29 42 65 67 69 6e 44 62 54 72 61 6e 73 61 63 74  )BeginDbTransact
1a620 69 6f 6e 28 69 73 6f 6c 61 74 69 6f 6e 4c 65 76  ion(isolationLev
1a630 65 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  el);..    }.... 
1a640 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1a650 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
1a660 73 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72 65  s a new <see cre
1a670 66 3d 22 53 51 4c 69 74 65 54 72 61 6e 73 61 63  f="SQLiteTransac
1a680 74 69 6f 6e 22 20 2f 3e 20 69 66 20 6f 6e 65 20  tion" /> if one 
1a690 69 73 6e 27 74 20 61 6c 72 65 61 64 79 0d 0a 20  isn't already.. 
1a6a0 20 20 20 2f 2f 2f 20 61 63 74 69 76 65 20 6f 6e     /// active on
1a6b0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
1a6c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1a6d0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
1a6e0 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74  eturns>Returns t
1a6f0 68 65 20 6e 65 77 20 74 72 61 6e 73 61 63 74 69  he new transacti
1a700 6f 6e 20 6f 62 6a 65 63 74 2e 3c 2f 72 65 74 75  on object.</retu
1a710 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
1a720 20 6e 65 77 20 53 51 4c 69 74 65 54 72 61 6e 73   new SQLiteTrans
1a730 61 63 74 69 6f 6e 20 42 65 67 69 6e 54 72 61 6e  action BeginTran
1a740 73 61 63 74 69 6f 6e 28 29 0d 0a 20 20 20 20 7b  saction()..    {
1a750 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69 73  ..      CheckDis
1a760 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
1a770 72 65 74 75 72 6e 20 28 53 51 4c 69 74 65 54 72  return (SQLiteTr
1a780 61 6e 73 61 63 74 69 6f 6e 29 42 65 67 69 6e 44  ansaction)BeginD
1a790 62 54 72 61 6e 73 61 63 74 69 6f 6e 28 5f 64 65  bTransaction(_de
1a7a0 66 61 75 6c 74 49 73 6f 6c 61 74 69 6f 6e 29 3b  faultIsolation);
1a7b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a7c0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1a7d0 20 20 2f 2f 2f 20 46 6f 72 77 61 72 64 73 20 74    /// Forwards t
1a7e0 6f 20 74 68 65 20 6c 6f 63 61 6c 20 3c 73 65 65  o the local <see
1a7f0 20 63 72 65 66 3d 22 42 65 67 69 6e 54 72 61 6e   cref="BeginTran
1a800 73 61 63 74 69 6f 6e 28 49 73 6f 6c 61 74 69 6f  saction(Isolatio
1a810 6e 4c 65 76 65 6c 29 22 20 2f 3e 20 66 75 6e 63  nLevel)" /> func
1a820 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  tion..    /// </
1a830 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1a840 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69  / <param name="i
1a850 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 22 3e 53  solationLevel">S
1a860 75 70 70 6f 72 74 65 64 20 69 73 6f 6c 61 74 69  upported isolati
1a870 6f 6e 20 6c 65 76 65 6c 73 20 61 72 65 20 55 6e  on levels are Un
1a880 73 70 65 63 69 66 69 65 64 2c 20 53 65 72 69 61  specified, Seria
1a890 6c 69 7a 61 62 6c 65 2c 20 61 6e 64 20 52 65 61  lizable, and Rea
1a8a0 64 43 6f 6d 6d 69 74 74 65 64 3c 2f 70 61 72 61  dCommitted</para
1a8b0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
1a8c0 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d  urns></returns>.
1a8d0 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f  .    protected o
1a8e0 76 65 72 72 69 64 65 20 44 62 54 72 61 6e 73 61  verride DbTransa
1a8f0 63 74 69 6f 6e 20 42 65 67 69 6e 44 62 54 72 61  ction BeginDbTra
1a900 6e 73 61 63 74 69 6f 6e 28 49 73 6f 6c 61 74 69  nsaction(Isolati
1a910 6f 6e 4c 65 76 65 6c 20 69 73 6f 6c 61 74 69 6f  onLevel isolatio
1a920 6e 4c 65 76 65 6c 29 0d 0a 20 20 20 20 7b 0d 0a  nLevel)..    {..
1a930 20 20 20 20 20 20 69 66 20 28 5f 63 6f 6e 6e 65        if (_conne
1a940 63 74 69 6f 6e 53 74 61 74 65 20 21 3d 20 43 6f  ctionState != Co
1a950 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65 2e 4f 70  nnectionState.Op
1a960 65 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  en)..        thr
1a970 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
1a980 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
1a990 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  ();....      if 
1a9a0 28 69 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20  (isolationLevel 
1a9b0 3d 3d 20 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65  == IsolationLeve
1a9c0 6c 2e 55 6e 73 70 65 63 69 66 69 65 64 29 20 69  l.Unspecified) i
1a9d0 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 3d 20  solationLevel = 
1a9e0 5f 64 65 66 61 75 6c 74 49 73 6f 6c 61 74 69 6f  _defaultIsolatio
1a9f0 6e 3b 0d 0a 20 20 20 20 20 20 69 73 6f 6c 61 74  n;..      isolat
1aa00 69 6f 6e 4c 65 76 65 6c 20 3d 20 47 65 74 45 66  ionLevel = GetEf
1aa10 66 65 63 74 69 76 65 49 73 6f 6c 61 74 69 6f 6e  fectiveIsolation
1aa20 4c 65 76 65 6c 28 69 73 6f 6c 61 74 69 6f 6e 4c  Level(isolationL
1aa30 65 76 65 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  evel);....      
1aa40 69 66 20 28 69 73 6f 6c 61 74 69 6f 6e 4c 65 76  if (isolationLev
1aa50 65 6c 20 21 3d 20 49 6d 6d 65 64 69 61 74 65 49  el != ImmediateI
1aa60 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 26 26  solationLevel &&
1aa70 20 69 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20   isolationLevel 
1aa80 21 3d 20 44 65 66 65 72 72 65 64 49 73 6f 6c 61  != DeferredIsola
1aa90 74 69 6f 6e 4c 65 76 65 6c 29 0d 0a 20 20 20 20  tionLevel)..    
1aaa0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
1aab0 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e 28  gumentException(
1aac0 22 69 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 22  "isolationLevel"
1aad0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69  );....      SQLi
1aae0 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20 74 72  teTransaction tr
1aaf0 61 6e 73 61 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20  ansaction;....  
1ab00 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
1ab10 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
1ab20 6f 6e 46 6c 61 67 73 2e 41 6c 6c 6f 77 4e 65 73  onFlags.AllowNes
1ab30 74 65 64 54 72 61 6e 73 61 63 74 69 6f 6e 73 29  tedTransactions)
1ab40 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d  ..            ==
1ab50 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1ab60 6e 46 6c 61 67 73 2e 41 6c 6c 6f 77 4e 65 73 74  nFlags.AllowNest
1ab70 65 64 54 72 61 6e 73 61 63 74 69 6f 6e 73 29 0d  edTransactions).
1ab80 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1ab90 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20      transaction 
1aba0 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 72 61 6e  = new SQLiteTran
1abb0 73 61 63 74 69 6f 6e 32 28 0d 0a 20 20 20 20 20  saction2(..     
1abc0 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 69           this, i
1abd0 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 21 3d  solationLevel !=
1abe0 20 49 6d 6d 65 64 69 61 74 65 49 73 6f 6c 61 74   ImmediateIsolat
1abf0 69 6f 6e 4c 65 76 65 6c 29 3b 0d 0a 20 20 20 20  ionLevel);..    
1ac00 20 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d    }..      else.
1ac10 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
1ac20 20 20 20 20 74 72 61 6e 73 61 63 74 69 6f 6e 20      transaction 
1ac30 3d 20 6e 65 77 20 53 51 4c 69 74 65 54 72 61 6e  = new SQLiteTran
1ac40 73 61 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  saction(..      
1ac50 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 69 73          this, is
1ac60 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 21 3d 20  olationLevel != 
1ac70 49 6d 6d 65 64 69 61 74 65 49 73 6f 6c 61 74 69  ImmediateIsolati
1ac80 6f 6e 4c 65 76 65 6c 29 3b 0d 0a 20 20 20 20 20  onLevel);..     
1ac90 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 4f 6e 43 68   }....      OnCh
1aca0 61 6e 67 65 64 28 74 68 69 73 2c 20 6e 65 77 20  anged(this, new 
1acb0 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
1acc0 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
1acd0 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1ace0 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 54 72 61  EventType.NewTra
1acf0 6e 73 61 63 74 69 6f 6e 2c 20 6e 75 6c 6c 2c 20  nsaction, null, 
1ad00 74 72 61 6e 73 61 63 74 69 6f 6e 2c 0d 0a 20 20  transaction,..  
1ad10 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75          null, nu
1ad20 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  ll, null, null, 
1ad30 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  null));....     
1ad40 20 72 65 74 75 72 6e 20 74 72 61 6e 73 61 63 74   return transact
1ad50 69 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ion;..    }.... 
1ad60 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1ad70 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
1ad80 65 74 68 6f 64 20 69 73 20 6e 6f 74 20 69 6d 70  ethod is not imp
1ad90 6c 65 6d 65 6e 74 65 64 3b 20 68 6f 77 65 76 65  lemented; howeve
1ada0 72 2c 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  r, the <see cref
1adb0 3d 22 43 68 61 6e 67 65 64 22 20 2f 3e 0d 0a 20  ="Changed" />.. 
1adc0 20 20 20 2f 2f 2f 20 65 76 65 6e 74 20 77 69 6c     /// event wil
1add0 6c 20 73 74 69 6c 6c 20 62 65 20 72 61 69 73 65  l still be raise
1ade0 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
1adf0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1ae00 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74  <param name="dat
1ae10 61 62 61 73 65 4e 61 6d 65 22 3e 3c 2f 70 61 72  abaseName"></par
1ae20 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  am>..    public 
1ae30 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 68  override void Ch
1ae40 61 6e 67 65 44 61 74 61 62 61 73 65 28 73 74 72  angeDatabase(str
1ae50 69 6e 67 20 64 61 74 61 62 61 73 65 4e 61 6d 65  ing databaseName
1ae60 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1ae70 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
1ae80 0d 0a 0d 0a 20 20 20 20 20 20 4f 6e 43 68 61 6e  ....      OnChan
1ae90 67 65 64 28 74 68 69 73 2c 20 6e 65 77 20 43 6f  ged(this, new Co
1aea0 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67  nnectionEventArg
1aeb0 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 53 51  s(..          SQ
1aec0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
1aed0 65 6e 74 54 79 70 65 2e 43 68 61 6e 67 65 44 61  entType.ChangeDa
1aee0 74 61 62 61 73 65 2c 20 6e 75 6c 6c 2c 20 6e 75  tabase, null, nu
1aef0 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  ll, null, null,.
1af00 0a 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c  .          null,
1af10 20 64 61 74 61 62 61 73 65 4e 61 6d 65 2c 20 6e   databaseName, n
1af20 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ull));....      
1af30 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
1af40 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
1af50 6e 28 29 3b 20 2f 2f 20 4e 4f 54 45 3a 20 46 6f  n(); // NOTE: Fo
1af60 72 20 6c 65 67 61 63 79 20 63 6f 6d 70 61 74 69  r legacy compati
1af70 62 69 6c 69 74 79 2e 0d 0a 20 20 20 20 7d 0d 0a  bility...    }..
1af80 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1af90 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65  ry>..    /// Whe
1afa0 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  n the database c
1afb0 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 63 6c 6f  onnection is clo
1afc0 73 65 64 2c 20 61 6c 6c 20 63 6f 6d 6d 61 6e 64  sed, all command
1afd0 73 20 6c 69 6e 6b 65 64 20 74 6f 20 74 68 69 73  s linked to this
1afe0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 61 72 65 20   connection are 
1aff0 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 72 65  automatically re
1b000 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  set...    /// </
1b010 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
1b020 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 76 6f  blic override vo
1b030 69 64 20 43 6c 6f 73 65 28 29 0d 0a 20 20 20 20  id Close()..    
1b040 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b 44 69  {..      CheckDi
1b050 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20  sposed();....   
1b060 20 20 20 4f 6e 43 68 61 6e 67 65 64 28 74 68 69     OnChanged(thi
1b070 73 2c 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f  s, new Connectio
1b080 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20  nEventArgs(..   
1b090 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
1b0a0 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
1b0b0 2e 43 6c 6f 73 69 6e 67 2c 20 6e 75 6c 6c 2c 20  .Closing, null, 
1b0c0 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  null, null, null
1b0d0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
1b0e0 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 29 29 3b     null, null));
1b0f0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  ....      if (_s
1b100 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql != null)..   
1b110 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46     {..#if !PLATF
1b120 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
1b130 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 6c 6f  WORK..        lo
1b140 63 6b 20 28 5f 65 6e 6c 69 73 74 6d 65 6e 74 53  ck (_enlistmentS
1b150 79 6e 63 52 6f 6f 74 29 20 2f 2a 20 54 52 41 4e  yncRoot) /* TRAN
1b160 53 41 43 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20  SACTIONAL */..  
1b170 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
1b180 20 20 20 53 51 4c 69 74 65 45 6e 6c 69 73 74 6d     SQLiteEnlistm
1b190 65 6e 74 20 65 6e 6c 69 73 74 6d 65 6e 74 20 3d  ent enlistment =
1b1a0 20 5f 65 6e 6c 69 73 74 6d 65 6e 74 3b 0d 0a 20   _enlistment;.. 
1b1b0 20 20 20 20 20 20 20 20 20 5f 65 6e 6c 69 73 74           _enlist
1b1c0 6d 65 6e 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  ment = null;....
1b1d0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 65 6e            if (en
1b1e0 6c 69 73 74 6d 65 6e 74 20 21 3d 20 6e 75 6c 6c  listment != null
1b1f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  )..          {..
1b200 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 49              // I
1b210 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
1b220 20 69 73 20 65 6e 6c 69 73 74 65 64 20 69 6e 20   is enlisted in 
1b230 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73 63  a transaction sc
1b240 6f 70 65 20 61 6e 64 20 74 68 65 20 73 63 6f 70  ope and the scop
1b250 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74 69 76  e is still activ
1b260 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
1b270 2f 2f 20 77 65 20 63 61 6e 6e 6f 74 20 74 72 75  // we cannot tru
1b280 6c 79 20 73 68 75 74 20 64 6f 77 6e 20 74 68 69  ly shut down thi
1b290 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 75 6e 74  s connection unt
1b2a0 69 6c 20 74 68 65 20 73 63 6f 70 65 20 68 61 73  il the scope has
1b2b0 20 63 6f 6d 70 6c 65 74 65 64 2e 20 20 54 68 65   completed.  The
1b2c0 72 65 66 6f 72 65 20 6d 61 6b 65 20 61 0d 0a 20  refore make a.. 
1b2d0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 68 69             // hi
1b2e0 64 64 65 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  dden connection 
1b2f0 74 65 6d 70 6f 72 61 72 69 6c 79 20 74 6f 20 68  temporarily to h
1b300 6f 6c 64 20 6f 70 65 6e 20 74 68 65 20 63 6f 6e  old open the con
1b310 6e 65 63 74 69 6f 6e 20 75 6e 74 69 6c 20 74 68  nection until th
1b320 65 20 73 63 6f 70 65 20 68 61 73 20 63 6f 6d 70  e scope has comp
1b330 6c 65 74 65 64 2e 0d 0a 20 20 20 20 20 20 20 20  leted...        
1b340 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1b350 74 69 6f 6e 20 63 6e 6e 20 3d 20 6e 65 77 20 53  tion cnn = new S
1b360 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  QLiteConnection(
1b370 29 3b 0d 0a 0d 0a 23 69 66 20 44 45 42 55 47 0d  );....#if DEBUG.
1b380 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 6e 6e  .            cnn
1b390 2e 5f 64 65 62 75 67 53 74 72 69 6e 67 20 3d 20  ._debugString = 
1b3a0 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
1b3b0 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
1b3c0 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
1b3d0 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
1b3e0 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
1b3f0 20 20 20 20 20 20 20 20 20 20 20 20 22 63 6c 6f              "clo
1b400 73 65 54 68 72 65 61 64 49 64 20 3d 20 7b 30 7d  seThreadId = {0}
1b410 2c 20 7b 31 7d 7b 32 7d 7b 32 7d 7b 33 7d 22 2c  , {1}{2}{2}{3}",
1b420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1b430 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e    HelperMethods.
1b440 47 65 74 54 68 72 65 61 64 49 64 28 29 2c 20 5f  GetThreadId(), _
1b450 73 71 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  sql,..          
1b460 20 20 20 20 20 20 45 6e 76 69 72 6f 6e 6d 65 6e        Environmen
1b470 74 2e 4e 65 77 4c 69 6e 65 2c 20 5f 64 65 62 75  t.NewLine, _debu
1b480 67 53 74 72 69 6e 67 29 3b 0d 0a 23 65 6e 64 69  gString);..#endi
1b490 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
1b4a0 20 63 6e 6e 2e 5f 73 71 6c 20 3d 20 5f 73 71 6c   cnn._sql = _sql
1b4b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63  ;..            c
1b4c0 6e 6e 2e 5f 74 72 61 6e 73 61 63 74 69 6f 6e 4c  nn._transactionL
1b4d0 65 76 65 6c 20 3d 20 5f 74 72 61 6e 73 61 63 74  evel = _transact
1b4e0 69 6f 6e 4c 65 76 65 6c 3b 0d 0a 20 20 20 20 20  ionLevel;..     
1b4f0 20 20 20 20 20 20 20 63 6e 6e 2e 5f 74 72 61 6e         cnn._tran
1b500 73 61 63 74 69 6f 6e 53 65 71 75 65 6e 63 65 20  sactionSequence 
1b510 3d 20 5f 74 72 61 6e 73 61 63 74 69 6f 6e 53 65  = _transactionSe
1b520 71 75 65 6e 63 65 3b 0d 0a 20 20 20 20 20 20 20  quence;..       
1b530 20 20 20 20 20 63 6e 6e 2e 5f 65 6e 6c 69 73 74       cnn._enlist
1b540 6d 65 6e 74 20 3d 20 65 6e 6c 69 73 74 6d 65 6e  ment = enlistmen
1b550 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t;..            
1b560 63 6e 6e 2e 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53  cnn._connectionS
1b570 74 61 74 65 20 3d 20 5f 63 6f 6e 6e 65 63 74 69  tate = _connecti
1b580 6f 6e 53 74 61 74 65 3b 0d 0a 20 20 20 20 20 20  onState;..      
1b590 20 20 20 20 20 20 63 6e 6e 2e 5f 76 65 72 73 69        cnn._versi
1b5a0 6f 6e 20 3d 20 5f 76 65 72 73 69 6f 6e 3b 0d 0a  on = _version;..
1b5b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
1b5c0 4c 69 74 65 54 72 61 6e 73 61 63 74 69 6f 6e 20  LiteTransaction 
1b5d0 74 72 61 6e 73 61 63 74 69 6f 6e 20 3d 20 65 6e  transaction = en
1b5e0 6c 69 73 74 6d 65 6e 74 2e 5f 74 72 61 6e 73 61  listment._transa
1b5f0 63 74 69 6f 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20  ction;....      
1b600 20 20 20 20 20 20 69 66 20 28 74 72 61 6e 73 61        if (transa
1b610 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ction != null)..
1b620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1b630 74 72 61 6e 73 61 63 74 69 6f 6e 2e 5f 63 6e 6e  transaction._cnn
1b640 20 3d 20 63 6e 6e 3b 0d 0a 0d 0a 20 20 20 20 20   = cnn;....     
1b650 20 20 20 20 20 20 20 65 6e 6c 69 73 74 6d 65 6e         enlistmen
1b660 74 2e 5f 64 69 73 70 6f 73 65 43 6f 6e 6e 65 63  t._disposeConnec
1b670 74 69 6f 6e 20 3d 20 74 72 75 65 3b 0d 0a 0d 0a  tion = true;....
1b680 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
1b690 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
1b6a0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
1b6b0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
1b6c0 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75    if (_sql != nu
1b6d0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ll)..        {..
1b6e0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 43            _sql.C
1b6f0 6c 6f 73 65 28 5f 64 69 73 70 6f 73 69 6e 67 29  lose(_disposing)
1b700 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  ;..          _sq
1b710 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
1b720 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 5f 74     }..        _t
1b730 72 61 6e 73 61 63 74 69 6f 6e 4c 65 76 65 6c 20  ransactionLevel 
1b740 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 5f 74  = 0;..        _t
1b750 72 61 6e 73 61 63 74 69 6f 6e 53 65 71 75 65 6e  ransactionSequen
1b760 63 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d  ce = 0;..      }
1b770 0d 0a 0d 0a 20 20 20 20 20 20 53 74 61 74 65 43  ....      StateC
1b780 68 61 6e 67 65 45 76 65 6e 74 41 72 67 73 20 65  hangeEventArgs e
1b790 76 65 6e 74 41 72 67 73 20 3d 20 6e 75 6c 6c 3b  ventArgs = null;
1b7a0 0d 0a 20 20 20 20 20 20 4f 6e 53 74 61 74 65 43  ..      OnStateC
1b7b0 68 61 6e 67 65 28 43 6f 6e 6e 65 63 74 69 6f 6e  hange(Connection
1b7c0 53 74 61 74 65 2e 43 6c 6f 73 65 64 2c 20 72 65  State.Closed, re
1b7d0 66 20 65 76 65 6e 74 41 72 67 73 29 3b 0d 0a 0d  f eventArgs);...
1b7e0 0a 20 20 20 20 20 20 4f 6e 43 68 61 6e 67 65 64  .      OnChanged
1b7f0 28 74 68 69 73 2c 20 6e 65 77 20 43 6f 6e 6e 65  (this, new Conne
1b800 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
1b810 0a 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74  .          SQLit
1b820 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
1b830 54 79 70 65 2e 43 6c 6f 73 65 64 2c 20 65 76 65  Type.Closed, eve
1b840 6e 74 41 72 67 73 2c 20 6e 75 6c 6c 2c 20 6e 75  ntArgs, null, nu
1b850 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
1b860 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c       null, null,
1b870 20 6e 75 6c 6c 29 29 3b 0d 0a 20 20 20 20 7d 0d   null));..    }.
1b880 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
1b890 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
1b8a0 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
1b8b0 20 6f 66 20 70 6f 6f 6c 20 65 6e 74 72 69 65 73   of pool entries
1b8c0 20 66 6f 72 20 74 68 65 20 66 69 6c 65 20 6e 61   for the file na
1b8d0 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  me associated wi
1b8e0 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  th this connecti
1b8f0 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
1b900 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62  ummary>..    pub
1b910 6c 69 63 20 69 6e 74 20 50 6f 6f 6c 43 6f 75 6e  lic int PoolCoun
1b920 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  t..    {..      
1b930 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
1b940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
1b950 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20   (_sql == null) 
1b960 72 65 74 75 72 6e 20 30 3b 0d 0a 20 20 20 20 20  return 0;..     
1b970 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73         return _s
1b980 71 6c 2e 43 6f 75 6e 74 50 6f 6f 6c 28 29 3b 0d  ql.CountPool();.
1b990 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
1b9a0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
1b9b0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1b9c0 43 6c 65 61 72 73 20 74 68 65 20 63 6f 6e 6e 65  Clears the conne
1b9d0 63 74 69 6f 6e 20 70 6f 6f 6c 20 61 73 73 6f 63  ction pool assoc
1b9e0 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
1b9f0 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 41 6e 79 20  onnection.  Any 
1ba00 6f 74 68 65 72 20 61 63 74 69 76 65 20 63 6f 6e  other active con
1ba10 6e 65 63 74 69 6f 6e 73 20 75 73 69 6e 67 20 74  nections using t
1ba20 68 65 20 73 61 6d 65 20 64 61 74 61 62 61 73 65  he same database
1ba30 20 66 69 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 77   file..    /// w
1ba40 69 6c 6c 20 62 65 20 64 69 73 63 61 72 64 65 64  ill be discarded
1ba50 20 69 6e 73 74 65 61 64 20 6f 66 20 72 65 74 75   instead of retu
1ba60 72 6e 65 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c  rned to the pool
1ba70 20 77 68 65 6e 20 74 68 65 79 20 61 72 65 20 63   when they are c
1ba80 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  losed...    /// 
1ba90 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1baa0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1bab0 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 3c 2f 70  "connection"></p
1bac0 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69  aram>..    publi
1bad0 63 20 73 74 61 74 69 63 20 76 6f 69 64 20 43 6c  c static void Cl
1bae0 65 61 72 50 6f 6f 6c 28 53 51 4c 69 74 65 43 6f  earPool(SQLiteCo
1baf0 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
1bb00 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ion)..    {..   
1bb10 20 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f     if (connectio
1bb20 6e 2e 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 20  n._sql == null) 
1bb30 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 63  return;..      c
1bb40 6f 6e 6e 65 63 74 69 6f 6e 2e 5f 73 71 6c 2e 43  onnection._sql.C
1bb50 6c 65 61 72 50 6f 6f 6c 28 29 3b 0d 0a 20 20 20  learPool();..   
1bb60 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
1bb70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1bb80 20 43 6c 65 61 72 73 20 61 6c 6c 20 63 6f 6e 6e   Clears all conn
1bb90 65 63 74 69 6f 6e 20 70 6f 6f 6c 73 2e 20 20 41  ection pools.  A
1bba0 6e 79 20 61 63 74 69 76 65 20 63 6f 6e 6e 65 63  ny active connec
1bbb0 74 69 6f 6e 73 20 77 69 6c 6c 20 62 65 20 64 69  tions will be di
1bbc0 73 63 61 72 64 65 64 20 69 6e 73 74 65 61 64 20  scarded instead 
1bbd0 6f 66 20 73 65 6e 74 20 74 6f 20 74 68 65 20 70  of sent to the p
1bbe0 6f 6f 6c 20 77 68 65 6e 20 74 68 65 79 20 61 72  ool when they ar
1bbf0 65 20 63 6c 6f 73 65 64 2e 0d 0a 20 20 20 20 2f  e closed...    /
1bc00 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1bc10 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
1bc20 20 76 6f 69 64 20 43 6c 65 61 72 41 6c 6c 50 6f   void ClearAllPo
1bc30 6f 6c 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ols()..    {..  
1bc40 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
1bc50 74 69 6f 6e 50 6f 6f 6c 2e 43 6c 65 61 72 41 6c  tionPool.ClearAl
1bc60 6c 50 6f 6f 6c 73 28 29 3b 0d 0a 20 20 20 20 7d  lPools();..    }
1bc70 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1bc80 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
1bc90 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  he connection st
1bca0 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
1bcb0 74 68 65 20 70 61 72 61 6d 65 74 65 72 73 20 66  the parameters f
1bcc0 6f 72 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  or the connectio
1bcd0 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  n..    /// </sum
1bce0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1bcf0 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
1bd00 2f 20 46 6f 72 20 74 68 65 20 63 6f 6d 70 6c 65  / For the comple
1bd10 74 65 20 6c 69 73 74 20 6f 66 20 73 75 70 70 6f  te list of suppo
1bd20 72 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rted connection 
1bd30 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 69 65  string propertie
1bd40 73 2c 0d 0a 20 20 20 20 2f 2f 2f 20 70 6c 65 61  s,..    /// plea
1bd50 73 65 20 73 65 65 20 3c 73 65 65 20 63 72 65 66  se see <see cref
1bd60 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
1bd70 6f 6e 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f  on" />...    ///
1bd80 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 23 69 66   </remarks>..#if
1bd90 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
1bda0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
1bdb0 20 5b 52 65 66 72 65 73 68 50 72 6f 70 65 72 74   [RefreshPropert
1bdc0 69 65 73 28 52 65 66 72 65 73 68 50 72 6f 70 65  ies(RefreshPrope
1bdd0 72 74 69 65 73 2e 41 6c 6c 29 2c 20 44 65 66 61  rties.All), Defa
1bde0 75 6c 74 56 61 6c 75 65 28 22 22 29 5d 0d 0a 20  ultValue("")].. 
1bdf0 20 20 20 5b 45 64 69 74 6f 72 28 22 53 51 4c 69     [Editor("SQLi
1be00 74 65 2e 44 65 73 69 67 6e 65 72 2e 53 51 4c 69  te.Designer.SQLi
1be10 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  teConnectionStri
1be20 6e 67 45 64 69 74 6f 72 2c 20 53 51 4c 69 74 65  ngEditor, SQLite
1be30 2e 44 65 73 69 67 6e 65 72 2c 20 56 65 72 73 69  .Designer, Versi
1be40 6f 6e 3d 22 20 2b 20 53 51 4c 69 74 65 33 2e 44  on=" + SQLite3.D
1be50 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20 2b  esignerVersion +
1be60 20 22 2c 20 43 75 6c 74 75 72 65 3d 6e 65 75 74   ", Culture=neut
1be70 72 61 6c 2c 20 50 75 62 6c 69 63 4b 65 79 54 6f  ral, PublicKeyTo
1be80 6b 65 6e 3d 64 62 39 33 37 62 63 32 64 34 34 66  ken=db937bc2d44f
1be90 66 31 33 39 22 2c 20 22 53 79 73 74 65 6d 2e 44  f139", "System.D
1bea0 72 61 77 69 6e 67 2e 44 65 73 69 67 6e 2e 55 49  rawing.Design.UI
1beb0 54 79 70 65 45 64 69 74 6f 72 2c 20 53 79 73 74  TypeEditor, Syst
1bec0 65 6d 2e 44 72 61 77 69 6e 67 2c 20 56 65 72 73  em.Drawing, Vers
1bed0 69 6f 6e 3d 32 2e 30 2e 30 2e 30 2c 20 43 75 6c  ion=2.0.0.0, Cul
1bee0 74 75 72 65 3d 6e 65 75 74 72 61 6c 2c 20 50 75  ture=neutral, Pu
1bef0 62 6c 69 63 4b 65 79 54 6f 6b 65 6e 3d 62 30 33  blicKeyToken=b03
1bf00 66 35 66 37 66 31 31 64 35 30 61 33 61 22 29 5d  f5f7f11d50a3a")]
1bf10 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 70 75  ..#endif..    pu
1bf20 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20 73 74  blic override st
1bf30 72 69 6e 67 20 43 6f 6e 6e 65 63 74 69 6f 6e 53  ring ConnectionS
1bf40 74 72 69 6e 67 0d 0a 20 20 20 20 7b 0d 0a 20 20  tring..    {..  
1bf50 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
1bf60 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
1bf70 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20  isposed();..    
1bf80 20 20 20 20 72 65 74 75 72 6e 20 5f 63 6f 6e 6e      return _conn
1bf90 65 63 74 69 6f 6e 53 74 72 69 6e 67 3b 0d 0a 20  ectionString;.. 
1bfa0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 73 65       }..      se
1bfb0 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
1bfc0 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
1bfd0 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
1bfe0 69 66 20 28 76 61 6c 75 65 20 3d 3d 20 6e 75 6c  if (value == nul
1bff0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68  l)..          th
1c000 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1c010 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 29 3b  NullException();
1c020 0d 0a 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65  ....        else
1c030 20 69 66 20 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e   if (_connection
1c040 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74  State != Connect
1c050 69 6f 6e 53 74 61 74 65 2e 43 6c 6f 73 65 64 29  ionState.Closed)
1c060 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f  ..          thro
1c070 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
1c080 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
1c090 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 63  );....        _c
1c0a0 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 20  onnectionString 
1c0b0 3d 20 76 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  = value;..      
1c0c0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1c0d0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1c0e0 20 20 20 2f 2f 2f 20 43 72 65 61 74 65 20 61 20     /// Create a 
1c0f0 6e 65 77 20 3c 73 65 65 20 63 72 65 66 3d 22 53  new <see cref="S
1c100 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 22 20 2f 3e  QLiteCommand" />
1c110 20 61 6e 64 20 61 73 73 6f 63 69 61 74 65 20 69   and associate i
1c120 74 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e  t with this conn
1c130 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
1c140 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1c150 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65   /// <returns>Re
1c160 74 75 72 6e 73 20 61 20 6e 65 77 20 63 6f 6d 6d  turns a new comm
1c170 61 6e 64 20 6f 62 6a 65 63 74 20 61 6c 72 65 61  and object alrea
1c180 64 79 20 61 73 73 69 67 6e 65 64 20 74 6f 20 74  dy assigned to t
1c190 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c  his connection.<
1c1a0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
1c1b0 75 62 6c 69 63 20 6e 65 77 20 53 51 4c 69 74 65  ublic new SQLite
1c1c0 43 6f 6d 6d 61 6e 64 20 43 72 65 61 74 65 43 6f  Command CreateCo
1c1d0 6d 6d 61 6e 64 28 29 0d 0a 20 20 20 20 7b 0d 0a  mmand()..    {..
1c1e0 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
1c1f0 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65  sed();..      re
1c200 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 43  turn new SQLiteC
1c210 6f 6d 6d 61 6e 64 28 74 68 69 73 29 3b 0d 0a 20  ommand(this);.. 
1c220 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
1c230 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1c240 2f 2f 20 46 6f 72 77 61 72 64 73 20 74 6f 20 74  // Forwards to t
1c250 68 65 20 6c 6f 63 61 6c 20 3c 73 65 65 20 63 72  he local <see cr
1c260 65 66 3d 22 43 72 65 61 74 65 43 6f 6d 6d 61 6e  ef="CreateComman
1c270 64 22 20 2f 3e 20 66 75 6e 63 74 69 6f 6e 2e 0d  d" /> function..
1c280 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1c290 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
1c2a0 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e  turns></returns>
1c2b0 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
1c2c0 6f 76 65 72 72 69 64 65 20 44 62 43 6f 6d 6d 61  override DbComma
1c2d0 6e 64 20 43 72 65 61 74 65 44 62 43 6f 6d 6d 61  nd CreateDbComma
1c2e0 6e 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  nd()..    {..   
1c2f0 20 20 20 72 65 74 75 72 6e 20 43 72 65 61 74 65     return Create
1c300 43 6f 6d 6d 61 6e 64 28 29 3b 0d 0a 20 20 20 20  Command();..    
1c310 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
1c320 5f 53 45 53 53 49 4f 4e 5f 45 58 54 45 4e 53 49  _SESSION_EXTENSI
1c330 4f 4e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ON..    /// <sum
1c340 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
1c350 74 74 65 6d 70 74 73 20 74 6f 20 63 72 65 61 74  ttempts to creat
1c360 65 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72 65  e a new <see cre
1c370 66 3d 22 49 53 51 4c 69 74 65 53 65 73 73 69 6f  f="ISQLiteSessio
1c380 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  n" /> object ins
1c390 74 61 6e 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 75  tance..    /// u
1c3a0 73 69 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65 63  sing this connec
1c3b0 74 69 6f 6e 20 61 6e 64 20 74 68 65 20 73 70 65  tion and the spe
1c3c0 63 69 66 69 65 64 20 64 61 74 61 62 61 73 65 20  cified database 
1c3d0 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  name...    /// <
1c3e0 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1c3f0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1c400 64 61 74 61 62 61 73 65 4e 61 6d 65 22 3e 0d 0a  databaseName">..
1c410 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65      /// The name
1c420 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
1c430 20 66 6f 72 20 74 68 65 20 6e 65 77 6c 79 20 63   for the newly c
1c440 72 65 61 74 65 64 20 73 65 73 73 69 6f 6e 2e 0d  reated session..
1c450 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1c460 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1c470 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
1c480 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
1c490 73 65 73 73 69 6f 6e 20 2d 4f 52 2d 20 6e 75 6c  session -OR- nul
1c4a0 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  l if it cannot b
1c4b0 65 20 63 72 65 61 74 65 64 2e 0d 0a 20 20 20 20  e created...    
1c4c0 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
1c4d0 20 20 20 20 70 75 62 6c 69 63 20 49 53 51 4c 69      public ISQLi
1c4e0 74 65 53 65 73 73 69 6f 6e 20 43 72 65 61 74 65  teSession Create
1c4f0 53 65 73 73 69 6f 6e 28 0d 0a 20 20 20 20 20 20  Session(..      
1c500 20 20 73 74 72 69 6e 67 20 64 61 74 61 62 61 73    string databas
1c510 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29  eName..        )
1c520 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
1c530 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
1c540 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
1c550 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 53 65  urn new SQLiteSe
1c560 73 73 69 6f 6e 28 47 65 74 4e 61 74 69 76 65 48  ssion(GetNativeH
1c570 61 6e 64 6c 65 28 74 68 69 73 29 2c 20 5f 66 6c  andle(this), _fl
1c580 61 67 73 2c 20 64 61 74 61 62 61 73 65 4e 61 6d  ags, databaseNam
1c590 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
1c5a0 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1c5b0 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74  .    /// Attempt
1c5c0 73 20 74 6f 20 63 72 65 61 74 65 20 61 20 6e 65  s to create a ne
1c5d0 77 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  w <see cref="ISQ
1c5e0 4c 69 74 65 43 68 61 6e 67 65 53 65 74 22 20 2f  LiteChangeSet" /
1c5f0 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
1c600 65 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e 67  e..    /// using
1c610 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
1c620 20 61 6e 64 20 74 68 65 20 73 70 65 63 69 66 69   and the specifi
1c630 65 64 20 72 61 77 20 64 61 74 61 2e 0d 0a 20 20  ed raw data...  
1c640 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1c650 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1c660 20 6e 61 6d 65 3d 22 72 61 77 44 61 74 61 22 3e   name="rawData">
1c670 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 61  ..    /// The ra
1c680 77 20 64 61 74 61 20 74 68 61 74 20 63 6f 6e 74  w data that cont
1c690 61 69 6e 73 20 61 20 63 68 61 6e 67 65 20 73 65  ains a change se
1c6a0 74 20 28 6f 72 20 70 61 74 63 68 20 73 65 74 29  t (or patch set)
1c6b0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1c6c0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1c6d0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
1c6e0 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
1c6f0 64 20 63 68 61 6e 67 65 20 73 65 74 20 2d 4f 52  d change set -OR
1c700 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e  - null if it can
1c710 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 2e 0d  not be created..
1c720 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
1c730 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
1c740 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  ISQLiteChangeSet
1c750 20 43 72 65 61 74 65 43 68 61 6e 67 65 53 65 74   CreateChangeSet
1c760 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b  (..        byte[
1c770 5d 20 72 61 77 44 61 74 61 0d 0a 20 20 20 20 20  ] rawData..     
1c780 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
1c790 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
1c7a0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
1c7b0 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69   return new SQLi
1c7c0 74 65 4d 65 6d 6f 72 79 43 68 61 6e 67 65 53 65  teMemoryChangeSe
1c7d0 74 28 72 61 77 44 61 74 61 2c 20 47 65 74 4e 61  t(rawData, GetNa
1c7e0 74 69 76 65 48 61 6e 64 6c 65 28 74 68 69 73 29  tiveHandle(this)
1c7f0 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20  , _flags);..    
1c800 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
1c810 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1c820 41 74 74 65 6d 70 74 73 20 74 6f 20 63 72 65 61  Attempts to crea
1c830 74 65 20 61 20 6e 65 77 20 3c 73 65 65 20 63 72  te a new <see cr
1c840 65 66 3d 22 49 53 51 4c 69 74 65 43 68 61 6e 67  ef="ISQLiteChang
1c850 65 53 65 74 22 20 2f 3e 20 6f 62 6a 65 63 74 20  eSet" /> object 
1c860 69 6e 73 74 61 6e 63 65 0d 0a 20 20 20 20 2f 2f  instance..    //
1c870 2f 20 75 73 69 6e 67 20 74 68 69 73 20 63 6f 6e  / using this con
1c880 6e 65 63 74 69 6f 6e 20 61 6e 64 20 74 68 65 20  nection and the 
1c890 73 70 65 63 69 66 69 65 64 20 73 74 72 65 61 6d  specified stream
1c8a0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1c8b0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
1c8c0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 70 75  param name="inpu
1c8d0 74 53 74 72 65 61 6d 22 3e 0d 0a 20 20 20 20 2f  tStream">..    /
1c8e0 2f 2f 20 54 68 65 20 73 74 72 65 61 6d 20 77 68  // The stream wh
1c8f0 65 72 65 20 74 68 65 20 72 61 77 20 64 61 74 61  ere the raw data
1c900 20 74 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61   that contains a
1c910 20 63 68 61 6e 67 65 20 73 65 74 20 28 6f 72 20   change set (or 
1c920 70 61 74 63 68 20 73 65 74 29 0d 0a 20 20 20 20  patch set)..    
1c930 2f 2f 2f 20 6d 61 79 20 62 65 20 72 65 61 64 2e  /// may be read.
1c940 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
1c950 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1c960 61 6d 20 6e 61 6d 65 3d 22 6f 75 74 70 75 74 53  am name="outputS
1c970 74 72 65 61 6d 22 3e 0d 0a 20 20 20 20 2f 2f 2f  tream">..    ///
1c980 20 54 68 65 20 73 74 72 65 61 6d 20 77 68 65 72   The stream wher
1c990 65 20 74 68 65 20 72 61 77 20 64 61 74 61 20 74  e the raw data t
1c9a0 68 61 74 20 63 6f 6e 74 61 69 6e 73 20 61 20 63  hat contains a c
1c9b0 68 61 6e 67 65 20 73 65 74 20 28 6f 72 20 70 61  hange set (or pa
1c9c0 74 63 68 20 73 65 74 29 0d 0a 20 20 20 20 2f 2f  tch set)..    //
1c9d0 2f 20 6d 61 79 20 62 65 20 77 72 69 74 74 65 6e  / may be written
1c9e0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1c9f0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1ca00 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
1ca10 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
1ca20 64 20 63 68 61 6e 67 65 20 73 65 74 20 2d 4f 52  d change set -OR
1ca30 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e  - null if it can
1ca40 6e 6f 74 20 62 65 20 63 72 65 61 74 65 64 2e 0d  not be created..
1ca50 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
1ca60 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
1ca70 49 53 51 4c 69 74 65 43 68 61 6e 67 65 53 65 74  ISQLiteChangeSet
1ca80 20 43 72 65 61 74 65 43 68 61 6e 67 65 53 65 74   CreateChangeSet
1ca90 28 0d 0a 20 20 20 20 20 20 20 20 53 74 72 65 61  (..        Strea
1caa0 6d 20 69 6e 70 75 74 53 74 72 65 61 6d 2c 0d 0a  m inputStream,..
1cab0 20 20 20 20 20 20 20 20 53 74 72 65 61 6d 20 6f          Stream o
1cac0 75 74 70 75 74 53 74 72 65 61 6d 0d 0a 20 20 20  utputStream..   
1cad0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
1cae0 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70         CheckDisp
1caf0 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  osed();....     
1cb00 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51     return new SQ
1cb10 4c 69 74 65 53 74 72 65 61 6d 43 68 61 6e 67 65  LiteStreamChange
1cb20 53 65 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  Set(..          
1cb30 20 20 69 6e 70 75 74 53 74 72 65 61 6d 2c 20 6f    inputStream, o
1cb40 75 74 70 75 74 53 74 72 65 61 6d 2c 20 47 65 74  utputStream, Get
1cb50 4e 61 74 69 76 65 48 61 6e 64 6c 65 28 74 68 69  NativeHandle(thi
1cb60 73 29 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20  s), _flags);..  
1cb70 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1cb80 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1cb90 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 63 72  / Attempts to cr
1cba0 65 61 74 65 20 61 20 6e 65 77 20 3c 73 65 65 20  eate a new <see 
1cbb0 63 72 65 66 3d 22 49 53 51 4c 69 74 65 43 68 61  cref="ISQLiteCha
1cbc0 6e 67 65 47 72 6f 75 70 22 20 2f 3e 20 6f 62 6a  ngeGroup" /> obj
1cbd0 65 63 74 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 73  ect..    /// ins
1cbe0 74 61 6e 63 65 20 75 73 69 6e 67 20 74 68 69 73  tance using this
1cbf0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
1cc00 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1cc10 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
1cc20 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
1cc30 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 63   newly created c
1cc40 68 61 6e 67 65 20 67 72 6f 75 70 20 2d 4f 52 2d  hange group -OR-
1cc50 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e   null if it cann
1cc60 6f 74 20 62 65 20 63 72 65 61 74 65 64 2e 0d 0a  ot be created...
1cc70 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1cc80 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 49  s>..    public I
1cc90 53 51 4c 69 74 65 43 68 61 6e 67 65 47 72 6f 75  SQLiteChangeGrou
1cca0 70 20 43 72 65 61 74 65 43 68 61 6e 67 65 47 72  p CreateChangeGr
1ccb0 6f 75 70 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  oup()..    {..  
1ccc0 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
1ccd0 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
1cce0 20 20 72 65 74 75 72 6e 20 6e 65 77 20 53 51 4c    return new SQL
1ccf0 69 74 65 43 68 61 6e 67 65 47 72 6f 75 70 28 5f  iteChangeGroup(_
1cd00 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 7d 0d 0a  flags);..    }..
1cd10 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f  #endif....    //
1cd20 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1cd30 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
1cd40 20 64 61 74 61 20 73 6f 75 72 63 65 20 66 69 6c   data source fil
1cd50 65 20 6e 61 6d 65 20 77 69 74 68 6f 75 74 20 65  e name without e
1cd60 78 74 65 6e 73 69 6f 6e 20 6f 72 20 70 61 74 68  xtension or path
1cd70 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
1cd80 6d 61 72 79 3e 0d 0a 23 69 66 20 21 50 4c 41 54  mary>..#if !PLAT
1cd90 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
1cda0 45 57 4f 52 4b 0d 0a 20 20 20 20 5b 44 65 73 69  EWORK..    [Desi
1cdb0 67 6e 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f  gnerSerializatio
1cdc0 6e 56 69 73 69 62 69 6c 69 74 79 28 44 65 73 69  nVisibility(Desi
1cdd0 67 6e 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f  gnerSerializatio
1cde0 6e 56 69 73 69 62 69 6c 69 74 79 2e 48 69 64 64  nVisibility.Hidd
1cdf0 65 6e 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  en)]..#endif..  
1ce00 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1ce10 65 20 73 74 72 69 6e 67 20 44 61 74 61 53 6f 75  e string DataSou
1ce20 72 63 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rce..    {..    
1ce30 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a    get..      {..
1ce40 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
1ce50 70 6f 73 65 64 28 29 3b 0d 0a 20 20 20 20 20 20  posed();..      
1ce60 20 20 72 65 74 75 72 6e 20 5f 64 61 74 61 53 6f    return _dataSo
1ce70 75 72 63 65 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  urce;..      }..
1ce80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
1ce90 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1cea0 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
1ceb0 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20  fully qualified 
1cec0 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20 6e 61  path and file na
1ced0 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  me for the curre
1cee0 6e 74 6c 79 20 6f 70 65 6e 0d 0a 20 20 20 20 2f  ntly open..    /
1cef0 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 69 66 20  // database, if 
1cf00 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  any...    /// </
1cf10 73 75 6d 6d 61 72 79 3e 0d 0a 23 69 66 20 21 50  summary>..#if !P
1cf20 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
1cf30 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 5b 44  RAMEWORK..    [D
1cf40 65 73 69 67 6e 65 72 53 65 72 69 61 6c 69 7a 61  esignerSerializa
1cf50 74 69 6f 6e 56 69 73 69 62 69 6c 69 74 79 28 44  tionVisibility(D
1cf60 65 73 69 67 6e 65 72 53 65 72 69 61 6c 69 7a 61  esignerSerializa
1cf70 74 69 6f 6e 56 69 73 69 62 69 6c 69 74 79 2e 48  tionVisibility.H
1cf80 69 64 64 65 6e 29 5d 0d 0a 23 65 6e 64 69 66 0d  idden)]..#endif.
1cf90 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69  .    public stri
1cfa0 6e 67 20 46 69 6c 65 4e 61 6d 65 0d 0a 20 20 20  ng FileName..   
1cfb0 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
1cfc0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
1cfd0 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
1cfe0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
1cff0 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
1d000 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1d010 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1d020 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1d030 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1d040 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1d050 20 20 20 20 20 22 44 61 74 61 62 61 73 65 20 63       "Database c
1d060 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74 20 76 61  onnection not va
1d070 6c 69 64 20 66 6f 72 20 67 65 74 74 69 6e 67 20  lid for getting 
1d080 66 69 6c 65 20 6e 61 6d 65 2e 22 29 3b 0d 0a 0d  file name.");...
1d090 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
1d0a0 75 72 6e 20 5f 73 71 6c 2e 47 65 74 46 69 6c 65  urn _sql.GetFile
1d0b0 4e 61 6d 65 28 47 65 74 44 65 66 61 75 6c 74 43  Name(GetDefaultC
1d0c0 61 74 61 6c 6f 67 4e 61 6d 65 28 29 29 3b 0d 0a  atalogName());..
1d0d0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
1d0e0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1d0f0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
1d100 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 69 6e  eturns the strin
1d110 67 20 22 6d 61 69 6e 22 2e 0d 0a 20 20 20 20 2f  g "main"...    /
1d120 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23  // </summary>..#
1d130 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
1d140 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
1d150 20 20 20 5b 44 65 73 69 67 6e 65 72 53 65 72 69     [DesignerSeri
1d160 61 6c 69 7a 61 74 69 6f 6e 56 69 73 69 62 69 6c  alizationVisibil
1d170 69 74 79 28 44 65 73 69 67 6e 65 72 53 65 72 69  ity(DesignerSeri
1d180 61 6c 69 7a 61 74 69 6f 6e 56 69 73 69 62 69 6c  alizationVisibil
1d190 69 74 79 2e 48 69 64 64 65 6e 29 5d 0d 0a 23 65  ity.Hidden)]..#e
1d1a0 6e 64 69 66 0d 0a 20 20 20 20 70 75 62 6c 69 63  ndif..    public
1d1b0 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
1d1c0 20 44 61 74 61 62 61 73 65 0d 0a 20 20 20 20 7b   Database..    {
1d1d0 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
1d1e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68     {..        Ch
1d1f0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
1d200 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47          return G
1d210 65 74 44 65 66 61 75 6c 74 43 61 74 61 6c 6f 67  etDefaultCatalog
1d220 4e 61 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 7d  Name();..      }
1d230 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
1d240 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 73  nternal static s
1d250 74 72 69 6e 67 20 4d 61 70 55 72 69 50 61 74 68  tring MapUriPath
1d260 28 73 74 72 69 6e 67 20 70 61 74 68 29 0d 0a 20  (string path).. 
1d270 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
1d280 20 28 70 61 74 68 2e 53 74 61 72 74 73 57 69 74   (path.StartsWit
1d290 68 20 28 22 66 69 6c 65 3a 2f 2f 22 2c 20 53 74  h ("file://", St
1d2a0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
1d2b0 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
1d2c0 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
1d2d0 72 65 74 75 72 6e 20 70 61 74 68 2e 53 75 62 73  return path.Subs
1d2e0 74 72 69 6e 67 20 28 37 29 3b 0d 0a 20 20 20 20  tring (7);..    
1d2f0 20 20 65 6c 73 65 20 69 66 20 28 70 61 74 68 2e    else if (path.
1d300 53 74 61 72 74 73 57 69 74 68 20 28 22 66 69 6c  StartsWith ("fil
1d310 65 3a 22 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  e:", StringCompa
1d320 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e  rison.OrdinalIgn
1d330 6f 72 65 43 61 73 65 29 29 0d 0a 20 20 20 20 20  oreCase))..     
1d340 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 70 61         return pa
1d350 74 68 2e 53 75 62 73 74 72 69 6e 67 20 28 35 29  th.Substring (5)
1d360 3b 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66  ;..      else if
1d370 20 28 70 61 74 68 2e 53 74 61 72 74 73 57 69 74   (path.StartsWit
1d380 68 20 28 22 2f 22 2c 20 53 74 72 69 6e 67 43 6f  h ("/", StringCo
1d390 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
1d3a0 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a 20 20  IgnoreCase))..  
1d3b0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1d3c0 20 70 61 74 68 3b 0d 0a 20 20 20 20 20 20 65 6c   path;..      el
1d3d0 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
1d3e0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
1d3f0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
1d400 69 6f 6e 20 28 22 49 6e 76 61 6c 69 64 20 63 6f  ion ("Invalid co
1d410 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 3a  nnection string:
1d420 20 69 6e 76 61 6c 69 64 20 55 52 49 22 29 3b 0d   invalid URI");.
1d430 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
1d440 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1d450 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20   /// Determines 
1d460 69 66 20 74 68 65 20 6c 65 67 61 63 79 20 63 6f  if the legacy co
1d470 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20  nnection string 
1d480 70 61 72 73 65 72 20 73 68 6f 75 6c 64 20 62 65  parser should be
1d490 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20   used...    /// 
1d4a0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1d4b0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1d4c0 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20  "connection">.. 
1d4d0 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65     /// The conne
1d4e0 63 74 69 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20  ction that will 
1d4f0 62 65 20 75 73 69 6e 67 20 74 68 65 20 70 61 72  be using the par
1d500 73 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  sed connection s
1d510 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tring...    /// 
1d520 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1d530 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
1d540 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1d550 20 74 68 65 20 6c 65 67 61 63 79 20 63 6f 6e 6e   the legacy conn
1d560 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 61  ection string pa
1d570 72 73 65 72 20 73 68 6f 75 6c 64 20 62 65 20 75  rser should be u
1d580 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  sed...    /// </
1d590 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
1d5a0 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
1d5b0 6c 20 53 68 6f 75 6c 64 55 73 65 4c 65 67 61 63  l ShouldUseLegac
1d5c0 79 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  yConnectionStrin
1d5d0 67 50 61 72 73 65 72 28 0d 0a 20 20 20 20 20 20  gParser(..      
1d5e0 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
1d5f0 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  on connection.. 
1d600 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d         )..    {.
1d610 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20  .        string 
1d620 6e 61 6d 65 20 3d 20 22 4e 6f 5f 53 51 4c 69 74  name = "No_SQLit
1d630 65 43 6f 6e 6e 65 63 74 69 6f 6e 4e 65 77 50 61  eConnectionNewPa
1d640 72 73 65 72 22 3b 0d 0a 20 20 20 20 20 20 20 20  rser";..        
1d650 6f 62 6a 65 63 74 20 76 61 6c 75 65 3b 0d 0a 0d  object value;...
1d660 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 63 6f  .        if ((co
1d670 6e 6e 65 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c  nnection != null
1d680 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20 20  ) &&..          
1d690 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 54 72 79    connection.Try
1d6a0 47 65 74 43 61 63 68 65 64 53 65 74 74 69 6e 67  GetCachedSetting
1d6b0 28 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6f 75 74  (name, null, out
1d6c0 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20   value))..      
1d6d0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
1d6e0 20 72 65 74 75 72 6e 20 28 76 61 6c 75 65 20 21   return (value !
1d6f0 3d 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  = null);..      
1d700 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
1d710 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 20 3d  f ((connection =
1d720 3d 20 6e 75 6c 6c 29 20 26 26 0d 0a 20 20 20 20  = null) &&..    
1d730 20 20 20 20 20 20 20 20 54 72 79 47 65 74 4c 61          TryGetLa
1d740 73 74 43 61 63 68 65 64 53 65 74 74 69 6e 67 28  stCachedSetting(
1d750 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6f 75 74 20  name, null, out 
1d760 76 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20  value))..       
1d770 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
1d780 72 65 74 75 72 6e 20 28 76 61 6c 75 65 20 21 3d  return (value !=
1d790 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
1d7a0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 76 61   }....        va
1d7b0 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
1d7c0 76 65 4d 65 74 68 6f 64 73 2e 47 65 74 53 65 74  veMethods.GetSet
1d7d0 74 69 6e 67 56 61 6c 75 65 28 6e 61 6d 65 2c 20  tingValue(name, 
1d7e0 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  null);....      
1d7f0 20 20 69 66 20 28 63 6f 6e 6e 65 63 74 69 6f 6e    if (connection
1d800 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1d810 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f         connectio
1d820 6e 2e 53 65 74 43 61 63 68 65 64 53 65 74 74 69  n.SetCachedSetti
1d830 6e 67 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b  ng(name, value);
1d840 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
1d850 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74 4c              SetL
1d860 61 73 74 43 61 63 68 65 64 53 65 74 74 69 6e 67  astCachedSetting
1d870 28 6e 61 6d 65 2c 20 76 61 6c 75 65 29 3b 0d 0a  (name, value);..
1d880 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1d890 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c 29   (value != null)
1d8a0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1d8b0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1d8c0 20 20 20 2f 2f 2f 20 50 61 72 73 65 73 20 61 20     /// Parses a 
1d8d0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
1d8e0 67 20 69 6e 74 6f 20 63 6f 6d 70 6f 6e 65 6e 74  g into component
1d8f0 20 70 61 72 74 73 20 75 73 69 6e 67 20 74 68 65   parts using the
1d900 20 63 75 73 74 6f 6d 0d 0a 20 20 20 20 2f 2f 2f   custom..    ///
1d910 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
1d920 6e 67 20 70 61 72 73 65 72 2e 20 20 41 6e 20 65  ng parser.  An e
1d930 78 63 65 70 74 69 6f 6e 20 6d 61 79 20 62 65 20  xception may be 
1d940 74 68 72 6f 77 6e 20 69 66 20 74 68 65 20 73 79  thrown if the sy
1d950 6e 74 61 78 0d 0a 20 20 20 20 2f 2f 2f 20 6f 66  ntax..    /// of
1d960 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
1d970 73 74 72 69 6e 67 20 69 73 20 69 6e 63 6f 72 72  string is incorr
1d980 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
1d990 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1d9a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1d9b0 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 22  onnectionString"
1d9c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  >..    /// The c
1d9d0 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
1d9e0 20 74 6f 20 70 61 72 73 65 2e 0d 0a 20 20 20 20   to parse...    
1d9f0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1da00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1da10 65 3d 22 61 6c 6c 6f 77 4e 61 6d 65 4f 6e 6c 79  e="allowNameOnly
1da20 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  ">..    /// Non-
1da30 7a 65 72 6f 20 69 66 20 6e 61 6d 65 73 20 61 72  zero if names ar
1da40 65 20 61 6c 6c 6f 77 65 64 20 77 69 74 68 6f 75  e allowed withou
1da50 74 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f  t values...    /
1da60 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
1da70 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
1da80 20 20 20 20 2f 2f 2f 20 54 68 65 20 6c 69 73 74      /// The list
1da90 20 6f 66 20 6b 65 79 2f 76 61 6c 75 65 20 70 61   of key/value pa
1daa0 69 72 73 20 63 6f 72 72 65 73 70 6f 6e 64 69 6e  irs correspondin
1dab0 67 20 74 6f 20 74 68 65 20 70 61 72 61 6d 65 74  g to the paramet
1dac0 65 72 73 20 73 70 65 63 69 66 69 65 64 0d 0a 20  ers specified.. 
1dad0 20 20 20 2f 2f 2f 20 77 69 74 68 69 6e 20 74 68     /// within th
1dae0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  e connection str
1daf0 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ing...    /// </
1db00 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
1db10 69 76 61 74 65 20 73 74 61 74 69 63 20 53 6f 72  ivate static Sor
1db20 74 65 64 4c 69 73 74 3c 73 74 72 69 6e 67 2c 20  tedList<string, 
1db30 73 74 72 69 6e 67 3e 20 50 61 72 73 65 43 6f 6e  string> ParseCon
1db40 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 28 0d 0a  nectionString(..
1db50 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63          string c
1db60 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 2c  onnectionString,
1db70 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61  ..        bool a
1db80 6c 6c 6f 77 4e 61 6d 65 4f 6e 6c 79 0d 0a 20 20  llowNameOnly..  
1db90 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
1dba0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 50          return P
1dbb0 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74  arseConnectionSt
1dbc0 72 69 6e 67 28 6e 75 6c 6c 2c 20 63 6f 6e 6e 65  ring(null, conne
1dbd0 63 74 69 6f 6e 53 74 72 69 6e 67 2c 20 61 6c 6c  ctionString, all
1dbe0 6f 77 4e 61 6d 65 4f 6e 6c 79 29 3b 0d 0a 20 20  owNameOnly);..  
1dbf0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1dc00 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1dc10 2f 20 50 61 72 73 65 73 20 61 20 63 6f 6e 6e 65  / Parses a conne
1dc20 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 69 6e 74  ction string int
1dc30 6f 20 63 6f 6d 70 6f 6e 65 6e 74 20 70 61 72 74  o component part
1dc40 73 20 75 73 69 6e 67 20 74 68 65 20 63 75 73 74  s using the cust
1dc50 6f 6d 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e  om..    /// conn
1dc60 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 70 61  ection string pa
1dc70 72 73 65 72 2e 20 20 41 6e 20 65 78 63 65 70 74  rser.  An except
1dc80 69 6f 6e 20 6d 61 79 20 62 65 20 74 68 72 6f 77  ion may be throw
1dc90 6e 20 69 66 20 74 68 65 20 73 79 6e 74 61 78 0d  n if the syntax.
1dca0 0a 20 20 20 20 2f 2f 2f 20 6f 66 20 74 68 65 20  .    /// of the 
1dcb0 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
1dcc0 67 20 69 73 20 69 6e 63 6f 72 72 65 63 74 2e 0d  g is incorrect..
1dcd0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1dce0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1dcf0 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63  ram name="connec
1dd00 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  tion">..    /// 
1dd10 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  The connection t
1dd20 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 69 6e  hat will be usin
1dd30 67 20 74 68 65 20 70 61 72 73 65 64 20 63 6f 6e  g the parsed con
1dd40 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d  nection string..
1dd50 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
1dd60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1dd70 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69  m name="connecti
1dd80 6f 6e 53 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20  onString">..    
1dd90 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69  /// The connecti
1dda0 6f 6e 20 73 74 72 69 6e 67 20 74 6f 20 70 61 72  on string to par
1ddb0 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  se...    /// </p
1ddc0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1ddd0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 6c 6c 6f  param name="allo
1dde0 77 4e 61 6d 65 4f 6e 6c 79 22 3e 0d 0a 20 20 20  wNameOnly">..   
1ddf0 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1de00 20 6e 61 6d 65 73 20 61 72 65 20 61 6c 6c 6f 77   names are allow
1de10 65 64 20 77 69 74 68 6f 75 74 20 76 61 6c 75 65  ed without value
1de20 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  s...    /// </pa
1de30 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
1de40 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
1de50 20 54 68 65 20 6c 69 73 74 20 6f 66 20 6b 65 79   The list of key
1de60 2f 76 61 6c 75 65 20 70 61 69 72 73 20 63 6f 72  /value pairs cor
1de70 72 65 73 70 6f 6e 64 69 6e 67 20 74 6f 20 74 68  responding to th
1de80 65 20 70 61 72 61 6d 65 74 65 72 73 20 73 70 65  e parameters spe
1de90 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
1dea0 77 69 74 68 69 6e 20 74 68 65 20 63 6f 6e 6e 65  within the conne
1deb0 63 74 69 6f 6e 20 73 74 72 69 6e 67 2e 0d 0a 20  ction string... 
1dec0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1ded0 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
1dee0 74 61 74 69 63 20 53 6f 72 74 65 64 4c 69 73 74  tatic SortedList
1def0 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e 67 3e  <string, string>
1df00 20 50 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f 6e   ParseConnection
1df10 53 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  String(..       
1df20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1df30 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 2c 0d 0a 20  n connection,.. 
1df40 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 63 6f         string co
1df50 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 2c 0d  nnectionString,.
1df60 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 61 6c  .        bool al
1df70 6c 6f 77 4e 61 6d 65 4f 6e 6c 79 0d 0a 20 20 20  lowNameOnly..   
1df80 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
1df90 20 20 20 20 20 73 74 72 69 6e 67 20 73 20 3d 20       string s = 
1dfa0 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67  connectionString
1dfb0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 3b 0d  ;..      int n;.
1dfc0 0a 20 20 20 20 20 20 53 6f 72 74 65 64 4c 69 73  .      SortedLis
1dfd0 74 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e 67  t<string, string
1dfe0 3e 20 6c 73 20 3d 20 6e 65 77 20 53 6f 72 74 65  > ls = new Sorte
1dff0 64 4c 69 73 74 3c 73 74 72 69 6e 67 2c 20 73 74  dList<string, st
1e000 72 69 6e 67 3e 28 53 74 72 69 6e 67 43 6f 6d 70  ring>(StringComp
1e010 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f  arer.OrdinalIgno
1e020 72 65 43 61 73 65 29 3b 0d 0a 0d 0a 20 20 20 20  reCase);....    
1e030 20 20 2f 2f 20 46 69 72 73 74 20 73 70 6c 69 74    // First split
1e040 20 69 6e 74 6f 20 73 65 6d 69 2d 63 6f 6c 6f 6e   into semi-colon
1e050 20 64 65 6c 69 6d 69 74 65 64 20 76 61 6c 75 65   delimited value
1e060 73 2e 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  s...      string
1e070 20 65 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a   error = null;..
1e080 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 61        string[] a
1e090 72 50 61 72 74 73 3b 0d 0a 0d 0a 20 20 20 20 20  rParts;....     
1e0a0 20 69 66 20 28 53 68 6f 75 6c 64 55 73 65 4c 65   if (ShouldUseLe
1e0b0 67 61 63 79 43 6f 6e 6e 65 63 74 69 6f 6e 53 74  gacyConnectionSt
1e0c0 72 69 6e 67 50 61 72 73 65 72 28 63 6f 6e 6e 65  ringParser(conne
1e0d0 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20  ction))..       
1e0e0 20 20 20 61 72 50 61 72 74 73 20 3d 20 53 51 4c     arParts = SQL
1e0f0 69 74 65 43 6f 6e 76 65 72 74 2e 53 70 6c 69 74  iteConvert.Split
1e100 28 73 2c 20 27 3b 27 29 3b 0d 0a 20 20 20 20 20  (s, ';');..     
1e110 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
1e120 20 61 72 50 61 72 74 73 20 3d 20 53 51 4c 69 74   arParts = SQLit
1e130 65 43 6f 6e 76 65 72 74 2e 4e 65 77 53 70 6c 69  eConvert.NewSpli
1e140 74 28 73 2c 20 27 3b 27 2c 20 74 72 75 65 2c 20  t(s, ';', true, 
1e150 72 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20  ref error);.... 
1e160 20 20 20 20 20 69 66 20 28 61 72 50 61 72 74 73       if (arParts
1e170 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1e180 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68   {..          th
1e190 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
1e1a0 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72  Exception(Helper
1e1b0 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
1e1c0 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
1e1d0 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
1e1e0 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
1e1f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1e200 22 49 6e 76 61 6c 69 64 20 43 6f 6e 6e 65 63 74  "Invalid Connect
1e210 69 6f 6e 53 74 72 69 6e 67 20 66 6f 72 6d 61 74  ionString format
1e220 2c 20 63 61 6e 6e 6f 74 20 70 61 72 73 65 3a 20  , cannot parse: 
1e230 7b 30 7d 22 2c 20 28 65 72 72 6f 72 20 21 3d 20  {0}", (error != 
1e240 6e 75 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20  null) ?..       
1e250 20 20 20 20 20 20 20 65 72 72 6f 72 20 3a 20 22         error : "
1e260 63 6f 75 6c 64 20 6e 6f 74 20 73 70 6c 69 74 20  could not split 
1e270 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
1e280 67 20 69 6e 74 6f 20 70 72 6f 70 65 72 74 69 65  g into propertie
1e290 73 22 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  s"));..      }..
1e2a0 0d 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20  ..      int x = 
1e2b0 28 61 72 50 61 72 74 73 20 21 3d 20 6e 75 6c 6c  (arParts != null
1e2c0 29 20 3f 20 61 72 50 61 72 74 73 2e 4c 65 6e 67  ) ? arParts.Leng
1e2d0 74 68 20 3a 20 30 3b 0d 0a 20 20 20 20 20 20 2f  th : 0;..      /
1e2e0 2f 20 46 6f 72 20 65 61 63 68 20 73 65 6d 69 2d  / For each semi-
1e2f0 63 6f 6c 6f 6e 20 70 69 65 63 65 2c 20 73 70 6c  colon piece, spl
1e300 69 74 20 69 6e 74 6f 20 6b 65 79 20 61 6e 64 20  it into key and 
1e310 76 61 6c 75 65 20 70 61 69 72 73 20 62 79 20 74  value pairs by t
1e320 68 65 20 70 72 65 73 65 6e 63 65 20 6f 66 20 74  he presence of t
1e330 68 65 20 3d 20 73 69 67 6e 0d 0a 20 20 20 20 20  he = sign..     
1e340 20 66 6f 72 20 28 6e 20 3d 20 30 3b 20 6e 20 3c   for (n = 0; n <
1e350 20 78 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20   x; n++)..      
1e360 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 61  {..        if (a
1e370 72 50 61 72 74 73 5b 6e 5d 20 3d 3d 20 6e 75 6c  rParts[n] == nul
1e380 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  l)..          co
1e390 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
1e3a0 20 20 20 61 72 50 61 72 74 73 5b 6e 5d 20 3d 20     arParts[n] = 
1e3b0 61 72 50 61 72 74 73 5b 6e 5d 2e 54 72 69 6d 28  arParts[n].Trim(
1e3c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
1e3d0 20 28 61 72 50 61 72 74 73 5b 6e 5d 2e 4c 65 6e   (arParts[n].Len
1e3e0 67 74 68 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20  gth == 0)..     
1e3f0 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a       continue;..
1e400 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e  ..        int in
1e410 64 65 78 4f 66 20 3d 20 61 72 50 61 72 74 73 5b  dexOf = arParts[
1e420 6e 5d 2e 49 6e 64 65 78 4f 66 28 27 3d 27 29 3b  n].IndexOf('=');
1e430 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1e440 69 6e 64 65 78 4f 66 20 21 3d 20 2d 31 29 0d 0a  indexOf != -1)..
1e450 20 20 20 20 20 20 20 20 20 20 6c 73 2e 41 64 64            ls.Add
1e460 28 55 6e 77 72 61 70 53 74 72 69 6e 67 28 61 72  (UnwrapString(ar
1e470 50 61 72 74 73 5b 6e 5d 2e 53 75 62 73 74 72 69  Parts[n].Substri
1e480 6e 67 28 30 2c 20 69 6e 64 65 78 4f 66 29 2e 54  ng(0, indexOf).T
1e490 72 69 6d 28 29 29 2c 20 55 6e 77 72 61 70 53 74  rim()), UnwrapSt
1e4a0 72 69 6e 67 28 61 72 50 61 72 74 73 5b 6e 5d 2e  ring(arParts[n].
1e4b0 53 75 62 73 74 72 69 6e 67 28 69 6e 64 65 78 4f  Substring(indexO
1e4c0 66 20 2b 20 31 29 2e 54 72 69 6d 28 29 29 29 3b  f + 1).Trim()));
1e4d0 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
1e4e0 66 20 28 61 6c 6c 6f 77 4e 61 6d 65 4f 6e 6c 79  f (allowNameOnly
1e4f0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 6c 73 2e  )..          ls.
1e500 41 64 64 28 55 6e 77 72 61 70 53 74 72 69 6e 67  Add(UnwrapString
1e510 28 61 72 50 61 72 74 73 5b 6e 5d 2e 54 72 69 6d  (arParts[n].Trim
1e520 28 29 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74  ()), String.Empt
1e530 79 29 3b 0d 0a 20 20 20 20 20 20 20 20 65 6c 73  y);..        els
1e540 65 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72  e..          thr
1e550 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
1e560 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d  xception(HelperM
1e570 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
1e580 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
1e590 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20  CurrentCulture, 
1e5a0 22 49 6e 76 61 6c 69 64 20 43 6f 6e 6e 65 63 74  "Invalid Connect
1e5b0 69 6f 6e 53 74 72 69 6e 67 20 66 6f 72 6d 61 74  ionString format
1e5c0 20 66 6f 72 20 70 61 72 74 20 5c 22 7b 30 7d 5c   for part \"{0}\
1e5d0 22 2c 20 6e 6f 20 65 71 75 61 6c 20 73 69 67 6e  ", no equal sign
1e5e0 20 66 6f 75 6e 64 22 2c 20 61 72 50 61 72 74 73   found", arParts
1e5f0 5b 6e 5d 29 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  [n]));..      }.
1e600 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6c 73  .      return ls
1e610 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
1e620 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1e630 20 20 20 2f 2f 2f 20 50 61 72 73 65 73 20 61 20     /// Parses a 
1e640 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e  connection strin
1e650 67 20 75 73 69 6e 67 20 74 68 65 20 62 75 69 6c  g using the buil
1e660 74 2d 69 6e 20 28 69 2e 65 2e 20 66 72 61 6d 65  t-in (i.e. frame
1e670 77 6f 72 6b 20 70 72 6f 76 69 64 65 64 29 0d 0a  work provided)..
1e680 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69      /// connecti
1e690 6f 6e 20 73 74 72 69 6e 67 20 70 61 72 73 65 72  on string parser
1e6a0 20 63 6c 61 73 73 20 61 6e 64 20 72 65 74 75 72   class and retur
1e6b0 6e 73 20 74 68 65 20 6b 65 79 2f 76 61 6c 75 65  ns the key/value
1e6c0 20 70 61 69 72 73 2e 20 20 41 6e 0d 0a 20 20 20   pairs.  An..   
1e6d0 20 2f 2f 2f 20 65 78 63 65 70 74 69 6f 6e 20 6d   /// exception m
1e6e0 61 79 20 62 65 20 74 68 72 6f 77 6e 20 69 66 20  ay be thrown if 
1e6f0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
1e700 74 72 69 6e 67 20 69 73 20 69 6e 76 61 6c 69 64  tring is invalid
1e710 20 6f 72 20 63 61 6e 6e 6f 74 20 62 65 0d 0a 20   or cannot be.. 
1e720 20 20 20 2f 2f 2f 20 70 61 72 73 65 64 2e 20 20     /// parsed.  
1e730 57 68 65 6e 20 63 6f 6d 70 69 6c 65 64 20 66 6f  When compiled fo
1e740 72 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61  r the .NET Compa
1e750 63 74 20 46 72 61 6d 65 77 6f 72 6b 2c 20 74 68  ct Framework, th
1e760 65 20 63 75 73 74 6f 6d 0d 0a 20 20 20 20 2f 2f  e custom..    //
1e770 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72  / connection str
1e780 69 6e 67 20 70 61 72 73 65 72 20 69 73 20 61 6c  ing parser is al
1e790 77 61 79 73 20 75 73 65 64 20 69 6e 73 74 65 61  ways used instea
1e7a0 64 20 62 65 63 61 75 73 65 20 74 68 65 20 66 72  d because the fr
1e7b0 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 2f 2f 2f  amework..    ///
1e7c0 20 70 72 6f 76 69 64 65 64 20 6f 6e 65 20 69 73   provided one is
1e7d0 20 75 6e 61 76 61 69 6c 61 62 6c 65 20 74 68 65   unavailable the
1e7e0 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  re...    /// </s
1e7f0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1e800 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
1e810 6e 6e 65 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20  nnection">..    
1e820 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e 65 63 74 69  /// The connecti
1e830 6f 6e 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  on that will be 
1e840 75 73 69 6e 67 20 74 68 65 20 70 61 72 73 65 64  using the parsed
1e850 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69   connection stri
1e860 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ng...    /// </p
1e870 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1e880 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e  param name="conn
1e890 65 63 74 69 6f 6e 53 74 72 69 6e 67 22 3e 0d 0a  ectionString">..
1e8a0 20 20 20 20 2f 2f 2f 20 54 68 65 20 63 6f 6e 6e      /// The conn
1e8b0 65 63 74 69 6f 6e 20 73 74 72 69 6e 67 20 74 6f  ection string to
1e8c0 20 70 61 72 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f   parse...    ///
1e8d0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
1e8e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1e8f0 73 74 72 69 63 74 22 3e 0d 0a 20 20 20 20 2f 2f  strict">..    //
1e900 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 74 68  / Non-zero to th
1e910 72 6f 77 20 61 6e 20 65 78 63 65 70 74 69 6f 6e  row an exception
1e920 20 69 66 20 61 6e 79 20 63 6f 6e 6e 65 63 74 69   if any connecti
1e930 6f 6e 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73  on string values
1e940 20 61 72 65 20 6e 6f 74 20 6f 66 0d 0a 20 20 20   are not of..   
1e950 20 2f 2f 2f 20 74 68 65 20 3c 73 65 65 20 63 72   /// the <see cr
1e960 65 66 3d 22 53 74 72 69 6e 67 22 20 2f 3e 20 74  ef="String" /> t
1e970 79 70 65 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ype.  This is no
1e980 74 20 61 70 70 6c 69 63 61 62 6c 65 20 77 68 65  t applicable whe
1e990 6e 20 72 75 6e 6e 69 6e 67 20 6f 6e 0d 0a 20 20  n running on..  
1e9a0 20 20 2f 2f 2f 20 74 68 65 20 2e 4e 45 54 20 43    /// the .NET C
1e9b0 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f 72 6b  ompact Framework
1e9c0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
1e9d0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1e9e0 74 75 72 6e 73 3e 54 68 65 20 6c 69 73 74 20 6f  turns>The list o
1e9f0 66 20 6b 65 79 2f 76 61 6c 75 65 20 70 61 69 72  f key/value pair
1ea00 73 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  s.</returns>..  
1ea10 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63    private static
1ea20 20 53 6f 72 74 65 64 4c 69 73 74 3c 73 74 72 69   SortedList<stri
1ea30 6e 67 2c 20 73 74 72 69 6e 67 3e 20 50 61 72 73  ng, string> Pars
1ea40 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  eConnectionStrin
1ea50 67 56 69 61 46 72 61 6d 65 77 6f 72 6b 28 0d 0a  gViaFramework(..
1ea60 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
1ea70 6e 6e 65 63 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  nnection connect
1ea80 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  ion,..        st
1ea90 72 69 6e 67 20 63 6f 6e 6e 65 63 74 69 6f 6e 53  ring connectionS
1eaa0 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20 20  tring,..        
1eab0 62 6f 6f 6c 20 73 74 72 69 63 74 0d 0a 20 20 20  bool strict..   
1eac0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 23       )..    {..#
1ead0 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
1eae0 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
1eaf0 20 20 20 20 20 20 20 44 62 43 6f 6e 6e 65 63 74         DbConnect
1eb00 69 6f 6e 53 74 72 69 6e 67 42 75 69 6c 64 65 72  ionStringBuilder
1eb10 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e   connectionStrin
1eb20 67 42 75 69 6c 64 65 72 0d 0a 20 20 20 20 20 20  gBuilder..      
1eb30 20 20 20 20 20 20 3d 20 6e 65 77 20 44 62 43 6f        = new DbCo
1eb40 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 42 75  nnectionStringBu
1eb50 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
1eb60 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74      connectionSt
1eb70 72 69 6e 67 42 75 69 6c 64 65 72 2e 43 6f 6e 6e  ringBuilder.Conn
1eb80 65 63 74 69 6f 6e 53 74 72 69 6e 67 20 3d 20 63  ectionString = c
1eb90 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 3b  onnectionString;
1eba0 20 2f 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 0d 0a   /* throw */....
1ebb0 20 20 20 20 20 20 20 20 53 6f 72 74 65 64 4c 69          SortedLi
1ebc0 73 74 3c 73 74 72 69 6e 67 2c 20 73 74 72 69 6e  st<string, strin
1ebd0 67 3e 20 72 65 73 75 6c 74 20 3d 0d 0a 20 20 20  g> result =..   
1ebe0 20 20 20 20 20 20 20 20 20 6e 65 77 20 53 6f 72           new Sor
1ebf0 74 65 64 4c 69 73 74 3c 73 74 72 69 6e 67 2c 20  tedList<string, 
1ec00 73 74 72 69 6e 67 3e 28 53 74 72 69 6e 67 43 6f  string>(StringCo
1ec10 6d 70 61 72 65 72 2e 4f 72 64 69 6e 61 6c 49 67  mparer.OrdinalIg
1ec20 6e 6f 72 65 43 61 73 65 29 3b 0d 0a 0d 0a 20 20  noreCase);....  
1ec30 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28 73        foreach (s
1ec40 74 72 69 6e 67 20 6b 65 79 4e 61 6d 65 20 69 6e  tring keyName in
1ec50 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e   connectionStrin
1ec60 67 42 75 69 6c 64 65 72 2e 4b 65 79 73 29 0d 0a  gBuilder.Keys)..
1ec70 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
1ec80 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20 76 61         object va
1ec90 6c 75 65 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e  lue = connection
1eca0 53 74 72 69 6e 67 42 75 69 6c 64 65 72 5b 6b 65  StringBuilder[ke
1ecb0 79 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20 20 20 20  yName];..       
1ecc0 20 20 20 20 20 73 74 72 69 6e 67 20 6b 65 79 56       string keyV
1ecd0 61 6c 75 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  alue = null;....
1ece0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
1ecf0 76 61 6c 75 65 20 69 73 20 73 74 72 69 6e 67 29  value is string)
1ed00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1ed10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1ed20 20 6b 65 79 56 61 6c 75 65 20 3d 20 28 73 74 72   keyValue = (str
1ed30 69 6e 67 29 76 61 6c 75 65 3b 0d 0a 20 20 20 20  ing)value;..    
1ed40 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
1ed50 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28         else if (
1ed60 73 74 72 69 63 74 29 0d 0a 20 20 20 20 20 20 20  strict)..       
1ed70 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1ed80 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1ed90 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
1eda0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
1edb0 20 20 20 20 20 20 20 20 20 20 22 63 6f 6e 6e 65            "conne
1edc0 63 74 69 6f 6e 20 70 72 6f 70 65 72 74 79 20 76  ction property v
1edd0 61 6c 75 65 20 69 73 20 6e 6f 74 20 61 20 73 74  alue is not a st
1ede0 72 69 6e 67 22 2c 0d 0a 20 20 20 20 20 20 20 20  ring",..        
1edf0 20 20 20 20 20 20 20 20 20 20 20 20 6b 65 79 4e              keyN
1ee00 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
1ee10 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
1ee20 20 20 65 6c 73 65 20 69 66 20 28 76 61 6c 75 65    else if (value
1ee30 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
1ee40 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
1ee50 20 20 20 20 20 20 20 20 20 20 6b 65 79 56 61 6c            keyVal
1ee60 75 65 20 3d 20 76 61 6c 75 65 2e 54 6f 53 74 72  ue = value.ToStr
1ee70 69 6e 67 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ing();..        
1ee80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1ee90 20 20 20 20 20 72 65 73 75 6c 74 2e 41 64 64 28       result.Add(
1eea0 6b 65 79 4e 61 6d 65 2c 20 6b 65 79 56 61 6c 75  keyName, keyValu
1eeb0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
1eec0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
1eed0 20 72 65 73 75 6c 74 3b 0d 0a 23 65 6c 73 65 0d   result;..#else.
1eee0 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
1eef0 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4f 6e       // NOTE: On
1ef00 20 74 68 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63   the .NET Compac
1ef10 74 20 46 72 61 6d 65 77 6f 72 6b 2c 20 61 6c 77  t Framework, alw
1ef20 61 79 73 20 75 73 65 20 6f 75 72 20 63 75 73 74  ays use our cust
1ef30 6f 6d 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  om connection.. 
1ef40 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
1ef50 73 74 72 69 6e 67 20 70 61 72 73 65 72 20 61 73  string parser as
1ef60 20 74 68 65 20 62 75 69 6c 74 2d 69 6e 20 28 69   the built-in (i
1ef70 2e 65 2e 20 66 72 61 6d 65 77 6f 72 6b 20 70 72  .e. framework pr
1ef80 6f 76 69 64 65 64 29 20 6f 6e 65 20 69 73 0d 0a  ovided) one is..
1ef90 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
1efa0 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 0d 0a 20   unavailable... 
1efb0 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
1efc0 20 20 20 72 65 74 75 72 6e 20 50 61 72 73 65 43     return ParseC
1efd0 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 28  onnectionString(
1efe0 63 6f 6e 6e 65 63 74 69 6f 6e 2c 20 63 6f 6e 6e  connection, conn
1eff0 65 63 74 69 6f 6e 53 74 72 69 6e 67 2c 20 66 61  ectionString, fa
1f000 6c 73 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  lse);..#endif.. 
1f010 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41     }....#if !PLA
1f020 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
1f030 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20  MEWORK..    /// 
1f040 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1f050 2f 2f 20 4d 61 6e 75 61 6c 20 64 69 73 74 72 69  // Manual distri
1f060 62 75 74 65 64 20 74 72 61 6e 73 61 63 74 69 6f  buted transactio
1f070 6e 20 65 6e 6c 69 73 74 6d 65 6e 74 20 73 75 70  n enlistment sup
1f080 70 6f 72 74 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  port..    /// </
1f090 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1f0a0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74  / <param name="t
1f0b0 72 61 6e 73 61 63 74 69 6f 6e 22 3e 54 68 65 20  ransaction">The 
1f0c0 64 69 73 74 72 69 62 75 74 65 64 20 74 72 61 6e  distributed tran
1f0d0 73 61 63 74 69 6f 6e 20 74 6f 20 65 6e 6c 69 73  saction to enlis
1f0e0 74 20 69 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  t in</param>..  
1f0f0 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
1f100 65 20 76 6f 69 64 20 45 6e 6c 69 73 74 54 72 61  e void EnlistTra
1f110 6e 73 61 63 74 69 6f 6e 28 53 79 73 74 65 6d 2e  nsaction(System.
1f120 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 54 72 61  Transactions.Tra
1f130 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 61 63  nsaction transac
1f140 74 69 6f 6e 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  tion)..    {..  
1f150 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
1f160 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
1f170 20 20 62 6f 6f 6c 20 77 61 69 74 46 6f 72 45 6e    bool waitForEn
1f180 6c 69 73 74 6d 65 6e 74 52 65 73 65 74 3b 0d 0a  listmentReset;..
1f190 20 20 20 20 20 20 20 20 69 6e 74 20 77 61 69 74          int wait
1f1a0 54 69 6d 65 6f 75 74 3b 0d 0a 0d 0a 20 20 20 20  Timeout;....    
1f1b0 20 20 20 20 6c 6f 63 6b 20 28 5f 65 6e 6c 69 73      lock (_enlis
1f1c0 74 6d 65 6e 74 53 79 6e 63 52 6f 6f 74 29 20 2f  tmentSyncRoot) /
1f1d0 2a 20 54 52 41 4e 53 41 43 54 49 4f 4e 41 4c 20  * TRANSACTIONAL 
1f1e0 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
1f1f0 20 20 20 20 20 20 20 20 20 20 20 77 61 69 74 46             waitF
1f200 6f 72 45 6e 6c 69 73 74 6d 65 6e 74 52 65 73 65  orEnlistmentRese
1f210 74 20 3d 20 28 28 5f 66 6c 61 67 73 20 26 20 53  t = ((_flags & S
1f220 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
1f230 6c 61 67 73 2e 57 61 69 74 46 6f 72 45 6e 6c 69  lags.WaitForEnli
1f240 73 74 6d 65 6e 74 52 65 73 65 74 29 20 3d 3d 0d  stmentReset) ==.
1f250 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f260 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
1f270 6e 46 6c 61 67 73 2e 57 61 69 74 46 6f 72 45 6e  nFlags.WaitForEn
1f280 6c 69 73 74 6d 65 6e 74 52 65 73 65 74 29 3b 0d  listmentReset);.
1f290 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ...            w
1f2a0 61 69 74 54 69 6d 65 6f 75 74 20 3d 20 5f 77 61  aitTimeout = _wa
1f2b0 69 74 54 69 6d 65 6f 75 74 3b 0d 0a 20 20 20 20  itTimeout;..    
1f2c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
1f2d0 20 69 66 20 28 77 61 69 74 46 6f 72 45 6e 6c 69   if (waitForEnli
1f2e0 73 74 6d 65 6e 74 52 65 73 65 74 29 0d 0a 20 20  stmentReset)..  
1f2f0 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 47 4e            /* IGN
1f300 4f 52 45 44 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ORED */..       
1f310 20 20 20 20 20 57 61 69 74 46 6f 72 45 6e 6c 69       WaitForEnli
1f320 73 74 6d 65 6e 74 52 65 73 65 74 28 77 61 69 74  stmentReset(wait
1f330 54 69 6d 65 6f 75 74 2c 20 6e 75 6c 6c 29 3b 0d  Timeout, null);.
1f340 0a 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20  ...        lock 
1f350 28 5f 65 6e 6c 69 73 74 6d 65 6e 74 53 79 6e 63  (_enlistmentSync
1f360 52 6f 6f 74 29 20 2f 2a 20 54 52 41 4e 53 41 43  Root) /* TRANSAC
1f370 54 49 4f 4e 41 4c 20 2a 2f 0d 0a 20 20 20 20 20  TIONAL */..     
1f380 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1f390 20 20 69 66 20 28 5f 65 6e 6c 69 73 74 6d 65 6e    if (_enlistmen
1f3a0 74 20 21 3d 20 6e 75 6c 6c 20 26 26 20 74 72 61  t != null && tra
1f3b0 6e 73 61 63 74 69 6f 6e 20 3d 3d 20 5f 65 6e 6c  nsaction == _enl
1f3c0 69 73 74 6d 65 6e 74 2e 5f 73 63 6f 70 65 29 0d  istment._scope).
1f3d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f3e0 20 72 65 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20   return;..      
1f3f0 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
1f400 65 6e 6c 69 73 74 6d 65 6e 74 20 21 3d 20 6e 75  enlistment != nu
1f410 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
1f420 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
1f430 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69 6f 6e  rgumentException
1f440 28 22 41 6c 72 65 61 64 79 20 65 6e 6c 69 73 74  ("Already enlist
1f450 65 64 20 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ed in a transact
1f460 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion");....      
1f470 20 20 20 20 20 20 69 66 20 28 5f 74 72 61 6e 73        if (_trans
1f480 61 63 74 69 6f 6e 4c 65 76 65 6c 20 3e 20 30 20  actionLevel > 0 
1f490 26 26 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 21  && transaction !
1f4a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f4b0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1f4c0 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70  ew ArgumentExcep
1f4d0 74 69 6f 6e 28 22 55 6e 61 62 6c 65 20 74 6f 20  tion("Unable to 
1f4e0 65 6e 6c 69 73 74 20 69 6e 20 74 72 61 6e 73 61  enlist in transa
1f4f0 63 74 69 6f 6e 2c 20 61 20 6c 6f 63 61 6c 20 74  ction, a local t
1f500 72 61 6e 73 61 63 74 69 6f 6e 20 61 6c 72 65 61  ransaction alrea
1f510 64 79 20 65 78 69 73 74 73 22 29 3b 0d 0a 20 20  dy exists");..  
1f520 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
1f530 66 20 28 74 72 61 6e 73 61 63 74 69 6f 6e 20 3d  f (transaction =
1f540 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
1f550 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
1f560 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
1f570 78 63 65 70 74 69 6f 6e 28 22 55 6e 61 62 6c 65  xception("Unable
1f580 20 74 6f 20 65 6e 6c 69 73 74 20 69 6e 20 74 72   to enlist in tr
1f590 61 6e 73 61 63 74 69 6f 6e 2c 20 69 74 20 69 73  ansaction, it is
1f5a0 20 6e 75 6c 6c 22 29 3b 0d 0a 0d 0a 20 20 20 20   null");....    
1f5b0 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 73 74 72          bool str
1f5c0 69 63 74 45 6e 6c 69 73 74 6d 65 6e 74 20 3d 20  ictEnlistment = 
1f5d0 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74  ((_flags & SQLit
1f5e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
1f5f0 2e 53 74 72 69 63 74 45 6e 6c 69 73 74 6d 65 6e  .StrictEnlistmen
1f600 74 29 20 3d 3d 0d 0a 20 20 20 20 20 20 20 20 20  t) ==..         
1f610 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
1f620 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 53 74 72  nectionFlags.Str
1f630 69 63 74 45 6e 6c 69 73 74 6d 65 6e 74 29 3b 0d  ictEnlistment);.
1f640 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f  ...            _
1f650 65 6e 6c 69 73 74 6d 65 6e 74 20 3d 20 6e 65 77  enlistment = new
1f660 20 53 51 4c 69 74 65 45 6e 6c 69 73 74 6d 65 6e   SQLiteEnlistmen
1f670 74 28 74 68 69 73 2c 20 74 72 61 6e 73 61 63 74  t(this, transact
1f680 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ion,..          
1f690 20 20 20 20 20 20 47 65 74 46 61 6c 6c 62 61 63        GetFallbac
1f6a0 6b 44 65 66 61 75 6c 74 49 73 6f 6c 61 74 69 6f  kDefaultIsolatio
1f6b0 6e 4c 65 76 65 6c 28 29 2c 20 73 74 72 69 63 74  nLevel(), strict
1f6c0 45 6e 6c 69 73 74 6d 65 6e 74 2c 0d 0a 20 20 20  Enlistment,..   
1f6d0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
1f6e0 69 63 74 45 6e 6c 69 73 74 6d 65 6e 74 29 3b 0d  ictEnlistment);.
1f6f0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4f  ...            O
1f700 6e 43 68 61 6e 67 65 64 28 74 68 69 73 2c 20 6e  nChanged(this, n
1f710 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  ew ConnectionEve
1f720 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20  ntArgs(..       
1f730 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43           SQLiteC
1f740 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79  onnectionEventTy
1f750 70 65 2e 45 6e 6c 69 73 74 54 72 61 6e 73 61 63  pe.EnlistTransac
1f760 74 69 6f 6e 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  tion, null, null
1f770 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20  , null, null,.. 
1f780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
1f790 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 65 77 20 6f  ull, null, new o
1f7a0 62 6a 65 63 74 5b 5d 20 7b 20 5f 65 6e 6c 69 73  bject[] { _enlis
1f7b0 74 6d 65 6e 74 20 7d 29 29 3b 0d 0a 20 20 20 20  tment }));..    
1f7c0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
1f7d0 6e 64 69 66 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  ndif....#if !PLA
1f7e0 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
1f7f0 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20  MEWORK..    /// 
1f800 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1f810 2f 2f 20 3c 62 3e 45 58 50 45 52 49 4d 45 4e 54  // <b>EXPERIMENT
1f820 41 4c 3c 2f 62 3e 20 2d 2d 0d 0a 20 20 20 20 2f  AL</b> --..    /
1f830 2f 2f 20 57 61 69 74 73 20 66 6f 72 20 74 68 65  // Waits for the
1f840 20 65 6e 6c 69 73 74 6d 65 6e 74 20 61 73 73 6f   enlistment asso
1f850 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
1f860 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20 62   connection to b
1f870 65 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f 2f  e reset...    //
1f880 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 6c  / This method al
1f890 77 61 79 73 20 74 68 72 6f 77 73 20 3c 73 65 65  ways throws <see
1f8a0 20 63 72 65 66 3d 22 4e 6f 74 49 6d 70 6c 65 6d   cref="NotImplem
1f8b0 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 22 20  entedException" 
1f8c0 2f 3e 20 77 68 65 6e 0d 0a 20 20 20 20 2f 2f 2f  /> when..    ///
1f8d0 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68 65 20   running on the 
1f8e0 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46 72 61  .NET Compact Fra
1f8f0 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 2f 2f 2f  mework...    ///
1f900 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1f910 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1f920 3d 22 74 69 6d 65 6f 75 74 4d 69 6c 6c 69 73 65  ="timeoutMillise
1f930 63 6f 6e 64 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f  conds">..    ///
1f940 20 54 68 65 20 61 70 70 72 6f 78 69 6d 61 74 65   The approximate
1f950 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
1f960 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20  of milliseconds 
1f970 74 6f 20 77 61 69 74 20 62 65 66 6f 72 65 20 74  to wait before t
1f980 69 6d 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 6f  iming..    /// o
1f990 75 74 20 74 68 65 20 77 61 69 74 20 6f 70 65 72  ut the wait oper
1f9a0 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ation...    /// 
1f9b0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1f9c0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72  / <param name="r
1f9d0 65 74 75 72 6e 4f 6e 44 69 73 70 6f 73 65 64 22  eturnOnDisposed"
1f9e0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72  >..    /// The r
1f9f0 65 74 75 72 6e 20 76 61 6c 75 65 20 74 6f 20 75  eturn value to u
1fa00 73 65 20 69 66 20 74 68 65 20 63 6f 6e 6e 65 63  se if the connec
1fa10 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20 64 69  tion has been di
1fa20 73 70 6f 73 65 64 3b 20 69 66 20 74 68 69 73 0d  sposed; if this.
1fa30 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 69  .    /// value i
1fa40 73 20 6e 75 6c 6c 2c 20 3c 73 65 65 20 63 72 65  s null, <see cre
1fa50 66 3d 22 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  f="ObjectDispose
1fa60 64 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e 20 77  dException" /> w
1fa70 69 6c 6c 20 62 65 20 72 61 69 73 65 64 0d 0a 20  ill be raised.. 
1fa80 20 20 20 2f 2f 2f 20 69 66 20 74 68 65 20 63 6f     /// if the co
1fa90 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 62 65 65  nnection has bee
1faa0 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20 20 20  n disposed...   
1fab0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
1fac0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
1fad0 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
1fae0 72 6f 20 69 66 20 74 68 65 20 65 6e 6c 69 73 74  ro if the enlist
1faf0 6d 65 6e 74 20 61 73 73 63 69 61 74 65 64 20 77  ment assciated w
1fb00 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  ith this connect
1fb10 69 6f 6e 20 77 61 73 20 72 65 73 65 74 3b 0d 0a  ion was reset;..
1fb20 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77 69 73      /// otherwis
1fb30 65 2c 20 7a 65 72 6f 2e 20 20 49 74 20 73 68 6f  e, zero.  It sho
1fb40 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74 68 61  uld be noted tha
1fb50 74 20 74 68 69 73 20 6d 65 74 68 6f 64 20 72 65  t this method re
1fb60 74 75 72 6e 69 6e 67 20 61 0d 0a 20 20 20 20 2f  turning a..    /
1fb70 2f 2f 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61 6c 75  // non-zero valu
1fb80 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 63 65 73  e does not neces
1fb90 73 61 72 69 6c 79 20 67 75 61 72 61 6e 74 65 65  sarily guarantee
1fba0 20 74 68 61 74 20 74 68 65 20 63 6f 6e 6e 65 63   that the connec
1fbb0 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61  tion..    /// ca
1fbc0 6e 20 65 6e 6c 69 73 74 20 69 6e 20 61 20 6e 65  n enlist in a ne
1fbd0 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 28 69  w transaction (i
1fbe0 2e 65 2e 20 64 75 65 20 74 6f 20 70 6f 74 65 6e  .e. due to poten
1fbf0 74 69 63 61 6c 20 72 61 63 65 20 77 69 74 68 0d  tical race with.
1fc00 0a 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 20 74  .    /// other t
1fc10 68 72 65 61 64 73 29 3b 20 74 68 65 72 65 66 6f  hreads); therefo
1fc20 72 65 2c 20 63 61 6c 6c 65 72 73 20 73 68 6f 75  re, callers shou
1fc30 6c 64 20 67 65 6e 65 72 61 6c 6c 79 20 75 73 65  ld generally use
1fc40 20 74 72 79 2f 63 61 74 63 68 0d 0a 20 20 20 20   try/catch..    
1fc50 2f 2f 2f 20 77 68 65 6e 20 63 61 6c 6c 69 6e 67  /// when calling
1fc60 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
1fc70 45 6e 6c 69 73 74 54 72 61 6e 73 61 63 74 69 6f  EnlistTransactio
1fc80 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20  n" /> method... 
1fc90 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
1fca0 3e 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 2f 2f  >..#else..    //
1fcb0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
1fcc0 20 2f 2f 2f 20 3c 62 3e 45 58 50 45 52 49 4d 45   /// <b>EXPERIME
1fcd0 4e 54 41 4c 3c 2f 62 3e 20 2d 2d 0d 0a 20 20 20  NTAL</b> --..   
1fce0 20 2f 2f 2f 20 57 61 69 74 73 20 66 6f 72 20 74   /// Waits for t
1fcf0 68 65 20 65 6e 6c 69 73 74 6d 65 6e 74 20 61 73  he enlistment as
1fd00 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68  sociated with th
1fd10 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f  is connection to
1fd20 20 62 65 20 72 65 73 65 74 2e 0d 0a 20 20 20 20   be reset...    
1fd30 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
1fd40 61 6c 77 61 79 73 20 74 68 72 6f 77 73 20 3c 73  always throws <s
1fd50 65 65 20 63 72 65 66 3d 22 4e 6f 74 49 6d 70 6c  ee cref="NotImpl
1fd60 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
1fd70 22 20 2f 3e 20 77 68 65 6e 0d 0a 20 20 20 20 2f  " /> when..    /
1fd80 2f 2f 20 72 75 6e 6e 69 6e 67 20 6f 6e 20 74 68  // running on th
1fd90 65 20 2e 4e 45 54 20 43 6f 6d 70 61 63 74 20 46  e .NET Compact F
1fda0 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20 20 2f  ramework...    /
1fdb0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1fdc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1fdd0 6d 65 3d 22 74 69 6d 65 6f 75 74 4d 69 6c 6c 69  me="timeoutMilli
1fde0 73 65 63 6f 6e 64 73 22 3e 0d 0a 20 20 20 20 2f  seconds">..    /
1fdf0 2f 2f 20 54 68 65 20 61 70 70 72 6f 78 69 6d 61  // The approxima
1fe00 74 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65  te maximum numbe
1fe10 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64  r of millisecond
1fe20 73 20 74 6f 20 77 61 69 74 20 62 65 66 6f 72 65  s to wait before
1fe30 20 74 69 6d 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f   timing..    ///
1fe40 20 6f 75 74 20 74 68 65 20 77 61 69 74 20 6f 70   out the wait op
1fe50 65 72 61 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  eration...    //
1fe60 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
1fe70 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1fe80 22 72 65 74 75 72 6e 4f 6e 44 69 73 70 6f 73 65  "returnOnDispose
1fe90 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  d">..    /// The
1fea0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 74 6f   return value to
1feb0 20 75 73 65 20 69 66 20 74 68 65 20 63 6f 6e 6e   use if the conn
1fec0 65 63 74 69 6f 6e 20 68 61 73 20 62 65 65 6e 20  ection has been 
1fed0 64 69 73 70 6f 73 65 64 3b 20 69 66 20 74 68 69  disposed; if thi
1fee0 73 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65  s..    /// value
1fef0 20 69 73 20 6e 75 6c 6c 2c 20 3c 73 65 65 20 63   is null, <see c
1ff00 72 65 66 3d 22 4f 62 6a 65 63 74 44 69 73 70 6f  ref="ObjectDispo
1ff10 73 65 64 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e  sedException" />
1ff20 20 77 69 6c 6c 20 62 65 20 72 61 69 73 65 64 0d   will be raised.
1ff30 0a 20 20 20 20 2f 2f 2f 20 69 66 20 74 68 65 20  .    /// if the 
1ff40 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 62  connection has b
1ff50 65 65 6e 20 64 69 73 70 6f 73 65 64 2e 0d 0a 20  een disposed... 
1ff60 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
1ff70 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1ff80 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  s>..    /// Non-
1ff90 7a 65 72 6f 20 69 66 20 74 68 65 20 65 6e 6c 69  zero if the enli
1ffa0 73 74 6d 65 6e 74 20 61 73 73 63 69 61 74 65 64  stment assciated
1ffb0 20 77 69 74 68 20 74 68 69 73 20 63 6f 6e 6e 65   with this conne
1ffc0 63 74 69 6f 6e 20 77 61 73 20 72 65 73 65 74 3b  ction was reset;
1ffd0 0d 0a 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72 77  ..    /// otherw
1ffe0 69 73 65 2c 20 7a 65 72 6f 2e 20 20 49 74 20 73  ise, zero.  It s
1fff0 68 6f 75 6c 64 20 62 65 20 6e 6f 74 65 64 20 74  hould be noted t
20000 68 61 74 20 74 68 69 73 20 6d 65 74 68 6f 64 20  hat this method 
20010 72 65 74 75 72 6e 69 6e 67 20 61 0d 0a 20 20 20  returning a..   
20020 20 2f 2f 2f 20 6e 6f 6e 2d 7a 65 72 6f 20 76 61   /// non-zero va
20030 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6e 65 63  lue does not nec
20040 65 73 73 61 72 69 6c 79 20 67 75 61 72 61 6e 74  essarily guarant
20050 65 65 20 74 68 61 74 20 74 68 65 20 63 6f 6e 6e  ee that the conn
20060 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ection..    /// 
20070 63 61 6e 20 65 6e 6c 69 73 74 20 69 6e 20 61 20  can enlist in a 
20080 6e 65 77 20 74 72 61 6e 73 61 63 74 69 6f 6e 20  new transaction 
20090 28 69 2e 65 2e 20 64 75 65 20 74 6f 20 70 6f 74  (i.e. due to pot
200a0 65 6e 74 69 63 61 6c 20 72 61 63 65 20 77 69 74  entical race wit
200b0 68 0d 0a 20 20 20 20 2f 2f 2f 20 6f 74 68 65 72  h..    /// other
200c0 20 74 68 72 65 61 64 73 29 3b 20 74 68 65 72 65   threads); there
200d0 66 6f 72 65 2c 20 63 61 6c 6c 65 72 73 20 73 68  fore, callers sh
200e0 6f 75 6c 64 20 67 65 6e 65 72 61 6c 6c 79 20 75  ould generally u
200f0 73 65 20 74 72 79 2f 63 61 74 63 68 0d 0a 20 20  se try/catch..  
20100 20 20 2f 2f 2f 20 77 68 65 6e 20 63 61 6c 6c 69    /// when calli
20110 6e 67 20 74 68 65 20 45 6e 6c 69 73 74 54 72 61  ng the EnlistTra
20120 6e 73 61 63 74 69 6f 6e 20 6d 65 74 68 6f 64 2e  nsaction method.
20130 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
20140 72 6e 73 3e 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  rns>..#endif..  
20150 20 20 70 75 62 6c 69 63 20 62 6f 6f 6c 20 57 61    public bool Wa
20160 69 74 46 6f 72 45 6e 6c 69 73 74 6d 65 6e 74 52  itForEnlistmentR
20170 65 73 65 74 28 0d 0a 20 20 20 20 20 20 20 20 69  eset(..        i
20180 6e 74 20 74 69 6d 65 6f 75 74 4d 69 6c 6c 69 73  nt timeoutMillis
20190 65 63 6f 6e 64 73 2c 0d 0a 20 20 20 20 20 20 20  econds,..       
201a0 20 62 6f 6f 6c 3f 20 72 65 74 75 72 6e 4f 6e 44   bool? returnOnD
201b0 69 73 70 6f 73 65 64 0d 0a 20 20 20 20 20 20 20  isposed..       
201c0 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
201d0 20 20 20 69 66 20 28 72 65 74 75 72 6e 4f 6e 44     if (returnOnD
201e0 69 73 70 6f 73 65 64 20 3d 3d 20 6e 75 6c 6c 29  isposed == null)
201f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 68  ..            Ch
20200 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a  eckDisposed();..
20210 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 28          else if(
20220 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20  disposed)..     
20230 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 62         return (b
20240 6f 6f 6c 29 72 65 74 75 72 6e 4f 6e 44 69 73 70  ool)returnOnDisp
20250 6f 73 65 64 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c  osed;....#if !PL
20260 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
20270 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
20280 20 69 66 20 28 74 69 6d 65 6f 75 74 4d 69 6c 6c   if (timeoutMill
20290 69 73 65 63 6f 6e 64 73 20 3c 20 30 29 0d 0a 20  iseconds < 0).. 
202a0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
202b0 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63   new ArgumentExc
202c0 65 70 74 69 6f 6e 28 22 74 69 6d 65 6f 75 74 20  eption("timeout 
202d0 63 61 6e 6e 6f 74 20 62 65 20 6e 65 67 61 74 69  cannot be negati
202e0 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ve");....       
202f0 20 63 6f 6e 73 74 20 69 6e 74 20 64 65 66 61 75   const int defau
20300 6c 74 4d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 3d  ltMilliseconds =
20310 20 31 30 30 3b 0d 0a 20 20 20 20 20 20 20 20 69   100;..        i
20320 6e 74 20 73 6c 65 65 70 4d 69 6c 6c 69 73 65 63  nt sleepMillisec
20330 6f 6e 64 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  onds;....       
20340 20 69 66 20 28 74 69 6d 65 6f 75 74 4d 69 6c 6c   if (timeoutMill
20350 69 73 65 63 6f 6e 64 73 20 3d 3d 20 30 29 0d 0a  iseconds == 0)..
20360 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
20370 20 20 20 20 20 20 20 73 6c 65 65 70 4d 69 6c 6c         sleepMill
20380 69 73 65 63 6f 6e 64 73 20 3d 20 30 3b 0d 0a 20  iseconds = 0;.. 
20390 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
203a0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
203b0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  {..            s
203c0 6c 65 65 70 4d 69 6c 6c 69 73 65 63 6f 6e 64 73  leepMilliseconds
203d0 20 3d 20 4d 61 74 68 2e 4d 69 6e 28 0d 0a 20 20   = Math.Min(..  
203e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 69                ti
203f0 6d 65 6f 75 74 4d 69 6c 6c 69 73 65 63 6f 6e 64  meoutMillisecond
20400 73 20 2f 20 31 30 2c 20 64 65 66 61 75 6c 74 4d  s / 10, defaultM
20410 69 6c 6c 69 73 65 63 6f 6e 64 73 29 3b 0d 0a 0d  illiseconds);...
20420 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
20430 28 73 6c 65 65 70 4d 69 6c 6c 69 73 65 63 6f 6e  (sleepMillisecon
20440 64 73 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  ds == 0)..      
20450 20 20 20 20 20 20 20 20 20 20 73 6c 65 65 70 4d            sleepM
20460 69 6c 6c 69 73 65 63 6f 6e 64 73 20 3d 20 64 65  illiseconds = de
20470 66 61 75 6c 74 4d 69 6c 6c 69 73 65 63 6f 6e 64  faultMillisecond
20480 73 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  s;..        }...
20490 0a 20 20 20 20 20 20 20 20 44 61 74 65 54 69 6d  .        DateTim
204a0 65 20 73 74 61 72 74 20 3d 20 44 61 74 65 54 69  e start = DateTi
204b0 6d 65 2e 55 74 63 4e 6f 77 3b 0d 0a 0d 0a 20 20  me.UtcNow;....  
204c0 20 20 20 20 20 20 77 68 69 6c 65 20 28 74 72 75        while (tru
204d0 65 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  e)..        {.. 
204e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20             //.. 
204f0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f             // NO
20500 54 45 3a 20 41 74 74 65 6d 70 74 20 74 6f 20 61  TE: Attempt to a
20510 63 71 75 69 72 65 20 74 68 65 20 6e 65 63 65 73  cquire the neces
20520 73 61 72 79 20 6c 6f 63 6b 20 77 69 74 68 6f 75  sary lock withou
20530 74 20 62 6c 6f 63 6b 69 6e 67 2e 0d 0a 20 20 20  t blocking...   
20540 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
20550 20 20 54 68 69 73 20 6d 65 74 68 6f 64 20 77 69    This method wi
20560 6c 6c 20 74 72 65 61 74 20 61 20 66 61 69 6c 75  ll treat a failu
20570 72 65 20 74 6f 20 6f 62 74 61 69 6e 20 74 68 65  re to obtain the
20580 20 6c 6f 63 6b 20 74 68 65 0d 0a 20 20 20 20 20   lock the..     
20590 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
205a0 73 61 6d 65 20 61 73 20 74 68 65 20 65 6e 6c 69  same as the enli
205b0 73 74 6d 65 6e 74 20 6e 6f 74 20 62 65 69 6e 67  stment not being
205c0 20 72 65 73 65 74 20 79 65 74 2e 20 20 42 6f 74   reset yet.  Bot
205d0 68 20 77 69 6c 6c 0d 0a 20 20 20 20 20 20 20 20  h will..        
205e0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 61 64 76      //       adv
205f0 61 6e 63 65 20 74 6f 77 61 72 64 20 74 68 65 20  ance toward the 
20600 74 69 6d 65 6f 75 74 2e 0d 0a 20 20 20 20 20 20  timeout...      
20610 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
20620 20 20 20 20 20 20 62 6f 6f 6c 20 6c 6f 63 6b 65        bool locke
20630 64 20 3d 20 4d 6f 6e 69 74 6f 72 2e 54 72 79 45  d = Monitor.TryE
20640 6e 74 65 72 28 5f 65 6e 6c 69 73 74 6d 65 6e 74  nter(_enlistment
20650 53 79 6e 63 52 6f 6f 74 29 3b 0d 0a 0d 0a 20 20  SyncRoot);....  
20660 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
20670 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
20680 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
20690 20 28 6c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20   (locked)..     
206a0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
206b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
206c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
206d0 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
206e0 45 3a 20 49 73 20 74 68 65 72 65 20 73 74 69 6c  E: Is there stil
206f0 6c 20 61 6e 20 65 6e 6c 69 73 74 6d 65 6e 74 3f  l an enlistment?
20700 20 20 49 66 20 6e 6f 74 2c 20 77 65 20 61 72 65    If not, we are
20710 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
20720 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 64        //       d
20730 6f 6e 65 2e 20 20 54 68 65 72 65 20 69 73 20 61  one.  There is a
20740 20 70 6f 74 65 6e 74 69 61 6c 20 72 61 63 65 20   potential race 
20750 63 6f 6e 64 69 74 69 6f 6e 20 69 6e 0d 0a 20 20  condition in..  
20760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20770 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65 20 63    //       the c
20780 61 6c 6c 65 72 20 69 66 20 61 6e 6f 74 68 65 72  aller if another
20790 20 74 68 72 65 61 64 20 69 73 20 61 62 6c 65 20   thread is able 
207a0 74 6f 20 73 65 74 75 70 0d 0a 20 20 20 20 20 20  to setup..      
207b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
207c0 20 20 20 20 20 20 20 61 20 6e 65 77 20 65 6e 6c         a new enl
207d0 69 73 74 6d 65 6e 74 20 61 74 20 61 6e 79 20 70  istment at any p
207e0 6f 69 6e 74 20 70 72 69 6f 72 20 74 6f 20 6f 75  oint prior to ou
207f0 72 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  r..             
20800 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
20810 63 61 6c 6c 65 72 20 66 75 6c 6c 79 20 64 65 61  caller fully dea
20820 6c 69 6e 67 20 77 69 74 68 20 74 68 65 20 72 65  ling with the re
20830 73 75 6c 74 20 6f 66 20 74 68 69 73 0d 0a 20 20  sult of this..  
20840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20850 20 20 2f 2f 20 20 20 20 20 20 20 6d 65 74 68 6f    //       metho
20860 64 2e 20 20 48 6f 77 65 76 65 72 2c 20 74 68 61  d.  However, tha
20870 74 20 73 68 6f 75 6c 64 20 67 65 6e 65 72 61 6c  t should general
20880 6c 79 20 6e 65 76 65 72 0d 0a 20 20 20 20 20 20  ly never..      
20890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
208a0 20 20 20 20 20 20 20 68 61 70 70 65 6e 20 62 65         happen be
208b0 63 61 75 73 65 20 74 68 69 73 20 63 6c 61 73 73  cause this class
208c0 20 69 73 20 6e 6f 74 20 69 6e 74 65 6e 64 65 64   is not intended
208d0 20 74 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   to..           
208e0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
208f0 20 20 62 65 20 75 73 65 64 20 62 79 20 6d 75 6c    be used by mul
20900 74 69 70 6c 65 20 63 6f 6e 63 75 72 72 65 6e 74  tiple concurrent
20910 20 74 68 72 65 61 64 73 2c 20 77 69 74 68 0d 0a   threads, with..
20920 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20930 20 20 20 20 2f 2f 20 20 20 20 20 20 20 74 68 65      //       the
20940 20 6e 6f 74 61 62 6c 65 20 65 78 63 65 70 74 69   notable excepti
20950 6f 6e 20 6f 66 20 61 6e 20 61 63 74 69 76 65 20  on of an active 
20960 65 6e 6c 69 73 74 6d 65 6e 74 0d 0a 20 20 20 20  enlistment..    
20970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20980 2f 2f 20 20 20 20 20 20 20 62 65 69 6e 67 20 61  //       being a
20990 73 79 6e 63 68 72 6f 6e 6f 75 73 6c 79 20 63 6f  synchronously co
209a0 6d 6d 69 74 74 65 64 20 6f 72 20 72 6f 6c 6c 65  mmitted or rolle
209b0 64 20 62 61 63 6b 0d 0a 20 20 20 20 20 20 20 20  d back..        
209c0 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
209d0 20 20 20 20 20 62 79 20 74 68 65 20 2e 4e 45 54       by the .NET
209e0 20 46 72 61 6d 65 77 6f 72 6b 2e 0d 0a 20 20 20   Framework...   
209f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20a00 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
20a10 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 65 6e           if (_en
20a20 6c 69 73 74 6d 65 6e 74 20 3d 3d 20 6e 75 6c 6c  listment == null
20a30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
20a40 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
20a50 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
20a60 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
20a70 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
20a80 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a         finally..
20a90 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20aa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
20ab0 66 20 28 6c 6f 63 6b 65 64 29 0d 0a 20 20 20 20  f (locked)..    
20ac0 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
20ad0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20ae0 20 20 20 4d 6f 6e 69 74 6f 72 2e 45 78 69 74 28     Monitor.Exit(
20af0 5f 65 6e 6c 69 73 74 6d 65 6e 74 53 79 6e 63 52  _enlistmentSyncR
20b00 6f 6f 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  oot);..         
20b10 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 65             locke
20b20 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  d = false;..    
20b30 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
20b40 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
20b50 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
20b60 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e              // N
20b70 4f 54 45 3a 20 41 20 74 69 6d 65 6f 75 74 20 76  OTE: A timeout v
20b80 61 6c 75 65 20 6f 66 20 7a 65 72 6f 20 69 73 20  alue of zero is 
20b90 73 70 65 63 69 61 6c 2e 20 20 49 74 20 6d 65 61  special.  It mea
20ba0 6e 73 20 6e 65 76 65 72 0d 0a 20 20 20 20 20 20  ns never..      
20bb0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 73        //       s
20bc0 6c 65 65 70 2e 0d 0a 20 20 20 20 20 20 20 20 20  leep...         
20bd0 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
20be0 20 20 20 69 66 20 28 73 6c 65 65 70 4d 69 6c 6c     if (sleepMill
20bf0 69 73 65 63 6f 6e 64 73 20 3d 3d 20 30 29 0d 0a  iseconds == 0)..
20c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
20c10 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
20c20 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d  .            //.
20c30 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
20c40 4e 4f 54 45 3a 20 48 6f 77 20 6d 75 63 68 20 74  NOTE: How much t
20c50 69 6d 65 20 68 61 73 20 65 6c 61 70 73 65 64 20  ime has elapsed 
20c60 73 69 6e 63 65 20 77 65 20 66 69 72 73 74 20 73  since we first s
20c70 74 61 72 74 69 6e 67 0d 0a 20 20 20 20 20 20 20  tarting..       
20c80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 77 61       //       wa
20c90 69 74 69 6e 67 3f 0d 0a 20 20 20 20 20 20 20 20  iting?..        
20ca0 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
20cb0 20 20 20 20 44 61 74 65 54 69 6d 65 20 6e 6f 77      DateTime now
20cc0 20 3d 20 44 61 74 65 54 69 6d 65 2e 55 74 63 4e   = DateTime.UtcN
20cd0 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ow;..           
20ce0 20 54 69 6d 65 53 70 61 6e 20 65 6c 61 70 73 65   TimeSpan elapse
20cf0 64 20 3d 20 6e 6f 77 2e 53 75 62 74 72 61 63 74  d = now.Subtract
20d00 28 73 74 61 72 74 29 3b 0d 0a 0d 0a 20 20 20 20  (start);....    
20d10 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
20d20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a          // NOTE:
20d30 20 41 72 65 20 77 65 20 64 6f 6e 65 20 77 61 69   Are we done wai
20d40 74 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t?..            
20d50 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
20d60 64 6f 75 62 6c 65 20 74 6f 74 61 6c 4d 69 6c 6c  double totalMill
20d70 69 73 65 63 6f 6e 64 73 20 3d 20 65 6c 61 70 73  iseconds = elaps
20d80 65 64 2e 54 6f 74 61 6c 4d 69 6c 6c 69 73 65 63  ed.TotalMillisec
20d90 6f 6e 64 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  onds;....       
20da0 20 20 20 20 20 69 66 20 28 28 74 6f 74 61 6c 4d       if ((totalM
20db0 69 6c 6c 69 73 65 63 6f 6e 64 73 20 3c 20 30 29  illiseconds < 0)
20dc0 20 7c 7c 20 2f 2a 20 54 69 6d 65 20 77 65 6e 74   || /* Time went
20dd0 20 62 61 63 6b 77 61 72 64 3f 20 2a 2f 0d 0a 20   backward? */.. 
20de0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
20df0 74 6f 74 61 6c 4d 69 6c 6c 69 73 65 63 6f 6e 64  totalMillisecond
20e00 73 20 3e 3d 20 28 64 6f 75 62 6c 65 29 74 69 6d  s >= (double)tim
20e10 65 6f 75 74 4d 69 6c 6c 69 73 65 63 6f 6e 64 73  eoutMilliseconds
20e20 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
20e30 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
20e40 20 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b     return false;
20e50 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
20e60 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
20e70 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
20e80 2f 20 4e 4f 54 45 3a 20 53 6c 65 65 70 20 66 6f  / NOTE: Sleep fo
20e90 72 20 61 20 62 69 74 20 61 6e 64 20 74 68 65 6e  r a bit and then
20ea0 20 74 72 79 20 61 67 61 69 6e 2e 0d 0a 20 20 20   try again...   
20eb0 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
20ec0 20 20 20 20 20 20 20 20 20 54 68 72 65 61 64 2e           Thread.
20ed0 53 6c 65 65 70 28 73 6c 65 65 70 4d 69 6c 6c 69  Sleep(sleepMilli
20ee0 73 65 63 6f 6e 64 73 29 3b 0d 0a 20 20 20 20 20  seconds);..     
20ef0 20 20 20 7d 0d 0a 23 65 6c 73 65 0d 0a 20 20 20     }..#else..   
20f00 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
20f10 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
20f20 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
20f30 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
20f40 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
20f50 20 20 20 2f 2f 2f 20 4c 6f 6f 6b 73 20 66 6f 72     /// Looks for
20f60 20 61 20 6b 65 79 20 69 6e 20 74 68 65 20 61 72   a key in the ar
20f70 72 61 79 20 6f 66 20 6b 65 79 2f 76 61 6c 75 65  ray of key/value
20f80 73 20 6f 66 20 74 68 65 20 70 61 72 61 6d 65 74  s of the paramet
20f90 65 72 20 73 74 72 69 6e 67 2e 20 20 49 66 20 6e  er string.  If n
20fa0 6f 74 20 66 6f 75 6e 64 2c 20 72 65 74 75 72 6e  ot found, return
20fb0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
20fc0 65 66 61 75 6c 74 20 76 61 6c 75 65 0d 0a 20 20  efault value..  
20fd0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
20fe0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
20ff0 20 6e 61 6d 65 3d 22 69 74 65 6d 73 22 3e 54 68   name="items">Th
21000 65 20 6c 69 73 74 20 74 6f 20 6c 6f 6f 6b 20 69  e list to look i
21010 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  n</param>..    /
21020 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
21030 6b 65 79 22 3e 54 68 65 20 6b 65 79 20 74 6f 20  key">The key to 
21040 66 69 6e 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  find</param>..  
21050 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21060 65 3d 22 64 65 66 56 61 6c 75 65 22 3e 54 68 65  e="defValue">The
21070 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 74   default value t
21080 6f 20 72 65 74 75 72 6e 20 69 66 20 74 68 65 20  o return if the 
21090 6b 65 79 20 69 73 20 6e 6f 74 20 66 6f 75 6e 64  key is not found
210a0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
210b0 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 76  / <returns>The v
210c0 61 6c 75 65 20 63 6f 72 72 65 73 70 6f 6e 64 69  alue correspondi
210d0 6e 67 20 74 6f 20 74 68 65 20 73 70 65 63 69 66  ng to the specif
210e0 69 65 64 20 6b 65 79 2c 20 6f 72 20 74 68 65 20  ied key, or the 
210f0 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 69 66  default value if
21100 20 6e 6f 74 20 66 6f 75 6e 64 2e 3c 2f 72 65 74   not found.</ret
21110 75 72 6e 73 3e 0d 0a 20 20 20 20 73 74 61 74 69  urns>..    stati
21120 63 20 69 6e 74 65 72 6e 61 6c 20 73 74 72 69 6e  c internal strin
21130 67 20 46 69 6e 64 4b 65 79 28 53 6f 72 74 65 64  g FindKey(Sorted
21140 4c 69 73 74 3c 73 74 72 69 6e 67 2c 20 73 74 72  List<string, str
21150 69 6e 67 3e 20 69 74 65 6d 73 2c 20 73 74 72 69  ing> items, stri
21160 6e 67 20 6b 65 79 2c 20 73 74 72 69 6e 67 20 64  ng key, string d
21170 65 66 56 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  efValue)..    {.
21180 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65  .      string re
21190 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  t;....      if (
211a0 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45  String.IsNullOrE
211b0 6d 70 74 79 28 6b 65 79 29 29 20 72 65 74 75 72  mpty(key)) retur
211c0 6e 20 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20  n defValue;..   
211d0 20 20 20 69 66 20 28 69 74 65 6d 73 2e 54 72 79     if (items.Try
211e0 47 65 74 56 61 6c 75 65 28 6b 65 79 2c 20 6f 75  GetValue(key, ou
211f0 74 20 72 65 74 29 29 20 72 65 74 75 72 6e 20 72  t ret)) return r
21200 65 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 69  et;..      if (i
21210 74 65 6d 73 2e 54 72 79 47 65 74 56 61 6c 75 65  tems.TryGetValue
21220 28 6b 65 79 2e 52 65 70 6c 61 63 65 28 22 20 22  (key.Replace(" "
21230 2c 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 29 2c  , String.Empty),
21240 20 6f 75 74 20 72 65 74 29 29 20 72 65 74 75 72   out ret)) retur
21250 6e 20 72 65 74 3b 0d 0a 20 20 20 20 20 20 69 66  n ret;..      if
21260 20 28 69 74 65 6d 73 2e 54 72 79 47 65 74 56 61   (items.TryGetVa
21270 6c 75 65 28 6b 65 79 2e 52 65 70 6c 61 63 65 28  lue(key.Replace(
21280 22 20 22 2c 20 22 5f 22 29 2c 20 6f 75 74 20 72  " ", "_"), out r
21290 65 74 29 29 20 72 65 74 75 72 6e 20 72 65 74 3b  et)) return ret;
212a0 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  ....      return
212b0 20 64 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20   defValue;..    
212c0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
212d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
212e0 41 74 74 65 6d 70 74 73 20 74 6f 20 63 6f 6e 76  Attempts to conv
212f0 65 72 74 20 74 68 65 20 73 74 72 69 6e 67 20 76  ert the string v
21300 61 6c 75 65 20 74 6f 20 61 6e 20 65 6e 75 6d 65  alue to an enume
21310 72 61 74 65 64 20 76 61 6c 75 65 20 6f 66 20 74  rated value of t
21320 68 65 20 73 70 65 63 69 66 69 65 64 20 74 79 70  he specified typ
21330 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
21340 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
21350 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 79 70  <param name="typ
21360 65 22 3e 54 68 65 20 65 6e 75 6d 65 72 61 74 65  e">The enumerate
21370 64 20 74 79 70 65 20 74 6f 20 63 6f 6e 76 65 72  d type to conver
21380 74 20 74 68 65 20 73 74 72 69 6e 67 20 76 61 6c  t the string val
21390 75 65 20 74 6f 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ue to.</param>..
213a0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
213b0 61 6d 65 3d 22 76 61 6c 75 65 22 3e 54 68 65 20  ame="value">The 
213c0 73 74 72 69 6e 67 20 76 61 6c 75 65 20 74 6f 20  string value to 
213d0 62 65 20 63 6f 6e 76 65 72 74 65 64 2e 3c 2f 70  be converted.</p
213e0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
213f0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 67 6e 6f  param name="igno
21400 72 65 43 61 73 65 22 3e 4e 6f 6e 2d 7a 65 72 6f  reCase">Non-zero
21410 20 74 6f 20 6d 61 6b 65 20 74 68 65 20 63 6f 6e   to make the con
21420 76 65 72 73 69 6f 6e 20 63 61 73 65 2d 69 6e 73  version case-ins
21430 65 6e 73 69 74 69 76 65 2e 3c 2f 70 61 72 61 6d  ensitive.</param
21440 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
21450 72 6e 73 3e 54 68 65 20 65 6e 75 6d 65 72 61 74  rns>The enumerat
21460 65 64 20 76 61 6c 75 65 20 75 70 6f 6e 20 73 75  ed value upon su
21470 63 63 65 73 73 20 6f 72 20 6e 75 6c 6c 20 75 70  ccess or null up
21480 6f 6e 20 65 72 72 6f 72 2e 3c 2f 72 65 74 75 72  on error.</retur
21490 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
214a0 6c 20 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20  l static object 
214b0 54 72 79 50 61 72 73 65 45 6e 75 6d 28 0d 0a 20  TryParseEnum(.. 
214c0 20 20 20 20 20 20 20 54 79 70 65 20 74 79 70 65         Type type
214d0 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
214e0 67 20 76 61 6c 75 65 2c 0d 0a 20 20 20 20 20 20  g value,..      
214f0 20 20 62 6f 6f 6c 20 69 67 6e 6f 72 65 43 61 73    bool ignoreCas
21500 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  e..        )..  
21510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
21520 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f  (!String.IsNullO
21530 72 45 6d 70 74 79 28 76 61 6c 75 65 29 29 0d 0a  rEmpty(value))..
21540 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21550 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
21560 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
21570 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
21580 6e 20 45 6e 75 6d 2e 50 61 72 73 65 28 74 79 70  n Enum.Parse(typ
21590 65 2c 20 76 61 6c 75 65 2c 20 69 67 6e 6f 72 65  e, value, ignore
215a0 43 61 73 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  Case);..        
215b0 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
215c0 20 20 20 63 61 74 63 68 0d 0a 20 20 20 20 20 20     catch..      
215d0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
215e0 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
215f0 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
21600 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
21610 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  }....        ret
21620 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 7d  urn null;..    }
21630 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
21640 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  mary>..    /// A
21650 74 74 65 6d 70 74 73 20 74 6f 20 63 6f 6e 76 65  ttempts to conve
21660 72 74 20 61 6e 20 69 6e 70 75 74 20 73 74 72 69  rt an input stri
21670 6e 67 20 69 6e 74 6f 20 61 20 62 79 74 65 20 76  ng into a byte v
21680 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  alue...    /// <
21690 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
216a0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
216b0 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  value">..    ///
216c0 20 54 68 65 20 73 74 72 69 6e 67 20 76 61 6c 75   The string valu
216d0 65 20 74 6f 20 62 65 20 63 6f 6e 76 65 72 74 65  e to be converte
216e0 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
216f0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
21700 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 79 6c 65  aram name="style
21710 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
21720 6e 75 6d 62 65 72 20 73 74 79 6c 65 73 20 74 6f  number styles to
21730 20 75 73 65 20 66 6f 72 20 74 68 65 20 63 6f 6e   use for the con
21740 76 65 72 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  version...    //
21750 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
21760 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
21770 22 72 65 73 75 6c 74 22 3e 0d 0a 20 20 20 20 2f  "result">..    /
21780 2f 2f 20 55 70 6f 6e 20 73 75 63 65 73 73 2c 20  // Upon sucess, 
21790 74 68 69 73 20 77 69 6c 6c 20 63 6f 6e 74 61 69  this will contai
217a0 6e 20 74 68 65 20 70 61 72 73 65 64 20 62 79 74  n the parsed byt
217b0 65 20 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f  e value...    //
217c0 2f 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 20  / Upon failure, 
217d0 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 69  the value of thi
217e0 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 75  s parameter is u
217f0 6e 64 65 66 69 6e 65 64 2e 0d 0a 20 20 20 20 2f  ndefined...    /
21800 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
21810 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
21820 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
21830 20 75 70 6f 6e 20 73 75 63 63 65 73 73 3b 20 7a   upon success; z
21840 65 72 6f 20 6f 6e 20 66 61 69 6c 75 72 65 2e 0d  ero on failure..
21850 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
21860 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
21870 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 54 72 79   static bool Try
21880 50 61 72 73 65 42 79 74 65 28 0d 0a 20 20 20 20  ParseByte(..    
21890 20 20 20 20 73 74 72 69 6e 67 20 76 61 6c 75 65      string value
218a0 2c 0d 0a 20 20 20 20 20 20 20 20 4e 75 6d 62 65  ,..        Numbe
218b0 72 53 74 79 6c 65 73 20 73 74 79 6c 65 2c 0d 0a  rStyles style,..
218c0 20 20 20 20 20 20 20 20 6f 75 74 20 62 79 74 65          out byte
218d0 20 72 65 73 75 6c 74 0d 0a 20 20 20 20 20 20 20   result..       
218e0 20 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21   )..    {..#if !
218f0 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
21900 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
21910 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 2e 54     return byte.T
21920 72 79 50 61 72 73 65 28 76 61 6c 75 65 2c 20 73  ryParse(value, s
21930 74 79 6c 65 2c 20 6e 75 6c 6c 2c 20 6f 75 74 20  tyle, null, out 
21940 72 65 73 75 6c 74 29 3b 0d 0a 23 65 6c 73 65 0d  result);..#else.
21950 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
21960 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
21970 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 62 79       result = by
21980 74 65 2e 50 61 72 73 65 28 76 61 6c 75 65 2c 20  te.Parse(value, 
21990 73 74 79 6c 65 29 3b 0d 0a 20 20 20 20 20 20 20  style);..       
219a0 20 20 20 20 20 72 65 74 75 72 6e 20 74 72 75 65       return true
219b0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
219c0 20 20 20 20 20 20 63 61 74 63 68 0d 0a 20 20 20        catch..   
219d0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
219e0 20 20 20 20 72 65 73 75 6c 74 20 3d 20 30 3b 0d      result = 0;.
219f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
21a00 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20  urn false;..    
21a10 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20      }..#endif.. 
21a20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
21a30 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
21a40 2f 2f 20 43 68 61 6e 67 65 20 61 20 63 6f 6e 66  // Change a conf
21a50 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e  iguration option
21a60 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65 20 64   value for the d
21a70 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f  atabase...    //
21a80 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
21a90 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
21aa0 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20 20 20  e="option">..   
21ab0 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62 61 73   /// The databas
21ac0 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
21ad0 6f 70 74 69 6f 6e 20 74 6f 20 63 68 61 6e 67 65  option to change
21ae0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
21af0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
21b00 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65 22  ram name="value"
21b10 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
21b20 65 77 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  ew value for the
21b30 20 73 70 65 63 69 66 69 65 64 20 63 6f 6e 66 69   specified confi
21b40 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 2e  guration option.
21b50 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
21b60 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76  m>..    public v
21b70 6f 69 64 20 53 65 74 43 6f 6e 66 69 67 75 72 61  oid SetConfigura
21b80 74 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20 20  tionOption(..   
21b90 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
21ba0 67 44 62 4f 70 73 45 6e 75 6d 20 6f 70 74 69 6f  gDbOpsEnum optio
21bb0 6e 2c 0d 0a 20 20 20 20 20 20 20 20 6f 62 6a 65  n,..        obje
21bc0 63 74 20 76 61 6c 75 65 0d 0a 20 20 20 20 20 20  ct value..      
21bd0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
21be0 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
21bf0 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
21c00 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
21c10 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
21c20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
21c30 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
21c40 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
21c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
21c60 22 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  "Database connec
21c70 74 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66  tion not valid f
21c80 6f 72 20 63 68 61 6e 67 69 6e 67 20 61 20 63 6f  or changing a co
21c90 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
21ca0 6f 6e 2e 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  on.");..        
21cb0 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
21cc0 28 28 6f 70 74 69 6f 6e 20 3d 3d 20 53 51 4c 69  ((option == SQLi
21cd0 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75  teConfigDbOpsEnu
21ce0 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49  m.SQLITE_DBCONFI
21cf0 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f 45 58  G_ENABLE_LOAD_EX
21d00 54 45 4e 53 49 4f 4e 29 20 26 26 0d 0a 20 20 20  TENSION) &&..   
21d10 20 20 20 20 20 20 20 20 20 28 28 5f 66 6c 61 67           ((_flag
21d20 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
21d30 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 61 64  tionFlags.NoLoad
21d40 45 78 74 65 6e 73 69 6f 6e 29 20 3d 3d 20 53 51  Extension) == SQ
21d50 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
21d60 61 67 73 2e 4e 6f 4c 6f 61 64 45 78 74 65 6e 73  ags.NoLoadExtens
21d70 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b  ion))..        {
21d80 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
21d90 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
21da0 63 65 70 74 69 6f 6e 28 22 4c 6f 61 64 69 6e 67  ception("Loading
21db0 20 65 78 74 65 6e 73 69 6f 6e 73 20 69 73 20 64   extensions is d
21dc0 69 73 61 62 6c 65 64 20 66 6f 72 20 74 68 69 73  isabled for this
21dd0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
21de0 74 69 6f 6e 2e 22 29 3b 0d 0a 20 20 20 20 20 20  tion.");..      
21df0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53    }....        S
21e00 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
21e10 63 20 3d 20 5f 73 71 6c 2e 53 65 74 43 6f 6e 66  c = _sql.SetConf
21e20 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f 6e 28  igurationOption(
21e30 6f 70 74 69 6f 6e 2c 20 76 61 6c 75 65 29 3b 0d  option, value);.
21e40 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72  ...        if (r
21e50 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
21e60 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
21e70 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
21e80 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
21e90 72 63 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  rc, null);..    
21ea0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
21eb0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
21ec0 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
21ed0 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e 20 6c 6f  led extension lo
21ee0 61 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ading...    /// 
21ef0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
21f00 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
21f10 22 65 6e 61 62 6c 65 22 3e 0d 0a 20 20 20 20 2f  "enable">..    /
21f20 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  // True to enabl
21f30 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74  e loading of ext
21f40 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74  ensions, false t
21f50 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20  o disable...    
21f60 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
21f70 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 45 6e    public void En
21f80 61 62 6c 65 45 78 74 65 6e 73 69 6f 6e 73 28 0d  ableExtensions(.
21f90 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 65 6e  .        bool en
21fa0 61 62 6c 65 0d 0a 20 20 20 20 20 20 20 20 29 0d  able..        ).
21fb0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
21fc0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
21fd0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
21fe0 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
21ff0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
22000 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
22010 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 48  ationException(H
22020 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72  elperMethods.Str
22030 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20  ingFormat(..    
22040 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
22050 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
22060 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
22070 20 20 20 20 20 20 20 20 20 22 44 61 74 61 62 61           "Databa
22080 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f  se connection no
22090 74 20 76 61 6c 69 64 20 66 6f 72 20 7b 30 7d 20  t valid for {0} 
220a0 65 78 74 65 6e 73 69 6f 6e 73 2e 22 2c 0d 0a 20  extensions.",.. 
220b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
220c0 6e 61 62 6c 65 20 3f 20 22 65 6e 61 62 6c 69 6e  nable ? "enablin
220d0 67 22 20 3a 20 22 64 69 73 61 62 6c 69 6e 67 22  g" : "disabling"
220e0 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  ));....        i
220f0 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
22100 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
22110 67 73 2e 4e 6f 4c 6f 61 64 45 78 74 65 6e 73 69  gs.NoLoadExtensi
22120 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  on) == SQLiteCon
22130 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c  nectionFlags.NoL
22140 6f 61 64 45 78 74 65 6e 73 69 6f 6e 29 0d 0a 20  oadExtension).. 
22150 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
22160 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
22170 74 69 6f 6e 28 22 4c 6f 61 64 69 6e 67 20 65 78  tion("Loading ex
22180 74 65 6e 73 69 6f 6e 73 20 69 73 20 64 69 73 61  tensions is disa
22190 62 6c 65 64 20 66 6f 72 20 74 68 69 73 20 64 61  bled for this da
221a0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
221b0 6e 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  n.");....       
221c0 20 5f 73 71 6c 2e 53 65 74 4c 6f 61 64 45 78 74   _sql.SetLoadExt
221d0 65 6e 73 69 6f 6e 28 65 6e 61 62 6c 65 29 3b 0d  ension(enable);.
221e0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
221f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
22200 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c   /// Loads a SQL
22210 69 74 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69  ite extension li
22220 62 72 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e  brary from the n
22230 61 6d 65 64 20 64 79 6e 61 6d 69 63 20 6c 69 6e  amed dynamic lin
22240 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65 2e 0d  k library file..
22250 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
22260 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
22270 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61  ram name="fileNa
22280 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  me">..    /// Th
22290 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79  e name of the dy
222a0 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61  namic link libra
222b0 72 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69  ry file containi
222c0 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ng the extension
222d0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
222e0 61 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  am>..    public 
222f0 76 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69  void LoadExtensi
22300 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72  on(..        str
22310 69 6e 67 20 66 69 6c 65 4e 61 6d 65 0d 0a 20 20  ing fileName..  
22320 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
22330 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
22340 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
22350 20 20 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f      LoadExtensio
22360 6e 28 66 69 6c 65 4e 61 6d 65 2c 20 6e 75 6c 6c  n(fileName, null
22370 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
22380 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
22390 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20      /// Loads a 
223a0 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
223b0 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68   library from th
223c0 65 20 6e 61 6d 65 64 20 64 79 6e 61 6d 69 63 20  e named dynamic 
223d0 6c 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c  link library fil
223e0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
223f0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
22400 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c  <param name="fil
22410 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  eName">..    ///
22420 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
22430 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69   dynamic link li
22440 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61  brary file conta
22450 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73  ining the extens
22460 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
22470 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
22480 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f  <param name="pro
22490 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  cName">..    ///
224a0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
224b0 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69   exported functi
224c0 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69  on used to initi
224d0 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73  alize the extens
224e0 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  ion...    /// If
224f0 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75   null, the defau
22500 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65  lt "sqlite3_exte
22510 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c  nsion_init" will
22520 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f   be used...    /
22530 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
22540 20 70 75 62 6c 69 63 20 76 6f 69 64 20 4c 6f 61   public void Loa
22550 64 45 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20  dExtension(..   
22560 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
22570 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Name,..        s
22580 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d 65 0d 0a  tring procName..
22590 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
225a0 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b 44  ..        CheckD
225b0 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20  isposed();....  
225c0 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
225d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
225e0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
225f0 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
22600 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
22610 20 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61             "Data
22620 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
22630 6e 6f 74 20 76 61 6c 69 64 20 66 6f 72 20 6c 6f  not valid for lo
22640 61 64 69 6e 67 20 65 78 74 65 6e 73 69 6f 6e 73  ading extensions
22650 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
22660 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
22670 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
22680 61 67 73 2e 4e 6f 4c 6f 61 64 45 78 74 65 6e 73  ags.NoLoadExtens
22690 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ion) == SQLiteCo
226a0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
226b0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 29 0d 0a  LoadExtension)..
226c0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
226d0 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
226e0 70 74 69 6f 6e 28 22 4c 6f 61 64 69 6e 67 20 65  ption("Loading e
226f0 78 74 65 6e 73 69 6f 6e 73 20 69 73 20 64 69 73  xtensions is dis
22700 61 62 6c 65 64 20 66 6f 72 20 74 68 69 73 20 64  abled for this d
22710 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
22720 6f 6e 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  on.");....      
22730 20 20 5f 73 71 6c 2e 4c 6f 61 64 45 78 74 65 6e    _sql.LoadExten
22740 73 69 6f 6e 28 66 69 6c 65 4e 61 6d 65 2c 20 70  sion(fileName, p
22750 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  rocName);..    }
22760 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
22770 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
22780 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
22790 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65 61 74 65  ..    /// Create
227a0 73 20 61 20 64 69 73 70 6f 73 61 62 6c 65 20 6d  s a disposable m
227b0 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67  odule containing
227c0 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74   the implementat
227d0 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c  ion of a virtual
227e0 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c 65 2e  ..    /// table.
227f0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
22800 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
22810 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c  aram name="modul
22820 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
22830 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 74   module object t
22840 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 63  o be used when c
22850 72 65 61 74 69 6e 67 20 74 68 65 20 64 69 73 70  reating the disp
22860 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a  osable module...
22870 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
22880 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  ..    public voi
22890 64 20 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 0d  d CreateModule(.
228a0 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4d  .        SQLiteM
228b0 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  odule module..  
228c0 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
228d0 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
228e0 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
228f0 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20      if (_sql == 
22900 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
22910 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
22920 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
22930 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
22940 20 20 20 20 20 20 20 20 20 22 44 61 74 61 62 61           "Databa
22950 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f  se connection no
22960 74 20 76 61 6c 69 64 20 66 6f 72 20 63 72 65 61  t valid for crea
22970 74 69 6e 67 20 6d 6f 64 75 6c 65 73 2e 22 29 3b  ting modules.");
22980 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
22990 28 5f 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65  (_flags & SQLite
229a0 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
229b0 4e 6f 43 72 65 61 74 65 4d 6f 64 75 6c 65 29 20  NoCreateModule) 
229c0 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
229d0 69 6f 6e 46 6c 61 67 73 2e 4e 6f 43 72 65 61 74  ionFlags.NoCreat
229e0 65 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20  eModule)..      
229f0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
22a00 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
22a10 22 43 72 65 61 74 69 6e 67 20 6d 6f 64 75 6c 65  "Creating module
22a20 73 20 69 73 20 64 69 73 61 62 6c 65 64 20 66 6f  s is disabled fo
22a30 72 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  r this database 
22a40 63 6f 6e 6e 65 63 74 69 6f 6e 2e 22 29 3b 0d 0a  connection.");..
22a50 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 43  ..        _sql.C
22a60 72 65 61 74 65 4d 6f 64 75 6c 65 28 6d 6f 64 75  reateModule(modu
22a70 6c 65 2c 20 5f 66 6c 61 67 73 29 3b 0d 0a 20 20  le, _flags);..  
22a80 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
22a90 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
22aa0 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 72 73 65 73  ..    /// Parses
22ab0 20 61 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69   a string contai
22ac0 6e 69 6e 67 20 61 20 73 65 71 75 65 6e 63 65 20  ning a sequence 
22ad0 6f 66 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  of zero or more 
22ae0 68 65 78 61 64 65 63 69 6d 61 6c 0d 0a 20 20 20  hexadecimal..   
22af0 20 2f 2f 2f 20 65 6e 63 6f 64 65 64 20 62 79 74   /// encoded byt
22b00 65 20 76 61 6c 75 65 73 20 61 6e 64 20 72 65 74  e values and ret
22b10 75 72 6e 73 20 74 68 65 20 72 65 73 75 6c 74 69  urns the resulti
22b20 6e 67 20 62 79 74 65 20 61 72 72 61 79 2e 20 20  ng byte array.  
22b30 54 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 22 30 78  The..    /// "0x
22b40 22 20 70 72 65 66 69 78 20 69 73 20 6e 6f 74 20  " prefix is not 
22b50 61 6c 6c 6f 77 65 64 20 6f 6e 20 74 68 65 20 69  allowed on the i
22b60 6e 70 75 74 20 73 74 72 69 6e 67 2e 0d 0a 20 20  nput string...  
22b70 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
22b80 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
22b90 20 6e 61 6d 65 3d 22 74 65 78 74 22 3e 0d 0a 20   name="text">.. 
22ba0 20 20 20 2f 2f 2f 20 54 68 65 20 69 6e 70 75 74     /// The input
22bb0 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
22bc0 6e 67 20 7a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  ng zero or more 
22bd0 68 65 78 61 64 65 63 69 6d 61 6c 20 65 6e 63 6f  hexadecimal enco
22be0 64 65 64 20 62 79 74 65 0d 0a 20 20 20 20 2f 2f  ded byte..    //
22bf0 2f 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 2f  / values...    /
22c00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
22c10 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
22c20 20 20 20 20 2f 2f 2f 20 41 20 62 79 74 65 20 61      /// A byte a
22c30 72 72 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20  rray containing 
22c40 74 68 65 20 70 61 72 73 65 64 20 62 79 74 65 20  the parsed byte 
22c50 76 61 6c 75 65 73 20 6f 72 20 6e 75 6c 6c 20 69  values or null i
22c60 66 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20  f an error..    
22c70 2f 2f 2f 20 77 61 73 20 65 6e 63 6f 75 6e 74 65  /// was encounte
22c80 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
22c90 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
22ca0 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 79  ternal static by
22cb0 74 65 5b 5d 20 46 72 6f 6d 48 65 78 53 74 72 69  te[] FromHexStri
22cc0 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72  ng(..        str
22cd0 69 6e 67 20 74 65 78 74 0d 0a 20 20 20 20 20 20  ing text..      
22ce0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
22cf0 20 20 20 20 73 74 72 69 6e 67 20 65 72 72 6f 72      string error
22d00 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
22d10 20 20 20 20 72 65 74 75 72 6e 20 46 72 6f 6d 48      return FromH
22d20 65 78 53 74 72 69 6e 67 28 74 65 78 74 2c 20 72  exString(text, r
22d30 65 66 20 65 72 72 6f 72 29 3b 0d 0a 20 20 20 20  ef error);..    
22d40 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
22d50 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
22d60 43 72 65 61 74 65 73 20 61 6e 64 20 72 65 74 75  Creates and retu
22d70 72 6e 73 20 61 20 73 74 72 69 6e 67 20 63 6f 6e  rns a string con
22d80 74 61 69 6e 69 6e 67 20 74 68 65 20 68 65 78 61  taining the hexa
22d90 64 65 63 69 6d 61 6c 20 65 6e 63 6f 64 65 64 20  decimal encoded 
22da0 62 79 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61  byte..    /// va
22db0 6c 75 65 73 20 66 72 6f 6d 20 74 68 65 20 69 6e  lues from the in
22dc0 70 75 74 20 61 72 72 61 79 2e 0d 0a 20 20 20 20  put array...    
22dd0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
22de0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
22df0 61 6d 65 3d 22 61 72 72 61 79 22 3e 0d 0a 20 20  ame="array">..  
22e00 20 20 2f 2f 2f 20 54 68 65 20 69 6e 70 75 74 20    /// The input 
22e10 61 72 72 61 79 20 6f 66 20 62 79 74 65 73 2e 0d  array of bytes..
22e20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
22e30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
22e40 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  rns>..    /// Th
22e50 65 20 72 65 73 75 6c 74 69 6e 67 20 73 74 72 69  e resulting stri
22e60 6e 67 20 6f 72 20 6e 75 6c 6c 20 75 70 6f 6e 20  ng or null upon 
22e70 66 61 69 6c 75 72 65 2e 0d 0a 20 20 20 20 2f 2f  failure...    //
22e80 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
22e90 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
22ea0 63 20 73 74 72 69 6e 67 20 54 6f 48 65 78 53 74  c string ToHexSt
22eb0 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20 62  ring(..        b
22ec0 79 74 65 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20  yte[] array..   
22ed0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
22ee0 20 20 20 20 20 20 20 69 66 20 28 61 72 72 61 79         if (array
22ef0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
22f00 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
22f10 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ll;....        S
22f20 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
22f30 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
22f40 42 75 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20  Builder();....  
22f50 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 67 74 68        int length
22f60 20 3d 20 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b   = array.Length;
22f70 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66 6f 72 20  ....        for 
22f80 28 69 6e 74 20 69 6e 64 65 78 20 3d 20 30 3b 20  (int index = 0; 
22f90 69 6e 64 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20  index < length; 
22fa0 69 6e 64 65 78 2b 2b 29 0d 0a 23 69 66 20 4e 45  index++)..#if NE
22fb0 54 5f 43 4f 4d 50 41 43 54 5f 32 30 0d 0a 20 20  T_COMPACT_20..  
22fc0 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
22fd0 2e 41 70 70 65 6e 64 28 48 65 6c 70 65 72 4d 65  .Append(HelperMe
22fe0 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
22ff0 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
23000 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
23010 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
23020 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
23030 20 20 20 20 22 7b 30 3a 78 32 7d 22 2c 20 61 72      "{0:x2}", ar
23040 72 61 79 5b 69 6e 64 65 78 5d 29 29 3b 0d 0a 23  ray[index]));..#
23050 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
23060 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 46    result.AppendF
23070 6f 72 6d 61 74 28 22 7b 30 3a 78 32 7d 22 2c 20  ormat("{0:x2}", 
23080 61 72 72 61 79 5b 69 6e 64 65 78 5d 29 3b 0d 0a  array[index]);..
23090 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20  #endif....      
230a0 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e    return result.
230b0 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20  ToString();..   
230c0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
230d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
230e0 20 50 61 72 73 65 73 20 61 20 73 74 72 69 6e 67   Parses a string
230f0 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61 20 73 65   containing a se
23100 71 75 65 6e 63 65 20 6f 66 20 7a 65 72 6f 20 6f  quence of zero o
23110 72 20 6d 6f 72 65 20 68 65 78 61 64 65 63 69 6d  r more hexadecim
23120 61 6c 0d 0a 20 20 20 20 2f 2f 2f 20 65 6e 63 6f  al..    /// enco
23130 64 65 64 20 62 79 74 65 20 76 61 6c 75 65 73 20  ded byte values 
23140 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68 65 20  and returns the 
23150 72 65 73 75 6c 74 69 6e 67 20 62 79 74 65 20 61  resulting byte a
23160 72 72 61 79 2e 20 20 54 68 65 0d 0a 20 20 20 20  rray.  The..    
23170 2f 2f 2f 20 22 30 78 22 20 70 72 65 66 69 78 20  /// "0x" prefix 
23180 69 73 20 6e 6f 74 20 61 6c 6c 6f 77 65 64 20 6f  is not allowed o
23190 6e 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69  n the input stri
231a0 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ng...    /// </s
231b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
231c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 65   <param name="te
231d0 78 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  xt">..    /// Th
231e0 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 63  e input string c
231f0 6f 6e 74 61 69 6e 69 6e 67 20 7a 65 72 6f 20 6f  ontaining zero o
23200 72 20 6d 6f 72 65 20 68 65 78 61 64 65 63 69 6d  r more hexadecim
23210 61 6c 20 65 6e 63 6f 64 65 64 20 62 79 74 65 0d  al encoded byte.
23220 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e  .    /// values.
23230 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
23240 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
23250 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
23260 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 66  ..    /// Upon f
23270 61 69 6c 75 72 65 2c 20 74 68 69 73 20 77 69 6c  ailure, this wil
23280 6c 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  l contain an app
23290 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
232a0 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
232b0 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
232c0 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
232d0 20 20 2f 2f 2f 20 41 20 62 79 74 65 20 61 72 72    /// A byte arr
232e0 61 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ay containing th
232f0 65 20 70 61 72 73 65 64 20 62 79 74 65 20 76 61  e parsed byte va
23300 6c 75 65 73 20 6f 72 20 6e 75 6c 6c 20 69 66 20  lues or null if 
23310 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 2f 2f  an error..    //
23320 2f 20 77 61 73 20 65 6e 63 6f 75 6e 74 65 72 65  / was encountere
23330 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  d...    /// </re
23340 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
23350 61 74 65 20 73 74 61 74 69 63 20 62 79 74 65 5b  ate static byte[
23360 5d 20 46 72 6f 6d 48 65 78 53 74 72 69 6e 67 28  ] FromHexString(
23370 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
23380 20 74 65 78 74 2c 0d 0a 20 20 20 20 20 20 20 20   text,..        
23390 72 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72  ref string error
233a0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
233b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
233c0 74 65 78 74 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  text == null).. 
233d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
233e0 20 20 20 20 20 20 65 72 72 6f 72 20 3d 20 22 73        error = "s
233f0 74 72 69 6e 67 20 69 73 20 6e 75 6c 6c 22 3b 0d  tring is null";.
23400 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
23410 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  urn null;..     
23420 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
23430 69 66 20 28 74 65 78 74 2e 4c 65 6e 67 74 68 20  if (text.Length 
23440 25 20 32 20 21 3d 20 30 29 0d 0a 20 20 20 20 20  % 2 != 0)..     
23450 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23460 20 20 65 72 72 6f 72 20 3d 20 22 73 74 72 69 6e    error = "strin
23470 67 20 63 6f 6e 74 61 69 6e 73 20 61 6e 20 6f 64  g contains an od
23480 64 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 72  d number of char
23490 61 63 74 65 72 73 22 3b 0d 0a 20 20 20 20 20 20  acters";..      
234a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
234b0 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  l;..        }...
234c0 0a 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20  .        byte[] 
234d0 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 62 79 74  result = new byt
234e0 65 5b 74 65 78 74 2e 4c 65 6e 67 74 68 20 2f 20  e[text.Length / 
234f0 32 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 66  2];....        f
23500 6f 72 20 28 69 6e 74 20 69 6e 64 65 78 20 3d 20  or (int index = 
23510 30 3b 20 69 6e 64 65 78 20 3c 20 74 65 78 74 2e  0; index < text.
23520 4c 65 6e 67 74 68 3b 20 69 6e 64 65 78 20 2b 3d  Length; index +=
23530 20 32 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   2)..        {..
23540 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69              stri
23550 6e 67 20 76 61 6c 75 65 20 3d 20 74 65 78 74 2e  ng value = text.
23560 53 75 62 73 74 72 69 6e 67 28 69 6e 64 65 78 2c  Substring(index,
23570 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   2);....        
23580 20 20 20 20 69 66 20 28 21 54 72 79 50 61 72 73      if (!TryPars
23590 65 42 79 74 65 28 76 61 6c 75 65 2c 0d 0a 20 20  eByte(value,..  
235a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
235b0 20 20 4e 75 6d 62 65 72 53 74 79 6c 65 73 2e 48    NumberStyles.H
235c0 65 78 4e 75 6d 62 65 72 2c 20 6f 75 74 20 72 65  exNumber, out re
235d0 73 75 6c 74 5b 69 6e 64 65 78 20 2f 20 32 5d 29  sult[index / 2])
235e0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
235f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23600 20 20 65 72 72 6f 72 20 3d 20 48 65 6c 70 65 72    error = Helper
23610 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
23620 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
23630 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
23640 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
23650 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
23660 20 20 20 20 20 20 20 20 20 20 20 20 22 73 74 72              "str
23670 69 6e 67 20 63 6f 6e 74 61 69 6e 73 20 5c 22 7b  ing contains \"{
23680 30 7d 5c 22 2c 20 77 68 69 63 68 20 63 61 6e 6e  0}\", which cann
23690 6f 74 20 62 65 20 63 6f 6e 76 65 72 74 65 64 20  ot be converted 
236a0 74 6f 20 61 20 62 79 74 65 20 76 61 6c 75 65 22  to a byte value"
236b0 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
236c0 20 20 20 20 20 20 20 76 61 6c 75 65 29 3b 0d 0a         value);..
236d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
236e0 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
236f0 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
23700 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
23710 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
23720 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  t;..    }....   
23730 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
23740 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74      /// This met
23750 68 6f 64 20 66 69 67 75 72 65 73 20 6f 75 74 20  hod figures out 
23760 77 68 61 74 20 74 68 65 20 64 65 66 61 75 6c 74  what the default
23770 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c   connection pool
23780 20 73 65 74 74 69 6e 67 20 73 68 6f 75 6c 64 0d   setting should.
23790 0a 20 20 20 20 2f 2f 2f 20 62 65 20 62 61 73 65  .    /// be base
237a0 64 20 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74  d on the connect
237b0 69 6f 6e 20 66 6c 61 67 73 2e 20 20 57 68 65 6e  ion flags.  When
237c0 20 70 72 65 73 65 6e 74 2c 20 74 68 65 20 22 50   present, the "P
237d0 6f 6f 6c 69 6e 67 22 20 63 6f 6e 6e 65 63 74 69  ooling" connecti
237e0 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69  on..    /// stri
237f0 6e 67 20 70 72 6f 70 65 72 74 79 20 76 61 6c 75  ng property valu
23800 65 20 61 6c 77 61 79 73 20 6f 76 65 72 72 69 64  e always overrid
23810 65 73 20 74 68 65 20 76 61 6c 75 65 20 72 65 74  es the value ret
23820 75 72 6e 65 64 20 62 79 20 74 68 69 73 20 6d 65  urned by this me
23830 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  thod...    /// <
23840 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
23850 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
23860 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
23870 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
23880 20 70 6f 6f 6c 20 73 68 6f 75 6c 64 20 62 65 20   pool should be 
23890 65 6e 61 62 6c 65 64 20 62 79 20 64 65 66 61 75  enabled by defau
238a0 6c 74 3b 20 6f 74 68 65 72 77 69 73 65 2c 0d 0a  lt; otherwise,..
238b0 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 2e 0d 0a 20      /// zero... 
238c0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
238d0 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62  >..    private b
238e0 6f 6f 6c 20 47 65 74 44 65 66 61 75 6c 74 50 6f  ool GetDefaultPo
238f0 6f 6c 69 6e 67 28 29 0d 0a 20 20 20 20 7b 0d 0a  oling()..    {..
23900 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73          bool res
23910 75 6c 74 20 3d 20 44 65 66 61 75 6c 74 50 6f 6f  ult = DefaultPoo
23920 6c 69 6e 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ling;....       
23930 20 69 66 20 28 72 65 73 75 6c 74 29 20 2f 2a 20   if (result) /* 
23940 4e 4f 54 45 3a 20 54 72 75 65 20 62 72 61 6e 63  NOTE: True branc
23950 68 20 6e 6f 74 20 72 65 61 63 68 65 64 20 69 6e  h not reached in
23960 20 74 68 65 20 64 65 66 61 75 6c 74 20 62 75 69   the default bui
23970 6c 64 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  ld. */..        
23980 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
23990 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  f ((_flags & SQL
239a0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
239b0 67 73 2e 4e 6f 43 6f 6e 6e 65 63 74 69 6f 6e 50  gs.NoConnectionP
239c0 6f 6f 6c 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ool) == SQLiteCo
239d0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
239e0 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 29 0d  ConnectionPool).
239f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
23a00 20 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b   result = false;
23a10 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
23a20 69 66 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51  if ((_flags & SQ
23a30 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
23a40 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
23a50 6e 50 6f 6f 6c 29 20 3d 3d 20 53 51 4c 69 74 65  nPool) == SQLite
23a60 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
23a70 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  UseConnectionPoo
23a80 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
23a90 20 20 20 20 72 65 73 75 6c 74 20 3d 20 74 72 75      result = tru
23aa0 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
23ab0 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
23ac0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
23ad0 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67 73 20      if ((_flags 
23ae0 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
23af0 6f 6e 46 6c 61 67 73 2e 55 73 65 43 6f 6e 6e 65  onFlags.UseConne
23b00 63 74 69 6f 6e 50 6f 6f 6c 29 20 3d 3d 20 53 51  ctionPool) == SQ
23b10 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
23b20 61 67 73 2e 55 73 65 43 6f 6e 6e 65 63 74 69 6f  ags.UseConnectio
23b30 6e 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20  nPool)..        
23b40 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
23b50 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20   true;....      
23b60 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61 67        if ((_flag
23b70 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
23b80 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 43 6f 6e 6e  tionFlags.NoConn
23b90 65 63 74 69 6f 6e 50 6f 6f 6c 29 20 3d 3d 20 53  ectionPool) == S
23ba0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
23bb0 6c 61 67 73 2e 4e 6f 43 6f 6e 6e 65 63 74 69 6f  lags.NoConnectio
23bc0 6e 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 20 20  nPool)..        
23bd0 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
23be0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20   false;..       
23bf0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65   }....        re
23c00 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
23c10 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
23c20 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
23c30 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74 68 65  / Determines the
23c40 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 6f   transaction iso
23c50 6c 61 74 69 6f 6e 20 6c 65 76 65 6c 20 74 68 61  lation level tha
23c60 74 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64  t should be used
23c70 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65   by..    /// the
23c80 20 63 61 6c 6c 65 72 2c 20 70 72 69 6d 61 72 69   caller, primari
23c90 6c 79 20 62 61 73 65 64 20 75 70 6f 6e 20 74 68  ly based upon th
23ca0 65 20 6f 6e 65 20 73 70 65 63 69 66 69 65 64 20  e one specified 
23cb0 62 79 20 74 68 65 20 63 61 6c 6c 65 72 2e 0d 0a  by the caller...
23cc0 20 20 20 20 2f 2f 2f 20 49 66 20 6d 61 70 70 69      /// If mappi
23cd0 6e 67 20 6f 66 20 74 72 61 6e 73 61 63 74 69 6f  ng of transactio
23ce0 6e 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65 76 65  n isolation leve
23cf0 6c 73 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 74  ls is enabled, t
23d00 68 65 20 72 65 74 75 72 6e 65 64 0d 0a 20 20 20  he returned..   
23d10 20 2f 2f 2f 20 74 72 61 6e 73 61 63 74 69 6f 6e   /// transaction
23d20 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65 76 65 6c   isolation level
23d30 20 6d 61 79 20 62 65 20 73 69 67 6e 69 66 69 63   may be signific
23d40 61 6e 74 6c 79 20 64 69 66 66 65 72 65 6e 74 20  antly different 
23d50 74 68 61 6e 20 74 68 65 0d 0a 20 20 20 20 2f 2f  than the..    //
23d60 2f 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73 70 65  / originally spe
23d70 63 69 66 69 65 64 20 6f 6e 65 2e 0d 0a 20 20 20  cified one...   
23d80 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
23d90 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
23da0 6e 61 6d 65 3d 22 69 73 6f 6c 61 74 69 6f 6e 4c  name="isolationL
23db0 65 76 65 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  evel">..    /// 
23dc0 54 68 65 20 6f 72 69 67 69 6e 61 6c 6c 79 20 73  The originally s
23dd0 70 65 63 69 66 69 65 64 20 74 72 61 6e 73 61 63  pecified transac
23de0 74 69 6f 6e 20 69 73 6f 6c 61 74 69 6f 6e 20 6c  tion isolation l
23df0 65 76 65 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  evel...    /// <
23e00 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
23e10 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20   <returns>..    
23e20 2f 2f 2f 20 54 68 65 20 74 72 61 6e 73 61 63 74  /// The transact
23e30 69 6f 6e 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65  ion isolation le
23e40 76 65 6c 20 74 68 61 74 20 73 68 6f 75 6c 64 20  vel that should 
23e50 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f  be used...    //
23e60 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
23e70 20 20 70 72 69 76 61 74 65 20 49 73 6f 6c 61 74    private Isolat
23e80 69 6f 6e 4c 65 76 65 6c 20 47 65 74 45 66 66 65  ionLevel GetEffe
23e90 63 74 69 76 65 49 73 6f 6c 61 74 69 6f 6e 4c 65  ctiveIsolationLe
23ea0 76 65 6c 28 0d 0a 20 20 20 20 20 20 20 20 49 73  vel(..        Is
23eb0 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20 69 73 6f  olationLevel iso
23ec0 6c 61 74 69 6f 6e 4c 65 76 65 6c 0d 0a 20 20 20  lationLevel..   
23ed0 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
23ee0 20 20 20 20 20 20 20 69 66 20 28 28 5f 66 6c 61         if ((_fla
23ef0 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
23f00 63 74 69 6f 6e 46 6c 61 67 73 2e 4d 61 70 49 73  ctionFlags.MapIs
23f10 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 73 29 0d 0a  olationLevels)..
23f20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f30 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  != SQLiteConnect
23f40 69 6f 6e 46 6c 61 67 73 2e 4d 61 70 49 73 6f 6c  ionFlags.MapIsol
23f50 61 74 69 6f 6e 4c 65 76 65 6c 73 29 0d 0a 20 20  ationLevels)..  
23f60 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
23f70 20 20 20 20 20 72 65 74 75 72 6e 20 69 73 6f 6c       return isol
23f80 61 74 69 6f 6e 4c 65 76 65 6c 3b 0d 0a 20 20 20  ationLevel;..   
23f90 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
23fa0 20 20 73 77 69 74 63 68 20 28 69 73 6f 6c 61 74    switch (isolat
23fb0 69 6f 6e 4c 65 76 65 6c 29 0d 0a 20 20 20 20 20  ionLevel)..     
23fc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
23fd0 20 20 63 61 73 65 20 49 73 6f 6c 61 74 69 6f 6e    case Isolation
23fe0 4c 65 76 65 6c 2e 55 6e 73 70 65 63 69 66 69 65  Level.Unspecifie
23ff0 64 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d:..            
24000 63 61 73 65 20 49 73 6f 6c 61 74 69 6f 6e 4c 65  case IsolationLe
24010 76 65 6c 2e 43 68 61 6f 73 3a 0d 0a 20 20 20 20  vel.Chaos:..    
24020 20 20 20 20 20 20 20 20 63 61 73 65 20 49 73 6f          case Iso
24030 6c 61 74 69 6f 6e 4c 65 76 65 6c 2e 52 65 61 64  lationLevel.Read
24040 55 6e 63 6f 6d 6d 69 74 74 65 64 3a 0d 0a 20 20  Uncommitted:..  
24050 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 49            case I
24060 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 2e 52 65  solationLevel.Re
24070 61 64 43 6f 6d 6d 69 74 74 65 64 3a 0d 0a 20 20  adCommitted:..  
24080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
24090 74 75 72 6e 20 44 65 66 65 72 72 65 64 49 73 6f  turn DeferredIso
240a0 6c 61 74 69 6f 6e 4c 65 76 65 6c 3b 0d 0a 20 20  lationLevel;..  
240b0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 49            case I
240c0 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 2e 52 65  solationLevel.Re
240d0 70 65 61 74 61 62 6c 65 52 65 61 64 3a 0d 0a 20  peatableRead:.. 
240e0 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
240f0 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 2e 53  IsolationLevel.S
24100 65 72 69 61 6c 69 7a 61 62 6c 65 3a 0d 0a 20 20  erializable:..  
24110 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 49            case I
24120 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 2e 53 6e  solationLevel.Sn
24130 61 70 73 68 6f 74 3a 0d 0a 20 20 20 20 20 20 20  apshot:..       
24140 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
24150 49 6d 6d 65 64 69 61 74 65 49 73 6f 6c 61 74 69  ImmediateIsolati
24160 6f 6e 4c 65 76 65 6c 3b 0d 0a 20 20 20 20 20 20  onLevel;..      
24170 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a        default:..
24180 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24190 72 65 74 75 72 6e 20 47 65 74 46 61 6c 6c 62 61  return GetFallba
241a0 63 6b 44 65 66 61 75 6c 74 49 73 6f 6c 61 74 69  ckDefaultIsolati
241b0 6f 6e 4c 65 76 65 6c 28 29 3b 0d 0a 20 20 20 20  onLevel();..    
241c0 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
241d0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
241e0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 70 65 6e 73  >..    /// Opens
241f0 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
24200 75 73 69 6e 67 20 74 68 65 20 70 61 72 61 6d 65  using the parame
24210 74 65 72 73 20 66 6f 75 6e 64 20 69 6e 20 74 68  ters found in th
24220 65 20 3c 73 65 65 20 63 72 65 66 3d 22 43 6f 6e  e <see cref="Con
24230 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 22 20 2f  nectionString" /
24240 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  >...    /// </su
24250 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c  mmary>..    publ
24260 69 63 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  ic override void
24270 20 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a   Open()..    {..
24280 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
24290 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
242a0 5f 6c 61 73 74 43 6f 6e 6e 65 63 74 69 6f 6e 49  _lastConnectionI
242b0 6e 4f 70 65 6e 20 3d 20 74 68 69 73 3b 20 2f 2a  nOpen = this; /*
242c0 20 54 48 52 45 41 44 2d 53 41 46 45 3a 20 70 65   THREAD-SAFE: pe
242d0 72 2d 74 68 72 65 61 64 20 64 61 74 75 6d 2e 20  r-thread datum. 
242e0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 4f 6e 43 68  */....      OnCh
242f0 61 6e 67 65 64 28 74 68 69 73 2c 20 6e 65 77 20  anged(this, new 
24300 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
24310 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
24320 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
24330 45 76 65 6e 74 54 79 70 65 2e 4f 70 65 6e 69 6e  EventType.Openin
24340 67 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e  g, null, null, n
24350 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
24360 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c  ..          null
24370 2c 20 6e 75 6c 6c 29 29 3b 0d 0a 0d 0a 20 20 20  , null));....   
24380 20 20 20 69 66 20 28 5f 63 6f 6e 6e 65 63 74 69     if (_connecti
24390 6f 6e 53 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65  onState != Conne
243a0 63 74 69 6f 6e 53 74 61 74 65 2e 43 6c 6f 73 65  ctionState.Close
243b0 64 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f  d)..        thro
243c0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
243d0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
243e0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 43 6c 6f 73  );....      Clos
243f0 65 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 6f  e();....      So
24400 72 74 65 64 4c 69 73 74 3c 73 74 72 69 6e 67 2c  rtedList<string,
24410 20 73 74 72 69 6e 67 3e 20 6f 70 74 73 20 3d 20   string> opts = 
24420 50 61 72 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 53  ParseConnectionS
24430 74 72 69 6e 67 28 0d 0a 20 20 20 20 20 20 20 20  tring(..        
24440 20 20 74 68 69 73 2c 20 5f 63 6f 6e 6e 65 63 74    this, _connect
24450 69 6f 6e 53 74 72 69 6e 67 2c 20 5f 70 61 72 73  ionString, _pars
24460 65 56 69 61 46 72 61 6d 65 77 6f 72 6b 2c 20 66  eViaFramework, f
24470 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  alse);....      
24480 4f 6e 43 68 61 6e 67 65 64 28 74 68 69 73 2c 20  OnChanged(this, 
24490 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
244a0 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
244b0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
244c0 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 43 6f  tionEventType.Co
244d0 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e 67 2c 20  nnectionString, 
244e0 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  null, null, null
244f0 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20  , null,..       
24500 20 20 20 6e 75 6c 6c 2c 20 5f 63 6f 6e 6e 65 63     null, _connec
24510 74 69 6f 6e 53 74 72 69 6e 67 2c 20 6e 65 77 20  tionString, new 
24520 6f 62 6a 65 63 74 5b 5d 20 7b 20 6f 70 74 73 20  object[] { opts 
24530 7d 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 6f 62  }));....      ob
24540 6a 65 63 74 20 65 6e 75 6d 56 61 6c 75 65 3b 0d  ject enumValue;.
24550 0a 0d 0a 20 20 20 20 20 20 65 6e 75 6d 56 61 6c  ...      enumVal
24560 75 65 20 3d 20 54 72 79 50 61 72 73 65 45 6e 75  ue = TryParseEnu
24570 6d 28 74 79 70 65 6f 66 28 53 51 4c 69 74 65 43  m(typeof(SQLiteC
24580 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 2c  onnectionFlags),
24590 20 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22   FindKey(opts, "
245a0 46 6c 61 67 73 22 2c 20 6e 75 6c 6c 29 2c 20 74  Flags", null), t
245b0 72 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f  rue);....      /
245c0 2f 0d 0a 20 20 20 20 20 20 2f 2f 20 42 55 47 46  /..      // BUGF
245d0 49 58 3a 20 41 6c 77 61 79 73 20 70 72 65 73 65  IX: Always prese
245e0 72 76 65 20 74 68 65 20 70 72 65 2d 65 78 69 73  rve the pre-exis
245f0 74 69 6e 67 20 69 6e 73 74 61 6e 63 65 20 66 6c  ting instance fl
24600 61 67 73 2e 20 20 54 68 69 73 20 69 73 20 4f 4b  ags.  This is OK
24610 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
24620 20 20 20 62 65 63 61 75 73 65 20 77 68 65 6e 20     because when 
24630 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  the connection o
24640 62 6a 65 63 74 20 69 73 20 69 6e 69 74 69 61 6c  bject is initial
24650 6c 79 20 63 72 65 61 74 65 64 2c 20 74 68 65 79  ly created, they
24660 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20  ..      //      
24670 20 20 20 61 72 65 20 22 4e 6f 6e 65 22 3b 20 74     are "None"; t
24680 68 65 72 65 66 6f 72 65 2c 20 4f 52 2d 69 6e 67  herefore, OR-ing
24690 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
246a0 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 0d  string property.
246b0 0a 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20  .      //       
246c0 20 20 66 6c 61 67 73 20 77 69 74 68 20 74 68 65    flags with the
246d0 20 69 6e 73 74 61 6e 63 65 20 66 6c 61 67 73 20   instance flags 
246e0 77 6f 75 6c 64 20 70 72 6f 64 75 63 65 20 65 78  would produce ex
246f0 61 63 74 6c 79 20 74 68 65 20 73 61 6d 65 0d 0a  actly the same..
24700 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
24710 20 72 65 73 75 6c 74 2e 20 20 49 66 20 74 68 65   result.  If the
24720 20 22 46 6c 61 67 73 22 20 63 6f 6e 6e 65 63 74   "Flags" connect
24730 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65  ion string prope
24740 72 74 79 20 69 73 20 61 62 73 65 6e 74 2c 0d 0a  rty is absent,..
24750 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
24760 20 4f 52 2d 69 6e 67 20 74 68 65 20 74 68 65 20   OR-ing the the 
24770 69 6e 73 74 61 6e 63 65 20 66 6c 61 67 73 20 77  instance flags w
24780 69 74 68 20 74 68 65 20 73 74 61 74 69 63 20 44  ith the static D
24790 65 66 61 75 6c 74 46 6c 61 67 73 20 69 73 0d 0a  efaultFlags is..
247a0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
247b0 20 64 6f 6e 65 20 69 6e 73 74 65 61 64 2e 20 20   done instead.  
247c0 54 68 69 73 20 69 73 20 4f 4b 20 66 6f 72 20 74  This is OK for t
247d0 68 65 20 73 61 6d 65 20 72 65 61 73 6f 6e 20 61  he same reason a
247e0 73 20 62 65 66 6f 72 65 3a 20 77 68 65 6e 0d 0a  s before: when..
247f0 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20        //        
24800 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
24810 6f 62 6a 65 63 74 20 69 73 20 69 6e 69 74 69 61  object is initia
24820 6c 6c 79 20 63 72 65 61 74 65 64 2c 20 74 68 65  lly created, the
24830 79 20 61 72 65 20 22 4e 6f 6e 65 22 0d 0a 20 20  y are "None"..  
24840 20 20 20 20 2f 2f 20 20 20 20 20 20 20 20 20 62      //         b
24850 79 20 64 65 66 61 75 6c 74 2e 20 20 49 66 20 74  y default.  If t
24860 68 65 79 20 61 72 65 20 64 69 66 66 65 72 65 6e  hey are differen
24870 74 20 6e 6f 77 2c 20 74 68 65 79 20 6d 75 73 74  t now, they must
24880 20 68 61 76 65 20 62 65 65 6e 0d 0a 20 20 20 20   have been..    
24890 20 20 2f 2f 20 20 20 20 20 20 20 20 20 6d 61 6e    //         man
248a0 75 61 6c 6c 79 20 73 65 74 20 62 79 20 74 68 65  ually set by the
248b0 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0d 0a 20   application... 
248c0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 62       //..      b
248d0 6f 6f 6c 20 6e 6f 44 65 66 61 75 6c 74 46 6c 61  ool noDefaultFla
248e0 67 73 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65  gs = SQLiteConve
248f0 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 46 69 6e  rt.ToBoolean(Fin
24900 64 4b 65 79 28 6f 70 74 73 2c 20 22 4e 6f 44 65  dKey(opts, "NoDe
24910 66 61 75 6c 74 46 6c 61 67 73 22 2c 20 44 65 66  faultFlags", Def
24920 61 75 6c 74 4e 6f 44 65 66 61 75 6c 74 46 6c 61  aultNoDefaultFla
24930 67 73 2e 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  gs.ToString()));
24940 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 65 6e  ....      if (en
24950 75 6d 56 61 6c 75 65 20 69 73 20 53 51 4c 69 74  umValue is SQLit
24960 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
24970 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 66 6c  )..          _fl
24980 61 67 73 20 7c 3d 20 28 53 51 4c 69 74 65 43 6f  ags |= (SQLiteCo
24990 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 29 65 6e  nnectionFlags)en
249a0 75 6d 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  umValue;..      
249b0 65 6c 73 65 20 69 66 20 28 21 6e 6f 44 65 66 61  else if (!noDefa
249c0 75 6c 74 46 6c 61 67 73 29 0d 0a 20 20 20 20 20  ultFlags)..     
249d0 20 20 20 20 20 5f 66 6c 61 67 73 20 7c 3d 20 44       _flags |= D
249e0 65 66 61 75 6c 74 46 6c 61 67 73 3b 0d 0a 0d 0a  efaultFlags;....
249f0 20 20 20 20 20 20 62 6f 6f 6c 20 6e 6f 53 68 61        bool noSha
24a00 72 65 64 46 6c 61 67 73 20 3d 20 53 51 4c 69 74  redFlags = SQLit
24a10 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65  eConvert.ToBoole
24a20 61 6e 28 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c  an(FindKey(opts,
24a30 20 22 4e 6f 53 68 61 72 65 64 46 6c 61 67 73 22   "NoSharedFlags"
24a40 2c 20 44 65 66 61 75 6c 74 4e 6f 53 68 61 72 65  , DefaultNoShare
24a50 64 46 6c 61 67 73 2e 54 6f 53 74 72 69 6e 67 28  dFlags.ToString(
24a60 29 29 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  )));..      if (
24a70 21 6e 6f 53 68 61 72 65 64 46 6c 61 67 73 29 20  !noSharedFlags) 
24a80 7b 20 6c 6f 63 6b 20 28 5f 73 79 6e 63 52 6f 6f  { lock (_syncRoo
24a90 74 29 20 7b 20 5f 66 6c 61 67 73 20 7c 3d 20 5f  t) { _flags |= _
24aa0 73 68 61 72 65 64 46 6c 61 67 73 3b 20 7d 20 7d  sharedFlags; } }
24ab0 0d 0a 0d 0a 20 20 20 20 20 20 65 6e 75 6d 56 61  ....      enumVa
24ac0 6c 75 65 20 3d 20 54 72 79 50 61 72 73 65 45 6e  lue = TryParseEn
24ad0 75 6d 28 74 79 70 65 6f 66 28 44 62 54 79 70 65  um(typeof(DbType
24ae0 29 2c 20 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c  ), FindKey(opts,
24af0 20 22 44 65 66 61 75 6c 74 44 62 54 79 70 65 22   "DefaultDbType"
24b00 2c 20 6e 75 6c 6c 29 2c 20 74 72 75 65 29 3b 0d  , null), true);.
24b10 0a 20 20 20 20 20 20 5f 64 65 66 61 75 6c 74 44  .      _defaultD
24b20 62 54 79 70 65 20 3d 20 28 65 6e 75 6d 56 61 6c  bType = (enumVal
24b30 75 65 20 69 73 20 44 62 54 79 70 65 29 20 3f 20  ue is DbType) ? 
24b40 28 44 62 54 79 70 65 29 65 6e 75 6d 56 61 6c 75  (DbType)enumValu
24b50 65 20 3a 20 28 44 62 54 79 70 65 3f 29 6e 75 6c  e : (DbType?)nul
24b60 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  l;....      //..
24b70 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 4e        // NOTE: N
24b80 75 6c 6c 61 62 6c 65 20 76 61 6c 75 65 73 20 74  ullable values t
24b90 79 70 65 73 20 61 72 65 20 6e 6f 74 20 73 75 70  ypes are not sup
24ba0 70 6f 72 74 65 64 20 62 79 20 74 68 65 20 2e 4e  ported by the .N
24bb0 45 54 20 46 72 61 6d 65 77 6f 72 6b 0d 0a 20 20  ET Framework..  
24bc0 20 20 20 20 2f 2f 20 20 20 20 20 20 20 41 44 4f      //       ADO
24bd0 2e 4e 45 54 20 73 75 70 70 6f 72 74 20 63 6f 6d  .NET support com
24be0 70 6f 6e 65 6e 74 73 20 74 68 61 74 20 77 6f 72  ponents that wor
24bf0 6b 20 77 69 74 68 20 74 68 65 20 63 6f 6e 6e 65  k with the conne
24c00 63 74 69 6f 6e 20 73 74 72 69 6e 67 0d 0a 20 20  ction string..  
24c10 20 20 20 20 2f 2f 20 20 20 20 20 20 20 62 75 69      //       bui
24c20 6c 64 65 72 3b 20 74 68 65 72 65 66 6f 72 65 2c  lder; therefore,
24c30 20 74 72 61 6e 73 6c 61 74 65 20 74 68 65 20 22   translate the "
24c40 69 6e 76 61 6c 69 64 20 76 61 6c 75 65 22 20 75  invalid value" u
24c50 73 65 64 20 62 79 20 74 68 65 0d 0a 20 20 20 20  sed by the..    
24c60 20 20 2f 2f 20 20 20 20 20 20 20 53 51 4c 69 74    //       SQLit
24c70 65 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69 6e  eConnectionStrin
24c80 67 42 75 69 6c 64 65 72 2e 44 65 66 61 75 6c 74  gBuilder.Default
24c90 44 62 54 79 70 65 20 70 72 6f 70 65 72 74 79 20  DbType property 
24ca0 74 6f 20 6e 75 6c 6c 0d 0a 20 20 20 20 20 20 2f  to null..      /
24cb0 2f 20 20 20 20 20 20 20 68 65 72 65 2e 0d 0a 20  /       here... 
24cc0 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 69       //..      i
24cd0 66 20 28 28 5f 64 65 66 61 75 6c 74 44 62 54 79  f ((_defaultDbTy
24ce0 70 65 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 28  pe != null) && (
24cf0 28 44 62 54 79 70 65 29 5f 64 65 66 61 75 6c 74  (DbType)_default
24d00 44 62 54 79 70 65 20 3d 3d 20 42 61 64 44 62 54  DbType == BadDbT
24d10 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 5f  ype))..        _
24d20 64 65 66 61 75 6c 74 44 62 54 79 70 65 20 3d 20  defaultDbType = 
24d30 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f  null;....      _
24d40 64 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 20  defaultTypeName 
24d50 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20  = FindKey(opts, 
24d60 22 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65  "DefaultTypeName
24d70 22 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20  ", null);..     
24d80 20 5f 76 66 73 4e 61 6d 65 20 3d 20 46 69 6e 64   _vfsName = Find
24d90 4b 65 79 28 6f 70 74 73 2c 20 22 56 66 73 4e 61  Key(opts, "VfsNa
24da0 6d 65 22 2c 20 44 65 66 61 75 6c 74 56 66 73 4e  me", DefaultVfsN
24db0 61 6d 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45  ame);....#if !NE
24dc0 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20  T_COMPACT_20 && 
24dd0 54 52 41 43 45 5f 57 41 52 4e 49 4e 47 0d 0a 20  TRACE_WARNING.. 
24de0 20 20 20 20 20 62 6f 6f 6c 20 75 72 69 20 3d 20       bool uri = 
24df0 66 61 6c 73 65 3b 0d 0a 23 65 6e 64 69 66 0d 0a  false;..#endif..
24e00 20 20 20 20 20 20 62 6f 6f 6c 20 66 75 6c 6c 55        bool fullU
24e10 72 69 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  ri = false;..   
24e20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e 61     string fileNa
24e30 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  me;....      if 
24e40 28 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32  (Convert.ToInt32
24e50 28 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22  (FindKey(opts, "
24e60 56 65 72 73 69 6f 6e 22 2c 20 53 51 4c 69 74 65  Version", SQLite
24e70 43 6f 6e 76 65 72 74 2e 54 6f 53 74 72 69 6e 67  Convert.ToString
24e80 28 44 65 66 61 75 6c 74 56 65 72 73 69 6f 6e 29  (DefaultVersion)
24e90 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49  ), CultureInfo.I
24ea0 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 29  nvariantCulture)
24eb0 20 21 3d 20 44 65 66 61 75 6c 74 56 65 72 73 69   != DefaultVersi
24ec0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  on)..        thr
24ed0 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72  ow new NotSuppor
24ee0 74 65 64 45 78 63 65 70 74 69 6f 6e 28 48 65 6c  tedException(Hel
24ef0 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
24f00 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  gFormat(CultureI
24f10 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75  nfo.CurrentCultu
24f20 72 65 2c 20 22 4f 6e 6c 79 20 53 51 4c 69 74 65  re, "Only SQLite
24f30 20 56 65 72 73 69 6f 6e 20 7b 30 7d 20 69 73 20   Version {0} is 
24f40 73 75 70 70 6f 72 74 65 64 20 61 74 20 74 68 69  supported at thi
24f50 73 20 74 69 6d 65 22 2c 20 44 65 66 61 75 6c 74  s time", Default
24f60 56 65 72 73 69 6f 6e 29 29 3b 0d 0a 0d 0a 23 69  Version));....#i
24f70 66 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c 55 44  f INTEROP_INCLUD
24f80 45 5f 5a 49 50 56 46 53 0d 0a 20 20 20 20 20 20  E_ZIPVFS..      
24f90 62 6f 6f 6c 20 75 73 65 5a 69 70 56 66 73 20 3d  bool useZipVfs =
24fa0 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 73   false;..      s
24fb0 74 72 69 6e 67 20 7a 69 70 56 66 73 56 65 72 73  tring zipVfsVers
24fc0 69 6f 6e 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70  ion = FindKey(op
24fd0 74 73 2c 20 22 5a 69 70 56 66 73 56 65 72 73 69  ts, "ZipVfsVersi
24fe0 6f 6e 22 2c 20 44 65 66 61 75 6c 74 5a 69 70 56  on", DefaultZipV
24ff0 66 73 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  fsVersion);.... 
25000 20 20 20 20 20 69 66 20 28 7a 69 70 56 66 73 56       if (zipVfsV
25010 65 72 73 69 6f 6e 20 21 3d 20 6e 75 6c 6c 29 0d  ersion != null).
25020 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
25030 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43      if (String.C
25040 6f 6d 70 61 72 65 28 7a 69 70 56 66 73 56 65 72  ompare(zipVfsVer
25050 73 69 6f 6e 2c 20 5a 69 70 56 66 73 5f 41 75 74  sion, ZipVfs_Aut
25060 6f 6d 61 74 69 63 29 20 3d 3d 20 30 29 0d 0a 20  omatic) == 0).. 
25070 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25080 20 20 20 20 20 20 20 20 20 20 75 73 65 5a 69 70            useZip
25090 56 66 73 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  Vfs = true;..   
250a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
250b0 20 20 20 20 65 6c 73 65 20 69 66 20 28 53 74 72      else if (Str
250c0 69 6e 67 2e 43 6f 6d 70 61 72 65 28 7a 69 70 56  ing.Compare(zipV
250d0 66 73 56 65 72 73 69 6f 6e 2c 20 5a 69 70 56 66  fsVersion, ZipVf
250e0 73 5f 56 32 29 20 3d 3d 20 30 29 0d 0a 20 20 20  s_V2) == 0)..   
250f0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
25100 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
25110 74 69 76 65 4d 65 74 68 6f 64 73 2e 7a 69 70 76  tiveMethods.zipv
25120 66 73 49 6e 69 74 5f 76 32 28 29 3b 0d 0a 20 20  fsInit_v2();..  
25130 20 20 20 20 20 20 20 20 20 20 20 20 75 73 65 5a              useZ
25140 69 70 56 66 73 20 3d 20 74 72 75 65 3b 0d 0a 20  ipVfs = true;.. 
25150 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
25160 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 53        else if (S
25170 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 7a 69  tring.Compare(zi
25180 70 56 66 73 56 65 72 73 69 6f 6e 2c 20 5a 69 70  pVfsVersion, Zip
25190 56 66 73 5f 56 33 29 20 3d 3d 20 30 29 0d 0a 20  Vfs_V3) == 0).. 
251a0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
251b0 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
251c0 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 7a 69  NativeMethods.zi
251d0 70 76 66 73 49 6e 69 74 5f 76 33 28 30 29 3b 0d  pvfsInit_v3(0);.
251e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
251f0 73 65 5a 69 70 56 66 73 20 3d 20 74 72 75 65 3b  seZipVfs = true;
25200 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
25210 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20           else.. 
25220 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
25230 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
25240 6e 65 77 20 4e 6f 74 53 75 70 70 6f 72 74 65 64  new NotSupported
25250 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70 65 72  Exception(Helper
25260 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
25270 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20  rmat(..         
25280 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
25290 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
252a0 75 72 65 2c 20 22 4f 6e 6c 79 20 5a 69 70 56 46  ure, "Only ZipVF
252b0 53 20 76 65 72 73 69 6f 6e 73 20 7b 30 7d 2c 20  S versions {0}, 
252c0 7b 31 7d 2c 20 61 6e 64 20 7b 32 7d 20 61 72 65  {1}, and {2} are
252d0 20 73 75 70 70 6f 72 74 65 64 20 61 74 20 74 68   supported at th
252e0 69 73 20 74 69 6d 65 22 2c 0d 0a 20 20 20 20 20  is time",..     
252f0 20 20 20 20 20 20 20 20 20 20 20 20 20 5a 69 70               Zip
25300 56 66 73 5f 41 75 74 6f 6d 61 74 69 63 2c 20 5a  Vfs_Automatic, Z
25310 69 70 56 66 73 5f 56 32 2c 20 5a 69 70 56 66 73  ipVfs_V2, ZipVfs
25320 5f 56 33 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  _V3));..        
25330 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 23 65    }..      }..#e
25340 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 66 69  ndif....      fi
25350 6c 65 4e 61 6d 65 20 3d 20 46 69 6e 64 4b 65 79  leName = FindKey
25360 28 6f 70 74 73 2c 20 22 44 61 74 61 20 53 6f 75  (opts, "Data Sou
25370 72 63 65 22 2c 20 44 65 66 61 75 6c 74 44 61 74  rce", DefaultDat
25380 61 53 6f 75 72 63 65 29 3b 0d 0a 0d 0a 20 20 20  aSource);....   
25390 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
253a0 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 66 69 6c 65  NullOrEmpty(file
253b0 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 7b 0d  Name))..      {.
253c0 0a 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d  .        fileNam
253d0 65 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73  e = FindKey(opts
253e0 2c 20 22 55 72 69 22 2c 20 44 65 66 61 75 6c 74  , "Uri", Default
253f0 55 72 69 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  Uri);..        i
25400 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c  f (String.IsNull
25410 4f 72 45 6d 70 74 79 28 66 69 6c 65 4e 61 6d 65  OrEmpty(fileName
25420 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
25430 20 20 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d           fileNam
25440 65 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73  e = FindKey(opts
25450 2c 20 22 46 75 6c 6c 55 72 69 22 2c 20 44 65 66  , "FullUri", Def
25460 61 75 6c 74 46 75 6c 6c 55 72 69 29 3b 0d 0a 20  aultFullUri);.. 
25470 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
25480 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74  ing.IsNullOrEmpt
25490 79 28 66 69 6c 65 4e 61 6d 65 29 29 0d 0a 20 20  y(fileName))..  
254a0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
254b0 6e 65 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65  new ArgumentExce
254c0 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74 68  ption(HelperMeth
254d0 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
254e0 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72  (CultureInfo.Cur
254f0 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22 44 61  rentCulture, "Da
25500 74 61 20 53 6f 75 72 63 65 20 63 61 6e 6e 6f 74  ta Source cannot
25510 20 62 65 20 65 6d 70 74 79 2e 20 20 55 73 65 20   be empty.  Use 
25520 7b 30 7d 20 74 6f 20 6f 70 65 6e 20 61 6e 20 69  {0} to open an i
25530 6e 2d 6d 65 6d 6f 72 79 20 64 61 74 61 62 61 73  n-memory databas
25540 65 22 2c 20 4d 65 6d 6f 72 79 46 69 6c 65 4e 61  e", MemoryFileNa
25550 6d 65 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me));..         
25560 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
25570 20 20 20 66 75 6c 6c 55 72 69 20 3d 20 74 72 75     fullUri = tru
25580 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  e;..        }.. 
25590 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
255a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
255b0 20 20 66 69 6c 65 4e 61 6d 65 20 3d 20 4d 61 70    fileName = Map
255c0 55 72 69 50 61 74 68 28 66 69 6c 65 4e 61 6d 65  UriPath(fileName
255d0 29 3b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  );..#if !NET_COM
255e0 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
255f0 5f 57 41 52 4e 49 4e 47 0d 0a 20 20 20 20 20 20  _WARNING..      
25600 20 20 20 20 75 72 69 20 3d 20 74 72 75 65 3b 0d      uri = true;.
25610 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
25620 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
25630 20 20 20 20 20 62 6f 6f 6c 20 69 73 4d 65 6d 6f       bool isMemo
25640 72 79 20 3d 20 28 53 74 72 69 6e 67 2e 43 6f 6d  ry = (String.Com
25650 70 61 72 65 28 66 69 6c 65 4e 61 6d 65 2c 20 4d  pare(fileName, M
25660 65 6d 6f 72 79 46 69 6c 65 4e 61 6d 65 2c 20 53  emoryFileName, S
25670 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
25680 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
25690 65 29 20 3d 3d 20 30 29 3b 0d 0a 0d 0a 23 69 66  e) == 0);....#if
256a0 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
256b0 20 26 26 20 54 52 41 43 45 5f 57 41 52 4e 49 4e   && TRACE_WARNIN
256c0 47 0d 0a 20 20 20 20 20 20 69 66 20 28 28 5f 66  G..      if ((_f
256d0 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
256e0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 54 72 61  nectionFlags.Tra
256f0 63 65 57 61 72 6e 69 6e 67 29 20 3d 3d 20 53 51  ceWarning) == SQ
25700 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
25710 61 67 73 2e 54 72 61 63 65 57 61 72 6e 69 6e 67  ags.TraceWarning
25720 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  )..      {..    
25730 20 20 20 20 20 20 69 66 20 28 21 75 72 69 20 26        if (!uri &
25740 26 20 21 66 75 6c 6c 55 72 69 20 26 26 20 21 69  & !fullUri && !i
25750 73 4d 65 6d 6f 72 79 20 26 26 20 21 53 74 72 69  sMemory && !Stri
25760 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
25770 28 66 69 6c 65 4e 61 6d 65 29 20 26 26 0d 0a 20  (fileName) &&.. 
25780 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6c               fil
25790 65 4e 61 6d 65 2e 53 74 61 72 74 73 57 69 74 68  eName.StartsWith
257a0 28 22 5c 5c 22 2c 20 53 74 72 69 6e 67 43 6f 6d  ("\\", StringCom
257b0 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c 49  parison.OrdinalI
257c0 67 6e 6f 72 65 43 61 73 65 29 20 26 26 0d 0a 20  gnoreCase) &&.. 
257d0 20 20 20 20 20 20 20 20 20 20 20 20 20 21 66 69               !fi
257e0 6c 65 4e 61 6d 65 2e 53 74 61 72 74 73 57 69 74  leName.StartsWit
257f0 68 28 22 5c 5c 5c 5c 22 2c 20 53 74 72 69 6e 67  h("\\\\", String
25800 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
25810 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 29 0d 0a  alIgnoreCase))..
25820 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
25830 20 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65             Syste
25840 6d 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 54 72  m.Diagnostics.Tr
25850 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
25860 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
25870 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
25880 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
25890 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
258a0 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
258b0 20 20 20 20 20 20 20 20 20 20 20 20 22 57 41 52              "WAR
258c0 4e 49 4e 47 3a 20 44 65 74 65 63 74 65 64 20 61  NING: Detected a
258d0 20 70 6f 73 73 69 62 6c 79 20 6d 61 6c 66 6f 72   possibly malfor
258e0 6d 65 64 20 55 4e 43 20 64 61 74 61 62 61 73 65  med UNC database
258f0 20 66 69 6c 65 20 6e 61 6d 65 20 5c 22 7b 30 7d   file name \"{0}
25900 5c 22 20 74 68 61 74 20 22 20 2b 0d 0a 20 20 20  \" that " +..   
25910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25920 6d 61 79 20 68 61 76 65 20 6f 72 69 67 69 6e 61  may have origina
25930 6c 6c 79 20 73 74 61 72 74 65 64 20 77 69 74 68  lly started with
25940 20 74 77 6f 20 62 61 63 6b 73 6c 61 73 68 65 73   two backslashes
25950 3b 20 68 6f 77 65 76 65 72 2c 20 66 6f 75 72 20  ; however, four 
25960 6c 65 61 64 69 6e 67 20 22 20 2b 0d 0a 20 20 20  leading " +..   
25970 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
25980 62 61 63 6b 73 6c 61 73 68 65 73 20 6d 61 79 20  backslashes may 
25990 62 65 20 72 65 71 75 69 72 65 64 2c 20 65 2e 67  be required, e.g
259a0 2e 3a 20 5c 22 44 61 74 61 20 53 6f 75 72 63 65  .: \"Data Source
259b0 3d 5c 5c 5c 5c 5c 5c 7b 30 7d 3b 5c 22 22 2c 0d  =\\\\\\{0};\"",.
259c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
259d0 20 20 20 66 69 6c 65 4e 61 6d 65 29 29 3b 0d 0a     fileName));..
259e0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
259f0 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a     }..#endif....
25a00 20 20 20 20 20 20 69 66 20 28 21 66 75 6c 6c 55        if (!fullU
25a10 72 69 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  ri)..      {..  
25a20 20 20 20 20 20 20 69 66 20 28 69 73 4d 65 6d 6f        if (isMemo
25a30 72 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 66  ry)..          f
25a40 69 6c 65 4e 61 6d 65 20 3d 20 4d 65 6d 6f 72 79  ileName = Memory
25a50 46 69 6c 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 20  FileName;..     
25a60 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
25a70 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d   {..#if PLATFORM
25a80 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
25a90 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  K..          if 
25aa0 28 66 69 6c 65 4e 61 6d 65 2e 53 74 61 72 74 73  (fileName.Starts
25ab0 57 69 74 68 28 22 2e 2f 22 29 20 7c 7c 20 66 69  With("./") || fi
25ac0 6c 65 4e 61 6d 65 2e 53 74 61 72 74 73 57 69 74  leName.StartsWit
25ad0 68 28 22 2e 5c 5c 22 29 29 0d 0a 20 20 20 20 20  h(".\\"))..     
25ae0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20         fileName 
25af0 3d 20 50 61 74 68 2e 47 65 74 44 69 72 65 63 74  = Path.GetDirect
25b00 6f 72 79 4e 61 6d 65 28 41 73 73 65 6d 62 6c 79  oryName(Assembly
25b10 2e 47 65 74 43 61 6c 6c 69 6e 67 41 73 73 65 6d  .GetCallingAssem
25b20 62 6c 79 28 29 2e 47 65 74 4e 61 6d 65 28 29 2e  bly().GetName().
25b30 43 6f 64 65 42 61 73 65 29 20 2b 20 66 69 6c 65  CodeBase) + file
25b40 4e 61 6d 65 2e 53 75 62 73 74 72 69 6e 67 28 31  Name.Substring(1
25b50 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
25b60 20 20 20 20 20 20 62 6f 6f 6c 20 74 6f 46 75 6c        bool toFul
25b70 6c 50 61 74 68 20 3d 20 53 51 4c 69 74 65 43 6f  lPath = SQLiteCo
25b80 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28  nvert.ToBoolean(
25b90 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22 54  FindKey(opts, "T
25ba0 6f 46 75 6c 6c 50 61 74 68 22 2c 20 44 65 66 61  oFullPath", Defa
25bb0 75 6c 74 54 6f 46 75 6c 6c 50 61 74 68 2e 54 6f  ultToFullPath.To
25bc0 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 20 20 20  String()));..   
25bd0 20 20 20 20 20 20 20 66 69 6c 65 4e 61 6d 65 20         fileName 
25be0 3d 20 45 78 70 61 6e 64 46 69 6c 65 4e 61 6d 65  = ExpandFileName
25bf0 28 66 69 6c 65 4e 61 6d 65 2c 20 74 6f 46 75 6c  (fileName, toFul
25c00 6c 50 61 74 68 29 3b 0d 0a 20 20 20 20 20 20 20  lPath);..       
25c10 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20   }..      }.... 
25c20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
25c30 7b 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  {..        bool 
25c40 75 73 65 50 6f 6f 6c 69 6e 67 20 3d 20 53 51 4c  usePooling = SQL
25c50 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f  iteConvert.ToBoo
25c60 6c 65 61 6e 28 46 69 6e 64 4b 65 79 28 6f 70 74  lean(FindKey(opt
25c70 73 2c 20 22 50 6f 6f 6c 69 6e 67 22 2c 20 47 65  s, "Pooling", Ge
25c80 74 44 65 66 61 75 6c 74 50 6f 6f 6c 69 6e 67 28  tDefaultPooling(
25c90 29 2e 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  ).ToString()));.
25ca0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6d 61 78  .        int max
25cb0 50 6f 6f 6c 53 69 7a 65 20 3d 20 43 6f 6e 76 65  PoolSize = Conve
25cc0 72 74 2e 54 6f 49 6e 74 33 32 28 46 69 6e 64 4b  rt.ToInt32(FindK
25cd0 65 79 28 6f 70 74 73 2c 20 22 4d 61 78 20 50 6f  ey(opts, "Max Po
25ce0 6f 6c 20 53 69 7a 65 22 2c 20 53 51 4c 69 74 65  ol Size", SQLite
25cf0 43 6f 6e 76 65 72 74 2e 54 6f 53 74 72 69 6e 67  Convert.ToString
25d00 28 44 65 66 61 75 6c 74 4d 61 78 50 6f 6f 6c 53  (DefaultMaxPoolS
25d10 69 7a 65 29 29 2c 20 43 75 6c 74 75 72 65 49 6e  ize)), CultureIn
25d20 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
25d30 75 72 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ure);....       
25d40 20 5f 64 65 66 61 75 6c 74 54 69 6d 65 6f 75 74   _defaultTimeout
25d50 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74   = Convert.ToInt
25d60 33 32 28 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c  32(FindKey(opts,
25d70 20 22 44 65 66 61 75 6c 74 20 54 69 6d 65 6f 75   "Default Timeou
25d80 74 22 2c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  t", SQLiteConver
25d90 74 2e 54 6f 53 74 72 69 6e 67 28 44 65 66 61 75  t.ToString(Defau
25da0 6c 74 43 6f 6e 6e 65 63 74 69 6f 6e 54 69 6d 65  ltConnectionTime
25db0 6f 75 74 29 29 2c 20 43 75 6c 74 75 72 65 49 6e  out)), CultureIn
25dc0 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
25dd0 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 5f  ure);..        _
25de0 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 43 6f  busyTimeout = Co
25df0 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 46 69  nvert.ToInt32(Fi
25e00 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22 42 75 73  ndKey(opts, "Bus
25e10 79 54 69 6d 65 6f 75 74 22 2c 20 53 51 4c 69 74  yTimeout", SQLit
25e20 65 43 6f 6e 76 65 72 74 2e 54 6f 53 74 72 69 6e  eConvert.ToStrin
25e30 67 28 44 65 66 61 75 6c 74 42 75 73 79 54 69 6d  g(DefaultBusyTim
25e40 65 6f 75 74 29 29 2c 20 43 75 6c 74 75 72 65 49  eout)), CultureI
25e50 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
25e60 74 75 72 65 29 3b 0d 0a 0d 0a 23 69 66 20 21 50  ture);....#if !P
25e70 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
25e80 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
25e90 20 20 5f 77 61 69 74 54 69 6d 65 6f 75 74 20 3d    _waitTimeout =
25ea0 20 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32   Convert.ToInt32
25eb0 28 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22  (FindKey(opts, "
25ec0 57 61 69 74 54 69 6d 65 6f 75 74 22 2c 20 53 51  WaitTimeout", SQ
25ed0 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f 53 74  LiteConvert.ToSt
25ee0 72 69 6e 67 28 44 65 66 61 75 6c 74 57 61 69 74  ring(DefaultWait
25ef0 54 69 6d 65 6f 75 74 29 29 2c 20 43 75 6c 74 75  Timeout)), Cultu
25f00 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
25f10 43 75 6c 74 75 72 65 29 3b 0d 0a 23 65 6e 64 69  Culture);..#endi
25f20 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 70 72  f....        _pr
25f30 65 70 61 72 65 52 65 74 72 69 65 73 20 3d 20 43  epareRetries = C
25f40 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 46  onvert.ToInt32(F
25f50 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22 50 72  indKey(opts, "Pr
25f60 65 70 61 72 65 52 65 74 72 69 65 73 22 2c 20 53  epareRetries", S
25f70 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54 6f 53  QLiteConvert.ToS
25f80 74 72 69 6e 67 28 44 65 66 61 75 6c 74 50 72 65  tring(DefaultPre
25f90 70 61 72 65 52 65 74 72 69 65 73 29 29 2c 20 43  pareRetries)), C
25fa0 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
25fb0 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a 20  iantCulture);.. 
25fc0 20 20 20 20 20 20 20 5f 70 72 6f 67 72 65 73 73         _progress
25fd0 4f 70 73 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f  Ops = Convert.To
25fe0 49 6e 74 33 32 28 46 69 6e 64 4b 65 79 28 6f 70  Int32(FindKey(op
25ff0 74 73 2c 20 22 50 72 6f 67 72 65 73 73 4f 70 73  ts, "ProgressOps
26000 22 2c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  ", SQLiteConvert
26010 2e 54 6f 53 74 72 69 6e 67 28 44 65 66 61 75 6c  .ToString(Defaul
26020 74 50 72 6f 67 72 65 73 73 4f 70 73 29 29 2c 20  tProgressOps)), 
26030 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
26040 72 69 61 6e 74 43 75 6c 74 75 72 65 29 3b 0d 0a  riantCulture);..
26050 0d 0a 20 20 20 20 20 20 20 20 65 6e 75 6d 56 61  ..        enumVa
26060 6c 75 65 20 3d 20 54 72 79 50 61 72 73 65 45 6e  lue = TryParseEn
26070 75 6d 28 74 79 70 65 6f 66 28 49 73 6f 6c 61 74  um(typeof(Isolat
26080 69 6f 6e 4c 65 76 65 6c 29 2c 20 46 69 6e 64 4b  ionLevel), FindK
26090 65 79 28 6f 70 74 73 2c 20 22 44 65 66 61 75 6c  ey(opts, "Defaul
260a0 74 20 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c  t IsolationLevel
260b0 22 2c 20 44 65 66 61 75 6c 74 49 73 6f 6c 61 74  ", DefaultIsolat
260c0 69 6f 6e 4c 65 76 65 6c 2e 54 6f 53 74 72 69 6e  ionLevel.ToStrin
260d0 67 28 29 29 2c 20 74 72 75 65 29 3b 0d 0a 20 20  g()), true);..  
260e0 20 20 20 20 20 20 5f 64 65 66 61 75 6c 74 49 73        _defaultIs
260f0 6f 6c 61 74 69 6f 6e 20 3d 20 28 65 6e 75 6d 56  olation = (enumV
26100 61 6c 75 65 20 69 73 20 49 73 6f 6c 61 74 69 6f  alue is Isolatio
26110 6e 4c 65 76 65 6c 29 20 3f 20 28 49 73 6f 6c 61  nLevel) ? (Isola
26120 74 69 6f 6e 4c 65 76 65 6c 29 65 6e 75 6d 56 61  tionLevel)enumVa
26130 6c 75 65 20 3a 20 44 65 66 61 75 6c 74 49 73 6f  lue : DefaultIso
26140 6c 61 74 69 6f 6e 4c 65 76 65 6c 3b 0d 0a 20 20  lationLevel;..  
26150 20 20 20 20 20 20 5f 64 65 66 61 75 6c 74 49 73        _defaultIs
26160 6f 6c 61 74 69 6f 6e 20 3d 20 47 65 74 45 66 66  olation = GetEff
26170 65 63 74 69 76 65 49 73 6f 6c 61 74 69 6f 6e 4c  ectiveIsolationL
26180 65 76 65 6c 28 5f 64 65 66 61 75 6c 74 49 73 6f  evel(_defaultIso
26190 6c 61 74 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20  lation);....    
261a0 20 20 20 20 69 66 20 28 5f 64 65 66 61 75 6c 74      if (_default
261b0 49 73 6f 6c 61 74 69 6f 6e 20 21 3d 20 49 6d 6d  Isolation != Imm
261c0 65 64 69 61 74 65 49 73 6f 6c 61 74 69 6f 6e 4c  ediateIsolationL
261d0 65 76 65 6c 20 26 26 20 5f 64 65 66 61 75 6c 74  evel && _default
261e0 49 73 6f 6c 61 74 69 6f 6e 20 21 3d 20 44 65 66  Isolation != Def
261f0 65 72 72 65 64 49 73 6f 6c 61 74 69 6f 6e 4c 65  erredIsolationLe
26200 76 65 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  vel)..          
26210 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 53 75 70  throw new NotSup
26220 70 6f 72 74 65 64 45 78 63 65 70 74 69 6f 6e 28  portedException(
26230 22 49 6e 76 61 6c 69 64 20 44 65 66 61 75 6c 74  "Invalid Default
26240 20 49 73 6f 6c 61 74 69 6f 6e 4c 65 76 65 6c 20   IsolationLevel 
26250 73 70 65 63 69 66 69 65 64 22 29 3b 0d 0a 0d 0a  specified");....
26260 20 20 20 20 20 20 20 20 5f 62 61 73 65 53 63 68          _baseSch
26270 65 6d 61 4e 61 6d 65 20 3d 20 46 69 6e 64 4b 65  emaName = FindKe
26280 79 28 6f 70 74 73 2c 20 22 42 61 73 65 53 63 68  y(opts, "BaseSch
26290 65 6d 61 4e 61 6d 65 22 2c 20 44 65 66 61 75 6c  emaName", Defaul
262a0 74 42 61 73 65 53 63 68 65 6d 61 4e 61 6d 65 29  tBaseSchemaName)
262b0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
262c0 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
262d0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
262e0 20 20 20 20 20 20 20 53 65 74 75 70 53 51 4c 69         SetupSQLi
262f0 74 65 42 61 73 65 28 6f 70 74 73 29 3b 0d 0a 20  teBase(opts);.. 
26300 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26310 20 20 20 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c      SQLiteOpenFl
26320 61 67 73 45 6e 75 6d 20 66 6c 61 67 73 20 3d 20  agsEnum flags = 
26330 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45  SQLiteOpenFlagsE
26340 6e 75 6d 2e 4e 6f 6e 65 3b 0d 0a 0d 0a 20 20 20  num.None;....   
26350 20 20 20 20 20 69 66 20 28 21 53 51 4c 69 74 65       if (!SQLite
26360 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61  Convert.ToBoolea
26370 6e 28 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20  n(FindKey(opts, 
26380 22 46 61 69 6c 49 66 4d 69 73 73 69 6e 67 22 2c  "FailIfMissing",
26390 20 44 65 66 61 75 6c 74 46 61 69 6c 49 66 4d 69   DefaultFailIfMi
263a0 73 73 69 6e 67 2e 54 6f 53 74 72 69 6e 67 28 29  ssing.ToString()
263b0 29 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 66  )))..          f
263c0 6c 61 67 73 20 7c 3d 20 53 51 4c 69 74 65 4f 70  lags |= SQLiteOp
263d0 65 6e 46 6c 61 67 73 45 6e 75 6d 2e 43 72 65 61  enFlagsEnum.Crea
263e0 74 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  te;....        i
263f0 66 20 28 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  f (SQLiteConvert
26400 2e 54 6f 42 6f 6f 6c 65 61 6e 28 46 69 6e 64 4b  .ToBoolean(FindK
26410 65 79 28 6f 70 74 73 2c 20 22 52 65 61 64 20 4f  ey(opts, "Read O
26420 6e 6c 79 22 2c 20 44 65 66 61 75 6c 74 52 65 61  nly", DefaultRea
26430 64 4f 6e 6c 79 2e 54 6f 53 74 72 69 6e 67 28 29  dOnly.ToString()
26440 29 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  )))..        {..
26450 20 20 20 20 20 20 20 20 20 20 66 6c 61 67 73 20            flags 
26460 7c 3d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  |= SQLiteOpenFla
26470 67 73 45 6e 75 6d 2e 52 65 61 64 4f 6e 6c 79 3b  gsEnum.ReadOnly;
26480 0d 0a 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53  ..          // S
26490 51 4c 69 74 65 20 77 69 6c 6c 20 72 65 74 75 72  QLite will retur
264a0 6e 20 53 51 4c 49 54 45 5f 4d 49 53 55 53 45 20  n SQLITE_MISUSE 
264b0 6f 6e 20 52 65 61 64 4f 6e 6c 79 20 61 6e 64 20  on ReadOnly and 
264c0 43 72 65 61 74 65 0d 0a 20 20 20 20 20 20 20 20  Create..        
264d0 20 20 66 6c 61 67 73 20 26 3d 20 7e 53 51 4c 69    flags &= ~SQLi
264e0 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 2e  teOpenFlagsEnum.
264f0 43 72 65 61 74 65 3b 0d 0a 20 20 20 20 20 20 20  Create;..       
26500 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
26510 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
26520 20 20 20 20 20 20 20 66 6c 61 67 73 20 7c 3d 20         flags |= 
26530 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67 73 45  SQLiteOpenFlagsE
26540 6e 75 6d 2e 52 65 61 64 57 72 69 74 65 3b 0d 0a  num.ReadWrite;..
26550 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
26560 20 20 20 20 20 69 66 20 28 66 75 6c 6c 55 72 69       if (fullUri
26570 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  )..            f
26580 6c 61 67 73 20 7c 3d 20 53 51 4c 69 74 65 4f 70  lags |= SQLiteOp
26590 65 6e 46 6c 61 67 73 45 6e 75 6d 2e 55 72 69 3b  enFlagsEnum.Uri;
265a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c  ....        _sql
265b0 2e 4f 70 65 6e 28 66 69 6c 65 4e 61 6d 65 2c 20  .Open(fileName, 
265c0 5f 76 66 73 4e 61 6d 65 2c 20 5f 66 6c 61 67 73  _vfsName, _flags
265d0 2c 20 66 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c  , flags, maxPool
265e0 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 69 6e 67  Size, usePooling
265f0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 62  );....        _b
26600 69 6e 61 72 79 47 75 69 64 20 3d 20 53 51 4c 69  inaryGuid = SQLi
26610 74 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c  teConvert.ToBool
26620 65 61 6e 28 46 69 6e 64 4b 65 79 28 6f 70 74 73  ean(FindKey(opts
26630 2c 20 22 42 69 6e 61 72 79 47 55 49 44 22 2c 20  , "BinaryGUID", 
26640 44 65 66 61 75 6c 74 42 69 6e 61 72 79 47 55 49  DefaultBinaryGUI
26650 44 2e 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  D.ToString()));.
26660 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43  ...#if INTEROP_C
26670 4f 44 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f  ODEC || INTEROP_
26680 49 4e 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20  INCLUDE_SEE..   
26690 20 20 20 20 20 73 74 72 69 6e 67 20 68 65 78 50       string hexP
266a0 61 73 73 77 6f 72 64 20 3d 20 46 69 6e 64 4b 65  assword = FindKe
266b0 79 28 6f 70 74 73 2c 20 22 48 65 78 50 61 73 73  y(opts, "HexPass
266c0 77 6f 72 64 22 2c 20 44 65 66 61 75 6c 74 48 65  word", DefaultHe
266d0 78 50 61 73 73 77 6f 72 64 29 3b 0d 0a 0d 0a 20  xPassword);.... 
266e0 20 20 20 20 20 20 20 69 66 20 28 68 65 78 50 61         if (hexPa
266f0 73 73 77 6f 72 64 20 21 3d 20 6e 75 6c 6c 29 0d  ssword != null).
26700 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26710 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 65          string e
26720 72 72 6f 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20  rror = null;..  
26730 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
26740 20 68 65 78 50 61 73 73 77 6f 72 64 42 79 74 65   hexPasswordByte
26750 73 20 3d 20 46 72 6f 6d 48 65 78 53 74 72 69 6e  s = FromHexStrin
26760 67 28 68 65 78 50 61 73 73 77 6f 72 64 2c 20 72  g(hexPassword, r
26770 65 66 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20  ef error);....  
26780 20 20 20 20 20 20 20 20 20 20 69 66 20 28 68 65            if (he
26790 78 50 61 73 73 77 6f 72 64 42 79 74 65 73 20 3d  xPasswordBytes =
267a0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
267b0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
267c0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
267d0 77 20 46 6f 72 6d 61 74 45 78 63 65 70 74 69 6f  w FormatExceptio
267e0 6e 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  n(HelperMethods.
267f0 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
26800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26810 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
26820 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
26830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26840 20 20 20 20 22 43 61 6e 6e 6f 74 20 70 61 72 73      "Cannot pars
26850 65 20 27 48 65 78 50 61 73 73 77 6f 72 64 27 20  e 'HexPassword' 
26860 70 72 6f 70 65 72 74 79 20 76 61 6c 75 65 20 69  property value i
26870 6e 74 6f 20 62 79 74 65 20 76 61 6c 75 65 73 3a  nto byte values:
26880 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
26890 20 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f              erro
268a0 72 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  r));..          
268b0 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
268c0 20 20 20 5f 73 71 6c 2e 53 65 74 50 61 73 73 77     _sql.SetPassw
268d0 6f 72 64 28 68 65 78 50 61 73 73 77 6f 72 64 42  ord(hexPasswordB
268e0 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20 20  ytes);..        
268f0 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
26900 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
26910 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70          string p
26920 61 73 73 77 6f 72 64 20 3d 20 46 69 6e 64 4b 65  assword = FindKe
26930 79 28 6f 70 74 73 2c 20 22 50 61 73 73 77 6f 72  y(opts, "Passwor
26940 64 22 2c 20 44 65 66 61 75 6c 74 50 61 73 73 77  d", DefaultPassw
26950 6f 72 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ord);....       
26960 20 20 20 20 20 69 66 20 28 70 61 73 73 77 6f 72       if (passwor
26970 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
26980 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
26990 2e 53 65 74 50 61 73 73 77 6f 72 64 28 55 54 46  .SetPassword(UTF
269a0 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
269b0 65 74 42 79 74 65 73 28 70 61 73 73 77 6f 72 64  etBytes(password
269c0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
269d0 20 65 6c 73 65 20 69 66 20 28 5f 70 61 73 73 77   else if (_passw
269e0 6f 72 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ord != null)..  
269f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
26a00 71 6c 2e 53 65 74 50 61 73 73 77 6f 72 64 28 5f  ql.SetPassword(_
26a10 70 61 73 73 77 6f 72 64 29 3b 0d 0a 20 20 20 20  password);..    
26a20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 5f      }..        _
26a30 70 61 73 73 77 6f 72 64 20 3d 20 6e 75 6c 6c 3b  password = null;
26a40 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
26a50 20 69 66 20 28 46 69 6e 64 4b 65 79 28 6f 70 74   if (FindKey(opt
26a60 73 2c 20 22 48 65 78 50 61 73 73 77 6f 72 64 22  s, "HexPassword"
26a70 2c 20 44 65 66 61 75 6c 74 48 65 78 50 61 73 73  , DefaultHexPass
26a80 77 6f 72 64 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a  word) != null)..
26a90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
26aa0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
26ab0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
26ac0 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
26ad0 2e 45 72 72 6f 72 2c 0d 0a 20 20 20 20 20 20 20  .Error,..       
26ae0 20 20 20 20 20 20 20 20 20 22 43 61 6e 6e 6f 74           "Cannot
26af0 20 75 73 65 20 5c 22 48 65 78 50 61 73 73 77 6f   use \"HexPasswo
26b00 72 64 5c 22 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rd\" connection 
26b10 73 74 72 69 6e 67 20 70 72 6f 70 65 72 74 79 3a  string property:
26b20 20 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 20 20   " +..          
26b30 20 20 20 20 20 20 22 6c 69 62 72 61 72 79 20 77        "library w
26b40 61 73 20 6e 6f 74 20 62 75 69 6c 74 20 77 69 74  as not built wit
26b50 68 20 65 6e 63 72 79 70 74 69 6f 6e 20 73 75 70  h encryption sup
26b60 70 6f 72 74 2c 20 70 6c 65 61 73 65 20 22 20 2b  port, please " +
26b70 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
26b80 20 20 22 73 65 65 20 5c 22 68 74 74 70 73 3a 2f    "see \"https:/
26b90 2f 77 77 77 2e 73 71 6c 69 74 65 2e 6f 72 67 2f  /www.sqlite.org/
26ba0 73 65 65 5c 22 20 66 6f 72 20 6d 6f 72 65 20 69  see\" for more i
26bb0 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 3b 0d 0a 20  nformation");.. 
26bc0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
26bd0 20 20 20 20 69 66 20 28 46 69 6e 64 4b 65 79 28      if (FindKey(
26be0 6f 70 74 73 2c 20 22 50 61 73 73 77 6f 72 64 22  opts, "Password"
26bf0 2c 20 44 65 66 61 75 6c 74 50 61 73 73 77 6f 72  , DefaultPasswor
26c00 64 29 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  d) != null)..   
26c10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
26c20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
26c30 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51  LiteException(SQ
26c40 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45 72  LiteErrorCode.Er
26c50 72 6f 72 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ror,..          
26c60 20 20 20 20 20 20 22 43 61 6e 6e 6f 74 20 75 73        "Cannot us
26c70 65 20 5c 22 50 61 73 73 77 6f 72 64 5c 22 20 63  e \"Password\" c
26c80 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
26c90 20 70 72 6f 70 65 72 74 79 3a 20 22 20 2b 0d 0a   property: " +..
26ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26cb0 22 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f 74  "library was not
26cc0 20 62 75 69 6c 74 20 77 69 74 68 20 65 6e 63 72   built with encr
26cd0 79 70 74 69 6f 6e 20 73 75 70 70 6f 72 74 2c 20  yption support, 
26ce0 70 6c 65 61 73 65 20 22 20 2b 0d 0a 20 20 20 20  please " +..    
26cf0 20 20 20 20 20 20 20 20 20 20 20 20 22 73 65 65              "see
26d00 20 5c 22 68 74 74 70 73 3a 2f 2f 77 77 77 2e 73   \"https://www.s
26d10 71 6c 69 74 65 2e 6f 72 67 2f 73 65 65 5c 22 20  qlite.org/see\" 
26d20 66 6f 72 20 6d 6f 72 65 20 69 6e 66 6f 72 6d 61  for more informa
26d30 74 69 6f 6e 22 29 3b 0d 0a 20 20 20 20 20 20 20  tion");..       
26d40 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20   }..#endif....  
26d50 20 20 20 20 20 20 69 66 20 28 21 66 75 6c 6c 55        if (!fullU
26d60 72 69 29 0d 0a 20 20 20 20 20 20 20 20 20 20 5f  ri)..          _
26d70 64 61 74 61 53 6f 75 72 63 65 20 3d 20 50 61 74  dataSource = Pat
26d80 68 2e 47 65 74 46 69 6c 65 4e 61 6d 65 57 69 74  h.GetFileNameWit
26d90 68 6f 75 74 45 78 74 65 6e 73 69 6f 6e 28 66 69  houtExtension(fi
26da0 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20  leName);..      
26db0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
26dc0 20 20 5f 64 61 74 61 53 6f 75 72 63 65 20 3d 20    _dataSource = 
26dd0 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20  fileName;....   
26de0 20 20 20 20 20 5f 76 65 72 73 69 6f 6e 2b 2b 3b       _version++;
26df0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 43 6f 6e 6e  ....        Conn
26e00 65 63 74 69 6f 6e 53 74 61 74 65 20 6f 6c 64 73  ectionState olds
26e10 74 61 74 65 20 3d 20 5f 63 6f 6e 6e 65 63 74 69  tate = _connecti
26e20 6f 6e 53 74 61 74 65 3b 0d 0a 20 20 20 20 20 20  onState;..      
26e30 20 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 61    _connectionSta
26e40 74 65 20 3d 20 43 6f 6e 6e 65 63 74 69 6f 6e 53  te = ConnectionS
26e50 74 61 74 65 2e 4f 70 65 6e 3b 0d 0a 0d 0a 20 20  tate.Open;....  
26e60 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
26e70 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
26e80 73 74 72 69 6e 67 20 73 74 72 56 61 6c 75 65 3b  string strValue;
26e90 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c  ..          bool
26ea0 20 62 6f 6f 6c 56 61 6c 75 65 3b 0d 0a 0d 0a 20   boolValue;.... 
26eb0 20 20 20 20 20 20 20 20 20 73 74 72 56 61 6c 75           strValu
26ec0 65 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73  e = FindKey(opts
26ed0 2c 20 22 53 65 74 44 65 66 61 75 6c 74 73 22 2c  , "SetDefaults",
26ee0 20 44 65 66 61 75 6c 74 53 65 74 44 65 66 61 75   DefaultSetDefau
26ef0 6c 74 73 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b  lts.ToString());
26f00 0d 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c  ..          bool
26f10 56 61 6c 75 65 20 3d 20 53 51 4c 69 74 65 43 6f  Value = SQLiteCo
26f20 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28  nvert.ToBoolean(
26f30 73 74 72 56 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20  strValue);....  
26f40 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c          if (bool
26f50 56 61 6c 75 65 29 0d 0a 20 20 20 20 20 20 20 20  Value)..        
26f60 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
26f70 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
26f80 43 6f 6d 6d 61 6e 64 20 63 6d 64 20 3d 20 43 72  Command cmd = Cr
26f90 65 61 74 65 43 6f 6d 6d 61 6e 64 28 29 29 0d 0a  eateCommand())..
26fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
26fb0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26fc0 20 20 20 69 66 20 28 5f 62 75 73 79 54 69 6d 65     if (_busyTime
26fd0 6f 75 74 20 21 3d 20 44 65 66 61 75 6c 74 42 75  out != DefaultBu
26fe0 73 79 54 69 6d 65 6f 75 74 29 0d 0a 20 20 20 20  syTimeout)..    
26ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
27000 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27010 20 20 20 20 20 20 20 63 6d 64 2e 43 6f 6d 6d 61         cmd.Comma
27020 6e 64 54 65 78 74 20 3d 20 48 65 6c 70 65 72 4d  ndText = HelperM
27030 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
27040 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
27050 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
27060 2c 20 22 50 52 41 47 4d 41 20 62 75 73 79 5f 74  , "PRAGMA busy_t
27070 69 6d 65 6f 75 74 3d 7b 30 7d 22 2c 20 5f 62 75  imeout={0}", _bu
27080 73 79 54 69 6d 65 6f 75 74 29 3b 0d 0a 20 20 20  syTimeout);..   
27090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
270a0 20 20 20 63 6d 64 2e 45 78 65 63 75 74 65 4e 6f     cmd.ExecuteNo
270b0 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20  nQuery();..     
270c0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
270d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
270e0 20 20 20 20 69 6e 74 20 69 6e 74 56 61 6c 75 65      int intValue
270f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
27100 20 20 20 20 20 20 20 69 66 20 28 21 66 75 6c 6c         if (!full
27110 55 72 69 20 26 26 20 21 69 73 4d 65 6d 6f 72 79  Uri && !isMemory
27120 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
27130 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
27140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74                st
27150 72 56 61 6c 75 65 20 3d 20 46 69 6e 64 4b 65 79  rValue = FindKey
27160 28 6f 70 74 73 2c 20 22 50 61 67 65 20 53 69 7a  (opts, "Page Siz
27170 65 22 2c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72  e", SQLiteConver
27180 74 2e 54 6f 53 74 72 69 6e 67 28 44 65 66 61 75  t.ToString(Defau
27190 6c 74 50 61 67 65 53 69 7a 65 29 29 3b 0d 0a 20  ltPageSize));.. 
271a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
271b0 20 20 20 20 20 69 6e 74 56 61 6c 75 65 20 3d 20       intValue = 
271c0 43 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28  Convert.ToInt32(
271d0 73 74 72 56 61 6c 75 65 2c 20 43 75 6c 74 75 72  strValue, Cultur
271e0 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
271f0 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20  ulture);..      
27200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27210 69 66 20 28 69 6e 74 56 61 6c 75 65 20 21 3d 20  if (intValue != 
27220 44 65 66 61 75 6c 74 50 61 67 65 53 69 7a 65 29  DefaultPageSize)
27230 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27240 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
27250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27260 20 20 20 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e 64       cmd.Command
27270 54 65 78 74 20 3d 20 48 65 6c 70 65 72 4d 65 74  Text = HelperMet
27280 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
27290 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
272a0 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20  variantCulture, 
272b0 22 50 52 41 47 4d 41 20 70 61 67 65 5f 73 69 7a  "PRAGMA page_siz
272c0 65 3d 7b 30 7d 22 2c 20 69 6e 74 56 61 6c 75 65  e={0}", intValue
272d0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
272e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d                cm
272f0 64 2e 45 78 65 63 75 74 65 4e 6f 6e 51 75 65 72  d.ExecuteNonQuer
27300 79 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  y();..          
27310 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
27320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27330 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
27340 20 20 20 20 20 20 20 20 73 74 72 56 61 6c 75 65          strValue
27350 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c   = FindKey(opts,
27360 20 22 4d 61 78 20 50 61 67 65 20 43 6f 75 6e 74   "Max Page Count
27370 22 2c 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74  ", SQLiteConvert
27380 2e 54 6f 53 74 72 69 6e 67 28 44 65 66 61 75 6c  .ToString(Defaul
27390 74 4d 61 78 50 61 67 65 43 6f 75 6e 74 29 29 3b  tMaxPageCount));
273a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
273b0 20 20 20 20 69 6e 74 56 61 6c 75 65 20 3d 20 43      intValue = C
273c0 6f 6e 76 65 72 74 2e 54 6f 49 6e 74 33 32 28 73  onvert.ToInt32(s
273d0 74 72 56 61 6c 75 65 2c 20 43 75 6c 74 75 72 65  trValue, Culture
273e0 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
273f0 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20 20 20  lture);..       
27400 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 69             if (i
27410 6e 74 56 61 6c 75 65 20 21 3d 20 44 65 66 61 75  ntValue != Defau
27420 6c 74 4d 61 78 50 61 67 65 43 6f 75 6e 74 29 0d  ltMaxPageCount).
27430 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27440 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
27450 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e              cmd.
27460 43 6f 6d 6d 61 6e 64 54 65 78 74 20 3d 20 48 65  CommandText = He
27470 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
27480 6e 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65  ngFormat(Culture
27490 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
274a0 6c 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 6d  lture, "PRAGMA m
274b0 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 7b 30  ax_page_count={0
274c0 7d 22 2c 20 69 6e 74 56 61 6c 75 65 29 3b 0d 0a  }", intValue);..
274d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
274e0 20 20 20 20 20 20 63 6d 64 2e 45 78 65 63 75 74        cmd.Execut
274f0 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20 20  eNonQuery();..  
27500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27510 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
27520 20 20 20 20 20 20 20 73 74 72 56 61 6c 75 65 20         strValue 
27530 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c 20  = FindKey(opts, 
27540 22 4c 65 67 61 63 79 20 46 6f 72 6d 61 74 22 2c  "Legacy Format",
27550 20 44 65 66 61 75 6c 74 4c 65 67 61 63 79 46 6f   DefaultLegacyFo
27560 72 6d 61 74 2e 54 6f 53 74 72 69 6e 67 28 29 29  rmat.ToString())
27570 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
27580 20 20 20 20 20 62 6f 6f 6c 56 61 6c 75 65 20 3d       boolValue =
27590 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54   SQLiteConvert.T
275a0 6f 42 6f 6f 6c 65 61 6e 28 73 74 72 56 61 6c 75  oBoolean(strValu
275b0 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
275c0 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f 6c 56         if (boolV
275d0 61 6c 75 65 20 21 3d 20 44 65 66 61 75 6c 74 4c  alue != DefaultL
275e0 65 67 61 63 79 46 6f 72 6d 61 74 29 0d 0a 20 20  egacyFormat)..  
275f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27600 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
27610 20 20 20 20 20 20 20 20 20 63 6d 64 2e 43 6f 6d           cmd.Com
27620 6d 61 6e 64 54 65 78 74 20 3d 20 48 65 6c 70 65  mandText = Helpe
27630 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
27640 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
27650 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
27660 72 65 2c 20 22 50 52 41 47 4d 41 20 6c 65 67 61  re, "PRAGMA lega
27670 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 3d 7b  cy_file_format={
27680 30 7d 22 2c 20 62 6f 6f 6c 56 61 6c 75 65 20 3f  0}", boolValue ?
27690 20 22 4f 4e 22 20 3a 20 22 4f 46 46 22 29 3b 0d   "ON" : "OFF");.
276a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
276b0 20 20 20 20 20 20 20 63 6d 64 2e 45 78 65 63 75         cmd.Execu
276c0 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d 0a 20  teNonQuery();.. 
276d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
276e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
276f0 20 20 20 20 20 20 20 20 73 74 72 56 61 6c 75 65          strValue
27700 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74 73 2c   = FindKey(opts,
27710 20 22 53 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20   "Synchronous", 
27720 44 65 66 61 75 6c 74 53 79 6e 63 68 72 6f 6e 6f  DefaultSynchrono
27730 75 73 2e 54 6f 53 74 72 69 6e 67 28 29 29 3b 0d  us.ToString());.
27740 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27750 20 20 20 65 6e 75 6d 56 61 6c 75 65 20 3d 20 54     enumValue = T
27760 72 79 50 61 72 73 65 45 6e 75 6d 28 74 79 70 65  ryParseEnum(type
27770 6f 66 28 53 51 4c 69 74 65 53 79 6e 63 68 72 6f  of(SQLiteSynchro
27780 6e 6f 75 73 45 6e 75 6d 29 2c 20 73 74 72 56 61  nousEnum), strVa
27790 6c 75 65 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20  lue, true);..   
277a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
277b0 66 20 28 21 28 65 6e 75 6d 56 61 6c 75 65 20 69  f (!(enumValue i
277c0 73 20 53 51 4c 69 74 65 53 79 6e 63 68 72 6f 6e  s SQLiteSynchron
277d0 6f 75 73 45 6e 75 6d 29 20 7c 7c 20 28 28 53 51  ousEnum) || ((SQ
277e0 4c 69 74 65 53 79 6e 63 68 72 6f 6e 6f 75 73 45  LiteSynchronousE
277f0 6e 75 6d 29 65 6e 75 6d 56 61 6c 75 65 20 21 3d  num)enumValue !=
27800 20 44 65 66 61 75 6c 74 53 79 6e 63 68 72 6f 6e   DefaultSynchron
27810 6f 75 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ous))..         
27820 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
27830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27840 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e 64 54 65 78    cmd.CommandTex
27850 74 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64  t = HelperMethod
27860 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43  s.StringFormat(C
27870 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
27880 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52  iantCulture, "PR
27890 41 47 4d 41 20 73 79 6e 63 68 72 6f 6e 6f 75 73  AGMA synchronous
278a0 3d 7b 30 7d 22 2c 20 73 74 72 56 61 6c 75 65 29  ={0}", strValue)
278b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
278c0 20 20 20 20 20 20 20 20 20 63 6d 64 2e 45 78 65           cmd.Exe
278d0 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b 0d  cuteNonQuery();.
278e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
278f0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
27900 20 20 20 20 20 20 20 20 20 20 73 74 72 56 61 6c            strVal
27910 75 65 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70 74  ue = FindKey(opt
27920 73 2c 20 22 43 61 63 68 65 20 53 69 7a 65 22 2c  s, "Cache Size",
27930 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54   SQLiteConvert.T
27940 6f 53 74 72 69 6e 67 28 44 65 66 61 75 6c 74 43  oString(DefaultC
27950 61 63 68 65 53 69 7a 65 29 29 3b 0d 0a 20 20 20  acheSize));..   
27960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
27970 6e 74 56 61 6c 75 65 20 3d 20 43 6f 6e 76 65 72  ntValue = Conver
27980 74 2e 54 6f 49 6e 74 33 32 28 73 74 72 56 61 6c  t.ToInt32(strVal
27990 75 65 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  ue, CultureInfo.
279a0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
279b0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
279c0 20 20 20 20 20 20 69 66 20 28 69 6e 74 56 61 6c        if (intVal
279d0 75 65 20 21 3d 20 44 65 66 61 75 6c 74 43 61 63  ue != DefaultCac
279e0 68 65 53 69 7a 65 29 0d 0a 20 20 20 20 20 20 20  heSize)..       
279f0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
27a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27a10 20 20 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e 64 54      cmd.CommandT
27a20 65 78 74 20 3d 20 48 65 6c 70 65 72 4d 65 74 68  ext = HelperMeth
27a30 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
27a40 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
27a50 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
27a60 50 52 41 47 4d 41 20 63 61 63 68 65 5f 73 69 7a  PRAGMA cache_siz
27a70 65 3d 7b 30 7d 22 2c 20 69 6e 74 56 61 6c 75 65  e={0}", intValue
27a80 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27a90 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 45 78            cmd.Ex
27aa0 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
27ab0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27ac0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27ad0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 56 61             strVa
27ae0 6c 75 65 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70  lue = FindKey(op
27af0 74 73 2c 20 22 4a 6f 75 72 6e 61 6c 20 4d 6f 64  ts, "Journal Mod
27b00 65 22 2c 20 44 65 66 61 75 6c 74 4a 6f 75 72 6e  e", DefaultJourn
27b10 61 6c 4d 6f 64 65 2e 54 6f 53 74 72 69 6e 67 28  alMode.ToString(
27b20 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
27b30 20 20 20 20 20 20 20 65 6e 75 6d 56 61 6c 75 65         enumValue
27b40 20 3d 20 54 72 79 50 61 72 73 65 45 6e 75 6d 28   = TryParseEnum(
27b50 74 79 70 65 6f 66 28 53 51 4c 69 74 65 4a 6f 75  typeof(SQLiteJou
27b60 72 6e 61 6c 4d 6f 64 65 45 6e 75 6d 29 2c 20 73  rnalModeEnum), s
27b70 74 72 56 61 6c 75 65 2c 20 74 72 75 65 29 3b 0d  trValue, true);.
27b80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27b90 20 20 20 69 66 20 28 21 28 65 6e 75 6d 56 61 6c     if (!(enumVal
27ba0 75 65 20 69 73 20 53 51 4c 69 74 65 4a 6f 75 72  ue is SQLiteJour
27bb0 6e 61 6c 4d 6f 64 65 45 6e 75 6d 29 20 7c 7c 20  nalModeEnum) || 
27bc0 28 28 53 51 4c 69 74 65 4a 6f 75 72 6e 61 6c 4d  ((SQLiteJournalM
27bd0 6f 64 65 45 6e 75 6d 29 65 6e 75 6d 56 61 6c 75  odeEnum)enumValu
27be0 65 20 21 3d 20 44 65 66 61 75 6c 74 4a 6f 75 72  e != DefaultJour
27bf0 6e 61 6c 4d 6f 64 65 29 29 0d 0a 20 20 20 20 20  nalMode))..     
27c00 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
27c10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27c20 20 20 20 20 20 20 73 74 72 69 6e 67 20 70 72 61        string pra
27c30 67 6d 61 53 74 72 20 3d 20 22 50 52 41 47 4d 41  gmaStr = "PRAGMA
27c40 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 3d 7b 30   journal_mode={0
27c50 7d 22 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  }";....#if INTER
27c60 4f 50 5f 49 4e 43 4c 55 44 45 5f 5a 49 50 56 46  OP_INCLUDE_ZIPVF
27c70 53 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  S..             
27c80 20 20 20 20 20 20 20 20 20 69 66 20 28 75 73 65           if (use
27c90 5a 69 70 56 66 73 29 0d 0a 20 20 20 20 20 20 20  ZipVfs)..       
27ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27cb0 20 20 20 70 72 61 67 6d 61 53 74 72 20 3d 20 22     pragmaStr = "
27cc0 50 52 41 47 4d 41 20 7a 69 70 76 66 73 5f 6a 6f  PRAGMA zipvfs_jo
27cd0 75 72 6e 61 6c 5f 6d 6f 64 65 3d 7b 30 7d 22 3b  urnal_mode={0}";
27ce0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
27cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27d00 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e 64 54 65 78    cmd.CommandTex
27d10 74 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f 64  t = HelperMethod
27d20 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43  s.StringFormat(C
27d30 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
27d40 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 70 72 61  iantCulture, pra
27d50 67 6d 61 53 74 72 2c 20 73 74 72 56 61 6c 75 65  gmaStr, strValue
27d60 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
27d70 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 45 78            cmd.Ex
27d80 65 63 75 74 65 4e 6f 6e 51 75 65 72 79 28 29 3b  ecuteNonQuery();
27d90 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
27da0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
27db0 20 20 20 20 20 20 20 20 20 20 20 73 74 72 56 61             strVa
27dc0 6c 75 65 20 3d 20 46 69 6e 64 4b 65 79 28 6f 70  lue = FindKey(op
27dd0 74 73 2c 20 22 46 6f 72 65 69 67 6e 20 4b 65 79  ts, "Foreign Key
27de0 73 22 2c 20 44 65 66 61 75 6c 74 46 6f 72 65 69  s", DefaultForei
27df0 67 6e 4b 65 79 73 2e 54 6f 53 74 72 69 6e 67 28  gnKeys.ToString(
27e00 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
27e10 20 20 20 20 20 20 20 62 6f 6f 6c 56 61 6c 75 65         boolValue
27e20 20 3d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74   = SQLiteConvert
27e30 2e 54 6f 42 6f 6f 6c 65 61 6e 28 73 74 72 56 61  .ToBoolean(strVa
27e40 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
27e50 20 20 20 20 20 20 20 20 20 69 66 20 28 62 6f 6f           if (boo
27e60 6c 56 61 6c 75 65 20 21 3d 20 44 65 66 61 75 6c  lValue != Defaul
27e70 74 46 6f 72 65 69 67 6e 4b 65 79 73 29 0d 0a 20  tForeignKeys).. 
27e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27e90 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
27ea0 20 20 20 20 20 20 20 20 20 20 63 6d 64 2e 43 6f            cmd.Co
27eb0 6d 6d 61 6e 64 54 65 78 74 20 3d 20 48 65 6c 70  mmandText = Help
27ec0 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
27ed0 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
27ee0 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
27ef0 75 72 65 2c 20 22 50 52 41 47 4d 41 20 66 6f 72  ure, "PRAGMA for
27f00 65 69 67 6e 5f 6b 65 79 73 3d 7b 30 7d 22 2c 20  eign_keys={0}", 
27f10 62 6f 6f 6c 56 61 6c 75 65 20 3f 20 22 4f 4e 22  boolValue ? "ON"
27f20 20 3a 20 22 4f 46 46 22 29 3b 0d 0a 20 20 20 20   : "OFF");..    
27f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
27f40 20 20 63 6d 64 2e 45 78 65 63 75 74 65 4e 6f 6e    cmd.ExecuteNon
27f50 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
27f60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
27f70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
27f80 20 20 20 73 74 72 56 61 6c 75 65 20 3d 20 46 69     strValue = Fi
27f90 6e 64 4b 65 79 28 6f 70 74 73 2c 20 22 52 65 63  ndKey(opts, "Rec
27fa0 75 72 73 69 76 65 20 54 72 69 67 67 65 72 73 22  ursive Triggers"
27fb0 2c 20 44 65 66 61 75 6c 74 52 65 63 75 72 73 69  , DefaultRecursi
27fc0 76 65 54 72 69 67 67 65 72 73 2e 54 6f 53 74 72  veTriggers.ToStr
27fd0 69 6e 67 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ing());..       
27fe0 20 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 56             boolV
27ff0 61 6c 75 65 20 3d 20 53 51 4c 69 74 65 43 6f 6e  alue = SQLiteCon
28000 76 65 72 74 2e 54 6f 42 6f 6f 6c 65 61 6e 28 73  vert.ToBoolean(s
28010 74 72 56 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  trValue);..     
28020 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
28030 28 62 6f 6f 6c 56 61 6c 75 65 20 21 3d 20 44 65  (boolValue != De
28040 66 61 75 6c 74 52 65 63 75 72 73 69 76 65 54 72  faultRecursiveTr
28050 69 67 67 65 72 73 29 0d 0a 20 20 20 20 20 20 20  iggers)..       
28060 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
28070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28080 20 20 20 20 63 6d 64 2e 43 6f 6d 6d 61 6e 64 54      cmd.CommandT
28090 65 78 74 20 3d 20 48 65 6c 70 65 72 4d 65 74 68  ext = HelperMeth
280a0 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
280b0 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76  (CultureInfo.Inv
280c0 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22  ariantCulture, "
280d0 50 52 41 47 4d 41 20 72 65 63 75 72 73 69 76 65  PRAGMA recursive
280e0 5f 74 72 69 67 67 65 72 73 3d 7b 30 7d 22 2c 20  _triggers={0}", 
280f0 62 6f 6f 6c 56 61 6c 75 65 20 3f 20 22 4f 4e 22  boolValue ? "ON"
28100 20 3a 20 22 4f 46 46 22 29 3b 0d 0a 20 20 20 20   : "OFF");..    
28110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28120 20 20 63 6d 64 2e 45 78 65 63 75 74 65 4e 6f 6e    cmd.ExecuteNon
28130 51 75 65 72 79 28 29 3b 0d 0a 20 20 20 20 20 20  Query();..      
28140 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
28150 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
28160 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
28170 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 70 72           if (_pr
28180 6f 67 72 65 73 73 48 61 6e 64 6c 65 72 20 21 3d  ogressHandler !=
28190 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
281a0 20 20 20 20 20 20 5f 73 71 6c 2e 53 65 74 50 72        _sql.SetPr
281b0 6f 67 72 65 73 73 48 6f 6f 6b 28 5f 70 72 6f 67  ogressHook(_prog
281c0 72 65 73 73 4f 70 73 2c 20 5f 70 72 6f 67 72 65  ressOps, _progre
281d0 73 73 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ssCallback);....
281e0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 61            if (_a
281f0 75 74 68 6f 72 69 7a 65 72 48 61 6e 64 6c 65 72  uthorizerHandler
28200 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
28210 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 53 65           _sql.Se
28220 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b 28  tAuthorizerHook(
28230 5f 61 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62  _authorizerCallb
28240 61 63 6b 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ack);....       
28250 20 20 20 69 66 20 28 5f 63 6f 6d 6d 69 74 48 61     if (_commitHa
28260 6e 64 6c 65 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a  ndler != null)..
28270 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
28280 2e 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b 28 5f  .SetCommitHook(_
28290 63 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 29 3b  commitCallback);
282a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
282b0 20 28 5f 75 70 64 61 74 65 48 61 6e 64 6c 65 72   (_updateHandler
282c0 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   != null)..     
282d0 20 20 20 20 20 20 20 5f 73 71 6c 2e 53 65 74 55         _sql.SetU
282e0 70 64 61 74 65 48 6f 6f 6b 28 5f 75 70 64 61 74  pdateHook(_updat
282f0 65 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a 20  eCallback);.... 
28300 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 72 6f           if (_ro
28310 6c 6c 62 61 63 6b 48 61 6e 64 6c 65 72 20 21 3d  llbackHandler !=
28320 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
28330 20 20 20 20 5f 73 71 6c 2e 53 65 74 52 6f 6c 6c      _sql.SetRoll
28340 62 61 63 6b 48 6f 6f 6b 28 5f 72 6f 6c 6c 62 61  backHook(_rollba
28350 63 6b 43 61 6c 6c 62 61 63 6b 29 3b 0d 0a 0d 0a  ckCallback);....
28360 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
28370 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
28380 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
28390 2e 54 72 61 6e 73 61 63 74 69 6f 6e 73 2e 54 72  .Transactions.Tr
283a0 61 6e 73 61 63 74 69 6f 6e 20 74 72 61 6e 73 61  ansaction transa
283b0 63 74 69 6f 6e 20 3d 20 54 72 61 6e 73 61 63 74  ction = Transact
283c0 69 6f 6e 73 2e 54 72 61 6e 73 61 63 74 69 6f 6e  ions.Transaction
283d0 2e 43 75 72 72 65 6e 74 3b 0d 0a 0d 0a 20 20 20  .Current;....   
283e0 20 20 20 20 20 20 20 69 66 20 28 74 72 61 6e 73         if (trans
283f0 61 63 74 69 6f 6e 20 21 3d 20 6e 75 6c 6c 20 26  action != null &
28400 26 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  &..             
28410 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 54   SQLiteConvert.T
28420 6f 42 6f 6f 6c 65 61 6e 28 46 69 6e 64 4b 65 79  oBoolean(FindKey
28430 28 6f 70 74 73 2c 20 22 45 6e 6c 69 73 74 22 2c  (opts, "Enlist",
28440 20 44 65 66 61 75 6c 74 45 6e 6c 69 73 74 2e 54   DefaultEnlist.T
28450 6f 53 74 72 69 6e 67 28 29 29 29 29 0d 0a 20 20  oString())))..  
28460 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28470 20 20 20 20 20 20 20 20 20 45 6e 6c 69 73 74 54           EnlistT
28480 72 61 6e 73 61 63 74 69 6f 6e 28 74 72 61 6e 73  ransaction(trans
28490 61 63 74 69 6f 6e 29 3b 0d 0a 20 20 20 20 20 20  action);..      
284a0 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d      }..#endif...
284b0 0a 20 20 20 20 20 20 20 20 20 20 5f 63 6f 6e 6e  .          _conn
284c0 65 63 74 69 6f 6e 53 74 61 74 65 20 3d 20 6f 6c  ectionState = ol
284d0 64 73 74 61 74 65 3b 0d 0a 0d 0a 20 20 20 20 20  dstate;....     
284e0 20 20 20 20 20 53 74 61 74 65 43 68 61 6e 67 65       StateChange
284f0 45 76 65 6e 74 41 72 67 73 20 65 76 65 6e 74 41  EventArgs eventA
28500 72 67 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  rgs = null;..   
28510 20 20 20 20 20 20 20 4f 6e 53 74 61 74 65 43 68         OnStateCh
28520 61 6e 67 65 28 43 6f 6e 6e 65 63 74 69 6f 6e 53  ange(ConnectionS
28530 74 61 74 65 2e 4f 70 65 6e 2c 20 72 65 66 20 65  tate.Open, ref e
28540 76 65 6e 74 41 72 67 73 29 3b 0d 0a 0d 0a 20 20  ventArgs);....  
28550 20 20 20 20 20 20 20 20 4f 6e 43 68 61 6e 67 65          OnChange
28560 64 28 74 68 69 73 2c 20 6e 65 77 20 43 6f 6e 6e  d(this, new Conn
28570 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
28580 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
28590 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
285a0 45 76 65 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64  EventType.Opened
285b0 2c 20 65 76 65 6e 74 41 72 67 73 2c 20 6e 75 6c  , eventArgs, nul
285c0 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a  l, null, null,..
285d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 75                nu
285e0 6c 6c 2c 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53  ll, _connectionS
285f0 74 72 69 6e 67 2c 20 6e 65 77 20 6f 62 6a 65 63  tring, new objec
28600 74 5b 5d 20 7b 20 6f 70 74 73 20 7d 29 29 3b 0d  t[] { opts }));.
28610 0a 0d 0a 23 69 66 20 44 45 42 55 47 0d 0a 20 20  ...#if DEBUG..  
28620 20 20 20 20 20 20 20 20 5f 64 65 62 75 67 53 74          _debugSt
28630 72 69 6e 67 20 3d 20 48 65 6c 70 65 72 4d 65 74  ring = HelperMet
28640 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
28650 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
28660 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e    CultureInfo.In
28670 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d  variantCulture,.
28680 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22  .              "
28690 6f 70 65 6e 54 68 72 65 61 64 49 64 20 3d 20 7b  openThreadId = {
286a0 30 7d 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  0}, connectionSt
286b0 72 69 6e 67 20 3d 20 7b 31 7d 22 2c 0d 0a 20 20  ring = {1}",..  
286c0 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
286d0 65 72 4d 65 74 68 6f 64 73 2e 47 65 74 54 68 72  erMethods.GetThr
286e0 65 61 64 49 64 28 29 2c 20 5f 63 6f 6e 6e 65 63  eadId(), _connec
286f0 74 69 6f 6e 53 74 72 69 6e 67 29 3b 0d 0a 23 65  tionString);..#e
28700 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ndif..        }.
28710 0a 20 20 20 20 20 20 20 20 63 61 74 63 68 0d 0a  .        catch..
28720 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
28730 20 20 20 20 20 5f 63 6f 6e 6e 65 63 74 69 6f 6e       _connection
28740 53 74 61 74 65 20 3d 20 6f 6c 64 73 74 61 74 65  State = oldstate
28750 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 74 68 72  ;..          thr
28760 6f 77 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ow;..        }..
28770 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 63        }..      c
28780 61 74 63 68 20 28 53 51 4c 69 74 65 45 78 63 65  atch (SQLiteExce
28790 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 7b 0d  ption)..      {.
287a0 0a 20 20 20 20 20 20 20 20 43 6c 6f 73 65 28 29  .        Close()
287b0 3b 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  ;..        throw
287c0 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
287d0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
287e0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
287f0 4f 70 65 6e 73 20 74 68 65 20 63 6f 6e 6e 65 63  Opens the connec
28800 74 69 6f 6e 20 75 73 69 6e 67 20 74 68 65 20 70  tion using the p
28810 61 72 61 6d 65 74 65 72 73 20 66 6f 75 6e 64 20  arameters found 
28820 69 6e 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  in the <see cref
28830 3d 22 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 72 69  ="ConnectionStri
28840 6e 67 22 20 2f 3e 20 61 6e 64 20 74 68 65 6e 20  ng" /> and then 
28850 72 65 74 75 72 6e 73 20 69 74 2e 0d 0a 20 20 20  returns it...   
28860 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
28870 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
28880 73 3e 54 68 65 20 63 75 72 72 65 6e 74 20 63 6f  s>The current co
28890 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
288a0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
288b0 70 75 62 6c 69 63 20 53 51 4c 69 74 65 43 6f 6e  public SQLiteCon
288c0 6e 65 63 74 69 6f 6e 20 4f 70 65 6e 41 6e 64 52  nection OpenAndR
288d0 65 74 75 72 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a  eturn()..    {..
288e0 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
288f0 70 6f 73 65 64 28 29 3b 20 4f 70 65 6e 28 29 3b  posed(); Open();
28900 20 72 65 74 75 72 6e 20 74 68 69 73 3b 0d 0a 20   return this;.. 
28910 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
28920 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
28930 2f 2f 20 47 65 74 73 2f 73 65 74 73 20 74 68 65  // Gets/sets the
28940 20 64 65 66 61 75 6c 74 20 63 6f 6d 6d 61 6e 64   default command
28950 20 74 69 6d 65 6f 75 74 20 66 6f 72 20 6e 65 77   timeout for new
28960 6c 79 2d 63 72 65 61 74 65 64 20 63 6f 6d 6d 61  ly-created comma
28970 6e 64 73 2e 20 20 54 68 69 73 20 69 73 20 65 73  nds.  This is es
28980 70 65 63 69 61 6c 6c 79 20 75 73 65 66 75 6c 20  pecially useful 
28990 66 6f 72 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d  for..    /// com
289a0 6d 61 6e 64 73 20 75 73 65 64 20 69 6e 74 65 72  mands used inter
289b0 6e 61 6c 6c 79 20 73 75 63 68 20 61 73 20 69 6e  nally such as in
289c0 73 69 64 65 20 61 20 53 51 4c 69 74 65 54 72 61  side a SQLiteTra
289d0 6e 73 61 63 74 69 6f 6e 2c 20 77 68 65 72 65 20  nsaction, where 
289e0 73 65 74 74 69 6e 67 20 74 68 65 20 74 69 6d 65  setting the time
289f0 6f 75 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69  out is not possi
28a00 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ble...    /// Th
28a10 69 73 20 63 61 6e 20 61 6c 73 6f 20 62 65 20 73  is can also be s
28a20 65 74 20 69 6e 20 74 68 65 20 43 6f 6e 6e 65 63  et in the Connec
28a30 74 69 6f 6e 53 74 72 69 6e 67 20 77 69 74 68 20  tionString with 
28a40 22 44 65 66 61 75 6c 74 20 54 69 6d 65 6f 75 74  "Default Timeout
28a50 22 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  "..    /// </sum
28a60 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
28a70 63 20 69 6e 74 20 44 65 66 61 75 6c 74 54 69 6d  c int DefaultTim
28a80 65 6f 75 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  eout..    {..   
28a90 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69     get { CheckDi
28aa0 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e  sposed(); return
28ab0 20 5f 64 65 66 61 75 6c 74 54 69 6d 65 6f 75 74   _defaultTimeout
28ac0 3b 20 7d 0d 0a 20 20 20 20 20 20 73 65 74 20 7b  ; }..      set {
28ad0 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
28ae0 3b 20 5f 64 65 66 61 75 6c 74 54 69 6d 65 6f 75  ; _defaultTimeou
28af0 74 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20  t = value; }..  
28b00 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
28b10 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
28b20 2f 20 47 65 74 73 2f 73 65 74 73 20 74 68 65 20  / Gets/sets the 
28b30 64 65 66 61 75 6c 74 20 62 75 73 79 20 74 69 6d  default busy tim
28b40 65 6f 75 74 20 74 6f 20 75 73 65 20 77 69 74 68  eout to use with
28b50 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
28b60 20 6c 69 62 72 61 72 79 2e 20 20 54 68 69 73 20   library.  This 
28b70 69 73 20 6f 6e 6c 79 20 75 73 65 64 20 77 68 65  is only used whe
28b80 6e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 65 6e 69  n..    /// openi
28b90 6e 67 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ng a connection.
28ba0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
28bb0 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
28bc0 20 69 6e 74 20 42 75 73 79 54 69 6d 65 6f 75 74   int BusyTimeout
28bd0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
28be0 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
28bf0 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f  osed(); return _
28c00 62 75 73 79 54 69 6d 65 6f 75 74 3b 20 7d 0d 0a  busyTimeout; }..
28c10 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
28c20 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 5f  eckDisposed(); _
28c30 62 75 73 79 54 69 6d 65 6f 75 74 20 3d 20 76 61  busyTimeout = va
28c40 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  lue; }..    }...
28c50 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
28c60 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
28c70 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
28c80 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 62 3e 45  y>..    /// <b>E
28c90 58 50 45 52 49 4d 45 4e 54 41 4c 3c 2f 62 3e 20  XPERIMENTAL</b> 
28ca0 2d 2d 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  --..    /// The 
28cb0 77 61 69 74 20 74 69 6d 65 6f 75 74 20 74 6f 20  wait timeout to 
28cc0 75 73 65 20 77 69 74 68 20 3c 73 65 65 20 63 72  use with <see cr
28cd0 65 66 3d 22 57 61 69 74 46 6f 72 45 6e 6c 69 73  ef="WaitForEnlis
28ce0 74 6d 65 6e 74 52 65 73 65 74 22 20 2f 3e 20 6d  tmentReset" /> m
28cf0 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
28d00 54 68 69 73 20 69 73 20 6f 6e 6c 79 20 75 73 65  This is only use
28d10 64 20 77 68 65 6e 20 77 61 69 74 69 6e 67 20 66  d when waiting f
28d20 6f 72 20 74 68 65 20 65 6e 6c 69 73 74 6d 65 6e  or the enlistmen
28d30 74 20 74 6f 20 62 65 20 72 65 73 65 74 20 70 72  t to be reset pr
28d40 69 6f 72 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20  ior to..    /// 
28d50 65 6e 6c 69 73 74 69 6e 67 20 69 6e 20 61 20 74  enlisting in a t
28d60 72 61 6e 73 61 63 74 69 6f 6e 2c 20 61 6e 64 20  ransaction, and 
28d70 74 68 65 6e 20 6f 6e 6c 79 20 77 68 65 6e 20 74  then only when t
28d80 68 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 63  he appropriate c
28d90 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
28da0 2f 2f 20 66 6c 61 67 20 69 73 20 73 65 74 2e 0d  // flag is set..
28db0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
28dc0 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
28dd0 69 6e 74 20 57 61 69 74 54 69 6d 65 6f 75 74 0d  int WaitTimeout.
28de0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
28df0 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
28e00 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f 77  sed(); return _w
28e10 61 69 74 54 69 6d 65 6f 75 74 3b 20 7d 0d 0a 20  aitTimeout; }.. 
28e20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
28e30 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 5f 77  ckDisposed(); _w
28e40 61 69 74 54 69 6d 65 6f 75 74 20 3d 20 76 61 6c  aitTimeout = val
28e50 75 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65  ue; }..    }..#e
28e60 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
28e70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
28e80 2f 2f 20 54 68 65 20 6d 61 78 69 6d 75 6d 20 6e  // The maximum n
28e90 75 6d 62 65 72 20 6f 66 20 72 65 74 72 69 65 73  umber of retries
28ea0 20 77 68 65 6e 20 70 72 65 70 61 72 69 6e 67 20   when preparing 
28eb0 53 51 4c 20 74 6f 20 62 65 20 65 78 65 63 75 74  SQL to be execut
28ec0 65 64 2e 20 20 54 68 69 73 0d 0a 20 20 20 20 2f  ed.  This..    /
28ed0 2f 2f 20 6e 6f 72 6d 61 6c 6c 79 20 6f 6e 6c 79  // normally only
28ee0 20 61 70 70 6c 69 65 73 20 74 6f 20 70 72 65 70   applies to prep
28ef0 61 72 61 74 69 6f 6e 20 65 72 72 6f 72 73 20 72  aration errors r
28f00 65 73 75 6c 74 69 6e 67 20 66 72 6f 6d 20 74 68  esulting from th
28f10 65 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  e database..    
28f20 2f 2f 2f 20 73 63 68 65 6d 61 20 62 65 69 6e 67  /// schema being
28f30 20 63 68 61 6e 67 65 64 2e 0d 0a 20 20 20 20 2f   changed...    /
28f40 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
28f50 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20 50 72     public int Pr
28f60 65 70 61 72 65 52 65 74 72 69 65 73 0d 0a 20 20  epareRetries..  
28f70 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
28f80 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
28f90 28 29 3b 20 72 65 74 75 72 6e 20 5f 70 72 65 70  (); return _prep
28fa0 61 72 65 52 65 74 72 69 65 73 3b 20 7d 0d 0a 20  areRetries; }.. 
28fb0 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68 65         set { Che
28fc0 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 5f 70  ckDisposed(); _p
28fd0 72 65 70 61 72 65 52 65 74 72 69 65 73 20 3d 20  repareRetries = 
28fe0 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d  value; }..    }.
28ff0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
29000 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
29010 65 20 61 70 70 72 6f 78 69 6d 61 74 65 20 6e 75  e approximate nu
29020 6d 62 65 72 20 6f 66 20 76 69 72 74 75 61 6c 20  mber of virtual 
29030 6d 61 63 68 69 6e 65 20 69 6e 73 74 72 75 63 74  machine instruct
29040 69 6f 6e 73 20 62 65 74 77 65 65 6e 20 70 72 6f  ions between pro
29050 67 72 65 73 73 0d 0a 20 20 20 20 2f 2f 2f 20 65  gress..    /// e
29060 76 65 6e 74 73 2e 20 20 49 6e 20 6f 72 64 65 72  vents.  In order
29070 20 66 6f 72 20 70 72 6f 67 72 65 73 73 20 65 76   for progress ev
29080 65 6e 74 73 20 74 6f 20 61 63 74 75 61 6c 6c 79  ents to actually
29090 20 66 69 72 65 2c 20 74 68 65 20 65 76 65 6e 74   fire, the event
290a0 20 68 61 6e 64 6c 65 72 0d 0a 20 20 20 20 2f 2f   handler..    //
290b0 2f 20 6d 75 73 74 20 62 65 20 61 64 64 65 64 20  / must be added 
290c0 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  to the <see cref
290d0 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
290e0 6f 6e 2e 50 72 6f 67 72 65 73 73 22 20 2f 3e 20  on.Progress" /> 
290f0 65 76 65 6e 74 20 61 73 0d 0a 20 20 20 20 2f 2f  event as..    //
29100 2f 20 77 65 6c 6c 2e 20 20 54 68 69 73 20 76 61  / well.  This va
29110 6c 75 65 20 77 69 6c 6c 20 6f 6e 6c 79 20 62 65  lue will only be
29120 20 75 73 65 64 20 77 68 65 6e 20 74 68 65 20 75   used when the u
29130 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65  nderlying native
29140 20 70 72 6f 67 72 65 73 73 0d 0a 20 20 20 20 2f   progress..    /
29150 2f 2f 20 63 61 6c 6c 62 61 63 6b 20 6e 65 65 64  // callback need
29160 73 20 74 6f 20 62 65 20 63 68 61 6e 67 65 64 2e  s to be changed.
29170 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
29180 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  ary>..    public
29190 20 69 6e 74 20 50 72 6f 67 72 65 73 73 4f 70 73   int ProgressOps
291a0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
291b0 20 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   get { CheckDisp
291c0 6f 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f  osed(); return _
291d0 70 72 6f 67 72 65 73 73 4f 70 73 3b 20 7d 0d 0a  progressOps; }..
291e0 20 20 20 20 20 20 20 20 73 65 74 20 7b 20 43 68          set { Ch
291f0 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20 5f  eckDisposed(); _
29200 70 72 6f 67 72 65 73 73 4f 70 73 20 3d 20 76 61  progressOps = va
29210 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  lue; }..    }...
29220 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
29230 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d  y>..    /// Non-
29240 7a 65 72 6f 20 69 66 20 74 68 65 20 62 75 69 6c  zero if the buil
29250 74 2d 69 6e 20 28 69 2e 65 2e 20 66 72 61 6d 65  t-in (i.e. frame
29260 77 6f 72 6b 20 70 72 6f 76 69 64 65 64 29 20 63  work provided) c
29270 6f 6e 6e 65 63 74 69 6f 6e 20 73 74 72 69 6e 67  onnection string
29280 0d 0a 20 20 20 20 2f 2f 2f 20 70 61 72 73 65 72  ..    /// parser
29290 20 73 68 6f 75 6c 64 20 62 65 20 75 73 65 64 20   should be used 
292a0 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 74 68 65  when opening the
292b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
292c0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
292d0 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f  ..    public boo
292e0 6c 20 50 61 72 73 65 56 69 61 46 72 61 6d 65 77  l ParseViaFramew
292f0 6f 72 6b 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ork..    {..    
29300 20 20 20 20 67 65 74 20 7b 20 43 68 65 63 6b 44      get { CheckD
29310 69 73 70 6f 73 65 64 28 29 3b 20 72 65 74 75 72  isposed(); retur
29320 6e 20 5f 70 61 72 73 65 56 69 61 46 72 61 6d 65  n _parseViaFrame
29330 77 6f 72 6b 3b 20 7d 0d 0a 20 20 20 20 20 20 20  work; }..       
29340 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   set { CheckDisp
29350 6f 73 65 64 28 29 3b 20 5f 70 61 72 73 65 56 69  osed(); _parseVi
29360 61 46 72 61 6d 65 77 6f 72 6b 20 3d 20 76 61 6c  aFramework = val
29370 75 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  ue; }..    }....
29380 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
29390 3e 0d 0a 20 20 20 20 2f 2f 2f 20 47 65 74 73 2f  >..    /// Gets/
293a0 73 65 74 73 20 74 68 65 20 65 78 74 72 61 20 62  sets the extra b
293b0 65 68 61 76 69 6f 72 61 6c 20 66 6c 61 67 73 20  ehavioral flags 
293c0 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  for this connect
293d0 69 6f 6e 2e 20 20 53 65 65 20 74 68 65 0d 0a 20  ion.  See the.. 
293e0 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
293f0 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
29400 6f 6e 46 6c 61 67 73 22 20 2f 3e 20 65 6e 75 6d  onFlags" /> enum
29410 65 72 61 74 69 6f 6e 20 66 6f 72 20 61 20 6c 69  eration for a li
29420 73 74 20 6f 66 0d 0a 20 20 20 20 2f 2f 2f 20 70  st of..    /// p
29430 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73 2e 0d  ossible values..
29440 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
29450 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
29460 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
29470 46 6c 61 67 73 20 46 6c 61 67 73 0d 0a 20 20 20  Flags Flags..   
29480 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
29490 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
294a0 20 72 65 74 75 72 6e 20 5f 66 6c 61 67 73 3b 20   return _flags; 
294b0 7d 0d 0a 20 20 20 20 20 20 73 65 74 20 7b 20 43  }..      set { C
294c0 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
294d0 5f 66 6c 61 67 73 20 3d 20 76 61 6c 75 65 3b 20  _flags = value; 
294e0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
294f0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
29500 20 20 20 2f 2f 2f 20 47 65 74 73 2f 73 65 74 73     /// Gets/sets
29510 20 74 68 65 20 64 65 66 61 75 6c 74 20 64 61 74   the default dat
29520 61 62 61 73 65 20 74 79 70 65 20 66 6f 72 20 74  abase type for t
29530 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  his connection. 
29540 20 54 68 69 73 20 76 61 6c 75 65 0d 0a 20 20 20   This value..   
29550 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20 62   /// will only b
29560 65 20 75 73 65 64 20 77 68 65 6e 20 6e 6f 74 20  e used when not 
29570 6e 75 6c 6c 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  null...    /// <
29580 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
29590 75 62 6c 69 63 20 44 62 54 79 70 65 3f 20 44 65  ublic DbType? De
295a0 66 61 75 6c 74 44 62 54 79 70 65 0d 0a 20 20 20  faultDbType..   
295b0 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20   {..      get { 
295c0 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
295d0 20 72 65 74 75 72 6e 20 5f 64 65 66 61 75 6c 74   return _default
295e0 44 62 54 79 70 65 3b 20 7d 0d 0a 20 20 20 20 20  DbType; }..     
295f0 20 73 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70   set { CheckDisp
29600 6f 73 65 64 28 29 3b 20 5f 64 65 66 61 75 6c 74  osed(); _default
29610 44 62 54 79 70 65 20 3d 20 76 61 6c 75 65 3b 20  DbType = value; 
29620 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
29630 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
29640 20 20 20 2f 2f 2f 20 47 65 74 73 2f 73 65 74 73     /// Gets/sets
29650 20 74 68 65 20 64 65 66 61 75 6c 74 20 64 61 74   the default dat
29660 61 62 61 73 65 20 74 79 70 65 20 6e 61 6d 65 20  abase type name 
29670 66 6f 72 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  for this connect
29680 69 6f 6e 2e 20 20 54 68 69 73 0d 0a 20 20 20 20  ion.  This..    
29690 2f 2f 2f 20 76 61 6c 75 65 20 77 69 6c 6c 20 6f  /// value will o
296a0 6e 6c 79 20 62 65 20 75 73 65 64 20 77 68 65 6e  nly be used when
296b0 20 6e 6f 74 20 6e 75 6c 6c 2e 0d 0a 20 20 20 20   not null...    
296c0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
296d0 20 20 20 20 70 75 62 6c 69 63 20 73 74 72 69 6e      public strin
296e0 67 20 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d  g DefaultTypeNam
296f0 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
29700 67 65 74 20 7b 20 43 68 65 63 6b 44 69 73 70 6f  get { CheckDispo
29710 73 65 64 28 29 3b 20 72 65 74 75 72 6e 20 5f 64  sed(); return _d
29720 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65 3b 20  efaultTypeName; 
29730 7d 0d 0a 20 20 20 20 20 20 73 65 74 20 7b 20 43  }..      set { C
29740 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 20  heckDisposed(); 
29750 5f 64 65 66 61 75 6c 74 54 79 70 65 4e 61 6d 65  _defaultTypeName
29760 20 3d 20 76 61 6c 75 65 3b 20 7d 0d 0a 20 20 20   = value; }..   
29770 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
29780 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
29790 20 47 65 74 73 2f 73 65 74 73 20 74 68 65 20 56   Gets/sets the V
297a0 46 53 20 6e 61 6d 65 20 66 6f 72 20 74 68 69 73  FS name for this
297b0 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20 54 68   connection.  Th
297c0 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 6f 6e  is value will on
297d0 6c 79 20 62 65 0d 0a 20 20 20 20 2f 2f 2f 20 75  ly be..    /// u
297e0 73 65 64 20 77 68 65 6e 20 6f 70 65 6e 69 6e 67  sed when opening
297f0 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0d 0a   the database...
29800 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
29810 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
29820 74 72 69 6e 67 20 56 66 73 4e 61 6d 65 0d 0a 20  tring VfsName.. 
29830 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20     {..      get 
29840 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28  { CheckDisposed(
29850 29 3b 20 72 65 74 75 72 6e 20 5f 76 66 73 4e 61  ); return _vfsNa
29860 6d 65 3b 20 7d 0d 0a 20 20 20 20 20 20 73 65 74  me; }..      set
29870 20 7b 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64   { CheckDisposed
29880 28 29 3b 20 5f 76 66 73 4e 61 6d 65 20 3d 20 76  (); _vfsName = v
29890 61 6c 75 65 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  alue; }..    }..
298a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
298b0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
298c0 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  urns non-zero if
298d0 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   the underlying 
298e0 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f  native connectio
298f0 6e 20 68 61 6e 64 6c 65 20 69 73 0d 0a 20 20 20  n handle is..   
29900 20 2f 2f 2f 20 6f 77 6e 65 64 20 62 79 20 74 68   /// owned by th
29910 69 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20  is instance...  
29920 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
29930 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 62 6f 6f  ..    public boo
29940 6c 20 4f 77 6e 48 61 6e 64 6c 65 0d 0a 20 20 20  l OwnHandle..   
29950 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
29960 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
29970 20 20 20 20 20 20 20 20 43 68 65 63 6b 44 69 73          CheckDis
29980 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20  posed();....    
29990 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
299a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
299b0 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
299c0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
299d0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22  ationException("
299e0 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
299f0 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66 6f  ion not valid fo
29a00 72 20 63 68 65 63 6b 69 6e 67 20 68 61 6e 64 6c  r checking handl
29a10 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
29a20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
29a30 2e 4f 77 6e 48 61 6e 64 6c 65 3b 0d 0a 20 20 20  .OwnHandle;..   
29a40 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
29a50 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
29a60 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
29a70 72 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e 20  rns the version 
29a80 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69 6e  of the underlyin
29a90 67 20 53 51 4c 69 74 65 20 64 61 74 61 62 61 73  g SQLite databas
29aa0 65 20 65 6e 67 69 6e 65 0d 0a 20 20 20 20 2f 2f  e engine..    //
29ab0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 69  / </summary>..#i
29ac0 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
29ad0 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
29ae0 20 20 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c    [Browsable(fal
29af0 73 65 29 2c 20 44 65 73 69 67 6e 65 72 53 65 72  se), DesignerSer
29b00 69 61 6c 69 7a 61 74 69 6f 6e 56 69 73 69 62 69  ializationVisibi
29b10 6c 69 74 79 28 44 65 73 69 67 6e 65 72 53 65 72  lity(DesignerSer
29b20 69 61 6c 69 7a 61 74 69 6f 6e 56 69 73 69 62 69  ializationVisibi
29b30 6c 69 74 79 2e 48 69 64 64 65 6e 29 5d 0d 0a 23  lity.Hidden)]..#
29b40 65 6e 64 69 66 0d 0a 20 20 20 20 70 75 62 6c 69  endif..    publi
29b50 63 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e  c override strin
29b60 67 20 53 65 72 76 65 72 56 65 72 73 69 6f 6e 0d  g ServerVersion.
29b70 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
29b80 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
29b90 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
29ba0 64 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  d();..        re
29bb0 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72 73 69  turn SQLiteVersi
29bc0 6f 6e 3b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 69  on;..        //i
29bd0 66 20 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  f (_connectionSt
29be0 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f  ate != Connectio
29bf0 6e 53 74 61 74 65 2e 4f 70 65 6e 29 0d 0a 20 20  nState.Open)..  
29c00 20 20 20 20 20 20 2f 2f 20 20 74 68 72 6f 77 20        //  throw 
29c10 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
29c20 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 29 3b  tionException();
29c30 0d 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 72 65  ....        //re
29c40 74 75 72 6e 20 5f 73 71 6c 2e 56 65 72 73 69 6f  turn _sql.Versio
29c50 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  n;..      }..   
29c60 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
29c70 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
29c80 20 52 65 74 75 72 6e 73 20 74 68 65 20 72 6f 77   Returns the row
29c90 69 64 20 6f 66 20 74 68 65 20 6d 6f 73 74 20 72  id of the most r
29ca0 65 63 65 6e 74 20 73 75 63 63 65 73 73 66 75 6c  ecent successful
29cb0 20 49 4e 53 45 52 54 20 69 6e 74 6f 20 74 68 65   INSERT into the
29cc0 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20 74   database from t
29cd0 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  his connection..
29ce0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
29cf0 72 79 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ry>..#if !PLATFO
29d00 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
29d10 4f 52 4b 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61  ORK..    [Browsa
29d20 62 6c 65 28 66 61 6c 73 65 29 2c 20 44 65 73 69  ble(false), Desi
29d30 67 6e 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f  gnerSerializatio
29d40 6e 56 69 73 69 62 69 6c 69 74 79 28 44 65 73 69  nVisibility(Desi
29d50 67 6e 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f  gnerSerializatio
29d60 6e 56 69 73 69 62 69 6c 69 74 79 2e 48 69 64 64  nVisibility.Hidd
29d70 65 6e 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  en)]..#endif..  
29d80 20 20 70 75 62 6c 69 63 20 6c 6f 6e 67 20 4c 61    public long La
29d90 73 74 49 6e 73 65 72 74 52 6f 77 49 64 0d 0a 20  stInsertRowId.. 
29da0 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d     {..      get.
29db0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
29dc0 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
29dd0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
29de0 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
29df0 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
29e00 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
29e10 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22  ationException("
29e20 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
29e30 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66 6f  ion not valid fo
29e40 72 20 67 65 74 74 69 6e 67 20 6c 61 73 74 20 69  r getting last i
29e50 6e 73 65 72 74 20 72 6f 77 69 64 2e 22 29 3b 0d  nsert rowid.");.
29e60 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
29e70 6e 20 5f 73 71 6c 2e 4c 61 73 74 49 6e 73 65 72  n _sql.LastInser
29e80 74 52 6f 77 49 64 3b 0d 0a 20 20 20 20 20 20 7d  tRowId;..      }
29e90 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
29ea0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
29eb0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
29ec0 64 20 63 61 75 73 65 73 20 61 6e 79 20 70 65 6e  d causes any pen
29ed0 64 69 6e 67 20 64 61 74 61 62 61 73 65 20 6f 70  ding database op
29ee0 65 72 61 74 69 6f 6e 20 74 6f 20 61 62 6f 72 74  eration to abort
29ef0 20 61 6e 64 20 72 65 74 75 72 6e 20 61 74 0d 0a   and return at..
29f00 20 20 20 20 2f 2f 2f 20 69 74 73 20 65 61 72 6c      /// its earl
29f10 69 65 73 74 20 6f 70 70 6f 72 74 75 6e 69 74 79  iest opportunity
29f20 2e 20 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20  .  This routine 
29f30 69 73 20 74 79 70 69 63 61 6c 6c 79 20 63 61 6c  is typically cal
29f40 6c 65 64 20 69 6e 20 72 65 73 70 6f 6e 73 65 0d  led in response.
29f50 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 61 20 75 73  .    /// to a us
29f60 65 72 20 61 63 74 69 6f 6e 20 73 75 63 68 20 61  er action such a
29f70 73 20 70 72 65 73 73 69 6e 67 20 22 43 61 6e 63  s pressing "Canc
29f80 65 6c 22 20 6f 72 20 43 74 72 6c 2d 43 20 77 68  el" or Ctrl-C wh
29f90 65 72 65 20 74 68 65 20 75 73 65 72 20 77 61 6e  ere the user wan
29fa0 74 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 20 6c 6f  ts..    /// a lo
29fb0 6e 67 20 71 75 65 72 79 20 6f 70 65 72 61 74 69  ng query operati
29fc0 6f 6e 20 74 6f 20 68 61 6c 74 20 69 6d 6d 65 64  on to halt immed
29fd0 69 61 74 65 6c 79 2e 20 20 49 74 20 69 73 20 73  iately.  It is s
29fe0 61 66 65 20 74 6f 20 63 61 6c 6c 20 74 68 69 73  afe to call this
29ff0 0d 0a 20 20 20 20 2f 2f 2f 20 72 6f 75 74 69 6e  ..    /// routin
2a000 65 20 66 72 6f 6d 20 61 6e 79 20 74 68 72 65 61  e from any threa
2a010 64 2e 20 20 48 6f 77 65 76 65 72 2c 20 69 74 20  d.  However, it 
2a020 69 73 20 6e 6f 74 20 73 61 66 65 20 74 6f 20 63  is not safe to c
2a030 61 6c 6c 20 74 68 69 73 20 72 6f 75 74 69 6e 65  all this routine
2a040 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61  ..    /// with a
2a050 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
2a060 74 69 6f 6e 20 74 68 61 74 20 69 73 20 63 6c 6f  tion that is clo
2a070 73 65 64 20 6f 72 20 6d 69 67 68 74 20 63 6c 6f  sed or might clo
2a080 73 65 20 62 65 66 6f 72 65 20 74 68 69 73 20 6d  se before this m
2a090 65 74 68 6f 64 0d 0a 20 20 20 20 2f 2f 2f 20 72  ethod..    /// r
2a0a0 65 74 75 72 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f  eturns...    ///
2a0b0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a0c0 20 70 75 62 6c 69 63 20 76 6f 69 64 20 43 61 6e   public void Can
2a0d0 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  cel()..    {..  
2a0e0 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
2a0f0 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2a100 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75    if (_sql == nu
2a110 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
2a120 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
2a130 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
2a140 74 69 6f 6e 28 22 44 61 74 61 62 61 73 65 20 63  tion("Database c
2a150 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74 20 76 61  onnection not va
2a160 6c 69 64 20 66 6f 72 20 71 75 65 72 79 20 63 61  lid for query ca
2a170 6e 63 65 6c 6c 61 74 69 6f 6e 2e 22 29 3b 0d 0a  ncellation.");..
2a180 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 2e 43  ..        _sql.C
2a190 61 6e 63 65 6c 28 29 3b 20 2f 2a 20 74 68 72 6f  ancel(); /* thro
2a1a0 77 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  w */..    }.... 
2a1b0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2a1c0 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
2a1d0 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
2a1e0 72 6f 77 73 20 63 68 61 6e 67 65 64 20 62 79 20  rows changed by 
2a1f0 74 68 65 20 6c 61 73 74 20 49 4e 53 45 52 54 2c  the last INSERT,
2a200 20 55 50 44 41 54 45 2c 20 6f 72 20 44 45 4c 45   UPDATE, or DELE
2a210 54 45 20 73 74 61 74 65 6d 65 6e 74 20 65 78 65  TE statement exe
2a220 63 75 74 65 64 20 6f 6e 0d 0a 20 20 20 20 2f 2f  cuted on..    //
2a230 2f 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  / this connectio
2a240 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
2a250 6d 6d 61 72 79 3e 0d 0a 23 69 66 20 21 50 4c 41  mmary>..#if !PLA
2a260 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
2a270 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 5b 42 72 6f  MEWORK..    [Bro
2a280 77 73 61 62 6c 65 28 66 61 6c 73 65 29 2c 20 44  wsable(false), D
2a290 65 73 69 67 6e 65 72 53 65 72 69 61 6c 69 7a 61  esignerSerializa
2a2a0 74 69 6f 6e 56 69 73 69 62 69 6c 69 74 79 28 44  tionVisibility(D
2a2b0 65 73 69 67 6e 65 72 53 65 72 69 61 6c 69 7a 61  esignerSerializa
2a2c0 74 69 6f 6e 56 69 73 69 62 69 6c 69 74 79 2e 48  tionVisibility.H
2a2d0 69 64 64 65 6e 29 5d 0d 0a 23 65 6e 64 69 66 0d  idden)]..#endif.
2a2e0 0a 20 20 20 20 70 75 62 6c 69 63 20 69 6e 74 20  .    public int 
2a2f0 43 68 61 6e 67 65 73 0d 0a 20 20 20 20 7b 0d 0a  Changes..    {..
2a300 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
2a310 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
2a320 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2a330 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
2a340 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2a350 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
2a360 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
2a370 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61 62 61  xception("Databa
2a380 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f  se connection no
2a390 74 20 76 61 6c 69 64 20 66 6f 72 20 67 65 74 74  t valid for gett
2a3a0 69 6e 67 20 6e 75 6d 62 65 72 20 6f 66 20 63 68  ing number of ch
2a3b0 61 6e 67 65 73 2e 22 29 3b 0d 0a 0d 0a 20 20 20  anges.");....   
2a3c0 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71 6c       return _sql
2a3d0 2e 43 68 61 6e 67 65 73 3b 0d 0a 20 20 20 20 20  .Changes;..     
2a3e0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2a3f0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2a400 20 20 20 20 2f 2f 2f 20 43 68 65 63 6b 73 20 69      /// Checks i
2a410 66 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f  f this connectio
2a420 6e 20 74 6f 20 74 68 65 20 73 70 65 63 69 66 69  n to the specifi
2a430 65 64 20 64 61 74 61 62 61 73 65 20 73 68 6f 75  ed database shou
2a440 6c 64 20 62 65 20 63 6f 6e 73 69 64 65 72 65 64  ld be considered
2a450 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 61 64 2d 6f  ..    /// read-o
2a460 6e 6c 79 2e 20 20 41 6e 20 65 78 63 65 70 74 69  nly.  An excepti
2a470 6f 6e 20 77 69 6c 6c 20 62 65 20 74 68 72 6f 77  on will be throw
2a480 6e 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  n if the databas
2a490 65 20 6e 61 6d 65 20 73 70 65 63 69 66 69 65 64  e name specified
2a4a0 0d 0a 20 20 20 20 2f 2f 2f 20 76 69 61 20 3c 70  ..    /// via <p
2a4b0 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22 6e 61  aramref name="na
2a4c0 6d 65 22 20 2f 3e 20 63 61 6e 6e 6f 74 20 62 65  me" /> cannot be
2a4d0 20 66 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f   found...    ///
2a4e0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2a4f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2a500 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ="name">..    //
2a510 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 61 20  / The name of a 
2a520 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
2a530 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63 6f  ted with this co
2a540 6e 6e 65 63 74 69 6f 6e 20 2d 4f 52 2d 20 6e 75  nnection -OR- nu
2a550 6c 6c 20 66 6f 72 20 74 68 65 0d 0a 20 20 20 20  ll for the..    
2a560 2f 2f 2f 20 6d 61 69 6e 20 64 61 74 61 62 61 73  /// main databas
2a570 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
2a580 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
2a590 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
2a5a0 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 69   Non-zero if thi
2a5b0 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  s connection to 
2a5c0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61  the specified da
2a5d0 74 61 62 61 73 65 20 73 68 6f 75 6c 64 20 62 65  tabase should be
2a5e0 20 63 6f 6e 73 69 64 65 72 65 64 0d 0a 20 20 20   considered..   
2a5f0 20 2f 2f 2f 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d   /// read-only..
2a600 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
2a610 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ns>..    public 
2a620 62 6f 6f 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28  bool IsReadOnly(
2a630 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
2a640 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20 20 20 29   name..        )
2a650 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2a660 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2a670 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
2a680 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  (_sql == null)..
2a690 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
2a6a0 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65  w new InvalidOpe
2a6b0 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28  rationException(
2a6c0 22 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63  "Database connec
2a6d0 74 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66  tion not valid f
2a6e0 6f 72 20 63 68 65 63 6b 69 6e 67 20 72 65 61 64  or checking read
2a6f0 2d 6f 6e 6c 79 20 73 74 61 74 75 73 2e 22 29 3b  -only status.");
2a700 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
2a710 72 6e 20 5f 73 71 6c 2e 49 73 52 65 61 64 4f 6e  rn _sql.IsReadOn
2a720 6c 79 28 6e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  ly(name);..    }
2a730 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2a740 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
2a750 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20  eturns non-zero 
2a760 69 66 20 74 68 65 20 67 69 76 65 6e 20 64 61 74  if the given dat
2a770 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2a780 20 69 73 20 69 6e 20 61 75 74 6f 63 6f 6d 6d 69   is in autocommi
2a790 74 20 6d 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  t mode...    ///
2a7a0 20 41 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   Autocommit mode
2a7b0 20 69 73 20 6f 6e 20 62 79 20 64 65 66 61 75 6c   is on by defaul
2a7c0 74 2e 20 20 41 75 74 6f 63 6f 6d 6d 69 74 20 6d  t.  Autocommit m
2a7d0 6f 64 65 20 69 73 20 64 69 73 61 62 6c 65 64 20  ode is disabled 
2a7e0 62 79 20 61 20 42 45 47 49 4e 0d 0a 20 20 20 20  by a BEGIN..    
2a7f0 2f 2f 2f 20 73 74 61 74 65 6d 65 6e 74 2e 20 20  /// statement.  
2a800 41 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20  Autocommit mode 
2a810 69 73 20 72 65 2d 65 6e 61 62 6c 65 64 20 62 79  is re-enabled by
2a820 20 61 20 43 4f 4d 4d 49 54 20 6f 72 20 52 4f 4c   a COMMIT or ROL
2a830 4c 42 41 43 4b 2e 0d 0a 20 20 20 20 2f 2f 2f 20  LBACK...    /// 
2a840 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 23 69 66 20  </summary>..#if 
2a850 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
2a860 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
2a870 5b 42 72 6f 77 73 61 62 6c 65 28 66 61 6c 73 65  [Browsable(false
2a880 29 2c 20 44 65 73 69 67 6e 65 72 53 65 72 69 61  ), DesignerSeria
2a890 6c 69 7a 61 74 69 6f 6e 56 69 73 69 62 69 6c 69  lizationVisibili
2a8a0 74 79 28 44 65 73 69 67 6e 65 72 53 65 72 69 61  ty(DesignerSeria
2a8b0 6c 69 7a 61 74 69 6f 6e 56 69 73 69 62 69 6c 69  lizationVisibili
2a8c0 74 79 2e 48 69 64 64 65 6e 29 5d 0d 0a 23 65 6e  ty.Hidden)]..#en
2a8d0 64 69 66 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  dif..    public 
2a8e0 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d  bool AutoCommit.
2a8f0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2a900 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
2a910 20 20 20 20 20 20 20 20 20 20 20 20 43 68 65 63              Chec
2a920 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2a930 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2a940 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
2a950 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
2a960 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
2a970 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
2a980 6f 6e 28 22 44 61 74 61 62 61 73 65 20 63 6f 6e  on("Database con
2a990 6e 65 63 74 69 6f 6e 20 6e 6f 74 20 76 61 6c 69  nection not vali
2a9a0 64 20 66 6f 72 20 67 65 74 74 69 6e 67 20 61 75  d for getting au
2a9b0 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 22 29  tocommit mode.")
2a9c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
2a9d0 20 72 65 74 75 72 6e 20 5f 73 71 6c 2e 41 75 74   return _sql.Aut
2a9e0 6f 43 6f 6d 6d 69 74 3b 0d 0a 20 20 20 20 20 20  oCommit;..      
2a9f0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2aa00 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
2aa10 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
2aa20 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d   the amount of m
2aa30 65 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29  emory (in bytes)
2aa40 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
2aa50 65 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  e by the SQLite 
2aa60 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d 0a 20  core library... 
2aa70 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2aa80 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  >..#if !PLATFORM
2aa90 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
2aaa0 4b 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  K..    [Browsabl
2aab0 65 28 66 61 6c 73 65 29 2c 20 44 65 73 69 67 6e  e(false), Design
2aac0 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f 6e 56  erSerializationV
2aad0 69 73 69 62 69 6c 69 74 79 28 44 65 73 69 67 6e  isibility(Design
2aae0 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f 6e 56  erSerializationV
2aaf0 69 73 69 62 69 6c 69 74 79 2e 48 69 64 64 65 6e  isibility.Hidden
2ab00 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  )]..#endif..    
2ab10 70 75 62 6c 69 63 20 6c 6f 6e 67 20 4d 65 6d 6f  public long Memo
2ab20 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a 20  ryUsed..    {.. 
2ab30 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
2ab40 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63 6b  {..        Check
2ab50 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2ab60 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
2ab70 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2ab80 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
2ab90 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
2aba0 63 65 70 74 69 6f 6e 28 22 44 61 74 61 62 61 73  ception("Databas
2abb0 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74  e connection not
2abc0 20 76 61 6c 69 64 20 66 6f 72 20 67 65 74 74 69   valid for getti
2abd0 6e 67 20 6d 65 6d 6f 72 79 20 75 73 65 64 2e 22  ng memory used."
2abe0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
2abf0 74 75 72 6e 20 5f 73 71 6c 2e 4d 65 6d 6f 72 79  turn _sql.Memory
2ac00 55 73 65 64 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  Used;..      }..
2ac10 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
2ac20 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2ac30 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
2ac40 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f  maximum amount o
2ac50 66 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79 74  f memory (in byt
2ac60 65 73 29 20 75 73 65 64 20 62 79 20 74 68 65 20  es) used by the 
2ac70 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
2ac80 61 72 79 20 73 69 6e 63 65 20 74 68 65 20 68 69  ary since the hi
2ac90 67 68 2d 77 61 74 65 72 20 6d 61 72 6b 20 77 61  gh-water mark wa
2aca0 73 20 6c 61 73 74 20 72 65 73 65 74 2e 0d 0a 20  s last reset... 
2acb0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
2acc0 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  >..#if !PLATFORM
2acd0 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
2ace0 4b 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61 62 6c  K..    [Browsabl
2acf0 65 28 66 61 6c 73 65 29 2c 20 44 65 73 69 67 6e  e(false), Design
2ad00 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f 6e 56  erSerializationV
2ad10 69 73 69 62 69 6c 69 74 79 28 44 65 73 69 67 6e  isibility(Design
2ad20 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f 6e 56  erSerializationV
2ad30 69 73 69 62 69 6c 69 74 79 2e 48 69 64 64 65 6e  isibility.Hidden
2ad40 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  )]..#endif..    
2ad50 70 75 62 6c 69 63 20 6c 6f 6e 67 20 4d 65 6d 6f  public long Memo
2ad60 72 79 48 69 67 68 77 61 74 65 72 0d 0a 20 20 20  ryHighwater..   
2ad70 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
2ad80 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ad90 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 3b  CheckDisposed();
2ada0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
2adb0 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
2adc0 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
2add0 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74  ew InvalidOperat
2ade0 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61  ionException("Da
2adf0 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
2ae00 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66 6f 72 20  n not valid for 
2ae10 67 65 74 74 69 6e 67 20 6d 61 78 69 6d 75 6d 20  getting maximum 
2ae20 6d 65 6d 6f 72 79 20 75 73 65 64 2e 22 29 3b 0d  memory used.");.
2ae30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
2ae40 75 72 6e 20 5f 73 71 6c 2e 4d 65 6d 6f 72 79 48  urn _sql.MemoryH
2ae50 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20 20 20  ighwater;..     
2ae60 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2ae70 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
2ae80 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
2ae90 76 61 72 69 6f 75 73 20 67 6c 6f 62 61 6c 20 6d  various global m
2aea0 65 6d 6f 72 79 20 73 74 61 74 69 73 74 69 63 73  emory statistics
2aeb0 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74 65 20   for the SQLite 
2aec0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 76 69 61  core library via
2aed0 0d 0a 20 20 20 20 2f 2f 2f 20 61 20 64 69 63 74  ..    /// a dict
2aee0 69 6f 6e 61 72 79 20 6f 66 20 6b 65 79 2f 76 61  ionary of key/va
2aef0 6c 75 65 20 70 61 69 72 73 2e 20 20 43 75 72 72  lue pairs.  Curr
2af00 65 6e 74 6c 79 2c 20 6f 6e 6c 79 20 74 68 65 20  ently, only the 
2af10 22 4d 65 6d 6f 72 79 55 73 65 64 22 20 61 6e 64  "MemoryUsed" and
2af20 0d 0a 20 20 20 20 2f 2f 2f 20 22 4d 65 6d 6f 72  ..    /// "Memor
2af30 79 48 69 67 68 77 61 74 65 72 22 20 6b 65 79 73  yHighwater" keys
2af40 20 61 72 65 20 72 65 74 75 72 6e 65 64 20 61 6e   are returned an
2af50 64 20 74 68 65 79 20 68 61 76 65 20 76 61 6c 75  d they have valu
2af60 65 73 20 74 68 61 74 20 63 6f 72 72 65 73 70 6f  es that correspo
2af70 6e 64 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 74  nd..    /// to t
2af80 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 20 63  he values that c
2af90 6f 75 6c 64 20 62 65 20 6f 62 74 61 69 6e 65 64  ould be obtained
2afa0 20 76 69 61 20 74 68 65 20 3c 73 65 65 20 63 72   via the <see cr
2afb0 65 66 3d 22 4d 65 6d 6f 72 79 55 73 65 64 22 20  ef="MemoryUsed" 
2afc0 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 64 20  />..    /// and 
2afd0 3c 73 65 65 20 63 72 65 66 3d 22 4d 65 6d 6f 72  <see cref="Memor
2afe0 79 48 69 67 68 77 61 74 65 72 22 20 2f 3e 20 63  yHighwater" /> c
2aff0 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 6f 70 65 72  onnection proper
2b000 74 69 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ties...    /// <
2b010 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
2b020 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
2b030 73 74 61 74 69 73 74 69 63 73 22 3e 0d 0a 20 20  statistics">..  
2b040 20 20 2f 2f 2f 20 54 68 69 73 20 64 69 63 74 69    /// This dicti
2b050 6f 6e 61 72 79 20 77 69 6c 6c 20 62 65 20 70 6f  onary will be po
2b060 70 75 6c 61 74 65 64 20 77 69 74 68 20 74 68 65  pulated with the
2b070 20 67 6c 6f 62 61 6c 20 6d 65 6d 6f 72 79 20 73   global memory s
2b080 74 61 74 69 73 74 69 63 73 2e 20 20 49 74 0d 0a  tatistics.  It..
2b090 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20 62 65 20      /// will be 
2b0a0 63 72 65 61 74 65 64 20 69 66 20 6e 65 63 65 73  created if neces
2b0b0 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sary...    /// <
2b0c0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62  /param>..    pub
2b0d0 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
2b0e0 47 65 74 4d 65 6d 6f 72 79 53 74 61 74 69 73 74  GetMemoryStatist
2b0f0 69 63 73 28 0d 0a 20 20 20 20 20 20 20 20 72 65  ics(..        re
2b100 66 20 49 44 69 63 74 69 6f 6e 61 72 79 3c 73 74  f IDictionary<st
2b110 72 69 6e 67 2c 20 6c 6f 6e 67 3e 20 73 74 61 74  ring, long> stat
2b120 69 73 74 69 63 73 0d 0a 20 20 20 20 20 20 20 20  istics..        
2b130 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
2b140 20 20 69 66 20 28 73 74 61 74 69 73 74 69 63 73    if (statistics
2b150 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2b160 20 20 20 20 20 20 20 73 74 61 74 69 73 74 69 63         statistic
2b170 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f 6e 61  s = new Dictiona
2b180 72 79 3c 73 74 72 69 6e 67 2c 20 6c 6f 6e 67 3e  ry<string, long>
2b190 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  ();....        s
2b1a0 74 61 74 69 73 74 69 63 73 5b 22 4d 65 6d 6f 72  tatistics["Memor
2b1b0 79 55 73 65 64 22 5d 20 3d 20 53 51 4c 69 74 65  yUsed"] = SQLite
2b1c0 33 2e 53 74 61 74 69 63 4d 65 6d 6f 72 79 55 73  3.StaticMemoryUs
2b1d0 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 73 74 61  ed;..        sta
2b1e0 74 69 73 74 69 63 73 5b 22 4d 65 6d 6f 72 79 48  tistics["MemoryH
2b1f0 69 67 68 77 61 74 65 72 22 5d 20 3d 20 53 51 4c  ighwater"] = SQL
2b200 69 74 65 33 2e 53 74 61 74 69 63 4d 65 6d 6f 72  ite3.StaticMemor
2b210 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20 20 20  yHighwater;..   
2b220 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
2b230 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2b240 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65   Attempts to fre
2b250 65 20 61 73 20 6d 75 63 68 20 68 65 61 70 20 6d  e as much heap m
2b260 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69 62 6c  emory as possibl
2b270 65 20 66 6f 72 20 74 68 69 73 20 64 61 74 61 62  e for this datab
2b280 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  ase connection..
2b290 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2b2a0 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
2b2b0 76 6f 69 64 20 52 65 6c 65 61 73 65 4d 65 6d 6f  void ReleaseMemo
2b2c0 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ry()..    {..   
2b2d0 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2b2e0 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ed();....       
2b2f0 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
2b300 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2b310 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
2b320 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
2b330 69 6f 6e 28 22 44 61 74 61 62 61 73 65 20 63 6f  ion("Database co
2b340 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74 20 76 61 6c  nnection not val
2b350 69 64 20 66 6f 72 20 72 65 6c 65 61 73 69 6e 67  id for releasing
2b360 20 6d 65 6d 6f 72 79 2e 22 29 3b 0d 0a 0d 0a 20   memory.");.... 
2b370 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
2b380 6f 72 43 6f 64 65 20 72 63 20 3d 20 5f 73 71 6c  orCode rc = _sql
2b390 2e 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 29  .ReleaseMemory()
2b3a0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
2b3b0 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
2b3c0 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
2b3d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2b3e0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
2b3f0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c  iteException(rc,
2b400 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b410 20 20 5f 73 71 6c 2e 47 65 74 4c 61 73 74 45 72    _sql.GetLastEr
2b420 72 6f 72 28 22 43 6f 75 6c 64 20 6e 6f 74 20 72  ror("Could not r
2b430 65 6c 65 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  elease connectio
2b440 6e 20 6d 65 6d 6f 72 79 2e 22 29 29 3b 0d 0a 20  n memory."));.. 
2b450 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
2b460 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
2b470 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
2b480 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 4e  tempts to free N
2b490 20 62 79 74 65 73 20 6f 66 20 68 65 61 70 20 6d   bytes of heap m
2b4a0 65 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f 63  emory by dealloc
2b4b0 61 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74  ating non-essent
2b4c0 69 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20  ial memory..    
2b4d0 2f 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20  /// allocations 
2b4e0 68 65 6c 64 20 62 79 20 74 68 65 20 64 61 74 61  held by the data
2b4f0 62 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d 65  base library. Me
2b500 6d 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61 63  mory used to cac
2b510 68 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65  he database page
2b520 73 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d  s..    /// to im
2b530 70 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63  prove performanc
2b540 65 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20  e is an example 
2b550 6f 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c  of non-essential
2b560 20 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20 69   memory.  This i
2b570 73 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f  s a no-op..    /
2b580 2f 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65 72  // returning zer
2b590 6f 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20  o if the SQLite 
2b5a0 63 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73  core library was
2b5b0 20 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69   not compiled wi
2b5c0 74 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  th the compile-t
2b5d0 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74  ime..    /// opt
2b5e0 69 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ion SQLITE_ENABL
2b5f0 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d  E_MEMORY_MANAGEM
2b600 45 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79  ENT.  Optionally
2b610 2c 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72 65  , attempts to re
2b620 73 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20  set and/or..    
2b630 2f 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65 20  /// compact the 
2b640 57 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61  Win32 native hea
2b650 70 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65  p, if applicable
2b660 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
2b670 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
2b680 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74  param name="nByt
2b690 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  es">..    /// Th
2b6a0 65 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62  e requested numb
2b6b0 65 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 66  er of bytes to f
2b6c0 72 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ree...    /// </
2b6d0 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2b6e0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73  <param name="res
2b6f0 65 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f  et">..    /// No
2b700 6e 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70  n-zero to attemp
2b710 74 20 61 20 68 65 61 70 20 72 65 73 65 74 2e 0d  t a heap reset..
2b720 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2b730 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2b740 6d 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22  m name="compact"
2b750 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
2b760 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 68  ero to attempt h
2b770 65 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d  eap compaction..
2b780 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2b790 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2b7a0 6d 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d  m name="nFree">.
2b7b0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
2b7c0 62 65 72 20 6f 66 20 62 79 74 65 73 20 61 63 74  ber of bytes act
2b7d0 75 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54 68  ually freed.  Th
2b7e0 69 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  is value may be 
2b7f0 7a 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  zero...    /// <
2b800 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
2b810 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65   <param name="re
2b820 73 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f  setOk">..    ///
2b830 20 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c   This value will
2b840 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20   be non-zero if 
2b850 74 68 65 20 68 65 61 70 20 72 65 73 65 74 20 77  the heap reset w
2b860 61 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a  as successful...
2b870 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
2b880 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2b890 20 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22   name="nLargest"
2b8a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73  >..    /// The s
2b8b0 69 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65  ize of the large
2b8c0 73 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72 65  st committed fre
2b8d0 65 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68  e block in the h
2b8e0 65 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a  eap, in bytes...
2b8f0 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c      /// This val
2b900 75 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20  ue will be zero 
2b910 75 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d 70  unless heap comp
2b920 61 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65  action is enable
2b930 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
2b940 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
2b950 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
2b960 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
2b970 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28  te return code (
2b980 69 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75  i.e. zero for su
2b990 63 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65  ccess and non-ze
2b9a0 72 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20  ro..    /// for 
2b9b0 66 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f  failure)...    /
2b9c0 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
2b9d0 20 20 20 23 70 72 61 67 6d 61 20 77 61 72 6e 69     #pragma warni
2b9e0 6e 67 20 64 69 73 61 62 6c 65 20 33 30 30 31 0d  ng disable 3001.
2b9f0 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
2ba00 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2ba10 64 65 20 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79  de ReleaseMemory
2ba20 28 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6e  (..        int n
2ba30 42 79 74 65 73 2c 0d 0a 20 20 20 20 20 20 20 20  Bytes,..        
2ba40 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a 20 20 20  bool reset,..   
2ba50 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d 70 61 63       bool compac
2ba60 74 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20  t,..        ref 
2ba70 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20 20 20 20  int nFree,..    
2ba80 20 20 20 20 72 65 66 20 62 6f 6f 6c 20 72 65 73      ref bool res
2ba90 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20 20 20 72  etOk,..        r
2baa0 65 66 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74  ef uint nLargest
2bab0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
2bac0 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
2bad0 72 6e 20 53 51 4c 69 74 65 33 2e 53 74 61 74 69  rn SQLite3.Stati
2bae0 63 52 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 0d  cReleaseMemory(.
2baf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 42 79  .            nBy
2bb00 74 65 73 2c 20 72 65 73 65 74 2c 20 63 6f 6d 70  tes, reset, comp
2bb10 61 63 74 2c 20 72 65 66 20 6e 46 72 65 65 2c 20  act, ref nFree, 
2bb20 72 65 66 20 72 65 73 65 74 4f 6b 2c 20 72 65 66  ref resetOk, ref
2bb30 20 6e 4c 61 72 67 65 73 74 29 3b 0d 0a 20 20 20   nLargest);..   
2bb40 20 7d 0d 0a 20 20 20 20 23 70 72 61 67 6d 61 20   }..    #pragma 
2bb50 77 61 72 6e 69 6e 67 20 72 65 73 74 6f 72 65 20  warning restore 
2bb60 33 30 30 31 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  3001....    /// 
2bb70 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2bb80 2f 2f 20 53 65 74 73 20 74 68 65 20 73 74 61 74  // Sets the stat
2bb90 75 73 20 6f 66 20 74 68 65 20 6d 65 6d 6f 72 79  us of the memory
2bba0 20 75 73 61 67 65 20 74 72 61 63 6b 69 6e 67 20   usage tracking 
2bbb0 73 75 62 73 79 73 74 65 6d 20 69 6e 20 74 68 65  subsystem in the
2bbc0 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
2bbd0 72 61 72 79 2e 20 20 42 79 20 64 65 66 61 75 6c  rary.  By defaul
2bbe0 74 2c 20 74 68 69 73 20 69 73 20 65 6e 61 62 6c  t, this is enabl
2bbf0 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20  ed...    /// If 
2bc00 74 68 69 73 20 69 73 20 64 69 73 61 62 6c 65 64  this is disabled
2bc10 2c 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 74  , memory usage t
2bc20 72 61 63 6b 69 6e 67 20 77 69 6c 6c 20 6e 6f 74  racking will not
2bc30 20 62 65 20 70 65 72 66 6f 72 6d 65 64 2e 20 20   be performed.  
2bc40 54 68 69 73 20 69 73 20 6e 6f 74 20 72 65 61 6c  This is not real
2bc50 6c 79 20 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74  ly a per-connect
2bc60 69 6f 6e 20 76 61 6c 75 65 2c 20 69 74 20 69 73  ion value, it is
2bc70 0d 0a 20 20 20 20 2f 2f 2f 20 67 6c 6f 62 61 6c  ..    /// global
2bc80 20 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2e   to the process.
2bc90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2bca0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
2bcb0 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75 65  aram name="value
2bcc0 22 3e 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 65 6e  ">Non-zero to en
2bcd0 61 62 6c 65 20 6d 65 6d 6f 72 79 20 75 73 61 67  able memory usag
2bce0 65 20 74 72 61 63 6b 69 6e 67 2c 20 7a 65 72 6f  e tracking, zero
2bcf0 20 6f 74 68 65 72 77 69 73 65 2e 3c 2f 70 61 72   otherwise.</par
2bd00 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
2bd10 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72 64  turns>A standard
2bd20 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
2bd30 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20 66  ode (i.e. zero f
2bd40 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20 6e  or success and n
2bd50 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69 6c  on-zero for fail
2bd60 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d  ure).</returns>.
2bd70 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
2bd80 69 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ic SQLiteErrorCo
2bd90 64 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74  de SetMemoryStat
2bda0 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a  us(bool value)..
2bdb0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
2bdc0 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 53 74  eturn SQLite3.St
2bdd0 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74 61  aticSetMemorySta
2bde0 74 75 73 28 76 61 6c 75 65 29 3b 0d 0a 20 20 20  tus(value);..   
2bdf0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
2be00 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2be10 20 52 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e   Returns a strin
2be20 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  g containing the
2be30 20 64 65 66 69 6e 65 20 63 6f 6e 73 74 61 6e 74   define constant
2be40 73 20 28 69 2e 65 2e 20 63 6f 6d 70 69 6c 65 2d  s (i.e. compile-
2be50 74 69 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70  time..    /// op
2be60 74 69 6f 6e 73 29 20 75 73 65 64 20 74 6f 20 63  tions) used to c
2be70 6f 6d 70 69 6c 65 20 74 68 65 20 63 6f 72 65 20  ompile the core 
2be80 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 79  managed assembly
2be90 2c 20 64 65 6c 69 6d 69 74 65 64 20 77 69 74 68  , delimited with
2bea0 0d 0a 20 20 20 20 2f 2f 2f 20 73 70 61 63 65 73  ..    /// spaces
2beb0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
2bec0 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69  mary>..    publi
2bed0 63 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  c static string 
2bee0 44 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d  DefineConstants.
2bef0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
2bf00 67 65 74 20 7b 20 72 65 74 75 72 6e 20 53 51 4c  get { return SQL
2bf10 69 74 65 33 2e 44 65 66 69 6e 65 43 6f 6e 73 74  ite3.DefineConst
2bf20 61 6e 74 73 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  ants; }..    }..
2bf30 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2bf40 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
2bf50 75 72 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e  urns the version
2bf60 20 6f 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   of the underlyi
2bf70 6e 67 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  ng SQLite core l
2bf80 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  ibrary...    ///
2bf90 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2bfa0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 73   public static s
2bfb0 74 72 69 6e 67 20 53 51 4c 69 74 65 56 65 72 73  tring SQLiteVers
2bfc0 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ion..    {..    
2bfd0 20 20 67 65 74 20 7b 20 72 65 74 75 72 6e 20 53    get { return S
2bfe0 51 4c 69 74 65 33 2e 53 51 4c 69 74 65 56 65 72  QLite3.SQLiteVer
2bff0 73 69 6f 6e 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a  sion; }..    }..
2c000 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2c010 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
2c020 73 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73  s method returns
2c030 20 74 68 65 20 73 74 72 69 6e 67 20 77 68 6f 73   the string whos
2c040 65 20 76 61 6c 75 65 20 69 73 20 74 68 65 20 73  e value is the s
2c050 61 6d 65 20 61 73 20 74 68 65 0d 0a 20 20 20 20  ame as the..    
2c060 2f 2f 2f 20 53 51 4c 49 54 45 5f 53 4f 55 52 43  /// SQLITE_SOURC
2c070 45 5f 49 44 20 43 20 70 72 65 70 72 6f 63 65 73  E_ID C preproces
2c080 73 6f 72 20 6d 61 63 72 6f 20 75 73 65 64 20 77  sor macro used w
2c090 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
2c0a0 65 0d 0a 20 20 20 20 2f 2f 2f 20 53 51 4c 69 74  e..    /// SQLit
2c0b0 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 0d  e core library..
2c0c0 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2c0d0 72 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ry>..    public 
2c0e0 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51  static string SQ
2c0f0 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a 20 20  LiteSourceId..  
2c100 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 20 7b    {..      get {
2c110 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e   return SQLite3.
2c120 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 3b 20  SQLiteSourceId; 
2c130 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
2c140 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2c150 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61     /// Returns a
2c160 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69   string containi
2c170 6e 67 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74  ng the compile-t
2c180 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64  ime options used
2c190 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d   to..    /// com
2c1a0 70 69 6c 65 20 74 68 65 20 53 51 4c 69 74 65 20  pile the SQLite 
2c1b0 63 6f 72 65 20 6e 61 74 69 76 65 20 6c 69 62 72  core native libr
2c1c0 61 72 79 2c 20 64 65 6c 69 6d 69 74 65 64 20 77  ary, delimited w
2c1d0 69 74 68 20 73 70 61 63 65 73 2e 0d 0a 20 20 20  ith spaces...   
2c1e0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2c1f0 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
2c200 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74 65  ic string SQLite
2c210 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a  CompileOptions..
2c220 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
2c230 65 74 20 7b 20 72 65 74 75 72 6e 20 53 51 4c 69  et { return SQLi
2c240 74 65 33 2e 53 51 4c 69 74 65 43 6f 6d 70 69 6c  te3.SQLiteCompil
2c250 65 4f 70 74 69 6f 6e 73 3b 20 7d 0d 0a 20 20 20  eOptions; }..   
2c260 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
2c270 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2c280 20 54 68 69 73 20 6d 65 74 68 6f 64 20 72 65 74   This method ret
2c290 75 72 6e 73 20 74 68 65 20 76 65 72 73 69 6f 6e  urns the version
2c2a0 20 6f 66 20 74 68 65 20 69 6e 74 65 72 6f 70 20   of the interop 
2c2b0 53 51 4c 69 74 65 20 61 73 73 65 6d 62 6c 79 0d  SQLite assembly.
2c2c0 0a 20 20 20 20 2f 2f 2f 20 75 73 65 64 2e 20 20  .    /// used.  
2c2d0 49 66 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e  If the SQLite in
2c2e0 74 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 20 69  terop assembly i
2c2f0 73 20 6e 6f 74 20 69 6e 20 75 73 65 20 6f 72 20  s not in use or 
2c300 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 6e 65 63  the..    /// nec
2c310 65 73 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69  essary informati
2c320 6f 6e 20 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74  on cannot be obt
2c330 61 69 6e 65 64 20 66 6f 72 20 61 6e 79 20 72 65  ained for any re
2c340 61 73 6f 6e 2c 20 61 20 6e 75 6c 6c 0d 0a 20 20  ason, a null..  
2c350 20 20 2f 2f 2f 20 76 61 6c 75 65 20 6d 61 79 20    /// value may 
2c360 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20  be returned...  
2c370 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
2c380 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61  ..    public sta
2c390 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
2c3a0 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b  opVersion..    {
2c3b0 0d 0a 20 20 20 20 20 20 67 65 74 20 7b 20 72 65  ..      get { re
2c3c0 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 49 6e 74  turn SQLite3.Int
2c3d0 65 72 6f 70 56 65 72 73 69 6f 6e 3b 20 7d 0d 0a  eropVersion; }..
2c3e0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
2c3f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2c400 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f 64 20  /// This method 
2c410 72 65 74 75 72 6e 73 20 74 68 65 20 73 74 72 69  returns the stri
2c420 6e 67 20 77 68 6f 73 65 20 76 61 6c 75 65 20 63  ng whose value c
2c430 6f 6e 74 61 69 6e 73 20 74 68 65 20 75 6e 69 71  ontains the uniq
2c440 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 64 65 6e  ue..    /// iden
2c450 74 69 66 69 65 72 20 66 6f 72 20 74 68 65 20 73  tifier for the s
2c460 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74 20 75  ource checkout u
2c470 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74 68 65  sed to build the
2c480 20 69 6e 74 65 72 6f 70 0d 0a 20 20 20 20 2f 2f   interop..    //
2c490 2f 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20  / assembly.  If 
2c4a0 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65 72  the SQLite inter
2c4b0 6f 70 20 61 73 73 65 6d 62 6c 79 20 69 73 20 6e  op assembly is n
2c4c0 6f 74 20 69 6e 20 75 73 65 20 6f 72 20 74 68 65  ot in use or the
2c4d0 0d 0a 20 20 20 20 2f 2f 2f 20 6e 65 63 65 73 73  ..    /// necess
2c4e0 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ary information 
2c4f0 63 61 6e 6e 6f 74 20 62 65 20 6f 62 74 61 69 6e  cannot be obtain
2c500 65 64 20 66 6f 72 20 61 6e 79 20 72 65 61 73 6f  ed for any reaso
2c510 6e 2c 20 61 20 6e 75 6c 6c 0d 0a 20 20 20 20 2f  n, a null..    /
2c520 2f 2f 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20  // value may be 
2c530 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20 2f  returned...    /
2c540 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2c550 20 20 20 70 75 62 6c 69 63 20 73 74 61 74 69 63     public static
2c560 20 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 53   string InteropS
2c570 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b 0d 0a  ourceId..    {..
2c580 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75        get { retu
2c590 72 6e 20 53 51 4c 69 74 65 33 2e 49 6e 74 65 72  rn SQLite3.Inter
2c5a0 6f 70 53 6f 75 72 63 65 49 64 3b 20 7d 0d 0a 20  opSourceId; }.. 
2c5b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
2c5c0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
2c5d0 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 73 74 72  // Returns a str
2c5e0 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ing containing t
2c5f0 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  he compile-time 
2c600 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 74 6f 0d  options used to.
2c610 0a 20 20 20 20 2f 2f 2f 20 63 6f 6d 70 69 6c 65  .    /// compile
2c620 20 74 68 65 20 53 51 4c 69 74 65 20 69 6e 74 65   the SQLite inte
2c630 72 6f 70 20 61 73 73 65 6d 62 6c 79 2c 20 64 65  rop assembly, de
2c640 6c 69 6d 69 74 65 64 20 77 69 74 68 20 73 70 61  limited with spa
2c650 63 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ces...    /// </
2c660 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 75  summary>..    pu
2c670 62 6c 69 63 20 73 74 61 74 69 63 20 73 74 72 69  blic static stri
2c680 6e 67 20 49 6e 74 65 72 6f 70 43 6f 6d 70 69 6c  ng InteropCompil
2c690 65 4f 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d  eOptions..    {.
2c6a0 0a 20 20 20 20 20 20 20 20 67 65 74 20 7b 20 72  .        get { r
2c6b0 65 74 75 72 6e 20 53 51 4c 69 74 65 33 2e 49 6e  eturn SQLite3.In
2c6c0 74 65 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69  teropCompileOpti
2c6d0 6f 6e 73 3b 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d  ons; }..    }...
2c6e0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2c6f0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
2c700 20 6d 65 74 68 6f 64 20 72 65 74 75 72 6e 73 20   method returns 
2c710 74 68 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 74  the version of t
2c720 68 65 20 6d 61 6e 61 67 65 64 20 63 6f 6d 70 6f  he managed compo
2c730 6e 65 6e 74 73 20 75 73 65 64 0d 0a 20 20 20 20  nents used..    
2c740 2f 2f 2f 20 74 6f 20 69 6e 74 65 72 61 63 74 20  /// to interact 
2c750 77 69 74 68 20 74 68 65 20 53 51 4c 69 74 65 20  with the SQLite 
2c760 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20 49  core library.  I
2c770 66 20 74 68 65 20 6e 65 63 65 73 73 61 72 79 0d  f the necessary.
2c780 0a 20 20 20 20 2f 2f 2f 20 69 6e 66 6f 72 6d 61  .    /// informa
2c790 74 69 6f 6e 20 63 61 6e 6e 6f 74 20 62 65 20 6f  tion cannot be o
2c7a0 62 74 61 69 6e 65 64 20 66 6f 72 20 61 6e 79 20  btained for any 
2c7b0 72 65 61 73 6f 6e 2c 20 61 20 6e 75 6c 6c 20 76  reason, a null v
2c7c0 61 6c 75 65 20 6d 61 79 0d 0a 20 20 20 20 2f 2f  alue may..    //
2c7d0 2f 20 62 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a  / be returned...
2c7e0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2c7f0 79 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 73  y>..    public s
2c800 74 61 74 69 63 20 73 74 72 69 6e 67 20 50 72 6f  tatic string Pro
2c810 76 69 64 65 72 56 65 72 73 69 6f 6e 0d 0a 20 20  viderVersion..  
2c820 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
2c830 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
2c840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
2c850 28 5f 61 73 73 65 6d 62 6c 79 20 21 3d 20 6e 75  (_assembly != nu
2c860 6c 6c 29 20 3f 0d 0a 20 20 20 20 20 20 20 20 20  ll) ?..         
2c870 20 20 20 20 20 20 20 5f 61 73 73 65 6d 62 6c 79         _assembly
2c880 2e 47 65 74 4e 61 6d 65 28 29 2e 56 65 72 73 69  .GetName().Versi
2c890 6f 6e 2e 54 6f 53 74 72 69 6e 67 28 29 20 3a 20  on.ToString() : 
2c8a0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 7d  null;..        }
2c8b0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2c8c0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2c8d0 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
2c8e0 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 73 74  d returns the st
2c8f0 72 69 6e 67 20 77 68 6f 73 65 20 76 61 6c 75 65  ring whose value
2c900 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 75 6e   contains the un
2c910 69 71 75 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 64  ique..    /// id
2c920 65 6e 74 69 66 69 65 72 20 66 6f 72 20 74 68 65  entifier for the
2c930 20 73 6f 75 72 63 65 20 63 68 65 63 6b 6f 75 74   source checkout
2c940 20 75 73 65 64 20 74 6f 20 62 75 69 6c 64 20 74   used to build t
2c950 68 65 20 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20  he managed..    
2c960 2f 2f 2f 20 63 6f 6d 70 6f 6e 65 6e 74 73 20 63  /// components c
2c970 75 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69  urrently executi
2c980 6e 67 2e 20 20 49 66 20 74 68 65 20 6e 65 63 65  ng.  If the nece
2c990 73 73 61 72 79 20 69 6e 66 6f 72 6d 61 74 69 6f  ssary informatio
2c9a0 6e 0d 0a 20 20 20 20 2f 2f 2f 20 63 61 6e 6e 6f  n..    /// canno
2c9b0 74 20 62 65 20 6f 62 74 61 69 6e 65 64 20 66 6f  t be obtained fo
2c9c0 72 20 61 6e 79 20 72 65 61 73 6f 6e 2c 20 61 20  r any reason, a 
2c9d0 6e 75 6c 6c 20 76 61 6c 75 65 20 6d 61 79 20 62  null value may b
2c9e0 65 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20  e returned...   
2c9f0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2ca00 0a 20 20 20 20 70 75 62 6c 69 63 20 73 74 61 74  .    public stat
2ca10 69 63 20 73 74 72 69 6e 67 20 50 72 6f 76 69 64  ic string Provid
2ca20 65 72 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  erSourceId..    
2ca30 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
2ca40 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2ca50 20 20 20 20 20 20 20 69 66 20 28 5f 61 73 73 65         if (_asse
2ca60 6d 62 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  mbly == null).. 
2ca70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
2ca80 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  eturn null;.... 
2ca90 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
2caa0 67 20 73 6f 75 72 63 65 49 64 20 3d 20 6e 75 6c  g sourceId = nul
2cab0 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
2cac0 20 20 69 66 20 28 5f 61 73 73 65 6d 62 6c 79 2e    if (_assembly.
2cad0 49 73 44 65 66 69 6e 65 64 28 74 79 70 65 6f 66  IsDefined(typeof
2cae0 28 41 73 73 65 6d 62 6c 79 53 6f 75 72 63 65 49  (AssemblySourceI
2caf0 64 41 74 74 72 69 62 75 74 65 29 2c 20 66 61 6c  dAttribute), fal
2cb00 73 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  se))..          
2cb10 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2cb20 20 20 20 20 20 41 73 73 65 6d 62 6c 79 53 6f 75       AssemblySou
2cb30 72 63 65 49 64 41 74 74 72 69 62 75 74 65 20 61  rceIdAttribute a
2cb40 74 74 72 69 62 75 74 65 20 3d 0d 0a 20 20 20 20  ttribute =..    
2cb50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cb60 28 41 73 73 65 6d 62 6c 79 53 6f 75 72 63 65 49  (AssemblySourceI
2cb70 64 41 74 74 72 69 62 75 74 65 29 5f 61 73 73 65  dAttribute)_asse
2cb80 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d 41 74  mbly.GetCustomAt
2cb90 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20 20 20  tributes(..     
2cba0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cbb0 20 20 20 74 79 70 65 6f 66 28 41 73 73 65 6d 62     typeof(Assemb
2cbc0 6c 79 53 6f 75 72 63 65 49 64 41 74 74 72 69 62  lySourceIdAttrib
2cbd0 75 74 65 29 2c 20 66 61 6c 73 65 29 5b 30 5d 3b  ute), false)[0];
2cbe0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cbf0 20 20 20 20 73 6f 75 72 63 65 49 64 20 3d 20 61      sourceId = a
2cc00 74 74 72 69 62 75 74 65 2e 53 6f 75 72 63 65 49  ttribute.SourceI
2cc10 64 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  d;..            
2cc20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
2cc30 20 73 74 72 69 6e 67 20 73 6f 75 72 63 65 54 69   string sourceTi
2cc40 6d 65 53 74 61 6d 70 20 3d 20 6e 75 6c 6c 3b 0d  meStamp = null;.
2cc50 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2cc60 66 20 28 5f 61 73 73 65 6d 62 6c 79 2e 49 73 44  f (_assembly.IsD
2cc70 65 66 69 6e 65 64 28 74 79 70 65 6f 66 28 41 73  efined(typeof(As
2cc80 73 65 6d 62 6c 79 53 6f 75 72 63 65 54 69 6d 65  semblySourceTime
2cc90 53 74 61 6d 70 41 74 74 72 69 62 75 74 65 29 2c  StampAttribute),
2cca0 20 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20   false))..      
2ccb0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
2ccc0 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
2ccd0 79 53 6f 75 72 63 65 54 69 6d 65 53 74 61 6d 70  ySourceTimeStamp
2cce0 41 74 74 72 69 62 75 74 65 20 61 74 74 72 69 62  Attribute attrib
2ccf0 75 74 65 20 3d 0d 0a 20 20 20 20 20 20 20 20 20  ute =..         
2cd00 20 20 20 20 20 20 20 20 20 20 20 28 41 73 73 65             (Asse
2cd10 6d 62 6c 79 53 6f 75 72 63 65 54 69 6d 65 53 74  mblySourceTimeSt
2cd20 61 6d 70 41 74 74 72 69 62 75 74 65 29 5f 61 73  ampAttribute)_as
2cd30 73 65 6d 62 6c 79 2e 47 65 74 43 75 73 74 6f 6d  sembly.GetCustom
2cd40 41 74 74 72 69 62 75 74 65 73 28 0d 0a 20 20 20  Attributes(..   
2cd50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cd60 20 20 20 20 20 74 79 70 65 6f 66 28 41 73 73 65       typeof(Asse
2cd70 6d 62 6c 79 53 6f 75 72 63 65 54 69 6d 65 53 74  mblySourceTimeSt
2cd80 61 6d 70 41 74 74 72 69 62 75 74 65 29 2c 20 66  ampAttribute), f
2cd90 61 6c 73 65 29 5b 30 5d 3b 0d 0a 0d 0a 20 20 20  alse)[0];....   
2cda0 20 20 20 20 20 20 20 20 20 20 20 20 20 73 6f 75               sou
2cdb0 72 63 65 54 69 6d 65 53 74 61 6d 70 20 3d 20 61  rceTimeStamp = a
2cdc0 74 74 72 69 62 75 74 65 2e 53 6f 75 72 63 65 54  ttribute.SourceT
2cdd0 69 6d 65 53 74 61 6d 70 3b 0d 0a 20 20 20 20 20  imeStamp;..     
2cde0 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
2cdf0 20 20 20 20 20 20 20 20 69 66 20 28 28 73 6f 75          if ((sou
2ce00 72 63 65 49 64 20 21 3d 20 6e 75 6c 6c 29 20 7c  rceId != null) |
2ce10 7c 20 28 73 6f 75 72 63 65 54 69 6d 65 53 74 61  | (sourceTimeSta
2ce20 6d 70 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20  mp != null))..  
2ce30 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
2ce40 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
2ce50 28 73 6f 75 72 63 65 49 64 20 3d 3d 20 6e 75 6c  (sourceId == nul
2ce60 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
2ce70 20 20 20 20 20 20 20 20 73 6f 75 72 63 65 49 64          sourceId
2ce80 20 3d 20 22 30 30 30 30 30 30 30 30 30 30 30 30   = "000000000000
2ce90 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30 30  0000000000000000
2cea0 30 30 30 30 30 30 30 30 30 30 30 30 22 3b 0d 0a  000000000000";..
2ceb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2cec0 20 20 69 66 20 28 73 6f 75 72 63 65 54 69 6d 65    if (sourceTime
2ced0 53 74 61 6d 70 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  Stamp == null)..
2cee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cef0 20 20 20 20 73 6f 75 72 63 65 54 69 6d 65 53 74      sourceTimeSt
2cf00 61 6d 70 20 3d 20 22 30 30 30 30 2d 30 30 2d 30  amp = "0000-00-0
2cf10 30 20 30 30 3a 30 30 3a 30 30 20 55 54 43 22 3b  0 00:00:00 UTC";
2cf20 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2cf30 20 20 20 20 72 65 74 75 72 6e 20 48 65 6c 70 65      return Helpe
2cf40 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
2cf50 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2cf60 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
2cf70 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
2cf80 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
2cf90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2cfa0 7b 30 7d 20 7b 31 7d 22 2c 20 73 6f 75 72 63 65  {0} {1}", source
2cfb0 49 64 2c 20 73 6f 75 72 63 65 54 69 6d 65 53 74  Id, sourceTimeSt
2cfc0 61 6d 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  amp);..         
2cfd0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
2cfe0 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2cff0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d000 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
2d010 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll;..           
2d020 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20   }..        }.. 
2d030 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
2d040 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d050 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d060 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d070 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d080 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d090 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
2d0a0 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
2d0b0 0d 0a 20 20 20 20 2f 2f 2f 20 51 75 65 72 69 65  ..    /// Querie
2d0c0 73 20 61 6e 64 20 72 65 74 75 72 6e 73 20 74 68  s and returns th
2d0d0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73  e value of the s
2d0e0 70 65 63 69 66 69 65 64 20 73 65 74 74 69 6e 67  pecified setting
2d0f0 2c 20 75 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  , using the..   
2d100 20 2f 2f 2f 20 63 61 63 68 65 64 20 73 65 74 74   /// cached sett
2d110 69 6e 67 20 6e 61 6d 65 73 20 61 6e 64 20 76 61  ing names and va
2d120 6c 75 65 73 20 66 6f 72 20 74 68 65 20 6c 61 73  lues for the las
2d130 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61  t connection tha
2d140 74 20 75 73 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  t used..    /// 
2d150 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53  the <see cref="S
2d160 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
2d170 4f 70 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2c  Open" /> method,
2d180 20 77 68 65 6e 20 61 76 61 69 6c 61 62 6c 65 2e   when available.
2d190 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
2d1a0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
2d1b0 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
2d1c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
2d1d0 61 6d 65 20 6f 66 20 74 68 65 20 73 65 74 74 69  ame of the setti
2d1e0 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ng...    /// </p
2d1f0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
2d200 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 66 61  param name="defa
2d210 75 6c 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ult">..    /// T
2d220 68 65 20 76 61 6c 75 65 20 74 6f 20 62 65 20 72  he value to be r
2d230 65 74 75 72 6e 65 64 20 69 66 20 74 68 65 20 73  eturned if the s
2d240 65 74 74 69 6e 67 20 68 61 73 20 6e 6f 74 20 62  etting has not b
2d250 65 65 6e 20 73 65 74 20 65 78 70 6c 69 63 69 74  een set explicit
2d260 6c 79 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 63  ly..    /// or c
2d270 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69  annot be determi
2d280 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ned...    /// </
2d290 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
2d2a0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c  <param name="val
2d2b0 75 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ue">..    /// Th
2d2c0 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 63  e value of the c
2d2d0 61 63 68 65 64 20 73 65 74 74 69 6e 67 20 69 73  ached setting is
2d2e0 20 73 74 6f 72 65 64 20 68 65 72 65 20 69 66 20   stored here if 
2d2f0 66 6f 75 6e 64 3b 20 6f 74 68 65 72 77 69 73 65  found; otherwise
2d300 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 76  ,..    /// the v
2d310 61 6c 75 65 20 6f 66 20 3c 70 61 72 61 6d 72 65  alue of <paramre
2d320 66 20 6e 61 6d 65 3d 22 64 65 66 61 75 6c 74 22  f name="default"
2d330 20 2f 3e 20 69 73 20 73 74 6f 72 65 64 20 68 65   /> is stored he
2d340 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  re...    /// </p
2d350 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
2d360 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
2d370 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  / Non-zero if th
2d380 65 20 63 61 63 68 65 64 20 73 65 74 74 69 6e 67  e cached setting
2d390 20 77 61 73 20 66 6f 75 6e 64 3b 20 6f 74 68 65   was found; othe
2d3a0 72 77 69 73 65 2c 20 7a 65 72 6f 2e 0d 0a 20 20  rwise, zero...  
2d3b0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
2d3c0 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74  ..    private st
2d3d0 61 74 69 63 20 62 6f 6f 6c 20 54 72 79 47 65 74  atic bool TryGet
2d3e0 4c 61 73 74 43 61 63 68 65 64 53 65 74 74 69 6e  LastCachedSettin
2d3f0 67 28 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  g(..        stri
2d400 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20 20 20  ng name,..      
2d410 20 20 6f 62 6a 65 63 74 20 40 64 65 66 61 75 6c    object @defaul
2d420 74 2c 0d 0a 20 20 20 20 20 20 20 20 6f 75 74 20  t,..        out 
2d430 6f 62 6a 65 63 74 20 76 61 6c 75 65 0d 0a 20 20  object value..  
2d440 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
2d450 20 20 20 20 20 20 20 20 69 66 20 28 5f 6c 61 73          if (_las
2d460 74 43 6f 6e 6e 65 63 74 69 6f 6e 49 6e 4f 70 65  tConnectionInOpe
2d470 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  n == null)..    
2d480 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2d490 20 20 20 76 61 6c 75 65 20 3d 20 40 64 65 66 61     value = @defa
2d4a0 75 6c 74 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ult;..          
2d4b0 20 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d    return false;.
2d4c0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
2d4d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 6c 61        return _la
2d4e0 73 74 43 6f 6e 6e 65 63 74 69 6f 6e 49 6e 4f 70  stConnectionInOp
2d4f0 65 6e 2e 54 72 79 47 65 74 43 61 63 68 65 64 53  en.TryGetCachedS
2d500 65 74 74 69 6e 67 28 0d 0a 20 20 20 20 20 20 20  etting(..       
2d510 20 20 20 20 20 6e 61 6d 65 2c 20 40 64 65 66 61       name, @defa
2d520 75 6c 74 2c 20 6f 75 74 20 76 61 6c 75 65 29 3b  ult, out value);
2d530 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2d540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d580 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2d5a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2d5b0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64  ry>..    /// Add
2d5c0 73 20 6f 72 20 73 65 74 73 20 74 68 65 20 63 61  s or sets the ca
2d5d0 63 68 65 64 20 73 65 74 74 69 6e 67 20 73 70 65  ched setting spe
2d5e0 63 69 66 69 65 64 20 62 79 20 3c 70 61 72 61 6d  cified by <param
2d5f0 72 65 66 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 20  ref name="name" 
2d600 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 74  />..    /// to t
2d610 68 65 20 76 61 6c 75 65 20 73 70 65 63 69 66 69  he value specifi
2d620 65 64 20 62 79 20 3c 70 61 72 61 6d 72 65 66 20  ed by <paramref 
2d630 6e 61 6d 65 3d 22 76 61 6c 75 65 22 20 2f 3e 20  name="value" /> 
2d640 75 73 69 6e 67 20 74 68 65 20 63 61 63 68 65 64  using the cached
2d650 0d 0a 20 20 20 20 2f 2f 2f 20 73 65 74 74 69 6e  ..    /// settin
2d660 67 20 6e 61 6d 65 73 20 61 6e 64 20 76 61 6c 75  g names and valu
2d670 65 73 20 66 6f 72 20 74 68 65 20 6c 61 73 74 20  es for the last 
2d680 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 68 61 74 20  connection that 
2d690 75 73 65 64 20 74 68 65 0d 0a 20 20 20 20 2f 2f  used the..    //
2d6a0 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  / <see cref="SQL
2d6b0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 70  iteConnection.Op
2d6c0 65 6e 22 20 2f 3e 20 6d 65 74 68 6f 64 2c 20 77  en" /> method, w
2d6d0 68 65 6e 20 61 76 61 69 6c 61 62 6c 65 2e 0d 0a  hen available...
2d6e0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2d6f0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
2d700 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d  am name="name">.
2d710 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d  .    /// The nam
2d720 65 20 6f 66 20 74 68 65 20 63 61 63 68 65 64 20  e of the cached 
2d730 73 65 74 74 69 6e 67 20 74 6f 20 61 64 64 20 6f  setting to add o
2d740 72 20 72 65 70 6c 61 63 65 2e 0d 0a 20 20 20 20  r replace...    
2d750 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
2d760 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2d770 65 3d 22 76 61 6c 75 65 22 3e 0d 0a 20 20 20 20  e="value">..    
2d780 2f 2f 2f 20 54 68 65 20 6e 65 77 20 76 61 6c 75  /// The new valu
2d790 65 20 6f 66 20 74 68 65 20 63 61 63 68 65 64 20  e of the cached 
2d7a0 73 65 74 74 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f  setting...    //
2d7b0 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
2d7c0 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 76  private static v
2d7d0 6f 69 64 20 53 65 74 4c 61 73 74 43 61 63 68 65  oid SetLastCache
2d7e0 64 53 65 74 74 69 6e 67 28 0d 0a 20 20 20 20 20  dSetting(..     
2d7f0 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c 20     string name, 
2d800 2f 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20  /* in */..      
2d810 20 20 6f 62 6a 65 63 74 20 76 61 6c 75 65 20 2f    object value /
2d820 2a 20 69 6e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  * in */..       
2d830 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
2d840 20 20 20 69 66 20 28 5f 6c 61 73 74 43 6f 6e 6e     if (_lastConn
2d850 65 63 74 69 6f 6e 49 6e 4f 70 65 6e 20 3d 3d 20  ectionInOpen == 
2d860 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
2d870 20 20 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20     return;....  
2d880 20 20 20 20 20 20 5f 6c 61 73 74 43 6f 6e 6e 65        _lastConne
2d890 63 74 69 6f 6e 49 6e 4f 70 65 6e 2e 53 65 74 43  ctionInOpen.SetC
2d8a0 61 63 68 65 64 53 65 74 74 69 6e 67 28 6e 61 6d  achedSetting(nam
2d8b0 65 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  e, value);..    
2d8c0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f  }....    ///////
2d8d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d8f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d900 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d910 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2d920 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20  ////////....    
2d930 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
2d940 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75     /// The defau
2d950 6c 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c  lt connection fl
2d960 61 67 73 20 74 6f 20 62 65 20 75 73 65 64 20 66  ags to be used f
2d970 6f 72 20 61 6c 6c 20 6f 70 65 6e 65 64 20 63 6f  or all opened co
2d980 6e 6e 65 63 74 69 6f 6e 73 0d 0a 20 20 20 20 2f  nnections..    /
2d990 2f 2f 20 77 68 65 6e 20 74 68 65 79 20 61 72 65  // when they are
2d9a0 20 6e 6f 74 20 70 72 65 73 65 6e 74 20 69 6e 20   not present in 
2d9b0 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
2d9c0 74 72 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tring...    /// 
2d9d0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
2d9e0 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53 51  public static SQ
2d9f0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
2da00 61 67 73 20 44 65 66 61 75 6c 74 46 6c 61 67 73  ags DefaultFlags
2da10 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2da20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d   get..        {.
2da30 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72  .            str
2da40 69 6e 67 20 6e 61 6d 65 20 3d 20 22 44 65 66 61  ing name = "Defa
2da50 75 6c 74 46 6c 61 67 73 5f 53 51 4c 69 74 65 43  ultFlags_SQLiteC
2da60 6f 6e 6e 65 63 74 69 6f 6e 22 3b 0d 0a 20 20 20  onnection";..   
2da70 20 20 20 20 20 20 20 20 20 6f 62 6a 65 63 74 20           object 
2da80 76 61 6c 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  value;....      
2da90 20 20 20 20 20 20 69 66 20 28 21 54 72 79 47 65        if (!TryGe
2daa0 74 4c 61 73 74 43 61 63 68 65 64 53 65 74 74 69  tLastCachedSetti
2dab0 6e 67 28 6e 61 6d 65 2c 20 6e 75 6c 6c 2c 20 6f  ng(name, null, o
2dac0 75 74 20 76 61 6c 75 65 29 29 0d 0a 20 20 20 20  ut value))..    
2dad0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2dae0 20 20 20 20 20 20 20 20 20 20 20 76 61 6c 75 65             value
2daf0 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
2db00 65 74 68 6f 64 73 2e 47 65 74 53 65 74 74 69 6e  ethods.GetSettin
2db10 67 56 61 6c 75 65 28 6e 61 6d 65 2c 20 6e 75 6c  gValue(name, nul
2db20 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  l);..           
2db30 20 20 20 20 20 53 65 74 4c 61 73 74 43 61 63 68       SetLastCach
2db40 65 64 53 65 74 74 69 6e 67 28 6e 61 6d 65 2c 20  edSetting(name, 
2db50 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
2db60 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
2db70 20 20 20 20 20 20 69 66 20 28 76 61 6c 75 65 20        if (value 
2db80 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
2db90 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
2dba0 20 46 61 6c 6c 62 61 63 6b 44 65 66 61 75 6c 74   FallbackDefault
2dbb0 46 6c 61 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20  Flags;....      
2dbc0 20 20 20 20 20 20 6f 62 6a 65 63 74 20 65 6e 75        object enu
2dbd0 6d 56 61 6c 75 65 20 3d 20 54 72 79 50 61 72 73  mValue = TryPars
2dbe0 65 45 6e 75 6d 28 0d 0a 20 20 20 20 20 20 20 20  eEnum(..        
2dbf0 20 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53          typeof(S
2dc00 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2dc10 6c 61 67 73 29 2c 20 76 61 6c 75 65 2e 54 6f 53  lags), value.ToS
2dc20 74 72 69 6e 67 28 29 2c 20 74 72 75 65 29 3b 0d  tring(), true);.
2dc30 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
2dc40 66 20 28 65 6e 75 6d 56 61 6c 75 65 20 69 73 20  f (enumValue is 
2dc50 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2dc60 46 6c 61 67 73 29 0d 0a 20 20 20 20 20 20 20 20  Flags)..        
2dc70 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28          return (
2dc80 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2dc90 46 6c 61 67 73 29 65 6e 75 6d 56 61 6c 75 65 3b  Flags)enumValue;
2dca0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
2dcb0 72 65 74 75 72 6e 20 46 61 6c 6c 62 61 63 6b 44  return FallbackD
2dcc0 65 66 61 75 6c 74 46 6c 61 67 73 3b 0d 0a 20 20  efaultFlags;..  
2dcd0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2dce0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
2dcf0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd00 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd10 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd30 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dd40 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f  ///////....    /
2dd50 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2dd60 20 20 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20    /// The extra 
2dd70 63 6f 6e 6e 65 63 74 69 6f 6e 20 66 6c 61 67 73  connection flags
2dd80 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20   to be used for 
2dd90 61 6c 6c 20 6f 70 65 6e 65 64 20 63 6f 6e 6e 65  all opened conne
2dda0 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 2f 2f 2f  ctions...    ///
2ddb0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2ddc0 20 70 75 62 6c 69 63 20 73 74 61 74 69 63 20 53   public static S
2ddd0 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2dde0 6c 61 67 73 20 53 68 61 72 65 64 46 6c 61 67 73  lags SharedFlags
2ddf0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
2de00 20 67 65 74 20 7b 20 6c 6f 63 6b 20 28 5f 73 79   get { lock (_sy
2de10 6e 63 52 6f 6f 74 29 20 7b 20 72 65 74 75 72 6e  ncRoot) { return
2de20 20 5f 73 68 61 72 65 64 46 6c 61 67 73 3b 20 7d   _sharedFlags; }
2de30 20 7d 0d 0a 20 20 20 20 20 20 20 20 73 65 74 20   }..        set 
2de40 7b 20 6c 6f 63 6b 20 28 5f 73 79 6e 63 52 6f 6f  { lock (_syncRoo
2de50 74 29 20 7b 20 5f 73 68 61 72 65 64 46 6c 61 67  t) { _sharedFlag
2de60 73 20 3d 20 76 61 6c 75 65 3b 20 7d 20 7d 0d 0a  s = value; } }..
2de70 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
2de80 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2de90 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dea0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2deb0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2dec0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ded0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
2dee0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
2def0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
2df00 6e 73 20 74 68 65 20 73 74 61 74 65 20 6f 66 20  ns the state of 
2df10 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
2df20 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2df30 72 79 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ry>..#if !PLATFO
2df40 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
2df50 4f 52 4b 0d 0a 20 20 20 20 5b 42 72 6f 77 73 61  ORK..    [Browsa
2df60 62 6c 65 28 66 61 6c 73 65 29 2c 20 44 65 73 69  ble(false), Desi
2df70 67 6e 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f  gnerSerializatio
2df80 6e 56 69 73 69 62 69 6c 69 74 79 28 44 65 73 69  nVisibility(Desi
2df90 67 6e 65 72 53 65 72 69 61 6c 69 7a 61 74 69 6f  gnerSerializatio
2dfa0 6e 56 69 73 69 62 69 6c 69 74 79 2e 48 69 64 64  nVisibility.Hidd
2dfb0 65 6e 29 5d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  en)]..#endif..  
2dfc0 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64    public overrid
2dfd0 65 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74 61 74  e ConnectionStat
2dfe0 65 20 53 74 61 74 65 0d 0a 20 20 20 20 7b 0d 0a  e State..    {..
2dff0 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
2e000 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
2e010 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20 20  kDisposed();..  
2e020 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 63 6f        return _co
2e030 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65 3b 0d 0a  nnectionState;..
2e040 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
2e050 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
2e060 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 73  ry>..    /// Pas
2e070 73 65 73 20 61 20 73 68 75 74 64 6f 77 6e 20 72  ses a shutdown r
2e080 65 71 75 65 73 74 20 74 6f 20 74 68 65 20 53 51  equest to the SQ
2e090 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
2e0a0 79 2e 20 20 44 6f 65 73 20 6e 6f 74 20 74 68 72  y.  Does not thr
2e0b0 6f 77 0d 0a 20 20 20 20 2f 2f 2f 20 61 6e 20 65  ow..    /// an e
2e0c0 78 63 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20  xception if the 
2e0d0 73 68 75 74 64 6f 77 6e 20 72 65 71 75 65 73 74  shutdown request
2e0e0 20 66 61 69 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f   fails...    ///
2e0f0 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2e100 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
2e110 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61      /// A standa
2e120 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e  rd SQLite return
2e130 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f   code (i.e. zero
2e140 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64   for success and
2e150 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 0d 0a 20   non-zero for.. 
2e160 20 20 20 2f 2f 2f 20 66 61 69 6c 75 72 65 29 2e     /// failure).
2e170 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
2e180 72 6e 73 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63  rns>..    public
2e190 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2e1a0 20 53 68 75 74 64 6f 77 6e 28 29 0d 0a 20 20 20   Shutdown()..   
2e1b0 20 7b 0d 0a 20 20 20 20 20 20 20 20 43 68 65 63   {..        Chec
2e1c0 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2e1d0 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c          if (_sql
2e1e0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
2e1f0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
2e200 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f   InvalidOperatio
2e210 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61  nException("Data
2e220 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
2e230 6e 6f 74 20 76 61 6c 69 64 20 66 6f 72 20 73 68  not valid for sh
2e240 75 74 64 6f 77 6e 2e 22 29 3b 0d 0a 0d 0a 20 20  utdown.");....  
2e250 20 20 20 20 20 20 5f 73 71 6c 2e 43 6c 6f 73 65        _sql.Close
2e260 28 66 61 6c 73 65 29 3b 20 2f 2a 20 4e 4f 54 45  (false); /* NOTE
2e270 3a 20 4d 55 53 54 20 62 65 20 63 6c 6f 73 65 64  : MUST be closed
2e280 20 62 65 66 6f 72 65 20 73 68 75 74 64 6f 77 6e   before shutdown
2e290 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 53 51  . */..        SQ
2e2a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
2e2b0 20 3d 20 5f 73 71 6c 2e 53 68 75 74 64 6f 77 6e   = _sql.Shutdown
2e2c0 28 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  ();....#if !NET_
2e2d0 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
2e2e0 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
2e2f0 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 21          if (rc !
2e300 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
2e310 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
2e320 20 20 20 53 79 73 74 65 6d 2e 44 69 61 67 6e 6f     System.Diagno
2e330 73 74 69 63 73 2e 54 72 61 63 65 2e 57 72 69 74  stics.Trace.Writ
2e340 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
2e350 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
2e360 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
2e370 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2e380 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2e390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e3a0 22 53 68 75 74 64 6f 77 6e 20 28 49 6e 73 74 61  "Shutdown (Insta
2e3b0 6e 63 65 29 20 46 61 69 6c 65 64 3a 20 7b 30 7d  nce) Failed: {0}
2e3c0 22 2c 20 72 63 29 29 3b 0d 0a 23 65 6e 64 69 66  ", rc));..#endif
2e3d0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
2e3e0 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn rc;..    }...
2e3f0 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2e400 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 61 73 73  y>..    /// Pass
2e410 65 73 20 61 20 73 68 75 74 64 6f 77 6e 20 72 65  es a shutdown re
2e420 71 75 65 73 74 20 74 6f 20 74 68 65 20 53 51 4c  quest to the SQL
2e430 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79  ite core library
2e440 2e 20 20 54 68 72 6f 77 73 20 61 6e 0d 0a 20 20  .  Throws an..  
2e450 20 20 2f 2f 2f 20 65 78 63 65 70 74 69 6f 6e 20    /// exception 
2e460 69 66 20 74 68 65 20 73 68 75 74 64 6f 77 6e 20  if the shutdown 
2e470 72 65 71 75 65 73 74 20 66 61 69 6c 73 20 61 6e  request fails an
2e480 64 20 74 68 65 20 6e 6f 2d 74 68 72 6f 77 20 70  d the no-throw p
2e490 61 72 61 6d 65 74 65 72 0d 0a 20 20 20 20 2f 2f  arameter..    //
2e4a0 2f 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0d 0a  / is non-zero...
2e4b0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
2e4c0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
2e4d0 61 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f  am name="directo
2e4e0 72 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ries">..    /// 
2e4f0 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65  Non-zero to rese
2e500 74 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61  t the database a
2e510 6e 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72  nd temporary dir
2e520 65 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69  ectories to thei
2e530 72 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75  r..    /// defau
2e540 6c 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68  lt values, which
2e550 20 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20   should be null 
2e560 66 6f 72 20 62 6f 74 68 2e 0d 0a 20 20 20 20 2f  for both...    /
2e570 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
2e580 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
2e590 3d 22 6e 6f 54 68 72 6f 77 22 3e 0d 0a 20 20 20  ="noThrow">..   
2e5a0 20 2f 2f 2f 20 57 68 65 6e 20 6e 6f 6e 2d 7a 65   /// When non-ze
2e5b0 72 6f 2c 20 74 68 72 6f 77 20 61 6e 20 65 78 63  ro, throw an exc
2e5c0 65 70 74 69 6f 6e 20 69 66 20 74 68 65 20 73 68  eption if the sh
2e5d0 75 74 64 6f 77 6e 20 72 65 71 75 65 73 74 20 66  utdown request f
2e5e0 61 69 6c 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ails...    /// <
2e5f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 70 75 62  /param>..    pub
2e600 6c 69 63 20 73 74 61 74 69 63 20 76 6f 69 64 20  lic static void 
2e610 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20  Shutdown(..     
2e620 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72     bool director
2e630 69 65 73 2c 0d 0a 20 20 20 20 20 20 20 20 62 6f  ies,..        bo
2e640 6f 6c 20 6e 6f 54 68 72 6f 77 0d 0a 20 20 20 20  ol noThrow..    
2e650 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
2e660 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
2e670 72 43 6f 64 65 20 72 63 20 3d 20 53 51 4c 69 74  rCode rc = SQLit
2e680 65 33 2e 53 74 61 74 69 63 53 68 75 74 64 6f 77  e3.StaticShutdow
2e690 6e 28 64 69 72 65 63 74 6f 72 69 65 73 29 3b 0d  n(directories);.
2e6a0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 72  ...        if (r
2e6b0 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  c != SQLiteError
2e6c0 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
2e6d0 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2e6e0 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2e6f0 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2e700 20 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d            System
2e710 2e 44 69 61 67 6e 6f 73 74 69 63 73 2e 54 72 61  .Diagnostics.Tra
2e720 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
2e730 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
2e740 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
2e750 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
2e760 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
2e770 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
2e780 20 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e         "Shutdown
2e790 20 28 53 74 61 74 69 63 29 20 46 61 69 6c 65 64   (Static) Failed
2e7a0 3a 20 7b 30 7d 22 2c 20 72 63 29 29 3b 0d 0a 23  : {0}", rc));..#
2e7b0 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20  endif....       
2e7c0 20 20 20 20 20 69 66 20 28 21 6e 6f 54 68 72 6f       if (!noThro
2e7d0 77 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  w)..            
2e7e0 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
2e7f0 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63  LiteException(rc
2e800 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
2e810 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
2e820 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72    /// Enables or
2e830 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64   disabled extend
2e840 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20  ed result codes 
2e850 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69  returned by SQLi
2e860 74 65 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76  te..    public v
2e870 6f 69 64 20 53 65 74 45 78 74 65 6e 64 65 64 52  oid SetExtendedR
2e880 65 73 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20  esultCodes(bool 
2e890 62 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a  bOnOff)..    {..
2e8a0 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
2e8b0 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2e8c0 69 66 20 28 5f 73 71 6c 20 21 3d 20 6e 75 6c 6c  if (_sql != null
2e8d0 29 20 5f 73 71 6c 2e 53 65 74 45 78 74 65 6e 64  ) _sql.SetExtend
2e8e0 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 4f  edResultCodes(bO
2e8f0 6e 4f 66 66 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  nOff);..    }.. 
2e900 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f     /// Enables o
2e910 72 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e  r disabled exten
2e920 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73  ded result codes
2e930 20 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c   returned by SQL
2e940 69 74 65 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ite..    public 
2e950 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
2e960 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20  ResultCode()..  
2e970 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63 6b    {..      Check
2e980 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a 20  Disposed();.... 
2e990 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
2e9a0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
2e9b0 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
2e9c0 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
2e9d0 69 6f 6e 28 22 44 61 74 61 62 61 73 65 20 63 6f  ion("Database co
2e9e0 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74 20 76 61 6c  nnection not val
2e9f0 69 64 20 66 6f 72 20 67 65 74 74 69 6e 67 20 72  id for getting r
2ea00 65 73 75 6c 74 20 63 6f 64 65 2e 22 29 3b 0d 0a  esult code.");..
2ea10 20 20 20 20 20 20 72 65 74 75 72 6e 20 5f 73 71        return _sq
2ea20 6c 2e 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d  l.ResultCode();.
2ea30 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
2ea40 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
2ea50 6c 65 64 20 65 78 74 65 6e 64 65 64 20 72 65 73  led extended res
2ea60 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e  ult codes return
2ea70 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20  ed by SQLite..  
2ea80 20 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45    public SQLiteE
2ea90 72 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65  rrorCode Extende
2eaa0 64 52 65 73 75 6c 74 43 6f 64 65 28 29 0d 0a 20  dResultCode().. 
2eab0 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65 63     {..      Chec
2eac0 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 0d 0a  kDisposed();....
2ead0 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
2eae0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
2eaf0 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c   throw new Inval
2eb00 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70  idOperationExcep
2eb10 74 69 6f 6e 28 22 44 61 74 61 62 61 73 65 20 63  tion("Database c
2eb20 6f 6e 6e 65 63 74 69 6f 6e 20 6e 6f 74 20 76 61  onnection not va
2eb30 6c 69 64 20 66 6f 72 20 67 65 74 74 69 6e 67 20  lid for getting 
2eb40 65 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20  extended result 
2eb50 63 6f 64 65 2e 22 29 3b 0d 0a 20 20 20 20 20 20  code.");..      
2eb60 72 65 74 75 72 6e 20 5f 73 71 6c 2e 45 78 74 65  return _sql.Exte
2eb70 6e 64 65 64 52 65 73 75 6c 74 43 6f 64 65 28 29  ndedResultCode()
2eb80 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
2eb90 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65  /// Add a log me
2eba0 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51  ssage via the SQ
2ebb0 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67  Lite sqlite3_log
2ebc0 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20   interface...   
2ebd0 20 70 75 62 6c 69 63 20 76 6f 69 64 20 4c 6f 67   public void Log
2ebe0 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
2ebf0 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65  rorCode iErrCode
2ec00 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67  , string zMessag
2ec10 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
2ec20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29   CheckDisposed()
2ec30 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f  ;....      if (_
2ec40 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql == null)..  
2ec50 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
2ec60 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69  w InvalidOperati
2ec70 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74  onException("Dat
2ec80 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
2ec90 20 6e 6f 74 20 76 61 6c 69 64 20 66 6f 72 20 6c   not valid for l
2eca0 6f 67 67 69 6e 67 20 6d 65 73 73 61 67 65 2e 22  ogging message."
2ecb0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 73 71 6c  );....      _sql
2ecc0 2e 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72 72  .LogMessage(iErr
2ecd0 43 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29 3b  Code, zMessage);
2ece0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2ecf0 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65 73  // Add a log mes
2ed00 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51 4c  sage via the SQL
2ed10 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 20  ite sqlite3_log 
2ed20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20 20  interface...    
2ed30 70 75 62 6c 69 63 20 76 6f 69 64 20 4c 6f 67 4d  public void LogM
2ed40 65 73 73 61 67 65 28 69 6e 74 20 69 45 72 72 43  essage(int iErrC
2ed50 6f 64 65 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73  ode, string zMes
2ed60 73 61 67 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  sage)..    {..  
2ed70 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2ed80 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  d();....      if
2ed90 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
2eda0 0a 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77  .          throw
2edb0 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
2edc0 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22  ationException("
2edd0 44 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  Database connect
2ede0 69 6f 6e 20 6e 6f 74 20 76 61 6c 69 64 20 66 6f  ion not valid fo
2edf0 72 20 6c 6f 67 67 69 6e 67 20 6d 65 73 73 61 67  r logging messag
2ee00 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f  e.");....      _
2ee10 73 71 6c 2e 4c 6f 67 4d 65 73 73 61 67 65 28 28  sql.LogMessage((
2ee20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 29  SQLiteErrorCode)
2ee30 69 45 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73 61  iErrCode, zMessa
2ee40 67 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23  ge);..    }....#
2ee50 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44 45 43  if INTEROP_CODEC
2ee60 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e 43 4c   || INTEROP_INCL
2ee70 55 44 45 5f 53 45 45 0d 0a 20 20 20 20 2f 2f 2f  UDE_SEE..    ///
2ee80 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2ee90 2f 2f 2f 20 43 68 61 6e 67 65 20 74 68 65 20 70  /// Change the p
2eea0 61 73 73 77 6f 72 64 20 28 6f 72 20 61 73 73 69  assword (or assi
2eeb0 67 6e 20 61 20 70 61 73 73 77 6f 72 64 29 20 74  gn a password) t
2eec0 6f 20 61 6e 20 6f 70 65 6e 20 64 61 74 61 62 61  o an open databa
2eed0 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  se...    /// </s
2eee0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2eef0 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20   <remarks>..    
2ef00 2f 2f 2f 20 4e 6f 20 72 65 61 64 65 72 73 20 6f  /// No readers o
2ef10 72 20 77 72 69 74 65 72 73 20 6d 61 79 20 62 65  r writers may be
2ef20 20 61 63 74 69 76 65 20 66 6f 72 20 74 68 69 73   active for this
2ef30 20 70 72 6f 63 65 73 73 2e 20 20 54 68 65 20 64   process.  The d
2ef40 61 74 61 62 61 73 65 20 6d 75 73 74 20 61 6c 72  atabase must alr
2ef50 65 61 64 79 20 62 65 20 6f 70 65 6e 0d 0a 20 20  eady be open..  
2ef60 20 20 2f 2f 2f 20 61 6e 64 20 69 66 20 69 74 20    /// and if it 
2ef70 61 6c 72 65 61 64 79 20 77 61 73 20 70 61 73 73  already was pass
2ef80 77 6f 72 64 20 70 72 6f 74 65 63 74 65 64 2c 20  word protected, 
2ef90 74 68 65 20 65 78 69 73 74 69 6e 67 20 70 61 73  the existing pas
2efa0 73 77 6f 72 64 20 6d 75 73 74 20 61 6c 72 65 61  sword must alrea
2efb0 64 79 20 68 61 76 65 20 62 65 65 6e 20 73 75 70  dy have been sup
2efc0 70 6c 69 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  plied...    /// 
2efd0 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20  </remarks>..    
2efe0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
2eff0 22 6e 65 77 50 61 73 73 77 6f 72 64 22 3e 54 68  "newPassword">Th
2f000 65 20 6e 65 77 20 70 61 73 73 77 6f 72 64 20 74  e new password t
2f010 6f 20 61 73 73 69 67 6e 20 74 6f 20 74 68 65 20  o assign to the 
2f020 64 61 74 61 62 61 73 65 3c 2f 70 61 72 61 6d 3e  database</param>
2f030 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  ..    public voi
2f040 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  d ChangePassword
2f050 28 73 74 72 69 6e 67 20 6e 65 77 50 61 73 73 77  (string newPassw
2f060 6f 72 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ord)..    {..   
2f070 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64     CheckDisposed
2f080 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 43 68 61  ();....      Cha
2f090 6e 67 65 50 61 73 73 77 6f 72 64 28 53 74 72 69  ngePassword(Stri
2f0a0 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2f0b0 28 6e 65 77 50 61 73 73 77 6f 72 64 29 20 3f 20  (newPassword) ? 
2f0c0 6e 75 6c 6c 20 3a 20 55 54 46 38 45 6e 63 6f 64  null : UTF8Encod
2f0d0 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74 65  ing.UTF8.GetByte
2f0e0 73 28 6e 65 77 50 61 73 73 77 6f 72 64 29 29 3b  s(newPassword));
2f0f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
2f100 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2f110 20 20 2f 2f 2f 20 43 68 61 6e 67 65 20 74 68 65    /// Change the
2f120 20 70 61 73 73 77 6f 72 64 20 28 6f 72 20 61 73   password (or as
2f130 73 69 67 6e 20 61 20 70 61 73 73 77 6f 72 64 29  sign a password)
2f140 20 74 6f 20 61 6e 20 6f 70 65 6e 20 64 61 74 61   to an open data
2f150 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  base...    /// <
2f160 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
2f170 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  // <remarks>..  
2f180 20 20 2f 2f 2f 20 4e 6f 20 72 65 61 64 65 72 73    /// No readers
2f190 20 6f 72 20 77 72 69 74 65 72 73 20 6d 61 79 20   or writers may 
2f1a0 62 65 20 61 63 74 69 76 65 20 66 6f 72 20 74 68  be active for th
2f1b0 69 73 20 70 72 6f 63 65 73 73 2e 20 20 54 68 65  is process.  The
2f1c0 20 64 61 74 61 62 61 73 65 20 6d 75 73 74 20 61   database must a
2f1d0 6c 72 65 61 64 79 20 62 65 20 6f 70 65 6e 0d 0a  lready be open..
2f1e0 20 20 20 20 2f 2f 2f 20 61 6e 64 20 69 66 20 69      /// and if i
2f1f0 74 20 61 6c 72 65 61 64 79 20 77 61 73 20 70 61  t already was pa
2f200 73 73 77 6f 72 64 20 70 72 6f 74 65 63 74 65 64  ssword protected
2f210 2c 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 70  , the existing p
2f220 61 73 73 77 6f 72 64 20 6d 75 73 74 20 61 6c 72  assword must alr
2f230 65 61 64 79 20 68 61 76 65 20 62 65 65 6e 20 73  eady have been s
2f240 75 70 70 6c 69 65 64 2e 0d 0a 20 20 20 20 2f 2f  upplied...    //
2f250 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  / </remarks>..  
2f260 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
2f270 65 3d 22 6e 65 77 50 61 73 73 77 6f 72 64 22 3e  e="newPassword">
2f280 54 68 65 20 6e 65 77 20 70 61 73 73 77 6f 72 64  The new password
2f290 20 74 6f 20 61 73 73 69 67 6e 20 74 6f 20 74 68   to assign to th
2f2a0 65 20 64 61 74 61 62 61 73 65 3c 2f 70 61 72 61  e database</para
2f2b0 6d 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76  m>..    public v
2f2c0 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f  oid ChangePasswo
2f2d0 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73  rd(byte[] newPas
2f2e0 73 77 6f 72 64 29 0d 0a 20 20 20 20 7b 0d 0a 20  sword)..    {.. 
2f2f0 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
2f300 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed();....      i
2f310 66 20 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  f (_connectionSt
2f320 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f  ate != Connectio
2f330 6e 53 74 61 74 65 2e 4f 70 65 6e 29 0d 0a 20 20  nState.Open)..  
2f340 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
2f350 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
2f360 45 78 63 65 70 74 69 6f 6e 28 22 44 61 74 61 62  Exception("Datab
2f370 61 73 65 20 6d 75 73 74 20 62 65 20 6f 70 65 6e  ase must be open
2f380 65 64 20 62 65 66 6f 72 65 20 63 68 61 6e 67 69  ed before changi
2f390 6e 67 20 74 68 65 20 70 61 73 73 77 6f 72 64 2e  ng the password.
2f3a0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 73 71  ");....      _sq
2f3b0 6c 2e 43 68 61 6e 67 65 50 61 73 73 77 6f 72 64  l.ChangePassword
2f3c0 28 6e 65 77 50 61 73 73 77 6f 72 64 29 3b 0d 0a  (newPassword);..
2f3d0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
2f3e0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f3f0 2f 2f 2f 20 53 65 74 73 20 74 68 65 20 70 61 73  /// Sets the pas
2f400 73 77 6f 72 64 20 66 6f 72 20 61 20 70 61 73 73  sword for a pass
2f410 77 6f 72 64 2d 70 72 6f 74 65 63 74 65 64 20 64  word-protected d
2f420 61 74 61 62 61 73 65 2e 20 20 41 20 70 61 73 73  atabase.  A pass
2f430 77 6f 72 64 2d 70 72 6f 74 65 63 74 65 64 20 64  word-protected d
2f440 61 74 61 62 61 73 65 20 69 73 0d 0a 20 20 20 20  atabase is..    
2f450 2f 2f 2f 20 75 6e 75 73 61 62 6c 65 20 66 6f 72  /// unusable for
2f460 20 61 6e 79 20 6f 70 65 72 61 74 69 6f 6e 20 75   any operation u
2f470 6e 74 69 6c 20 74 68 65 20 70 61 73 73 77 6f 72  ntil the passwor
2f480 64 20 68 61 73 20 62 65 65 6e 20 73 65 74 2e 0d  d has been set..
2f490 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
2f4a0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
2f4b0 72 61 6d 20 6e 61 6d 65 3d 22 64 61 74 61 62 61  ram name="databa
2f4c0 73 65 50 61 73 73 77 6f 72 64 22 3e 54 68 65 20  sePassword">The 
2f4d0 70 61 73 73 77 6f 72 64 20 66 6f 72 20 74 68 65  password for the
2f4e0 20 64 61 74 61 62 61 73 65 3c 2f 70 61 72 61 6d   database</param
2f4f0 3e 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f  >..    public vo
2f500 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28 73  id SetPassword(s
2f510 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 50 61  tring databasePa
2f520 73 73 77 6f 72 64 29 0d 0a 20 20 20 20 7b 0d 0a  ssword)..    {..
2f530 20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f        CheckDispo
2f540 73 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sed();....      
2f550 53 65 74 50 61 73 73 77 6f 72 64 28 53 74 72 69  SetPassword(Stri
2f560 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79  ng.IsNullOrEmpty
2f570 28 64 61 74 61 62 61 73 65 50 61 73 73 77 6f 72  (databasePasswor
2f580 64 29 20 3f 20 6e 75 6c 6c 20 3a 20 55 54 46 38  d) ? null : UTF8
2f590 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65  Encoding.UTF8.Ge
2f5a0 74 42 79 74 65 73 28 64 61 74 61 62 61 73 65 50  tBytes(databaseP
2f5b0 61 73 73 77 6f 72 64 29 29 3b 0d 0a 20 20 20 20  assword));..    
2f5c0 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
2f5d0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2f5e0 53 65 74 73 20 74 68 65 20 70 61 73 73 77 6f 72  Sets the passwor
2f5f0 64 20 66 6f 72 20 61 20 70 61 73 73 77 6f 72 64  d for a password
2f600 2d 70 72 6f 74 65 63 74 65 64 20 64 61 74 61 62  -protected datab
2f610 61 73 65 2e 20 20 41 20 70 61 73 73 77 6f 72 64  ase.  A password
2f620 2d 70 72 6f 74 65 63 74 65 64 20 64 61 74 61 62  -protected datab
2f630 61 73 65 20 69 73 0d 0a 20 20 20 20 2f 2f 2f 20  ase is..    /// 
2f640 75 6e 75 73 61 62 6c 65 20 66 6f 72 20 61 6e 79  unusable for any
2f650 20 6f 70 65 72 61 74 69 6f 6e 20 75 6e 74 69 6c   operation until
2f660 20 74 68 65 20 70 61 73 73 77 6f 72 64 20 68 61   the password ha
2f670 73 20 62 65 65 6e 20 73 65 74 2e 0d 0a 20 20 20  s been set...   
2f680 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
2f690 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
2f6a0 6e 61 6d 65 3d 22 64 61 74 61 62 61 73 65 50 61  name="databasePa
2f6b0 73 73 77 6f 72 64 22 3e 54 68 65 20 70 61 73 73  ssword">The pass
2f6c0 77 6f 72 64 20 66 6f 72 20 74 68 65 20 64 61 74  word for the dat
2f6d0 61 62 61 73 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20  abase</param>.. 
2f6e0 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20 53     public void S
2f6f0 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  etPassword(byte[
2f700 5d 20 64 61 74 61 62 61 73 65 50 61 73 73 77 6f  ] databasePasswo
2f710 72 64 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  rd)..    {..    
2f720 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65 64 28    CheckDisposed(
2f730 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28  );....      if (
2f740 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53 74 61 74 65  _connectionState
2f750 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f 6e 53 74   != ConnectionSt
2f760 61 74 65 2e 43 6c 6f 73 65 64 29 0d 0a 20 20 20  ate.Closed)..   
2f770 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
2f780 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
2f790 78 63 65 70 74 69 6f 6e 28 22 50 61 73 73 77 6f  xception("Passwo
2f7a0 72 64 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73  rd can only be s
2f7b0 65 74 20 62 65 66 6f 72 65 20 74 68 65 20 64 61  et before the da
2f7c0 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
2f7d0 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  .");....      if
2f7e0 20 28 64 61 74 61 62 61 73 65 50 61 73 73 77 6f   (databasePasswo
2f7f0 72 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  rd != null)..   
2f800 20 20 20 20 20 69 66 20 28 64 61 74 61 62 61 73       if (databas
2f810 65 50 61 73 73 77 6f 72 64 2e 4c 65 6e 67 74 68  ePassword.Length
2f820 20 3d 3d 20 30 29 20 64 61 74 61 62 61 73 65 50   == 0) databaseP
2f830 61 73 73 77 6f 72 64 20 3d 20 6e 75 6c 6c 3b 0d  assword = null;.
2f840 0a 0d 0a 20 20 20 20 20 20 5f 70 61 73 73 77 6f  ...      _passwo
2f850 72 64 20 3d 20 64 61 74 61 62 61 73 65 50 61 73  rd = databasePas
2f860 73 77 6f 72 64 3b 0d 0a 20 20 20 20 7d 0d 0a 23  sword;..    }..#
2f870 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
2f880 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
2f890 2f 2f 2f 20 51 75 65 72 69 65 73 20 6f 72 20 6d  /// Queries or m
2f8a0 6f 64 69 66 69 65 73 20 74 68 65 20 6e 75 6d 62  odifies the numb
2f8b0 65 72 20 6f 66 20 72 65 74 72 69 65 73 20 6f 72  er of retries or
2f8c0 20 74 68 65 20 72 65 74 72 79 20 69 6e 74 65 72   the retry inter
2f8d0 76 61 6c 20 28 69 6e 20 6d 69 6c 6c 69 73 65 63  val (in millisec
2f8e0 6f 6e 64 73 29 20 66 6f 72 0d 0a 20 20 20 20 2f  onds) for..    /
2f8f0 2f 2f 20 63 65 72 74 61 69 6e 20 49 2f 4f 20 6f  // certain I/O o
2f900 70 65 72 61 74 69 6f 6e 73 20 74 68 61 74 20 6d  perations that m
2f910 61 79 20 66 61 69 6c 20 64 75 65 20 74 6f 20 61  ay fail due to a
2f920 6e 74 69 2d 76 69 72 75 73 20 73 6f 66 74 77 61  nti-virus softwa
2f930 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  re...    /// </s
2f940 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2f950 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f   <param name="co
2f960 75 6e 74 22 3e 54 68 65 20 6e 75 6d 62 65 72 20  unt">The number 
2f970 6f 66 20 74 69 6d 65 73 20 74 6f 20 72 65 74 72  of times to retr
2f980 79 20 74 68 65 20 49 2f 4f 20 6f 70 65 72 61 74  y the I/O operat
2f990 69 6f 6e 2e 20 20 41 20 6e 65 67 61 74 69 76 65  ion.  A negative
2f9a0 20 76 61 6c 75 65 0d 0a 20 20 20 20 2f 2f 2f 20   value..    /// 
2f9b0 77 69 6c 6c 20 63 61 75 73 65 20 74 68 65 20 63  will cause the c
2f9c0 75 72 72 65 6e 74 20 63 6f 75 6e 74 20 74 6f 20  urrent count to 
2f9d0 62 65 20 71 75 65 72 69 65 64 20 61 6e 64 20 72  be queried and r
2f9e0 65 70 6c 61 63 65 20 74 68 61 74 20 6e 65 67 61  eplace that nega
2f9f0 74 69 76 65 20 76 61 6c 75 65 2e 3c 2f 70 61 72  tive value.</par
2fa00 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
2fa10 72 61 6d 20 6e 61 6d 65 3d 22 69 6e 74 65 72 76  ram name="interv
2fa20 61 6c 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  al">The number o
2fa30 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 74  f milliseconds t
2fa40 6f 20 77 61 69 74 20 62 65 66 6f 72 65 20 72 65  o wait before re
2fa50 74 72 79 69 6e 67 20 74 68 65 20 49 2f 4f 0d 0a  trying the I/O..
2fa60 20 20 20 20 2f 2f 2f 20 6f 70 65 72 61 74 69 6f      /// operatio
2fa70 6e 2e 20 20 54 68 69 73 20 6e 75 6d 62 65 72 20  n.  This number 
2fa80 69 73 20 6d 75 6c 74 69 70 6c 69 65 64 20 62 79  is multiplied by
2fa90 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 72   the number of r
2faa0 65 74 72 79 20 61 74 74 65 6d 70 74 73 20 73 6f  etry attempts so
2fab0 20 66 61 72 20 74 6f 20 63 6f 6d 65 0d 0a 20 20   far to come..  
2fac0 20 20 2f 2f 2f 20 75 70 20 77 69 74 68 20 74 68    /// up with th
2fad0 65 20 66 69 6e 61 6c 20 6e 75 6d 62 65 72 20 6f  e final number o
2fae0 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 74  f milliseconds t
2faf0 6f 20 77 61 69 74 2e 20 20 41 20 6e 65 67 61 74  o wait.  A negat
2fb00 69 76 65 20 76 61 6c 75 65 20 77 69 6c 6c 20 63  ive value will c
2fb10 61 75 73 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f  ause the..    //
2fb20 2f 20 63 75 72 72 65 6e 74 20 69 6e 74 65 72 76  / current interv
2fb30 61 6c 20 74 6f 20 62 65 20 71 75 65 72 69 65 64  al to be queried
2fb40 20 61 6e 64 20 72 65 70 6c 61 63 65 20 74 68 61   and replace tha
2fb50 74 20 6e 65 67 61 74 69 76 65 20 76 61 6c 75 65  t negative value
2fb60 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
2fb70 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 5a 65 72 6f  // <returns>Zero
2fb80 20 66 6f 72 20 73 75 63 63 65 73 73 2c 20 6e 6f   for success, no
2fb90 6e 2d 7a 65 72 6f 20 66 6f 72 20 65 72 72 6f 72  n-zero for error
2fba0 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
2fbb0 20 70 75 62 6c 69 63 20 53 51 4c 69 74 65 45 72   public SQLiteEr
2fbc0 72 6f 72 43 6f 64 65 20 53 65 74 41 76 52 65 74  rorCode SetAvRet
2fbd0 72 79 28 72 65 66 20 69 6e 74 20 63 6f 75 6e 74  ry(ref int count
2fbe0 2c 20 72 65 66 20 69 6e 74 20 69 6e 74 65 72 76  , ref int interv
2fbf0 61 6c 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  al)..    {..    
2fc00 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
2fc10 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
2fc20 69 66 20 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53  if (_connectionS
2fc30 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69  tate != Connecti
2fc40 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29 0d 0a 20  onState.Open).. 
2fc50 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
2fc60 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
2fc70 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
2fc80 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2fc90 20 22 44 61 74 61 62 61 73 65 20 6d 75 73 74 20   "Database must 
2fca0 62 65 20 6f 70 65 6e 65 64 20 62 65 66 6f 72 65  be opened before
2fcb0 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 41 56   changing the AV
2fcc0 20 72 65 74 72 79 20 70 61 72 61 6d 65 74 65 72   retry parameter
2fcd0 73 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  s.");....       
2fce0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
2fcf0 20 72 63 3b 0d 0a 20 20 20 20 20 20 20 20 49 6e   rc;..        In
2fd00 74 50 74 72 20 70 41 72 67 20 3d 20 49 6e 74 50  tPtr pArg = IntP
2fd10 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
2fd20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
2fd30 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2fd40 70 41 72 67 20 3d 20 4d 61 72 73 68 61 6c 2e 41  pArg = Marshal.A
2fd50 6c 6c 6f 63 48 47 6c 6f 62 61 6c 28 73 69 7a 65  llocHGlobal(size
2fd60 6f 66 28 69 6e 74 29 20 2a 20 32 29 3b 0d 0a 0d  of(int) * 2);...
2fd70 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61 72  .            Mar
2fd80 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32 28  shal.WriteInt32(
2fd90 70 41 72 67 2c 20 30 2c 20 63 6f 75 6e 74 29 3b  pArg, 0, count);
2fda0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4d 61  ..            Ma
2fdb0 72 73 68 61 6c 2e 57 72 69 74 65 49 6e 74 33 32  rshal.WriteInt32
2fdc0 28 70 41 72 67 2c 20 73 69 7a 65 6f 66 28 69 6e  (pArg, sizeof(in
2fdd0 74 29 2c 20 69 6e 74 65 72 76 61 6c 29 3b 0d 0a  t), interval);..
2fde0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 63  ..            rc
2fdf0 20 3d 20 5f 73 71 6c 2e 46 69 6c 65 43 6f 6e 74   = _sql.FileCont
2fe00 72 6f 6c 28 6e 75 6c 6c 2c 20 53 51 4c 49 54 45  rol(null, SQLITE
2fe10 5f 46 43 4e 54 4c 5f 57 49 4e 33 32 5f 41 56 5f  _FCNTL_WIN32_AV_
2fe20 52 45 54 52 59 2c 20 70 41 72 67 29 3b 0d 0a 0d  RETRY, pArg);...
2fe30 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
2fe40 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
2fe50 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
2fe60 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
2fe70 20 20 20 20 20 20 20 20 20 20 20 63 6f 75 6e 74             count
2fe80 20 3d 20 4d 61 72 73 68 61 6c 2e 52 65 61 64 49   = Marshal.ReadI
2fe90 6e 74 33 32 28 70 41 72 67 2c 20 30 29 3b 0d 0a  nt32(pArg, 0);..
2fea0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2feb0 69 6e 74 65 72 76 61 6c 20 3d 20 4d 61 72 73 68  interval = Marsh
2fec0 61 6c 2e 52 65 61 64 49 6e 74 33 32 28 70 41 72  al.ReadInt32(pAr
2fed0 67 2c 20 73 69 7a 65 6f 66 28 69 6e 74 29 29 3b  g, sizeof(int));
2fee0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
2fef0 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
2ff00 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20      finally..   
2ff10 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
2ff20 20 20 20 20 69 66 20 28 70 41 72 67 20 21 3d 20      if (pArg != 
2ff30 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
2ff40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4d 61                Ma
2ff50 72 73 68 61 6c 2e 46 72 65 65 48 47 6c 6f 62 61  rshal.FreeHGloba
2ff60 6c 28 70 41 72 67 29 3b 0d 0a 20 20 20 20 20 20  l(pArg);..      
2ff70 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
2ff80 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d  eturn rc;..    }
2ff90 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
2ffa0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53  mary>..    /// S
2ffb0 65 74 73 20 74 68 65 20 63 68 75 6e 6b 20 73 69  ets the chunk si
2ffc0 7a 65 20 66 6f 72 20 74 68 65 20 70 72 69 6d 61  ze for the prima
2ffd0 72 79 20 66 69 6c 65 20 61 73 73 6f 63 69 61 74  ry file associat
2ffe0 65 64 20 77 69 74 68 20 74 68 69 73 20 64 61 74  ed with this dat
2fff0 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  abase..    /// c
30000 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
30010 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
30020 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
30030 61 6d 65 3d 22 73 69 7a 65 22 3e 0d 0a 20 20 20  ame="size">..   
30040 20 2f 2f 2f 20 54 68 65 20 6e 65 77 20 63 68 75   /// The new chu
30050 6e 6b 20 73 69 7a 65 20 66 6f 72 20 74 68 65 20  nk size for the 
30060 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2c 20 69  main database, i
30070 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20 20 2f 2f  n bytes...    //
30080 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
30090 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
300a0 20 20 20 2f 2f 2f 20 5a 65 72 6f 20 66 6f 72 20     /// Zero for 
300b0 73 75 63 63 65 73 73 2c 20 6e 6f 6e 2d 7a 65 72  success, non-zer
300c0 6f 20 66 6f 72 20 65 72 72 6f 72 2e 0d 0a 20 20  o for error...  
300d0 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e    /// </returns>
300e0 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 53 51 4c  ..    public SQL
300f0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
30100 43 68 75 6e 6b 53 69 7a 65 28 69 6e 74 20 73 69  ChunkSize(int si
30110 7a 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ze)..    {..    
30120 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
30130 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  d();....        
30140 69 66 20 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53  if (_connectionS
30150 74 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69  tate != Connecti
30160 6f 6e 53 74 61 74 65 2e 4f 70 65 6e 29 0d 0a 20  onState.Open).. 
30170 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
30180 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
30190 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
301a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
301b0 20 22 44 61 74 61 62 61 73 65 20 6d 75 73 74 20   "Database must 
301c0 62 65 20 6f 70 65 6e 65 64 20 62 65 66 6f 72 65  be opened before
301d0 20 63 68 61 6e 67 69 6e 67 20 74 68 65 20 63 68   changing the ch
301e0 75 6e 6b 20 73 69 7a 65 2e 22 29 3b 0d 0a 0d 0a  unk size.");....
301f0 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
30200 41 72 67 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Arg = IntPtr.Zer
30210 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
30220 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
30230 20 20 20 20 20 20 20 20 20 20 70 41 72 67 20 3d            pArg =
30240 20 4d 61 72 73 68 61 6c 2e 41 6c 6c 6f 63 48 47   Marshal.AllocHG
30250 6c 6f 62 61 6c 28 73 69 7a 65 6f 66 28 69 6e 74  lobal(sizeof(int
30260 29 20 2a 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20  ) * 1);....     
30270 20 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 57         Marshal.W
30280 72 69 74 65 49 6e 74 33 32 28 70 41 72 67 2c 20  riteInt32(pArg, 
30290 30 2c 20 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20  0, size);....   
302a0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
302b0 5f 73 71 6c 2e 46 69 6c 65 43 6f 6e 74 72 6f 6c  _sql.FileControl
302c0 28 6e 75 6c 6c 2c 20 53 51 4c 49 54 45 5f 46 43  (null, SQLITE_FC
302d0 4e 54 4c 5f 43 48 55 4e 4b 5f 53 49 5a 45 2c 20  NTL_CHUNK_SIZE, 
302e0 70 41 72 67 29 3b 0d 0a 20 20 20 20 20 20 20 20  pArg);..        
302f0 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
30300 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ly..        {.. 
30310 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70             if (p
30320 41 72 67 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  Arg != IntPtr.Ze
30330 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ro)..           
30340 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 46 72 65       Marshal.Fre
30350 65 48 47 6c 6f 62 61 6c 28 70 41 72 67 29 3b 0d  eHGlobal(pArg);.
30360 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
30370 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
30380 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
30390 52 65 6d 6f 76 65 73 20 6f 6e 65 20 73 65 74 20  Removes one set 
303a0 6f 66 20 73 75 72 72 6f 75 6e 64 69 6e 67 20 73  of surrounding s
303b0 69 6e 67 6c 65 20 2d 4f 52 2d 20 64 6f 75 62 6c  ingle -OR- doubl
303c0 65 20 71 75 6f 74 65 73 20 66 72 6f 6d 20 74 68  e quotes from th
303d0 65 20 73 74 72 69 6e 67 0d 0a 20 20 20 20 2f 2f  e string..    //
303e0 2f 20 76 61 6c 75 65 20 61 6e 64 20 72 65 74 75  / value and retu
303f0 72 6e 73 20 74 68 65 20 72 65 73 75 6c 74 69 6e  rns the resultin
30400 67 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2e 20  g string value. 
30410 20 49 66 20 74 68 65 20 73 74 72 69 6e 67 20 69   If the string i
30420 73 20 6e 75 6c 6c 2c 20 65 6d 70 74 79 2c 0d 0a  s null, empty,..
30430 20 20 20 20 2f 2f 2f 20 6f 72 20 63 6f 6e 74 61      /// or conta
30440 69 6e 73 20 71 75 6f 74 65 73 20 74 68 61 74 20  ins quotes that 
30450 61 72 65 20 6e 6f 74 20 62 61 6c 61 6e 63 65 64  are not balanced
30460 2c 20 6e 6f 74 68 69 6e 67 20 69 73 20 64 6f 6e  , nothing is don
30470 65 20 61 6e 64 20 74 68 65 20 6f 72 69 67 69 6e  e and the origin
30480 61 6c 0d 0a 20 20 20 20 2f 2f 2f 20 73 74 72 69  al..    /// stri
30490 6e 67 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  ng value will be
304a0 20 72 65 74 75 72 6e 65 64 2e 0d 0a 20 20 20 20   returned...    
304b0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
304c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
304d0 61 6d 65 3d 22 76 61 6c 75 65 22 3e 54 68 65 20  ame="value">The 
304e0 73 74 72 69 6e 67 20 76 61 6c 75 65 20 74 6f 20  string value to 
304f0 70 72 6f 63 65 73 73 2e 3c 2f 70 61 72 61 6d 3e  process.</param>
30500 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
30510 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
30520 20 73 74 72 69 6e 67 20 76 61 6c 75 65 2c 20 6d   string value, m
30530 6f 64 69 66 69 65 64 20 74 6f 20 72 65 6d 6f 76  odified to remov
30540 65 20 6f 6e 65 20 73 65 74 20 6f 66 20 73 75 72  e one set of sur
30550 72 6f 75 6e 64 69 6e 67 20 73 69 6e 67 6c 65 20  rounding single 
30560 2d 4f 52 2d 0d 0a 20 20 20 20 2f 2f 2f 20 64 6f  -OR-..    /// do
30570 75 62 6c 65 20 71 75 6f 74 65 73 2c 20 69 66 20  uble quotes, if 
30580 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a 20 20 20  applicable...   
30590 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
305a0 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 61  .    private sta
305b0 74 69 63 20 73 74 72 69 6e 67 20 55 6e 77 72 61  tic string Unwra
305c0 70 53 74 72 69 6e 67 28 73 74 72 69 6e 67 20 76  pString(string v
305d0 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
305e0 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
305f0 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 76  .IsNullOrEmpty(v
30600 61 6c 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20  alue))..        
30610 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
30620 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
30630 2f 20 4e 4f 54 45 3a 20 54 68 65 20 73 74 72 69  / NOTE: The stri
30640 6e 67 20 69 73 20 6e 75 6c 6c 20 6f 72 20 65 6d  ng is null or em
30650 70 74 79 2c 20 72 65 74 75 72 6e 20 69 74 20 76  pty, return it v
30660 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20 20 20 20  erbatim...      
30670 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
30680 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
30690 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
306a0 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65  ..        int le
306b0 6e 67 74 68 20 3d 20 76 61 6c 75 65 2e 4c 65 6e  ngth = value.Len
306c0 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  gth;....        
306d0 69 66 20 28 28 28 76 61 6c 75 65 5b 30 5d 20 3d  if (((value[0] =
306e0 3d 20 27 5c 27 27 29 20 26 26 20 28 76 61 6c 75  = '\'') && (valu
306f0 65 5b 6c 65 6e 67 74 68 20 2d 20 31 5d 20 3d 3d  e[length - 1] ==
30700 20 27 5c 27 27 29 29 20 7c 7c 0d 0a 20 20 20 20   '\'')) ||..    
30710 20 20 20 20 20 20 20 20 28 28 76 61 6c 75 65 5b          ((value[
30720 30 5d 20 3d 3d 20 27 22 27 29 20 26 26 20 28 76  0] == '"') && (v
30730 61 6c 75 65 5b 6c 65 6e 67 74 68 20 2d 20 31 5d  alue[length - 1]
30740 20 3d 3d 20 27 22 27 29 29 29 0d 0a 20 20 20 20   == '"')))..    
30750 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
30760 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
30770 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 52 65 6d 6f     // NOTE: Remo
30780 76 65 20 74 68 65 20 66 69 72 73 74 20 61 6e 64  ve the first and
30790 20 6c 61 73 74 20 63 68 61 72 61 63 74 65 72 2e   last character.
307a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
307b0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
307c0 74 75 72 6e 20 76 61 6c 75 65 2e 53 75 62 73 74  turn value.Subst
307d0 72 69 6e 67 28 31 2c 20 6c 65 6e 67 74 68 20 2d  ring(1, length -
307e0 20 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d   2);..        }.
307f0 0a 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  ...        //.. 
30800 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
30810 4e 6f 20 6d 61 74 63 68 2c 20 72 65 74 75 72 6e  No match, return
30820 20 74 68 65 20 69 6e 70 75 74 20 73 74 72 69 6e   the input strin
30830 67 20 76 65 72 62 61 74 69 6d 2e 0d 0a 20 20 20  g verbatim...   
30840 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
30850 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
30860 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
30870 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
30880 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74  /// Determines t
30890 68 65 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  he directory to 
308a0 62 65 20 75 73 65 64 20 77 68 65 6e 20 64 65 61  be used when dea
308b0 6c 69 6e 67 20 77 69 74 68 20 74 68 65 20 22 7c  ling with the "|
308c0 44 61 74 61 44 69 72 65 63 74 6f 72 79 7c 22 0d  DataDirectory|".
308d0 0a 20 20 20 20 2f 2f 2f 20 6d 61 63 72 6f 20 69  .    /// macro i
308e0 6e 20 61 20 64 61 74 61 62 61 73 65 20 66 69 6c  n a database fil
308f0 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f  e name...    ///
30900 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
30910 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a   /// <returns>..
30920 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 69 72 65      /// The dire
30930 63 74 6f 72 79 20 74 6f 20 75 73 65 20 69 6e 20  ctory to use in 
30940 70 6c 61 63 65 20 6f 66 20 74 68 65 20 22 7c 44  place of the "|D
30950 61 74 61 44 69 72 65 63 74 6f 72 79 7c 22 20 6d  ataDirectory|" m
30960 61 63 72 6f 20 2d 4f 52 2d 20 6e 75 6c 6c 20 69  acro -OR- null i
30970 66 20 69 74 0d 0a 20 20 20 20 2f 2f 2f 20 63 61  f it..    /// ca
30980 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d 69 6e  nnot be determin
30990 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  ed...    /// </r
309a0 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69  eturns>..    pri
309b0 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69  vate static stri
309c0 6e 67 20 47 65 74 44 61 74 61 44 69 72 65 63 74  ng GetDataDirect
309d0 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ory()..    {..#i
309e0 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  f PLATFORM_COMPA
309f0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
30a00 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75       string resu
30a10 6c 74 20 3d 20 50 61 74 68 2e 47 65 74 44 69 72  lt = Path.GetDir
30a20 65 63 74 6f 72 79 4e 61 6d 65 28 0d 0a 20 20 20  ectoryName(..   
30a30 20 20 20 20 20 20 20 20 20 41 73 73 65 6d 62 6c           Assembl
30a40 79 2e 47 65 74 43 61 6c 6c 69 6e 67 41 73 73 65  y.GetCallingAsse
30a50 6d 62 6c 79 28 29 2e 47 65 74 4e 61 6d 65 28 29  mbly().GetName()
30a60 2e 43 6f 64 65 42 61 73 65 29 3b 0d 0a 23 65 6c  .CodeBase);..#el
30a70 73 65 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  se..        stri
30a80 6e 67 20 72 65 73 75 6c 74 20 3d 20 41 70 70 44  ng result = AppD
30a90 6f 6d 61 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d  omain.CurrentDom
30aa0 61 69 6e 2e 47 65 74 44 61 74 61 28 0d 0a 20 20  ain.GetData(..  
30ab0 20 20 20 20 20 20 20 20 20 20 22 44 61 74 61 44            "DataD
30ac0 69 72 65 63 74 6f 72 79 22 29 20 61 73 20 73 74  irectory") as st
30ad0 72 69 6e 67 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ring;....       
30ae0 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75   if (String.IsNu
30af0 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c 74  llOrEmpty(result
30b00 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ))..            
30b10 72 65 73 75 6c 74 20 3d 20 41 70 70 44 6f 6d 61  result = AppDoma
30b20 69 6e 2e 43 75 72 72 65 6e 74 44 6f 6d 61 69 6e  in.CurrentDomain
30b30 2e 42 61 73 65 44 69 72 65 63 74 6f 72 79 3b 0d  .BaseDirectory;.
30b40 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
30b50 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
30b60 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
30b70 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
30b80 20 20 20 2f 2f 2f 20 45 78 70 61 6e 64 20 74 68     /// Expand th
30b90 65 20 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68  e filename of th
30ba0 65 20 64 61 74 61 20 73 6f 75 72 63 65 2c 20 72  e data source, r
30bb0 65 73 6f 6c 76 69 6e 67 20 74 68 65 20 7c 44 61  esolving the |Da
30bc0 74 61 44 69 72 65 63 74 6f 72 79 7c 0d 0a 20 20  taDirectory|..  
30bd0 20 20 2f 2f 2f 20 6d 61 63 72 6f 20 61 73 20 61    /// macro as a
30be0 70 70 72 6f 70 72 69 61 74 65 2e 0d 0a 20 20 20  ppropriate...   
30bf0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30c00 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
30c10 6e 61 6d 65 3d 22 73 6f 75 72 63 65 46 69 6c 65  name="sourceFile
30c20 22 3e 54 68 65 20 64 61 74 61 62 61 73 65 20 66  ">The database f
30c30 69 6c 65 6e 61 6d 65 20 74 6f 20 65 78 70 61 6e  ilename to expan
30c40 64 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  d</param>..    /
30c50 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
30c60 74 6f 46 75 6c 6c 50 61 74 68 22 3e 0d 0a 20 20  toFullPath">..  
30c70 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
30c80 66 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 66  f the returned f
30c90 69 6c 65 20 6e 61 6d 65 20 73 68 6f 75 6c 64 20  ile name should 
30ca0 62 65 20 63 6f 6e 76 65 72 74 65 64 20 74 6f 20  be converted to 
30cb0 61 20 66 75 6c 6c 20 70 61 74 68 0d 0a 20 20 20  a full path..   
30cc0 20 2f 2f 2f 20 28 65 78 63 65 70 74 20 77 68 65   /// (except whe
30cd0 6e 20 75 73 69 6e 67 20 74 68 65 20 2e 4e 45 54  n using the .NET
30ce0 20 43 6f 6d 70 61 63 74 20 46 72 61 6d 65 77 6f   Compact Framewo
30cf0 72 6b 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  rk)...    /// </
30d00 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
30d10 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65 78 70  <returns>The exp
30d20 61 6e 64 65 64 20 70 61 74 68 20 61 6e 64 20 66  anded path and f
30d30 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 66  ilename of the f
30d40 69 6c 65 6e 61 6d 65 3c 2f 72 65 74 75 72 6e 73  ilename</returns
30d50 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 73  >..    private s
30d60 74 61 74 69 63 20 73 74 72 69 6e 67 20 45 78 70  tatic string Exp
30d70 61 6e 64 46 69 6c 65 4e 61 6d 65 28 73 74 72 69  andFileName(stri
30d80 6e 67 20 73 6f 75 72 63 65 46 69 6c 65 2c 20 62  ng sourceFile, b
30d90 6f 6f 6c 20 74 6f 46 75 6c 6c 50 61 74 68 29 0d  ool toFullPath).
30da0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
30db0 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c  if (String.IsNul
30dc0 6c 4f 72 45 6d 70 74 79 28 73 6f 75 72 63 65 46  lOrEmpty(sourceF
30dd0 69 6c 65 29 29 20 72 65 74 75 72 6e 20 73 6f 75  ile)) return sou
30de0 72 63 65 46 69 6c 65 3b 0d 0a 0d 0a 20 20 20 20  rceFile;....    
30df0 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 46 69      if (sourceFi
30e00 6c 65 2e 53 74 61 72 74 73 57 69 74 68 28 5f 64  le.StartsWith(_d
30e10 61 74 61 44 69 72 65 63 74 6f 72 79 2c 20 53 74  ataDirectory, St
30e20 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
30e30 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
30e40 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
30e50 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
30e60 67 20 64 61 74 61 44 69 72 65 63 74 6f 72 79 20  g dataDirectory 
30e70 3d 20 47 65 74 44 61 74 61 44 69 72 65 63 74 6f  = GetDataDirecto
30e80 72 79 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ry();....       
30e90 20 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 46       if (sourceF
30ea0 69 6c 65 2e 4c 65 6e 67 74 68 20 3e 20 5f 64 61  ile.Length > _da
30eb0 74 61 44 69 72 65 63 74 6f 72 79 2e 4c 65 6e 67  taDirectory.Leng
30ec0 74 68 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  th)..           
30ed0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
30ee0 20 20 20 20 69 66 20 28 73 6f 75 72 63 65 46 69      if (sourceFi
30ef0 6c 65 5b 5f 64 61 74 61 44 69 72 65 63 74 6f 72  le[_dataDirector
30f00 79 2e 4c 65 6e 67 74 68 5d 20 3d 3d 20 50 61 74  y.Length] == Pat
30f10 68 2e 44 69 72 65 63 74 6f 72 79 53 65 70 61 72  h.DirectorySepar
30f20 61 74 6f 72 43 68 61 72 20 7c 7c 0d 0a 20 20 20  atorChar ||..   
30f30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
30f40 20 73 6f 75 72 63 65 46 69 6c 65 5b 5f 64 61 74   sourceFile[_dat
30f50 61 44 69 72 65 63 74 6f 72 79 2e 4c 65 6e 67 74  aDirectory.Lengt
30f60 68 5d 20 3d 3d 20 50 61 74 68 2e 41 6c 74 44 69  h] == Path.AltDi
30f70 72 65 63 74 6f 72 79 53 65 70 61 72 61 74 6f 72  rectorySeparator
30f80 43 68 61 72 29 0d 0a 20 20 20 20 20 20 20 20 20  Char)..         
30f90 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63             sourc
30fa0 65 46 69 6c 65 20 3d 20 73 6f 75 72 63 65 46 69  eFile = sourceFi
30fb0 6c 65 2e 52 65 6d 6f 76 65 28 5f 64 61 74 61 44  le.Remove(_dataD
30fc0 69 72 65 63 74 6f 72 79 2e 4c 65 6e 67 74 68 2c  irectory.Length,
30fd0 20 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20   1);..          
30fe0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
30ff0 20 73 6f 75 72 63 65 46 69 6c 65 20 3d 20 50 61   sourceFile = Pa
31000 74 68 2e 43 6f 6d 62 69 6e 65 28 64 61 74 61 44  th.Combine(dataD
31010 69 72 65 63 74 6f 72 79 2c 20 73 6f 75 72 63 65  irectory, source
31020 46 69 6c 65 2e 53 75 62 73 74 72 69 6e 67 28 5f  File.Substring(_
31030 64 61 74 61 44 69 72 65 63 74 6f 72 79 2e 4c 65  dataDirectory.Le
31040 6e 67 74 68 29 29 3b 0d 0a 20 20 20 20 20 20 20  ngth));..       
31050 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46   }....#if !PLATF
31060 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
31070 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
31080 20 28 74 6f 46 75 6c 6c 50 61 74 68 29 0d 0a 20   (toFullPath).. 
31090 20 20 20 20 20 20 20 20 20 20 20 73 6f 75 72 63             sourc
310a0 65 46 69 6c 65 20 3d 20 50 61 74 68 2e 47 65 74  eFile = Path.Get
310b0 46 75 6c 6c 50 61 74 68 28 73 6f 75 72 63 65 46  FullPath(sourceF
310c0 69 6c 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d  ile);..#endif...
310d0 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
310e0 73 6f 75 72 63 65 46 69 6c 65 3b 0d 0a 20 20 20  sourceFile;..   
310f0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 3c 6f 76   }....    ///<ov
31100 65 72 6c 6f 61 64 73 3e 0d 0a 20 20 20 20 2f 2f  erloads>..    //
31110 2f 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  / The following 
31120 63 6f 6d 6d 61 6e 64 73 20 61 72 65 20 75 73 65  commands are use
31130 64 20 74 6f 20 65 78 74 72 61 63 74 20 73 63 68  d to extract sch
31140 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
31150 6f 75 74 20 6f 66 20 74 68 65 20 64 61 74 61 62  out of the datab
31160 61 73 65 2e 20 20 56 61 6c 69 64 20 73 63 68 65  ase.  Valid sche
31170 6d 61 20 74 79 70 65 73 20 61 72 65 3a 0d 0a 20  ma types are:.. 
31180 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 20 74 79 70     /// <list typ
31190 65 3d 22 62 75 6c 6c 65 74 22 3e 0d 0a 20 20 20  e="bullet">..   
311a0 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 20   /// <item>..   
311b0 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
311c0 6e 3e 4d 65 74 61 44 61 74 61 43 6f 6c 6c 65 63  n>MetaDataCollec
311d0 74 69 6f 6e 73 3c 2f 64 65 73 63 72 69 70 74 69  tions</descripti
311e0 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 69  on>..    /// </i
311f0 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69  tem>..    /// <i
31200 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 64  tem>..    /// <d
31210 65 73 63 72 69 70 74 69 6f 6e 3e 44 61 74 61 53  escription>DataS
31220 6f 75 72 63 65 49 6e 66 6f 72 6d 61 74 69 6f 6e  ourceInformation
31230 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a  </description>..
31240 20 20 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d      /// </item>.
31250 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d  .    /// <item>.
31260 0a 20 20 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69  .    /// <descri
31270 70 74 69 6f 6e 3e 43 61 74 61 6c 6f 67 73 3c 2f  ption>Catalogs</
31280 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20  description>..  
31290 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20    /// </item>.. 
312a0 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20     /// <item>.. 
312b0 20 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74     /// <descript
312c0 69 6f 6e 3e 43 6f 6c 75 6d 6e 73 3c 2f 64 65 73  ion>Columns</des
312d0 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f  cription>..    /
312e0 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  // </item>..    
312f0 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 20 20  /// <item>..    
31300 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
31310 3e 46 6f 72 65 69 67 6e 4b 65 79 73 3c 2f 64 65  >ForeignKeys</de
31320 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 20 20  scription>..    
31330 2f 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20  /// </item>..   
31340 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 20   /// <item>..   
31350 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
31360 6e 3e 49 6e 64 65 78 65 73 3c 2f 64 65 73 63 72  n>Indexes</descr
31370 69 70 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f  iption>..    ///
31380 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f   </item>..    //
31390 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f  / <item>..    //
313a0 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 49  / <description>I
313b0 6e 64 65 78 43 6f 6c 75 6d 6e 73 3c 2f 64 65 73  ndexColumns</des
313c0 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f  cription>..    /
313d0 2f 2f 20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20  // </item>..    
313e0 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20 20 20 20  /// <item>..    
313f0 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f 6e  /// <description
31400 3e 54 61 62 6c 65 73 3c 2f 64 65 73 63 72 69 70  >Tables</descrip
31410 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion>..    /// <
31420 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /item>..    /// 
31430 3c 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  <item>..    /// 
31440 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 56 69 65  <description>Vie
31450 77 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  ws</description>
31460 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d  ..    /// </item
31470 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
31480 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 64 65 73 63  >..    /// <desc
31490 72 69 70 74 69 6f 6e 3e 56 69 65 77 43 6f 6c 75  ription>ViewColu
314a0 6d 6e 73 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e  mns</description
314b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 69 74 65  >..    /// </ite
314c0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c 69  m>..    /// </li
314d0 73 74 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6f  st>..    /// </o
314e0 76 65 72 6c 6f 61 64 73 3e 0d 0a 20 20 20 20 2f  verloads>..    /
314f0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
31500 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
31510 65 20 4d 65 74 61 44 61 74 61 43 6f 6c 6c 65 63  e MetaDataCollec
31520 74 69 6f 6e 73 20 73 63 68 65 6d 61 0d 0a 20 20  tions schema..  
31530 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
31540 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
31550 6e 73 3e 41 20 44 61 74 61 54 61 62 6c 65 20 6f  ns>A DataTable o
31560 66 20 74 68 65 20 4d 65 74 61 44 61 74 61 43 6f  f the MetaDataCo
31570 6c 6c 65 63 74 69 6f 6e 73 20 73 63 68 65 6d 61  llections schema
31580 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
31590 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
315a0 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68  DataTable GetSch
315b0 65 6d 61 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ema()..    {..  
315c0 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73 65      CheckDispose
315d0 64 28 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  d();..      retu
315e0 72 6e 20 47 65 74 53 63 68 65 6d 61 28 22 4d 65  rn GetSchema("Me
315f0 74 61 44 61 74 61 43 6f 6c 6c 65 63 74 69 6f 6e  taDataCollection
31600 73 22 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20  s", null);..    
31610 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
31620 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
31630 52 65 74 75 72 6e 73 20 73 63 68 65 6d 61 20 69  Returns schema i
31640 6e 66 6f 72 6d 61 74 69 6f 6e 20 6f 66 20 74 68  nformation of th
31650 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c  e specified coll
31660 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ection..    /// 
31670 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
31680 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
31690 22 63 6f 6c 6c 65 63 74 69 6f 6e 4e 61 6d 65 22  "collectionName"
316a0 3e 54 68 65 20 73 63 68 65 6d 61 20 63 6f 6c 6c  >The schema coll
316b0 65 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65  ection to retrie
316c0 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  ve</param>..    
316d0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 44  /// <returns>A D
316e0 61 74 61 54 61 62 6c 65 20 6f 66 20 74 68 65 20  ataTable of the 
316f0 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c 65 63  specified collec
31700 74 69 6f 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  tion</returns>..
31710 20 20 20 20 70 75 62 6c 69 63 20 6f 76 65 72 72      public overr
31720 69 64 65 20 44 61 74 61 54 61 62 6c 65 20 47 65  ide DataTable Ge
31730 74 53 63 68 65 6d 61 28 73 74 72 69 6e 67 20 63  tSchema(string c
31740 6f 6c 6c 65 63 74 69 6f 6e 4e 61 6d 65 29 0d 0a  ollectionName)..
31750 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 43 68 65      {..      Che
31760 63 6b 44 69 73 70 6f 73 65 64 28 29 3b 0d 0a 20  ckDisposed();.. 
31770 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 53       return GetS
31780 63 68 65 6d 61 28 63 6f 6c 6c 65 63 74 69 6f 6e  chema(collection
31790 4e 61 6d 65 2c 20 6e 65 77 20 73 74 72 69 6e 67  Name, new string
317a0 5b 30 5d 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  [0]);..    }....
317b0 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
317c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 72 69  >..    /// Retri
317d0 65 76 65 73 20 73 63 68 65 6d 61 20 69 6e 66 6f  eves schema info
317e0 72 6d 61 74 69 6f 6e 20 75 73 69 6e 67 20 74 68  rmation using th
317f0 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6e 73  e specified cons
31800 74 72 61 69 6e 74 28 73 29 20 66 6f 72 20 74 68  traint(s) for th
31810 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6c 6c  e specified coll
31820 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  ection..    /// 
31830 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
31840 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
31850 22 63 6f 6c 6c 65 63 74 69 6f 6e 4e 61 6d 65 22  "collectionName"
31860 3e 54 68 65 20 63 6f 6c 6c 65 63 74 69 6f 6e 20  >The collection 
31870 74 6f 20 72 65 74 72 69 65 76 65 2e 3c 2f 70 61  to retrieve.</pa
31880 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
31890 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 74 72  aram name="restr
318a0 69 63 74 69 6f 6e 56 61 6c 75 65 73 22 3e 0d 0a  ictionValues">..
318b0 20 20 20 20 2f 2f 2f 20 54 68 65 20 72 65 73 74      /// The rest
318c0 72 69 63 74 69 6f 6e 73 20 74 6f 20 69 6d 70 6f  rictions to impo
318d0 73 65 2e 20 20 54 79 70 69 63 61 6c 6c 79 2c 20  se.  Typically, 
318e0 74 68 69 73 20 6d 61 79 20 69 6e 63 6c 75 64 65  this may include
318f0 3a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74  :..    /// <list
31900 20 74 79 70 65 3d 22 74 61 62 6c 65 22 3e 0d 0a   type="table">..
31910 20 20 20 20 2f 2f 2f 20 3c 6c 69 73 74 68 65 61      /// <listhea
31920 64 65 72 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 74  der>..    /// <t
31930 65 72 6d 3e 72 65 73 74 72 69 63 74 69 6f 6e 56  erm>restrictionV
31940 61 6c 75 65 73 20 65 6c 65 6d 65 6e 74 20 69 6e  alues element in
31950 64 65 78 3c 2f 74 65 72 6d 3e 0d 0a 20 20 20 20  dex</term>..    
31960 2f 2f 2f 20 3c 74 65 72 6d 3e 75 73 61 67 65 3c  /// <term>usage<
31970 2f 74 65 72 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  /term>..    /// 
31980 3c 2f 6c 69 73 74 68 65 61 64 65 72 3e 0d 0a 20  </listheader>.. 
31990 20 20 20 2f 2f 2f 20 3c 69 74 65 6d 3e 0d 0a 20     /// <item>.. 
319a0 20 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74     /// <descript
319b0 69 6f 6e 3e 30 3c 2f 64 65 73 63 72 69 70 74 69  ion>0</descripti
319c0 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 64 65  on>..    /// <de
319d0 73 63 72 69 70 74 69 6f 6e 3e 54 68 65 20 64 61  scription>The da
319e0 74 61 62 61 73 65 20 28 6f 72 20 63 61 74 61 6c  tabase (or catal
319f0 6f 67 29 20 6e 61 6d 65 2c 20 69 66 20 61 70 70  og) name, if app
31a00 6c 69 63 61 62 6c 65 2e 3c 2f 64 65 73 63 72 69  licable.</descri
31a10 70 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ption>..    /// 
31a20 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
31a30 20 3c 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f   <item>..    ///
31a40 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 31 3c   <description>1<
31a50 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
31a60 20 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74     /// <descript
31a70 69 6f 6e 3e 54 68 65 20 73 63 68 65 6d 61 20 6e  ion>The schema n
31a80 61 6d 65 2e 20 20 54 68 69 73 20 69 73 20 6e 6f  ame.  This is no
31a90 74 20 75 73 65 64 20 62 79 20 74 68 69 73 20 70  t used by this p
31aa0 72 6f 76 69 64 65 72 2e 3c 2f 64 65 73 63 72 69  rovider.</descri
31ab0 70 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20  ption>..    /// 
31ac0 3c 2f 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  </item>..    ///
31ad0 20 3c 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f   <item>..    ///
31ae0 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 32 3c   <description>2<
31af0 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20  /description>.. 
31b00 20 20 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74     /// <descript
31b10 69 6f 6e 3e 54 68 65 20 74 61 62 6c 65 20 6e 61  ion>The table na
31b20 6d 65 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c  me, if applicabl
31b30 65 2e 3c 2f 64 65 73 63 72 69 70 74 69 6f 6e 3e  e.</description>
31b40 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 69 74 65 6d  ..    /// </item
31b50 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 69 74 65 6d  >..    /// <item
31b60 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 64 65 73 63  >..    /// <desc
31b70 72 69 70 74 69 6f 6e 3e 33 3c 2f 64 65 73 63 72  ription>3</descr
31b80 69 70 74 69 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f  iption>..    ///
31b90 20 3c 64 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a   <description>..
31ba0 20 20 20 20 2f 2f 2f 20 44 65 70 65 6e 64 73 20      /// Depends 
31bb0 6f 6e 20 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d  on <paramref nam
31bc0 65 3d 22 63 6f 6c 6c 65 63 74 69 6f 6e 4e 61 6d  e="collectionNam
31bd0 65 22 20 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  e" />...    /// 
31be0 57 68 65 6e 20 22 49 6e 64 65 78 43 6f 6c 75 6d  When "IndexColum
31bf0 6e 73 22 2c 20 69 74 20 69 73 20 74 68 65 20 69  ns", it is the i
31c00 6e 64 65 78 20 6e 61 6d 65 3b 20 6f 74 68 65 72  ndex name; other
31c10 77 69 73 65 2c 20 69 74 20 69 73 20 74 68 65 20  wise, it is the 
31c20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 2e 0d 0a 20 20  column name...  
31c30 20 20 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74    /// </descript
31c40 69 6f 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion>..    /// </
31c50 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
31c60 69 74 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  item>..    /// <
31c70 64 65 73 63 72 69 70 74 69 6f 6e 3e 34 3c 2f 64  description>4</d
31c80 65 73 63 72 69 70 74 69 6f 6e 3e 0d 0a 20 20 20  escription>..   
31c90 20 2f 2f 2f 20 3c 64 65 73 63 72 69 70 74 69 6f   /// <descriptio
31ca0 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 70 65  n>..    /// Depe
31cb0 6e 64 73 20 6f 6e 20 3c 70 61 72 61 6d 72 65 66  nds on <paramref
31cc0 20 6e 61 6d 65 3d 22 63 6f 6c 6c 65 63 74 69 6f   name="collectio
31cd0 6e 4e 61 6d 65 22 20 2f 3e 2e 0d 0a 20 20 20 20  nName" />...    
31ce0 2f 2f 2f 20 57 68 65 6e 20 22 49 6e 64 65 78 43  /// When "IndexC
31cf0 6f 6c 75 6d 6e 73 22 2c 20 69 74 20 69 73 20 74  olumns", it is t
31d00 68 65 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 3b 20  he column name; 
31d10 6f 74 68 65 72 77 69 73 65 2c 20 69 74 20 69 73  otherwise, it is
31d20 20 6e 6f 74 20 75 73 65 64 2e 0d 0a 20 20 20 20   not used...    
31d30 2f 2f 2f 20 3c 2f 64 65 73 63 72 69 70 74 69 6f  /// </descriptio
31d40 6e 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 69 74  n>..    /// </it
31d50 65 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 6c  em>..    /// </l
31d60 69 73 74 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ist>..    /// </
31d70 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
31d80 3c 72 65 74 75 72 6e 73 3e 41 20 44 61 74 61 54  <returns>A DataT
31d90 61 62 6c 65 20 6f 66 20 74 68 65 20 73 70 65 63  able of the spec
31da0 69 66 69 65 64 20 63 6f 6c 6c 65 63 74 69 6f 6e  ified collection
31db0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
31dc0 70 75 62 6c 69 63 20 6f 76 65 72 72 69 64 65 20  public override 
31dd0 44 61 74 61 54 61 62 6c 65 20 47 65 74 53 63 68  DataTable GetSch
31de0 65 6d 61 28 73 74 72 69 6e 67 20 63 6f 6c 6c 65  ema(string colle
31df0 63 74 69 6f 6e 4e 61 6d 65 2c 20 73 74 72 69 6e  ctionName, strin
31e00 67 5b 5d 20 72 65 73 74 72 69 63 74 69 6f 6e 56  g[] restrictionV
31e10 61 6c 75 65 73 29 0d 0a 20 20 20 20 7b 0d 0a 20  alues)..    {.. 
31e20 20 20 20 20 20 43 68 65 63 6b 44 69 73 70 6f 73       CheckDispos
31e30 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ed();....      i
31e40 66 20 28 5f 63 6f 6e 6e 65 63 74 69 6f 6e 53 74  f (_connectionSt
31e50 61 74 65 20 21 3d 20 43 6f 6e 6e 65 63 74 69 6f  ate != Connectio
31e60 6e 53 74 61 74 65 2e 4f 70 65 6e 29 0d 0a 20 20  nState.Open)..  
31e70 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
31e80 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
31e90 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 0d 0a  Exception();....
31ea0 20 20 20 20 20 20 73 74 72 69 6e 67 5b 5d 20 70        string[] p
31eb0 61 72 6d 73 20 3d 20 6e 65 77 20 73 74 72 69 6e  arms = new strin
31ec0 67 5b 35 5d 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  g[5];....      i
31ed0 66 20 28 72 65 73 74 72 69 63 74 69 6f 6e 56 61  f (restrictionVa
31ee0 6c 75 65 73 20 3d 3d 20 6e 75 6c 6c 29 20 72 65  lues == null) re
31ef0 73 74 72 69 63 74 69 6f 6e 56 61 6c 75 65 73 20  strictionValues 
31f00 3d 20 6e 65 77 20 73 74 72 69 6e 67 5b 30 5d 3b  = new string[0];
31f10 0d 0a 20 20 20 20 20 20 72 65 73 74 72 69 63 74  ..      restrict
31f20 69 6f 6e 56 61 6c 75 65 73 2e 43 6f 70 79 54 6f  ionValues.CopyTo
31f30 28 70 61 72 6d 73 2c 20 30 29 3b 0d 0a 0d 0a 20  (parms, 0);.... 
31f40 20 20 20 20 20 73 77 69 74 63 68 20 28 63 6f 6c       switch (col
31f50 6c 65 63 74 69 6f 6e 4e 61 6d 65 2e 54 6f 55 70  lectionName.ToUp
31f60 70 65 72 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  per(CultureInfo.
31f70 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
31f80 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
31f90 20 20 20 20 20 63 61 73 65 20 22 4d 45 54 41 44       case "METAD
31fa0 41 54 41 43 4f 4c 4c 45 43 54 49 4f 4e 53 22 3a  ATACOLLECTIONS":
31fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
31fc0 72 6e 20 53 63 68 65 6d 61 5f 4d 65 74 61 44 61  rn Schema_MetaDa
31fd0 74 61 43 6f 6c 6c 65 63 74 69 6f 6e 73 28 29 3b  taCollections();
31fe0 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 22  ..        case "
31ff0 44 41 54 41 53 4f 55 52 43 45 49 4e 46 4f 52 4d  DATASOURCEINFORM
32000 41 54 49 4f 4e 22 3a 0d 0a 20 20 20 20 20 20 20  ATION":..       
32010 20 20 20 72 65 74 75 72 6e 20 53 63 68 65 6d 61     return Schema
32020 5f 44 61 74 61 53 6f 75 72 63 65 49 6e 66 6f 72  _DataSourceInfor
32030 6d 61 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 20  mation();..     
32040 20 20 20 63 61 73 65 20 22 44 41 54 41 54 59 50     case "DATATYP
32050 45 53 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  ES":..          
32060 72 65 74 75 72 6e 20 53 63 68 65 6d 61 5f 44 61  return Schema_Da
32070 74 61 54 79 70 65 73 28 29 3b 0d 0a 20 20 20 20  taTypes();..    
32080 20 20 20 20 63 61 73 65 20 22 43 4f 4c 55 4d 4e      case "COLUMN
32090 53 22 3a 0d 0a 20 20 20 20 20 20 20 20 63 61 73  S":..        cas
320a0 65 20 22 54 41 42 4c 45 43 4f 4c 55 4d 4e 53 22  e "TABLECOLUMNS"
320b0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
320c0 75 72 6e 20 53 63 68 65 6d 61 5f 43 6f 6c 75 6d  urn Schema_Colum
320d0 6e 73 28 70 61 72 6d 73 5b 30 5d 2c 20 70 61 72  ns(parms[0], par
320e0 6d 73 5b 32 5d 2c 20 70 61 72 6d 73 5b 33 5d 29  ms[2], parms[3])
320f0 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
32100 22 49 4e 44 45 58 45 53 22 3a 0d 0a 20 20 20 20  "INDEXES":..    
32110 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 63 68        return Sch
32120 65 6d 61 5f 49 6e 64 65 78 65 73 28 70 61 72 6d  ema_Indexes(parm
32130 73 5b 30 5d 2c 20 70 61 72 6d 73 5b 32 5d 2c 20  s[0], parms[2], 
32140 70 61 72 6d 73 5b 33 5d 29 3b 0d 0a 20 20 20 20  parms[3]);..    
32150 20 20 20 20 63 61 73 65 20 22 54 52 49 47 47 45      case "TRIGGE
32160 52 53 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  RS":..          
32170 72 65 74 75 72 6e 20 53 63 68 65 6d 61 5f 54 72  return Schema_Tr
32180 69 67 67 65 72 73 28 70 61 72 6d 73 5b 30 5d 2c  iggers(parms[0],
32190 20 70 61 72 6d 73 5b 32 5d 2c 20 70 61 72 6d 73   parms[2], parms
321a0 5b 33 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  [3]);..        c
321b0 61 73 65 20 22 49 4e 44 45 58 43 4f 4c 55 4d 4e  ase "INDEXCOLUMN
321c0 53 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  S":..          r
321d0 65 74 75 72 6e 20 53 63 68 65 6d 61 5f 49 6e 64  eturn Schema_Ind
321e0 65 78 43 6f 6c 75 6d 6e 73 28 70 61 72 6d 73 5b  exColumns(parms[
321f0 30 5d 2c 20 70 61 72 6d 73 5b 32 5d 2c 20 70 61  0], parms[2], pa
32200 72 6d 73 5b 33 5d 2c 20 70 61 72 6d 73 5b 34 5d  rms[3], parms[4]
32210 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
32220 20 22 54 41 42 4c 45 53 22 3a 0d 0a 20 20 20 20   "TABLES":..    
32230 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 63 68        return Sch
32240 65 6d 61 5f 54 61 62 6c 65 73 28 70 61 72 6d 73  ema_Tables(parms
32250 5b 30 5d 2c 20 70 61 72 6d 73 5b 32 5d 2c 20 70  [0], parms[2], p
32260 61 72 6d 73 5b 33 5d 29 3b 0d 0a 20 20 20 20 20  arms[3]);..     
32270 20 20 20 63 61 73 65 20 22 56 49 45 57 53 22 3a     case "VIEWS":
32280 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
32290 72 6e 20 53 63 68 65 6d 61 5f 56 69 65 77 73 28  rn Schema_Views(
322a0 70 61 72 6d 73 5b 30 5d 2c 20 70 61 72 6d 73 5b  parms[0], parms[
322b0 32 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61  2]);..        ca
322c0 73 65 20 22 56 49 45 57 43 4f 4c 55 4d 4e 53 22  se "VIEWCOLUMNS"
322d0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  :..          ret
322e0 75 72 6e 20 53 63 68 65 6d 61 5f 56 69 65 77 43  urn Schema_ViewC
322f0 6f 6c 75 6d 6e 73 28 70 61 72 6d 73 5b 30 5d 2c  olumns(parms[0],
32300 20 70 61 72 6d 73 5b 32 5d 2c 20 70 61 72 6d 73   parms[2], parms
32310 5b 33 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20 63  [3]);..        c
32320 61 73 65 20 22 46 4f 52 45 49 47 4e 4b 45 59 53  ase "FOREIGNKEYS
32330 22 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65  ":..          re
32340 74 75 72 6e 20 53 63 68 65 6d 61 5f 46 6f 72 65  turn Schema_Fore
32350 69 67 6e 4b 65 79 73 28 70 61 72 6d 73 5b 30 5d  ignKeys(parms[0]
32360 2c 20 70 61 72 6d 73 5b 32 5d 2c 20 70 61 72 6d  , parms[2], parm
32370 73 5b 33 5d 29 3b 0d 0a 20 20 20 20 20 20 20 20  s[3]);..        
32380 63 61 73 65 20 22 43 41 54 41 4c 4f 47 53 22 3a  case "CATALOGS":
32390 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75  ..          retu
323a0 72 6e 20 53 63 68 65 6d 61 5f 43 61 74 61 6c 6f  rn Schema_Catalo
323b0 67 73 28 70 61 72 6d 73 5b 30 5d 29 3b 0d 0a 20  gs(parms[0]);.. 
323c0 20 20 20 20 20 20 20 63 61 73 65 20 22 52 45 53         case "RES
323d0 45 52 56 45 44 57 4f 52 44 53 22 3a 0d 0a 20 20  ERVEDWORDS":..  
323e0 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53          return S
323f0 63 68 65 6d 61 5f 52 65 73 65 72 76 65 64 57 6f  chema_ReservedWo
32400 72 64 73 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  rds();..      }.
32410 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
32420 20 4e 6f 74 53 75 70 70 6f 72 74 65 64 45 78 63   NotSupportedExc
32430 65 70 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d  eption();..    }
32440 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
32450 73 74 61 74 69 63 20 44 61 74 61 54 61 62 6c 65  static DataTable
32460 20 53 63 68 65 6d 61 5f 52 65 73 65 72 76 65 64   Schema_Reserved
32470 57 6f 72 64 73 28 29 0d 0a 20 20 20 20 7b 0d 0a  Words()..    {..
32480 20 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20        DataTable 
32490 74 62 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61  tbl = new DataTa
324a0 62 6c 65 28 22 52 65 73 65 72 76 65 64 57 6f 72  ble("ReservedWor
324b0 64 73 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74  ds");....      t
324c0 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74  bl.Locale = Cult
324d0 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e  ureInfo.Invarian
324e0 74 43 75 6c 74 75 72 65 3b 0d 0a 20 20 20 20 20  tCulture;..     
324f0 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
32500 28 22 52 65 73 65 72 76 65 64 57 6f 72 64 22 2c  ("ReservedWord",
32510 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
32520 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
32530 75 6d 6e 73 2e 41 64 64 28 22 4d 61 78 69 6d 75  umns.Add("Maximu
32540 6d 56 65 72 73 69 6f 6e 22 2c 20 74 79 70 65 6f  mVersion", typeo
32550 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(string));..   
32560 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
32570 64 64 28 22 4d 69 6e 69 6d 75 6d 56 65 72 73 69  dd("MinimumVersi
32580 6f 6e 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69  on", typeof(stri
32590 6e 67 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74  ng));....      t
325a0 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61  bl.BeginLoadData
325b0 28 29 3b 0d 0a 20 20 20 20 20 20 44 61 74 61 52  ();..      DataR
325c0 6f 77 20 72 6f 77 3b 0d 0a 20 20 20 20 20 20 66  ow row;..      f
325d0 6f 72 65 61 63 68 20 28 73 74 72 69 6e 67 20 77  oreach (string w
325e0 6f 72 64 20 69 6e 20 53 52 2e 4b 65 79 77 6f 72  ord in SR.Keywor
325f0 64 73 2e 53 70 6c 69 74 28 6e 65 77 20 63 68 61  ds.Split(new cha
32600 72 5b 5d 20 7b 20 27 2c 27 20 7d 29 29 0d 0a 20  r[] { ',' })).. 
32610 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
32620 72 6f 77 20 3d 20 74 62 6c 2e 4e 65 77 52 6f 77  row = tbl.NewRow
32630 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 6f 77  ();..        row
32640 5b 30 5d 20 3d 20 77 6f 72 64 3b 0d 0a 20 20 20  [0] = word;..   
32650 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64       tbl.Rows.Ad
32660 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 7d  d(row);..      }
32670 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 41 63  ....      tbl.Ac
32680 63 65 70 74 43 68 61 6e 67 65 73 28 29 3b 0d 0a  ceptChanges();..
32690 20 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61        tbl.EndLoa
326a0 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20  dData();....    
326b0 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20    return tbl;.. 
326c0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
326d0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
326e0 2f 2f 20 42 75 69 6c 64 73 20 61 20 4d 65 74 61  // Builds a Meta
326f0 44 61 74 61 43 6f 6c 6c 65 63 74 69 6f 6e 73 20  DataCollections 
32700 73 63 68 65 6d 61 20 64 61 74 61 74 61 62 6c 65  schema datatable
32710 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
32720 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
32730 65 74 75 72 6e 73 3e 44 61 74 61 54 61 62 6c 65  eturns>DataTable
32740 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
32750 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 44  private static D
32760 61 74 61 54 61 62 6c 65 20 53 63 68 65 6d 61 5f  ataTable Schema_
32770 4d 65 74 61 44 61 74 61 43 6f 6c 6c 65 63 74 69  MetaDataCollecti
32780 6f 6e 73 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ons()..    {..  
32790 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74 62      DataTable tb
327a0 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61 62 6c  l = new DataTabl
327b0 65 28 22 4d 65 74 61 44 61 74 61 43 6f 6c 6c 65  e("MetaDataColle
327c0 63 74 69 6f 6e 73 22 29 3b 0d 0a 0d 0a 20 20 20  ctions");....   
327d0 20 20 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20     tbl.Locale = 
327e0 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
327f0 72 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 20  riantCulture;.. 
32800 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
32810 2e 41 64 64 28 22 43 6f 6c 6c 65 63 74 69 6f 6e  .Add("Collection
32820 4e 61 6d 65 22 2c 20 74 79 70 65 6f 66 28 73 74  Name", typeof(st
32830 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
32840 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22  bl.Columns.Add("
32850 4e 75 6d 62 65 72 4f 66 52 65 73 74 72 69 63 74  NumberOfRestrict
32860 69 6f 6e 73 22 2c 20 74 79 70 65 6f 66 28 69 6e  ions", typeof(in
32870 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  t));..      tbl.
32880 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 4e 75 6d  Columns.Add("Num
32890 62 65 72 4f 66 49 64 65 6e 74 69 66 69 65 72 50  berOfIdentifierP
328a0 61 72 74 73 22 2c 20 74 79 70 65 6f 66 28 69 6e  arts", typeof(in
328b0 74 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74 62  t));....      tb
328c0 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74 61 28  l.BeginLoadData(
328d0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 53 74 72 69  );....      Stri
328e0 6e 67 52 65 61 64 65 72 20 72 65 61 64 65 72 20  ngReader reader 
328f0 3d 20 6e 65 77 20 53 74 72 69 6e 67 52 65 61 64  = new StringRead
32900 65 72 28 53 52 2e 4d 65 74 61 44 61 74 61 43 6f  er(SR.MetaDataCo
32910 6c 6c 65 63 74 69 6f 6e 73 29 3b 0d 0a 20 20 20  llections);..   
32920 20 20 20 74 62 6c 2e 52 65 61 64 58 6d 6c 28 72     tbl.ReadXml(r
32930 65 61 64 65 72 29 3b 0d 0a 20 20 20 20 20 20 72  eader);..      r
32940 65 61 64 65 72 2e 43 6c 6f 73 65 28 29 3b 0d 0a  eader.Close();..
32950 0d 0a 20 20 20 20 20 20 74 62 6c 2e 41 63 63 65  ..      tbl.Acce
32960 70 74 43 68 61 6e 67 65 73 28 29 3b 0d 0a 20 20  ptChanges();..  
32970 20 20 20 20 74 62 6c 2e 45 6e 64 4c 6f 61 64 44      tbl.EndLoadD
32980 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ata();....      
32990 72 65 74 75 72 6e 20 74 62 6c 3b 0d 0a 20 20 20  return tbl;..   
329a0 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
329b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
329c0 20 42 75 69 6c 64 73 20 61 20 44 61 74 61 53 6f   Builds a DataSo
329d0 75 72 63 65 49 6e 66 6f 72 6d 61 74 69 6f 6e 20  urceInformation 
329e0 64 61 74 61 74 61 62 6c 65 0d 0a 20 20 20 20 2f  datatable..    /
329f0 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
32a00 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
32a10 44 61 74 61 54 61 62 6c 65 3c 2f 72 65 74 75 72  DataTable</retur
32a20 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
32a30 20 44 61 74 61 54 61 62 6c 65 20 53 63 68 65 6d   DataTable Schem
32a40 61 5f 44 61 74 61 53 6f 75 72 63 65 49 6e 66 6f  a_DataSourceInfo
32a50 72 6d 61 74 69 6f 6e 28 29 0d 0a 20 20 20 20 7b  rmation()..    {
32a60 0d 0a 20 20 20 20 20 20 44 61 74 61 54 61 62 6c  ..      DataTabl
32a70 65 20 74 62 6c 20 3d 20 6e 65 77 20 44 61 74 61  e tbl = new Data
32a80 54 61 62 6c 65 28 22 44 61 74 61 53 6f 75 72 63  Table("DataSourc
32a90 65 49 6e 66 6f 72 6d 61 74 69 6f 6e 22 29 3b 0d  eInformation");.
32aa0 0a 20 20 20 20 20 20 44 61 74 61 52 6f 77 20 72  .      DataRow r
32ab0 6f 77 3b 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c  ow;....      tbl
32ac0 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75 72  .Locale = Cultur
32ad0 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43  eInfo.InvariantC
32ae0 75 6c 74 75 72 65 3b 0d 0a 20 20 20 20 20 20 74  ulture;..      t
32af0 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 44  bl.Columns.Add(D
32b00 62 4d 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e 4e  bMetaDataColumnN
32b10 61 6d 65 73 2e 43 6f 6d 70 6f 73 69 74 65 49 64  ames.CompositeId
32b20 65 6e 74 69 66 69 65 72 53 65 70 61 72 61 74 6f  entifierSeparato
32b30 72 50 61 74 74 65 72 6e 2c 20 74 79 70 65 6f 66  rPattern, typeof
32b40 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
32b50 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
32b60 64 28 44 62 4d 65 74 61 44 61 74 61 43 6f 6c 75  d(DbMetaDataColu
32b70 6d 6e 4e 61 6d 65 73 2e 44 61 74 61 53 6f 75 72  mnNames.DataSour
32b80 63 65 50 72 6f 64 75 63 74 4e 61 6d 65 2c 20 74  ceProductName, t
32b90 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d  ypeof(string));.
32ba0 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
32bb0 6e 73 2e 41 64 64 28 44 62 4d 65 74 61 44 61 74  ns.Add(DbMetaDat
32bc0 61 43 6f 6c 75 6d 6e 4e 61 6d 65 73 2e 44 61 74  aColumnNames.Dat
32bd0 61 53 6f 75 72 63 65 50 72 6f 64 75 63 74 56 65  aSourceProductVe
32be0 72 73 69 6f 6e 2c 20 74 79 70 65 6f 66 28 73 74  rsion, typeof(st
32bf0 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
32c00 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 44  bl.Columns.Add(D
32c10 62 4d 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e 4e  bMetaDataColumnN
32c20 61 6d 65 73 2e 44 61 74 61 53 6f 75 72 63 65 50  ames.DataSourceP
32c30 72 6f 64 75 63 74 56 65 72 73 69 6f 6e 4e 6f 72  roductVersionNor
32c40 6d 61 6c 69 7a 65 64 2c 20 74 79 70 65 6f 66 28  malized, typeof(
32c50 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  string));..     
32c60 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
32c70 28 44 62 4d 65 74 61 44 61 74 61 43 6f 6c 75 6d  (DbMetaDataColum
32c80 6e 4e 61 6d 65 73 2e 47 72 6f 75 70 42 79 42 65  nNames.GroupByBe
32c90 68 61 76 69 6f 72 2c 20 74 79 70 65 6f 66 28 69  havior, typeof(i
32ca0 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  nt));..      tbl
32cb0 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 44 62 4d  .Columns.Add(DbM
32cc0 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e 4e 61 6d  etaDataColumnNam
32cd0 65 73 2e 49 64 65 6e 74 69 66 69 65 72 50 61 74  es.IdentifierPat
32ce0 74 65 72 6e 2c 20 74 79 70 65 6f 66 28 73 74 72  tern, typeof(str
32cf0 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
32d00 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 44 62  l.Columns.Add(Db
32d10 4d 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e 4e 61  MetaDataColumnNa
32d20 6d 65 73 2e 49 64 65 6e 74 69 66 69 65 72 43 61  mes.IdentifierCa
32d30 73 65 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29  se, typeof(int))
32d40 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
32d50 75 6d 6e 73 2e 41 64 64 28 44 62 4d 65 74 61 44  umns.Add(DbMetaD
32d60 61 74 61 43 6f 6c 75 6d 6e 4e 61 6d 65 73 2e 4f  ataColumnNames.O
32d70 72 64 65 72 42 79 43 6f 6c 75 6d 6e 73 49 6e 53  rderByColumnsInS
32d80 65 6c 65 63 74 2c 20 74 79 70 65 6f 66 28 62 6f  elect, typeof(bo
32d90 6f 6c 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  ol));..      tbl
32da0 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 44 62 4d  .Columns.Add(DbM
32db0 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e 4e 61 6d  etaDataColumnNam
32dc0 65 73 2e 50 61 72 61 6d 65 74 65 72 4d 61 72 6b  es.ParameterMark
32dd0 65 72 46 6f 72 6d 61 74 2c 20 74 79 70 65 6f 66  erFormat, typeof
32de0 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20  (string));..    
32df0 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
32e00 64 28 44 62 4d 65 74 61 44 61 74 61 43 6f 6c 75  d(DbMetaDataColu
32e10 6d 6e 4e 61 6d 65 73 2e 50 61 72 61 6d 65 74 65  mnNames.Paramete
32e20 72 4d 61 72 6b 65 72 50 61 74 74 65 72 6e 2c 20  rMarkerPattern, 
32e30 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b  typeof(string));
32e40 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
32e50 6d 6e 73 2e 41 64 64 28 44 62 4d 65 74 61 44 61  mns.Add(DbMetaDa
32e60 74 61 43 6f 6c 75 6d 6e 4e 61 6d 65 73 2e 50 61  taColumnNames.Pa
32e70 72 61 6d 65 74 65 72 4e 61 6d 65 4d 61 78 4c 65  rameterNameMaxLe
32e80 6e 67 74 68 2c 20 74 79 70 65 6f 66 28 69 6e 74  ngth, typeof(int
32e90 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
32ea0 6f 6c 75 6d 6e 73 2e 41 64 64 28 44 62 4d 65 74  olumns.Add(DbMet
32eb0 61 44 61 74 61 43 6f 6c 75 6d 6e 4e 61 6d 65 73  aDataColumnNames
32ec0 2e 50 61 72 61 6d 65 74 65 72 4e 61 6d 65 50 61  .ParameterNamePa
32ed0 74 74 65 72 6e 2c 20 74 79 70 65 6f 66 28 73 74  ttern, typeof(st
32ee0 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
32ef0 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 44  bl.Columns.Add(D
32f00 62 4d 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e 4e  bMetaDataColumnN
32f10 61 6d 65 73 2e 51 75 6f 74 65 64 49 64 65 6e 74  ames.QuotedIdent
32f20 69 66 69 65 72 50 61 74 74 65 72 6e 2c 20 74 79  ifierPattern, ty
32f30 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
32f40 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
32f50 73 2e 41 64 64 28 44 62 4d 65 74 61 44 61 74 61  s.Add(DbMetaData
32f60 43 6f 6c 75 6d 6e 4e 61 6d 65 73 2e 51 75 6f 74  ColumnNames.Quot
32f70 65 64 49 64 65 6e 74 69 66 69 65 72 43 61 73 65  edIdentifierCase
32f80 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
32f90 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
32fa0 6e 73 2e 41 64 64 28 44 62 4d 65 74 61 44 61 74  ns.Add(DbMetaDat
32fb0 61 43 6f 6c 75 6d 6e 4e 61 6d 65 73 2e 53 74 61  aColumnNames.Sta
32fc0 74 65 6d 65 6e 74 53 65 70 61 72 61 74 6f 72 50  tementSeparatorP
32fd0 61 74 74 65 72 6e 2c 20 74 79 70 65 6f 66 28 73  attern, typeof(s
32fe0 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
32ff0 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
33000 44 62 4d 65 74 61 44 61 74 61 43 6f 6c 75 6d 6e  DbMetaDataColumn
33010 4e 61 6d 65 73 2e 53 74 72 69 6e 67 4c 69 74 65  Names.StringLite
33020 72 61 6c 50 61 74 74 65 72 6e 2c 20 74 79 70 65  ralPattern, type
33030 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20  of(string));..  
33040 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
33050 41 64 64 28 44 62 4d 65 74 61 44 61 74 61 43 6f  Add(DbMetaDataCo
33060 6c 75 6d 6e 4e 61 6d 65 73 2e 53 75 70 70 6f 72  lumnNames.Suppor
33070 74 65 64 4a 6f 69 6e 4f 70 65 72 61 74 6f 72 73  tedJoinOperators
33080 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
33090 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 42 65 67  ...      tbl.Beg
330a0 69 6e 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d  inLoadData();...
330b0 0a 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c  .      row = tbl
330c0 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a 20 20 20 20  .NewRow();..    
330d0 20 20 72 6f 77 2e 49 74 65 6d 41 72 72 61 79 20    row.ItemArray 
330e0 3d 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b  = new object[] {
330f0 0d 0a 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 0d  ..        null,.
33100 0a 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65  .        "SQLite
33110 22 2c 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c  ",..        _sql
33120 2e 56 65 72 73 69 6f 6e 2c 0d 0a 20 20 20 20 20  .Version,..     
33130 20 20 20 5f 73 71 6c 2e 56 65 72 73 69 6f 6e 2c     _sql.Version,
33140 0d 0a 20 20 20 20 20 20 20 20 33 2c 0d 0a 20 20  ..        3,..  
33150 20 20 20 20 20 20 40 22 28 5e 5c 5b 5c 70 7b 4c        @"(^\[\p{L
33160 6f 7d 5c 70 7b 4c 75 7d 5c 70 7b 4c 6c 7d 5f 40  o}\p{Lu}\p{Ll}_@
33170 23 5d 5b 5c 70 7b 4c 6f 7d 5c 70 7b 4c 75 7d 5c  #][\p{Lo}\p{Lu}\
33180 70 7b 4c 6c 7d 5c 70 7b 4e 64 7d 40 24 23 5f 5d  p{Ll}\p{Nd}@$#_]
33190 2a 24 29 7c 28 5e 5c 5b 5b 5e 5c 5d 5c 30 5d 7c  *$)|(^\[[^\]\0]|
331a0 5c 5d 5c 5d 2b 5c 5d 24 29 7c 28 5e 5c 22 22 5b  \]\]+\]$)|(^\""[
331b0 5e 5c 22 22 5c 30 5d 7c 5c 22 22 5c 22 22 2b 5c  ^\""\0]|\""\""+\
331c0 22 22 24 29 22 2c 0d 0a 20 20 20 20 20 20 20 20  ""$)",..        
331d0 31 2c 0d 0a 20 20 20 20 20 20 20 20 66 61 6c 73  1,..        fals
331e0 65 2c 0d 0a 20 20 20 20 20 20 20 20 22 7b 30 7d  e,..        "{0}
331f0 22 2c 0d 0a 20 20 20 20 20 20 20 20 40 22 40 5b  ",..        @"@[
33200 5c 70 7b 4c 6f 7d 5c 70 7b 4c 75 7d 5c 70 7b 4c  \p{Lo}\p{Lu}\p{L
33210 6c 7d 5c 70 7b 4c 6d 7d 5f 40 23 5d 5b 5c 70 7b  l}\p{Lm}_@#][\p{
33220 4c 6f 7d 5c 70 7b 4c 75 7d 5c 70 7b 4c 6c 7d 5c  Lo}\p{Lu}\p{Ll}\
33230 70 7b 4c 6d 7d 5c 70 7b 4e 64 7d 5c 75 66 66 33  p{Lm}\p{Nd}\uff3
33240 66 5f 40 23 5c 24 5d 2a 28 3f 3d 5c 73 2b 7c 24  f_@#\$]*(?=\s+|$
33250 29 22 2c 0d 0a 20 20 20 20 20 20 20 20 32 35 35  )",..        255
33260 2c 0d 0a 20 20 20 20 20 20 20 20 40 22 5e 5b 5c  ,..        @"^[\
33270 70 7b 4c 6f 7d 5c 70 7b 4c 75 7d 5c 70 7b 4c 6c  p{Lo}\p{Lu}\p{Ll
33280 7d 5c 70 7b 4c 6d 7d 5f 40 23 5d 5b 5c 70 7b 4c  }\p{Lm}_@#][\p{L
33290 6f 7d 5c 70 7b 4c 75 7d 5c 70 7b 4c 6c 7d 5c 70  o}\p{Lu}\p{Ll}\p
332a0 7b 4c 6d 7d 5c 70 7b 4e 64 7d 5c 75 66 66 33 66  {Lm}\p{Nd}\uff3f
332b0 5f 40 23 5c 24 5d 2a 28 3f 3d 5c 73 2b 7c 24 29  _@#\$]*(?=\s+|$)
332c0 22 2c 0d 0a 20 20 20 20 20 20 20 20 40 22 28 28  ",..        @"((
332d0 5b 5e 5c 5b 5d 7c 5c 5d 5c 5d 29 2a 29 22 2c 0d  [^\[]|\]\])*)",.
332e0 0a 20 20 20 20 20 20 20 20 31 2c 0d 0a 20 20 20  .        1,..   
332f0 20 20 20 20 20 22 3b 22 2c 0d 0a 20 20 20 20 20       ";",..     
33300 20 20 20 40 22 27 28 28 5b 5e 27 5d 7c 27 27 29     @"'(([^']|'')
33310 2a 29 27 22 2c 0d 0a 20 20 20 20 20 20 20 20 31  *)'",..        1
33320 35 0d 0a 20 20 20 20 20 20 7d 3b 0d 0a 20 20 20  5..      };..   
33330 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28     tbl.Rows.Add(
33340 72 6f 77 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 74  row);....      t
33350 62 6c 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73  bl.AcceptChanges
33360 28 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45  ();..      tbl.E
33370 6e 64 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d  ndLoadData();...
33380 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 74 62  .      return tb
33390 6c 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  l;..    }....   
333a0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
333b0 20 20 20 20 2f 2f 2f 20 42 75 69 6c 64 20 61 20      /// Build a 
333c0 43 6f 6c 75 6d 6e 73 20 73 63 68 65 6d 61 0d 0a  Columns schema..
333d0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
333e0 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
333f0 61 6d 20 6e 61 6d 65 3d 22 73 74 72 43 61 74 61  am name="strCata
33400 6c 6f 67 22 3e 54 68 65 20 63 61 74 61 6c 6f 67  log">The catalog
33410 20 28 61 74 74 61 63 68 65 64 20 64 61 74 61 62   (attached datab
33420 61 73 65 29 20 74 6f 20 71 75 65 72 79 2c 20 63  ase) to query, c
33430 61 6e 20 62 65 20 6e 75 6c 6c 3c 2f 70 61 72 61  an be null</para
33440 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
33450 61 6d 20 6e 61 6d 65 3d 22 73 74 72 54 61 62 6c  am name="strTabl
33460 65 22 3e 54 68 65 20 74 61 62 6c 65 20 74 6f 20  e">The table to 
33470 72 65 74 72 69 65 76 65 20 73 63 68 65 6d 61 20  retrieve schema 
33480 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 2c  information for,
33490 20 63 61 6e 20 62 65 20 6e 75 6c 6c 3c 2f 70 61   can be null</pa
334a0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
334b0 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 43 6f  aram name="strCo
334c0 6c 75 6d 6e 22 3e 54 68 65 20 63 6f 6c 75 6d 6e  lumn">The column
334d0 20 74 6f 20 72 65 74 72 69 65 76 65 20 73 63 68   to retrieve sch
334e0 65 6d 61 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  ema information 
334f0 66 6f 72 2c 20 63 61 6e 20 62 65 20 6e 75 6c 6c  for, can be null
33500 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
33510 2f 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 61 54  / <returns>DataT
33520 61 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  able</returns>..
33530 20 20 20 20 70 72 69 76 61 74 65 20 44 61 74 61      private Data
33540 54 61 62 6c 65 20 53 63 68 65 6d 61 5f 43 6f 6c  Table Schema_Col
33550 75 6d 6e 73 28 73 74 72 69 6e 67 20 73 74 72 43  umns(string strC
33560 61 74 61 6c 6f 67 2c 20 73 74 72 69 6e 67 20 73  atalog, string s
33570 74 72 54 61 62 6c 65 2c 20 73 74 72 69 6e 67 20  trTable, string 
33580 73 74 72 43 6f 6c 75 6d 6e 29 0d 0a 20 20 20 20  strColumn)..    
33590 7b 0d 0a 20 20 20 20 20 20 44 61 74 61 54 61 62  {..      DataTab
335a0 6c 65 20 74 62 6c 20 3d 20 6e 65 77 20 44 61 74  le tbl = new Dat
335b0 61 54 61 62 6c 65 28 22 43 6f 6c 75 6d 6e 73 22  aTable("Columns"
335c0 29 3b 0d 0a 20 20 20 20 20 20 44 61 74 61 52 6f  );..      DataRo
335d0 77 20 72 6f 77 3b 0d 0a 0d 0a 20 20 20 20 20 20  w row;....      
335e0 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43 75 6c  tbl.Locale = Cul
335f0 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
33600 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 20 20 20 20  ntCulture;..    
33610 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
33620 64 28 22 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47  d("TABLE_CATALOG
33630 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  ", typeof(string
33640 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
33650 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 54 41 42 4c  olumns.Add("TABL
33660 45 5f 53 43 48 45 4d 41 22 2c 20 74 79 70 65 6f  E_SCHEMA", typeo
33670 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(string));..   
33680 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
33690 64 64 28 22 54 41 42 4c 45 5f 4e 41 4d 45 22 2c  dd("TABLE_NAME",
336a0 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
336b0 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
336c0 75 6d 6e 73 2e 41 64 64 28 22 43 4f 4c 55 4d 4e  umns.Add("COLUMN
336d0 5f 4e 41 4d 45 22 2c 20 74 79 70 65 6f 66 28 73  _NAME", typeof(s
336e0 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  tring));..      
336f0 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
33700 22 43 4f 4c 55 4d 4e 5f 47 55 49 44 22 2c 20 74  "COLUMN_GUID", t
33710 79 70 65 6f 66 28 47 75 69 64 29 29 3b 0d 0a 20  ypeof(Guid));.. 
33720 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
33730 2e 41 64 64 28 22 43 4f 4c 55 4d 4e 5f 50 52 4f  .Add("COLUMN_PRO
33740 50 49 44 22 2c 20 74 79 70 65 6f 66 28 6c 6f 6e  PID", typeof(lon
33750 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
33760 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 4f 52 44  Columns.Add("ORD
33770 49 4e 41 4c 5f 50 4f 53 49 54 49 4f 4e 22 2c 20  INAL_POSITION", 
33780 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20  typeof(int));.. 
33790 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
337a0 2e 41 64 64 28 22 43 4f 4c 55 4d 4e 5f 48 41 53  .Add("COLUMN_HAS
337b0 44 45 46 41 55 4c 54 22 2c 20 74 79 70 65 6f 66  DEFAULT", typeof
337c0 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20 20 20 20 20  (bool));..      
337d0 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
337e0 22 43 4f 4c 55 4d 4e 5f 44 45 46 41 55 4c 54 22  "COLUMN_DEFAULT"
337f0 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29  , typeof(string)
33800 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
33810 6c 75 6d 6e 73 2e 41 64 64 28 22 43 4f 4c 55 4d  lumns.Add("COLUM
33820 4e 5f 46 4c 41 47 53 22 2c 20 74 79 70 65 6f 66  N_FLAGS", typeof
33830 28 6c 6f 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20  (long));..      
33840 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
33850 22 49 53 5f 4e 55 4c 4c 41 42 4c 45 22 2c 20 74  "IS_NULLABLE", t
33860 79 70 65 6f 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20  ypeof(bool));.. 
33870 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
33880 2e 41 64 64 28 22 44 41 54 41 5f 54 59 50 45 22  .Add("DATA_TYPE"
33890 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29  , typeof(string)
338a0 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
338b0 6c 75 6d 6e 73 2e 41 64 64 28 22 54 59 50 45 5f  lumns.Add("TYPE_
338c0 47 55 49 44 22 2c 20 74 79 70 65 6f 66 28 47 75  GUID", typeof(Gu
338d0 69 64 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  id));..      tbl
338e0 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 48  .Columns.Add("CH
338f0 41 52 41 43 54 45 52 5f 4d 41 58 49 4d 55 4d 5f  ARACTER_MAXIMUM_
33900 4c 45 4e 47 54 48 22 2c 20 74 79 70 65 6f 66 28  LENGTH", typeof(
33910 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  int));..      tb
33920 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43  l.Columns.Add("C
33930 48 41 52 41 43 54 45 52 5f 4f 43 54 45 54 5f 4c  HARACTER_OCTET_L
33940 45 4e 47 54 48 22 2c 20 74 79 70 65 6f 66 28 69  ENGTH", typeof(i
33950 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  nt));..      tbl
33960 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 4e 55  .Columns.Add("NU
33970 4d 45 52 49 43 5f 50 52 45 43 49 53 49 4f 4e 22  MERIC_PRECISION"
33980 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d  , typeof(int));.
33990 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
339a0 6e 73 2e 41 64 64 28 22 4e 55 4d 45 52 49 43 5f  ns.Add("NUMERIC_
339b0 53 43 41 4c 45 22 2c 20 74 79 70 65 6f 66 28 69  SCALE", typeof(i
339c0 6e 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  nt));..      tbl
339d0 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44 41  .Columns.Add("DA
339e0 54 45 54 49 4d 45 5f 50 52 45 43 49 53 49 4f 4e  TETIME_PRECISION
339f0 22 2c 20 74 79 70 65 6f 66 28 6c 6f 6e 67 29 29  ", typeof(long))
33a00 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
33a10 75 6d 6e 73 2e 41 64 64 28 22 43 48 41 52 41 43  umns.Add("CHARAC
33a20 54 45 52 5f 53 45 54 5f 43 41 54 41 4c 4f 47 22  TER_SET_CATALOG"
33a30 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29  , typeof(string)
33a40 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
33a50 6c 75 6d 6e 73 2e 41 64 64 28 22 43 48 41 52 41  lumns.Add("CHARA
33a60 43 54 45 52 5f 53 45 54 5f 53 43 48 45 4d 41 22  CTER_SET_SCHEMA"
33a70 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29  , typeof(string)
33a80 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
33a90 6c 75 6d 6e 73 2e 41 64 64 28 22 43 48 41 52 41  lumns.Add("CHARA
33aa0 43 54 45 52 5f 53 45 54 5f 4e 41 4d 45 22 2c 20  CTER_SET_NAME", 
33ab0 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b  typeof(string));
33ac0 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
33ad0 6d 6e 73 2e 41 64 64 28 22 43 4f 4c 4c 41 54 49  mns.Add("COLLATI
33ae0 4f 4e 5f 43 41 54 41 4c 4f 47 22 2c 20 74 79 70  ON_CATALOG", typ
33af0 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(string));.. 
33b00 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
33b10 2e 41 64 64 28 22 43 4f 4c 4c 41 54 49 4f 4e 5f  .Add("COLLATION_
33b20 53 43 48 45 4d 41 22 2c 20 74 79 70 65 6f 66 28  SCHEMA", typeof(
33b30 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  string));..     
33b40 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
33b50 28 22 43 4f 4c 4c 41 54 49 4f 4e 5f 4e 41 4d 45  ("COLLATION_NAME
33b60 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  ", typeof(string
33b70 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
33b80 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44 4f 4d 41  olumns.Add("DOMA
33b90 49 4e 5f 43 41 54 41 4c 4f 47 22 2c 20 74 79 70  IN_CATALOG", typ
33ba0 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(string));.. 
33bb0 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
33bc0 2e 41 64 64 28 22 44 4f 4d 41 49 4e 5f 4e 41 4d  .Add("DOMAIN_NAM
33bd0 45 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  E", typeof(strin
33be0 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
33bf0 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 44 45 53  Columns.Add("DES
33c00 43 52 49 50 54 49 4f 4e 22 2c 20 74 79 70 65 6f  CRIPTION", typeo
33c10 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(string));..   
33c20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
33c30 64 64 28 22 50 52 49 4d 41 52 59 5f 4b 45 59 22  dd("PRIMARY_KEY"
33c40 2c 20 74 79 70 65 6f 66 28 62 6f 6f 6c 29 29 3b  , typeof(bool));
33c50 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
33c60 6d 6e 73 2e 41 64 64 28 22 45 44 4d 5f 54 59 50  mns.Add("EDM_TYP
33c70 45 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  E", typeof(strin
33c80 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
33c90 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 41 55 54  Columns.Add("AUT
33ca0 4f 49 4e 43 52 45 4d 45 4e 54 22 2c 20 74 79 70  OINCREMENT", typ
33cb0 65 6f 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20 20  eof(bool));..   
33cc0 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
33cd0 64 64 28 22 55 4e 49 51 55 45 22 2c 20 74 79 70  dd("UNIQUE", typ
33ce0 65 6f 66 28 62 6f 6f 6c 29 29 3b 0d 0a 0d 0a 20  eof(bool));.... 
33cf0 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c 6f       tbl.BeginLo
33d00 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20 20  adData();....   
33d10 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
33d20 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 43  NullOrEmpty(strC
33d30 61 74 61 6c 6f 67 29 29 20 73 74 72 43 61 74 61  atalog)) strCata
33d40 6c 6f 67 20 3d 20 47 65 74 44 65 66 61 75 6c 74  log = GetDefault
33d50 43 61 74 61 6c 6f 67 4e 61 6d 65 28 29 3b 0d 0a  CatalogName();..
33d60 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20 6d  ..      string m
33d70 61 73 74 65 72 20 3d 20 47 65 74 4d 61 73 74 65  aster = GetMaste
33d80 72 54 61 62 6c 65 4e 61 6d 65 28 49 73 54 65 6d  rTableName(IsTem
33d90 70 6f 72 61 72 79 43 61 74 61 6c 6f 67 4e 61 6d  poraryCatalogNam
33da0 65 28 73 74 72 43 61 74 61 6c 6f 67 29 29 3b 0d  e(strCatalog));.
33db0 0a 0d 0a 20 20 20 20 20 20 75 73 69 6e 67 20 28  ...      using (
33dc0 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d  SQLiteCommand cm
33dd0 64 54 61 62 6c 65 73 20 3d 20 6e 65 77 20 53 51  dTables = new SQ
33de0 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c 70  LiteCommand(Help
33df0 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
33e00 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
33e10 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
33e20 75 72 65 2c 20 22 53 45 4c 45 43 54 20 2a 20 46  ure, "SELECT * F
33e30 52 4f 4d 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20  ROM [{0}].[{1}] 
33e40 57 48 45 52 45 20 5b 74 79 70 65 5d 20 4c 49 4b  WHERE [type] LIK
33e50 45 20 27 74 61 62 6c 65 27 20 4f 52 20 5b 74 79  E 'table' OR [ty
33e60 70 65 5d 20 4c 49 4b 45 20 27 76 69 65 77 27 22  pe] LIKE 'view'"
33e70 2c 20 73 74 72 43 61 74 61 6c 6f 67 2c 20 6d 61  , strCatalog, ma
33e80 73 74 65 72 29 2c 20 74 68 69 73 29 29 0d 0a 20  ster), this)).. 
33e90 20 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69       using (SQLi
33ea0 74 65 44 61 74 61 52 65 61 64 65 72 20 72 64 54  teDataReader rdT
33eb0 61 62 6c 65 73 20 3d 20 63 6d 64 54 61 62 6c 65  ables = cmdTable
33ec0 73 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  s.ExecuteReader(
33ed0 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
33ee0 20 20 20 20 20 77 68 69 6c 65 20 28 72 64 54 61       while (rdTa
33ef0 62 6c 65 73 2e 52 65 61 64 28 29 29 0d 0a 20 20  bles.Read())..  
33f00 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
33f10 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73     if (String.Is
33f20 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 54  NullOrEmpty(strT
33f30 61 62 6c 65 29 20 7c 7c 20 53 74 72 69 6e 67 2e  able) || String.
33f40 43 6f 6d 70 61 72 65 28 73 74 72 54 61 62 6c 65  Compare(strTable
33f50 2c 20 72 64 54 61 62 6c 65 73 2e 47 65 74 53 74  , rdTables.GetSt
33f60 72 69 6e 67 28 32 29 2c 20 53 74 72 69 6e 67 43  ring(2), StringC
33f70 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61  omparison.Ordina
33f80 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20  lIgnoreCase) == 
33f90 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  0)..          {.
33fa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
33fb0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
33fc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75  .              u
33fd0 73 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d  sing (SQLiteComm
33fe0 61 6e 64 20 63 6d 64 20 3d 20 6e 65 77 20 53 51  and cmd = new SQ
33ff0 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c 70  LiteCommand(Help
34000 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
34010 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
34020 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
34030 75 72 65 2c 20 22 53 45 4c 45 43 54 20 2a 20 46  ure, "SELECT * F
34040 52 4f 4d 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 22  ROM [{0}].[{1}]"
34050 2c 20 73 74 72 43 61 74 61 6c 6f 67 2c 20 72 64  , strCatalog, rd
34060 54 61 62 6c 65 73 2e 47 65 74 53 74 72 69 6e 67  Tables.GetString
34070 28 32 29 29 2c 20 74 68 69 73 29 29 0d 0a 20 20  (2)), this))..  
34080 20 20 20 20 20 20 20 20 20 20 20 20 75 73 69 6e              usin
34090 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
340a0 64 65 72 20 72 64 20 3d 20 28 53 51 4c 69 74 65  der rd = (SQLite
340b0 44 61 74 61 52 65 61 64 65 72 29 63 6d 64 2e 45  DataReader)cmd.E
340c0 78 65 63 75 74 65 52 65 61 64 65 72 28 43 6f 6d  xecuteReader(Com
340d0 6d 61 6e 64 42 65 68 61 76 69 6f 72 2e 53 63 68  mandBehavior.Sch
340e0 65 6d 61 4f 6e 6c 79 29 29 0d 0a 20 20 20 20 20  emaOnly))..     
340f0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
34100 44 61 74 61 54 61 62 6c 65 20 74 62 6c 53 63 68  DataTable tblSch
34110 65 6d 61 20 3d 20 72 64 2e 47 65 74 53 63 68 65  ema = rd.GetSche
34120 6d 61 54 61 62 6c 65 28 74 72 75 65 2c 20 74 72  maTable(true, tr
34130 75 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ue))..          
34140 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34150 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
34160 44 61 74 61 52 6f 77 20 73 63 68 65 6d 61 52 6f  DataRow schemaRo
34170 77 20 69 6e 20 74 62 6c 53 63 68 65 6d 61 2e 52  w in tblSchema.R
34180 6f 77 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ows)..          
34190 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
341a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53             if (S
341b0 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 63  tring.Compare(sc
341c0 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54 61  hemaRow[SchemaTa
341d0 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e  bleColumn.Column
341e0 4e 61 6d 65 5d 2e 54 6f 53 74 72 69 6e 67 28 29  Name].ToString()
341f0 2c 20 73 74 72 43 6f 6c 75 6d 6e 2c 20 53 74 72  , strColumn, Str
34200 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
34210 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
34220 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 20   == 0..         
34230 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20 73 74             || st
34240 72 43 6f 6c 75 6d 6e 20 3d 3d 20 6e 75 6c 6c 29  rColumn == null)
34250 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
34260 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
34270 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 3d             row =
34280 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a   tbl.NewRow();..
34290 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
342a0 20 20 20 20 20 20 72 6f 77 5b 22 4e 55 4d 45 52        row["NUMER
342b0 49 43 5f 50 52 45 43 49 53 49 4f 4e 22 5d 20 3d  IC_PRECISION"] =
342c0 20 73 63 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d   schemaRow[Schem
342d0 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 4e 75 6d  aTableColumn.Num
342e0 65 72 69 63 50 72 65 63 69 73 69 6f 6e 5d 3b 0d  ericPrecision];.
342f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
34300 20 20 20 20 20 72 6f 77 5b 22 4e 55 4d 45 52 49       row["NUMERI
34310 43 5f 53 43 41 4c 45 22 5d 20 3d 20 73 63 68 65  C_SCALE"] = sche
34320 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  maRow[SchemaTabl
34330 65 43 6f 6c 75 6d 6e 2e 4e 75 6d 65 72 69 63 53  eColumn.NumericS
34340 63 61 6c 65 5d 3b 0d 0a 20 20 20 20 20 20 20 20  cale];..        
34350 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
34360 22 54 41 42 4c 45 5f 4e 41 4d 45 22 5d 20 3d 20  "TABLE_NAME"] = 
34370 72 64 54 61 62 6c 65 73 2e 47 65 74 53 74 72 69  rdTables.GetStri
34380 6e 67 28 32 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng(2);..        
34390 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
343a0 22 43 4f 4c 55 4d 4e 5f 4e 41 4d 45 22 5d 20 3d  "COLUMN_NAME"] =
343b0 20 73 63 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d   schemaRow[Schem
343c0 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
343d0 75 6d 6e 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20 20  umnName];..     
343e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
343f0 6f 77 5b 22 54 41 42 4c 45 5f 43 41 54 41 4c 4f  ow["TABLE_CATALO
34400 47 22 5d 20 3d 20 73 74 72 43 61 74 61 6c 6f 67  G"] = strCatalog
34410 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34420 20 20 20 20 20 20 20 72 6f 77 5b 22 4f 52 44 49         row["ORDI
34430 4e 41 4c 5f 50 4f 53 49 54 49 4f 4e 22 5d 20 3d  NAL_POSITION"] =
34440 20 73 63 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d   schemaRow[Schem
34450 61 54 61 62 6c 65 43 6f 6c 75 6d 6e 2e 43 6f 6c  aTableColumn.Col
34460 75 6d 6e 4f 72 64 69 6e 61 6c 5d 3b 0d 0a 20 20  umnOrdinal];..  
34470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34480 20 20 72 6f 77 5b 22 43 4f 4c 55 4d 4e 5f 48 41    row["COLUMN_HA
34490 53 44 45 46 41 55 4c 54 22 5d 20 3d 20 28 73 63  SDEFAULT"] = (sc
344a0 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54 61  hemaRow[SchemaTa
344b0 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75 6d  bleOptionalColum
344c0 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 5d 20  n.DefaultValue] 
344d0 21 3d 20 44 42 4e 75 6c 6c 2e 56 61 6c 75 65 29  != DBNull.Value)
344e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
344f0 20 20 20 20 20 20 20 72 6f 77 5b 22 43 4f 4c 55         row["COLU
34500 4d 4e 5f 44 45 46 41 55 4c 54 22 5d 20 3d 20 73  MN_DEFAULT"] = s
34510 63 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54  chemaRow[SchemaT
34520 61 62 6c 65 4f 70 74 69 6f 6e 61 6c 43 6f 6c 75  ableOptionalColu
34530 6d 6e 2e 44 65 66 61 75 6c 74 56 61 6c 75 65 5d  mn.DefaultValue]
34540 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
34550 20 20 20 20 20 20 20 72 6f 77 5b 22 49 53 5f 4e         row["IS_N
34560 55 4c 4c 41 42 4c 45 22 5d 20 3d 20 73 63 68 65  ULLABLE"] = sche
34570 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c  maRow[SchemaTabl
34580 65 43 6f 6c 75 6d 6e 2e 41 6c 6c 6f 77 44 42 4e  eColumn.AllowDBN
34590 75 6c 6c 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20  ull];..         
345a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22             row["
345b0 44 41 54 41 5f 54 59 50 45 22 5d 20 3d 20 73 63  DATA_TYPE"] = sc
345c0 68 65 6d 61 52 6f 77 5b 22 44 61 74 61 54 79 70  hemaRow["DataTyp
345d0 65 4e 61 6d 65 22 5d 2e 54 6f 53 74 72 69 6e 67  eName"].ToString
345e0 28 29 2e 54 6f 4c 6f 77 65 72 28 43 75 6c 74 75  ().ToLower(Cultu
345f0 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74  reInfo.Invariant
34600 43 75 6c 74 75 72 65 29 3b 0d 0a 20 20 20 20 20  Culture);..     
34610 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
34620 6f 77 5b 22 45 44 4d 5f 54 59 50 45 22 5d 20 3d  ow["EDM_TYPE"] =
34630 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 44   SQLiteConvert.D
34640 62 54 79 70 65 54 6f 54 79 70 65 4e 61 6d 65 28  bTypeToTypeName(
34650 74 68 69 73 2c 20 28 44 62 54 79 70 65 29 73 63  this, (DbType)sc
34660 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54 61  hemaRow[SchemaTa
34670 62 6c 65 43 6f 6c 75 6d 6e 2e 50 72 6f 76 69 64  bleColumn.Provid
34680 65 72 54 79 70 65 5d 2c 20 5f 66 6c 61 67 73 29  erType], _flags)
34690 2e 54 6f 53 74 72 69 6e 67 28 29 2e 54 6f 4c 6f  .ToString().ToLo
346a0 77 65 72 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  wer(CultureInfo.
346b0 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
346c0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
346d0 20 20 20 20 20 20 20 20 72 6f 77 5b 22 43 48 41          row["CHA
346e0 52 41 43 54 45 52 5f 4d 41 58 49 4d 55 4d 5f 4c  RACTER_MAXIMUM_L
346f0 45 4e 47 54 48 22 5d 20 3d 20 73 63 68 65 6d 61  ENGTH"] = schema
34700 52 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43  Row[SchemaTableC
34710 6f 6c 75 6d 6e 2e 43 6f 6c 75 6d 6e 53 69 7a 65  olumn.ColumnSize
34720 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ];..            
34730 20 20 20 20 20 20 20 20 72 6f 77 5b 22 54 41 42          row["TAB
34740 4c 45 5f 53 43 48 45 4d 41 22 5d 20 3d 20 73 63  LE_SCHEMA"] = sc
34750 68 65 6d 61 52 6f 77 5b 53 63 68 65 6d 61 54 61  hemaRow[SchemaTa
34760 62 6c 65 43 6f 6c 75 6d 6e 2e 42 61 73 65 53 63  bleColumn.BaseSc
34770 68 65 6d 61 4e 61 6d 65 5d 3b 0d 0a 20 20 20 20  hemaName];..    
34780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34790 72 6f 77 5b 22 50 52 49 4d 41 52 59 5f 4b 45 59  row["PRIMARY_KEY
347a0 22 5d 20 3d 20 73 63 68 65 6d 61 52 6f 77 5b 53  "] = schemaRow[S
347b0 63 68 65 6d 61 54 61 62 6c 65 43 6f 6c 75 6d 6e  chemaTableColumn
347c0 2e 49 73 4b 65 79 5d 3b 0d 0a 20 20 20 20 20 20  .IsKey];..      
347d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f                ro
347e0 77 5b 22 41 55 54 4f 49 4e 43 52 45 4d 45 4e 54  w["AUTOINCREMENT
347f0 22 5d 20 3d 20 73 63 68 65 6d 61 52 6f 77 5b 53  "] = schemaRow[S
34800 63 68 65 6d 61 54 61 62 6c 65 4f 70 74 69 6f 6e  chemaTableOption
34810 61 6c 43 6f 6c 75 6d 6e 2e 49 73 41 75 74 6f 49  alColumn.IsAutoI
34820 6e 63 72 65 6d 65 6e 74 5d 3b 0d 0a 20 20 20 20  ncrement];..    
34830 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34840 72 6f 77 5b 22 43 4f 4c 4c 41 54 49 4f 4e 5f 4e  row["COLLATION_N
34850 41 4d 45 22 5d 20 3d 20 73 63 68 65 6d 61 52 6f  AME"] = schemaRo
34860 77 5b 22 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65  w["CollationType
34870 22 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  "];..           
34880 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 55 4e           row["UN
34890 49 51 55 45 22 5d 20 3d 20 73 63 68 65 6d 61 52  IQUE"] = schemaR
348a0 6f 77 5b 53 63 68 65 6d 61 54 61 62 6c 65 43 6f  ow[SchemaTableCo
348b0 6c 75 6d 6e 2e 49 73 55 6e 69 71 75 65 5d 3b 0d  lumn.IsUnique];.
348c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
348d0 20 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64       tbl.Rows.Ad
348e0 64 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 20  d(row);..       
348f0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
34900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
34910 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
34920 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
34930 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74  .            cat
34940 63 68 28 53 51 4c 69 74 65 45 78 63 65 70 74 69  ch(SQLiteExcepti
34950 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
34960 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
34970 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
34980 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
34990 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e   }....      tbl.
349a0 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29 3b  AcceptChanges();
349b0 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c  ..      tbl.EndL
349c0 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  oadData();....  
349d0 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0d      return tbl;.
349e0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
349f0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
34a00 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 69 6e 64   /// Returns ind
34a10 65 78 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66  ex information f
34a20 6f 72 20 74 68 65 20 67 69 76 65 6e 20 64 61 74  or the given dat
34a30 61 62 61 73 65 20 61 6e 64 20 63 61 74 61 6c 6f  abase and catalo
34a40 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  g..    /// </sum
34a50 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
34a60 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 43  param name="strC
34a70 61 74 61 6c 6f 67 22 3e 54 68 65 20 63 61 74 61  atalog">The cata
34a80 6c 6f 67 20 28 61 74 74 61 63 68 65 64 20 64 61  log (attached da
34a90 74 61 62 61 73 65 29 20 74 6f 20 71 75 65 72 79  tabase) to query
34aa0 2c 20 63 61 6e 20 62 65 20 6e 75 6c 6c 3c 2f 70  , can be null</p
34ab0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
34ac0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 49  param name="strI
34ad0 6e 64 65 78 22 3e 54 68 65 20 6e 61 6d 65 20 6f  ndex">The name o
34ae0 66 20 74 68 65 20 69 6e 64 65 78 20 74 6f 20 72  f the index to r
34af0 65 74 72 69 65 76 65 20 69 6e 66 6f 72 6d 61 74  etrieve informat
34b00 69 6f 6e 20 66 6f 72 2c 20 63 61 6e 20 62 65 20  ion for, can be 
34b10 6e 75 6c 6c 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  null</param>..  
34b20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
34b30 65 3d 22 73 74 72 54 61 62 6c 65 22 3e 54 68 65  e="strTable">The
34b40 20 74 61 62 6c 65 20 74 6f 20 72 65 74 72 69 65   table to retrie
34b50 76 65 20 69 6e 64 65 78 20 69 6e 66 6f 72 6d 61  ve index informa
34b60 74 69 6f 6e 20 66 6f 72 2c 20 63 61 6e 20 62 65  tion for, can be
34b70 20 6e 75 6c 6c 3c 2f 70 61 72 61 6d 3e 0d 0a 20   null</param>.. 
34b80 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
34b90 44 61 74 61 54 61 62 6c 65 3c 2f 72 65 74 75 72  DataTable</retur
34ba0 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
34bb0 20 44 61 74 61 54 61 62 6c 65 20 53 63 68 65 6d   DataTable Schem
34bc0 61 5f 49 6e 64 65 78 65 73 28 73 74 72 69 6e 67  a_Indexes(string
34bd0 20 73 74 72 43 61 74 61 6c 6f 67 2c 20 73 74 72   strCatalog, str
34be0 69 6e 67 20 73 74 72 54 61 62 6c 65 2c 20 73 74  ing strTable, st
34bf0 72 69 6e 67 20 73 74 72 49 6e 64 65 78 29 0d 0a  ring strIndex)..
34c00 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 44 61 74      {..      Dat
34c10 61 54 61 62 6c 65 20 74 62 6c 20 3d 20 6e 65 77  aTable tbl = new
34c20 20 44 61 74 61 54 61 62 6c 65 28 22 49 6e 64 65   DataTable("Inde
34c30 78 65 73 22 29 3b 0d 0a 20 20 20 20 20 20 44 61  xes");..      Da
34c40 74 61 52 6f 77 20 72 6f 77 3b 0d 0a 20 20 20 20  taRow row;..    
34c50 20 20 4c 69 73 74 3c 69 6e 74 3e 20 70 72 69 6d    List<int> prim
34c60 61 72 79 4b 65 79 73 20 3d 20 6e 65 77 20 4c 69  aryKeys = new Li
34c70 73 74 3c 69 6e 74 3e 28 29 3b 0d 0a 20 20 20 20  st<int>();..    
34c80 20 20 62 6f 6f 6c 20 6d 61 79 62 65 52 6f 77 49    bool maybeRowI
34c90 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e  d;....      tbl.
34ca0 4c 6f 63 61 6c 65 20 3d 20 43 75 6c 74 75 72 65  Locale = Culture
34cb0 49 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75  Info.InvariantCu
34cc0 6c 74 75 72 65 3b 0d 0a 20 20 20 20 20 20 74 62  lture;..      tb
34cd0 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 54  l.Columns.Add("T
34ce0 41 42 4c 45 5f 43 41 54 41 4c 4f 47 22 2c 20 74  ABLE_CATALOG", t
34cf0 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d  ypeof(string));.
34d00 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d  .      tbl.Colum
34d10 6e 73 2e 41 64 64 28 22 54 41 42 4c 45 5f 53 43  ns.Add("TABLE_SC
34d20 48 45 4d 41 22 2c 20 74 79 70 65 6f 66 28 73 74  HEMA", typeof(st
34d30 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74  ring));..      t
34d40 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22  bl.Columns.Add("
34d50 54 41 42 4c 45 5f 4e 41 4d 45 22 2c 20 74 79 70  TABLE_NAME", typ
34d60 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(string));.. 
34d70 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
34d80 2e 41 64 64 28 22 49 4e 44 45 58 5f 43 41 54 41  .Add("INDEX_CATA
34d90 4c 4f 47 22 2c 20 74 79 70 65 6f 66 28 73 74 72  LOG", typeof(str
34da0 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
34db0 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 49  l.Columns.Add("I
34dc0 4e 44 45 58 5f 53 43 48 45 4d 41 22 2c 20 74 79  NDEX_SCHEMA", ty
34dd0 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
34de0 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e        tbl.Column
34df0 73 2e 41 64 64 28 22 49 4e 44 45 58 5f 4e 41 4d  s.Add("INDEX_NAM
34e00 45 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  E", typeof(strin
34e10 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
34e20 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 50 52 49  Columns.Add("PRI
34e30 4d 41 52 59 5f 4b 45 59 22 2c 20 74 79 70 65 6f  MARY_KEY", typeo
34e40 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20 20 20 20  f(bool));..     
34e50 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
34e60 28 22 55 4e 49 51 55 45 22 2c 20 74 79 70 65 6f  ("UNIQUE", typeo
34e70 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20 20 20 20  f(bool));..     
34e80 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
34e90 28 22 43 4c 55 53 54 45 52 45 44 22 2c 20 74 79  ("CLUSTERED", ty
34ea0 70 65 6f 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20  peof(bool));..  
34eb0 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
34ec0 41 64 64 28 22 54 59 50 45 22 2c 20 74 79 70 65  Add("TYPE", type
34ed0 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20 20  of(int));..     
34ee0 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
34ef0 28 22 46 49 4c 4c 5f 46 41 43 54 4f 52 22 2c 20  ("FILL_FACTOR", 
34f00 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20  typeof(int));.. 
34f10 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
34f20 2e 41 64 64 28 22 49 4e 49 54 49 41 4c 5f 53 49  .Add("INITIAL_SI
34f30 5a 45 22 2c 20 74 79 70 65 6f 66 28 69 6e 74 29  ZE", typeof(int)
34f40 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
34f50 6c 75 6d 6e 73 2e 41 64 64 28 22 4e 55 4c 4c 53  lumns.Add("NULLS
34f60 22 2c 20 74 79 70 65 6f 66 28 69 6e 74 29 29 3b  ", typeof(int));
34f70 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
34f80 6d 6e 73 2e 41 64 64 28 22 53 4f 52 54 5f 42 4f  mns.Add("SORT_BO
34f90 4f 4b 4d 41 52 4b 53 22 2c 20 74 79 70 65 6f 66  OKMARKS", typeof
34fa0 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20 20 20 20 20  (bool));..      
34fb0 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28  tbl.Columns.Add(
34fc0 22 41 55 54 4f 5f 55 50 44 41 54 45 22 2c 20 74  "AUTO_UPDATE", t
34fd0 79 70 65 6f 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20  ypeof(bool));.. 
34fe0 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
34ff0 2e 41 64 64 28 22 4e 55 4c 4c 5f 43 4f 4c 4c 41  .Add("NULL_COLLA
35000 54 49 4f 4e 22 2c 20 74 79 70 65 6f 66 28 69 6e  TION", typeof(in
35010 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  t));..      tbl.
35020 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 4f 52 44  Columns.Add("ORD
35030 49 4e 41 4c 5f 50 4f 53 49 54 49 4f 4e 22 2c 20  INAL_POSITION", 
35040 74 79 70 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20  typeof(int));.. 
35050 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
35060 2e 41 64 64 28 22 43 4f 4c 55 4d 4e 5f 4e 41 4d  .Add("COLUMN_NAM
35070 45 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e  E", typeof(strin
35080 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  g));..      tbl.
35090 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 4f 4c  Columns.Add("COL
350a0 55 4d 4e 5f 47 55 49 44 22 2c 20 74 79 70 65 6f  UMN_GUID", typeo
350b0 66 28 47 75 69 64 29 29 3b 0d 0a 20 20 20 20 20  f(Guid));..     
350c0 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
350d0 28 22 43 4f 4c 55 4d 4e 5f 50 52 4f 50 49 44 22  ("COLUMN_PROPID"
350e0 2c 20 74 79 70 65 6f 66 28 6c 6f 6e 67 29 29 3b  , typeof(long));
350f0 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75  ..      tbl.Colu
35100 6d 6e 73 2e 41 64 64 28 22 43 4f 4c 4c 41 54 49  mns.Add("COLLATI
35110 4f 4e 22 2c 20 74 79 70 65 6f 66 28 73 68 6f 72  ON", typeof(shor
35120 74 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e  t));..      tbl.
35130 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 43 41 52  Columns.Add("CAR
35140 44 49 4e 41 4c 49 54 59 22 2c 20 74 79 70 65 6f  DINALITY", typeo
35150 66 28 44 65 63 69 6d 61 6c 29 29 3b 0d 0a 20 20  f(Decimal));..  
35160 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
35170 41 64 64 28 22 50 41 47 45 53 22 2c 20 74 79 70  Add("PAGES", typ
35180 65 6f 66 28 69 6e 74 29 29 3b 0d 0a 20 20 20 20  eof(int));..    
35190 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
351a0 64 28 22 46 49 4c 54 45 52 5f 43 4f 4e 44 49 54  d("FILTER_CONDIT
351b0 49 4f 4e 22 2c 20 74 79 70 65 6f 66 28 73 74 72  ION", typeof(str
351c0 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62  ing));..      tb
351d0 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 49  l.Columns.Add("I
351e0 4e 54 45 47 52 41 54 45 44 22 2c 20 74 79 70 65  NTEGRATED", type
351f0 6f 66 28 62 6f 6f 6c 29 29 3b 0d 0a 20 20 20 20  of(bool));..    
35200 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64    tbl.Columns.Ad
35210 64 28 22 49 4e 44 45 58 5f 44 45 46 49 4e 49 54  d("INDEX_DEFINIT
35220 49 4f 4e 22 2c 20 74 79 70 65 6f 66 28 73 74 72  ION", typeof(str
35230 69 6e 67 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ing));....      
35240 74 62 6c 2e 42 65 67 69 6e 4c 6f 61 64 44 61 74  tbl.BeginLoadDat
35250 61 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  a();....      if
35260 20 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f   (String.IsNullO
35270 72 45 6d 70 74 79 28 73 74 72 43 61 74 61 6c 6f  rEmpty(strCatalo
35280 67 29 29 20 73 74 72 43 61 74 61 6c 6f 67 20 3d  g)) strCatalog =
35290 20 47 65 74 44 65 66 61 75 6c 74 43 61 74 61 6c   GetDefaultCatal
352a0 6f 67 4e 61 6d 65 28 29 3b 0d 0a 0d 0a 20 20 20  ogName();....   
352b0 20 20 20 73 74 72 69 6e 67 20 6d 61 73 74 65 72     string master
352c0 20 3d 20 47 65 74 4d 61 73 74 65 72 54 61 62 6c   = GetMasterTabl
352d0 65 4e 61 6d 65 28 49 73 54 65 6d 70 6f 72 61 72  eName(IsTemporar
352e0 79 43 61 74 61 6c 6f 67 4e 61 6d 65 28 73 74 72  yCatalogName(str
352f0 43 61 74 61 6c 6f 67 29 29 3b 0d 0a 0d 0a 20 20  Catalog));....  
35300 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
35310 65 43 6f 6d 6d 61 6e 64 20 63 6d 64 54 61 62 6c  eCommand cmdTabl
35320 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  es = new SQLiteC
35330 6f 6d 6d 61 6e 64 28 48 65 6c 70 65 72 4d 65 74  ommand(HelperMet
35340 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
35350 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
35360 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20  variantCulture, 
35370 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b  "SELECT * FROM [
35380 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20 57 48 45 52 45  {0}].[{1}] WHERE
35390 20 5b 74 79 70 65 5d 20 4c 49 4b 45 20 27 74 61   [type] LIKE 'ta
353a0 62 6c 65 27 22 2c 20 73 74 72 43 61 74 61 6c 6f  ble'", strCatalo
353b0 67 2c 20 6d 61 73 74 65 72 29 2c 20 74 68 69 73  g, master), this
353c0 29 29 0d 0a 20 20 20 20 20 20 75 73 69 6e 67 20  ))..      using 
353d0 28 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65  (SQLiteDataReade
353e0 72 20 72 64 54 61 62 6c 65 73 20 3d 20 63 6d 64  r rdTables = cmd
353f0 54 61 62 6c 65 73 2e 45 78 65 63 75 74 65 52 65  Tables.ExecuteRe
35400 61 64 65 72 28 29 29 0d 0a 20 20 20 20 20 20 7b  ader())..      {
35410 0d 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 20  ..        while 
35420 28 72 64 54 61 62 6c 65 73 2e 52 65 61 64 28 29  (rdTables.Read()
35430 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
35440 20 20 20 20 20 20 20 20 6d 61 79 62 65 52 6f 77          maybeRow
35450 49 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  Id = false;..   
35460 20 20 20 20 20 20 20 70 72 69 6d 61 72 79 4b 65         primaryKe
35470 79 73 2e 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20  ys.Clear();..   
35480 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
35490 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
354a0 73 74 72 54 61 62 6c 65 29 20 7c 7c 20 53 74 72  strTable) || Str
354b0 69 6e 67 2e 43 6f 6d 70 61 72 65 28 72 64 54 61  ing.Compare(rdTa
354c0 62 6c 65 73 2e 47 65 74 53 74 72 69 6e 67 28 32  bles.GetString(2
354d0 29 2c 20 73 74 72 54 61 62 6c 65 2c 20 53 74 72  ), strTable, Str
354e0 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
354f0 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
35500 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
35510 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
35520 20 2f 2f 20 46 69 72 73 74 2c 20 6c 6f 6f 6b 20   // First, look 
35530 66 6f 72 20 61 6e 79 20 72 6f 77 69 64 20 69 6e  for any rowid in
35540 64 65 78 65 73 20 2d 2d 20 77 68 69 63 68 20 73  dexes -- which s
35550 71 6c 69 74 65 20 64 65 66 69 6e 65 73 20 61 72  qlite defines ar
35560 65 20 49 4e 54 45 47 45 52 20 50 52 49 4d 41 52  e INTEGER PRIMAR
35570 59 20 4b 45 59 20 63 6f 6c 75 6d 6e 73 2e 0d 0a  Y KEY columns...
35580 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 53              // S
35590 75 63 68 20 69 6e 64 65 78 65 73 20 61 72 65 20  uch indexes are 
355a0 6e 6f 74 20 6c 69 73 74 65 64 20 69 6e 20 74 68  not listed in th
355b0 65 20 69 6e 64 65 78 65 73 20 6c 69 73 74 20 62  e indexes list b
355c0 75 74 20 63 6f 75 6e 74 20 61 73 20 69 6e 64 65  ut count as inde
355d0 78 65 73 20 6a 75 73 74 20 74 68 65 20 73 61 6d  xes just the sam
355e0 65 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e...            
355f0 74 72 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20  try..           
35600 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
35610 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 43    using (SQLiteC
35620 6f 6d 6d 61 6e 64 20 63 6d 64 54 61 62 6c 65 20  ommand cmdTable 
35630 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d 6d  = new SQLiteComm
35640 61 6e 64 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  and(HelperMethod
35650 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43  s.StringFormat(C
35660 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
35670 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 50 52  iantCulture, "PR
35680 41 47 4d 41 20 5b 7b 30 7d 5d 2e 74 61 62 6c 65  AGMA [{0}].table
35690 5f 69 6e 66 6f 28 5b 7b 31 7d 5d 29 22 2c 20 73  _info([{1}])", s
356a0 74 72 43 61 74 61 6c 6f 67 2c 20 72 64 54 61 62  trCatalog, rdTab
356b0 6c 65 73 2e 47 65 74 53 74 72 69 6e 67 28 32 29  les.GetString(2)
356c0 29 2c 20 74 68 69 73 29 29 0d 0a 20 20 20 20 20  ), this))..     
356d0 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
356e0 53 51 4c 69 74 65 44 61 74 61 52 65 61 64 65 72  SQLiteDataReader
356f0 20 72 64 54 61 62 6c 65 20 3d 20 63 6d 64 54 61   rdTable = cmdTa
35700 62 6c 65 2e 45 78 65 63 75 74 65 52 65 61 64 65  ble.ExecuteReade
35710 72 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  r())..          
35720 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
35730 20 20 20 20 20 20 20 77 68 69 6c 65 20 28 72 64         while (rd
35740 54 61 62 6c 65 2e 52 65 61 64 28 29 29 0d 0a 20  Table.Read()).. 
35750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
35760 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35770 20 20 20 20 69 66 20 28 72 64 54 61 62 6c 65 2e      if (rdTable.
35780 47 65 74 49 6e 74 33 32 28 35 29 20 21 3d 20 30  GetInt32(5) != 0
35790 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
357a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
357b0 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69 6d              prim
357c0 61 72 79 4b 65 79 73 2e 41 64 64 28 72 64 54 61  aryKeys.Add(rdTa
357d0 62 6c 65 2e 47 65 74 49 6e 74 33 32 28 30 29 29  ble.GetInt32(0))
357e0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
357f0 20 20 20 20 20 20 20 20 20 2f 2f 20 49 66 20 74           // If t
35800 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  he primary key i
35810 73 20 6f 66 20 74 79 70 65 20 49 4e 54 45 47 45  s of type INTEGE
35820 52 2c 20 74 68 65 6e 20 69 74 73 20 61 20 72 6f  R, then its a ro
35830 77 69 64 20 61 6e 64 20 77 65 20 6e 65 65 64 20  wid and we need 
35840 74 6f 20 6d 61 6b 65 20 61 20 66 61 6b 65 20 69  to make a fake i
35850 6e 64 65 78 20 65 6e 74 72 79 20 66 6f 72 20 69  ndex entry for i
35860 74 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t...            
35870 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
35880 6e 67 2e 43 6f 6d 70 61 72 65 28 72 64 54 61 62  ng.Compare(rdTab
35890 6c 65 2e 47 65 74 53 74 72 69 6e 67 28 32 29 2c  le.GetString(2),
358a0 20 22 49 4e 54 45 47 45 52 22 2c 20 53 74 72 69   "INTEGER", Stri
358b0 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
358c0 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
358d0 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
358e0 20 20 20 20 20 20 20 20 20 20 20 20 20 6d 61 79               may
358f0 62 65 52 6f 77 49 64 20 3d 20 74 72 75 65 3b 0d  beRowId = true;.
35900 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
35910 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
35920 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35930 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
35940 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
35950 20 20 20 20 20 63 61 74 63 68 20 28 53 51 4c 69       catch (SQLi
35960 74 65 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20  teException)..  
35970 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35980 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
35990 20 20 20 20 20 20 20 20 69 66 20 28 70 72 69 6d          if (prim
359a0 61 72 79 4b 65 79 73 2e 43 6f 75 6e 74 20 3d 3d  aryKeys.Count ==
359b0 20 31 20 26 26 20 6d 61 79 62 65 52 6f 77 49 64   1 && maybeRowId
359c0 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20 20 20 20   == true)..     
359d0 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
359e0 20 20 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62          row = tb
359f0 6c 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20  l.NewRow();.... 
35a00 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77               row
35a10 5b 22 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 22  ["TABLE_CATALOG"
35a20 5d 20 3d 20 73 74 72 43 61 74 61 6c 6f 67 3b 0d  ] = strCatalog;.
35a30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
35a40 6f 77 5b 22 54 41 42 4c 45 5f 4e 41 4d 45 22 5d  ow["TABLE_NAME"]
35a50 20 3d 20 72 64 54 61 62 6c 65 73 2e 47 65 74 53   = rdTables.GetS
35a60 74 72 69 6e 67 28 32 29 3b 0d 0a 20 20 20 20 20  tring(2);..     
35a70 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 49 4e           row["IN
35a80 44 45 58 5f 43 41 54 41 4c 4f 47 22 5d 20 3d 20  DEX_CATALOG"] = 
35a90 73 74 72 43 61 74 61 6c 6f 67 3b 0d 0a 20 20 20  strCatalog;..   
35aa0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22             row["
35ab0 50 52 49 4d 41 52 59 5f 4b 45 59 22 5d 20 3d 20  PRIMARY_KEY"] = 
35ac0 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
35ad0 20 20 20 20 20 72 6f 77 5b 22 49 4e 44 45 58 5f       row["INDEX_
35ae0 4e 41 4d 45 22 5d 20 3d 20 48 65 6c 70 65 72 4d  NAME"] = HelperM
35af0 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
35b00 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e  mat(CultureInfo.
35b10 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
35b20 2c 20 22 7b 31 7d 5f 50 4b 5f 7b 30 7d 22 2c 20  , "{1}_PK_{0}", 
35b30 72 64 54 61 62 6c 65 73 2e 47 65 74 53 74 72 69  rdTables.GetStri
35b40 6e 67 28 32 29 2c 20 6d 61 73 74 65 72 29 3b 0d  ng(2), master);.
35b50 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
35b60 6f 77 5b 22 55 4e 49 51 55 45 22 5d 20 3d 20 74  ow["UNIQUE"] = t
35b70 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rue;....        
35b80 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67        if (String
35b90 2e 43 6f 6d 70 61 72 65 28 28 73 74 72 69 6e 67  .Compare((string
35ba0 29 72 6f 77 5b 22 49 4e 44 45 58 5f 4e 41 4d 45  )row["INDEX_NAME
35bb0 22 5d 2c 20 73 74 72 49 6e 64 65 78 2c 20 53 74  "], strIndex, St
35bc0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
35bd0 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
35be0 29 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20  ) == 0..        
35bf0 20 20 20 20 20 20 7c 7c 20 73 74 72 49 6e 64 65        || strInde
35c00 78 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  x == null)..    
35c10 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
35c20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 62 6c               tbl
35c30 2e 52 6f 77 73 2e 41 64 64 28 72 6f 77 29 3b 0d  .Rows.Add(row);.
35c40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
35c50 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
35c60 20 20 70 72 69 6d 61 72 79 4b 65 79 73 2e 43 6c    primaryKeys.Cl
35c70 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  ear();..        
35c80 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
35c90 20 20 20 20 20 2f 2f 20 4e 6f 77 20 66 65 74 63       // Now fetc
35ca0 68 20 61 6c 6c 20 74 68 65 20 72 65 73 74 20 6f  h all the rest o
35cb0 66 20 74 68 65 20 69 6e 64 65 78 65 73 2e 0d 0a  f the indexes...
35cc0 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79 0d              try.
35cd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
35ce0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 75 73                us
35cf0 69 6e 67 20 28 53 51 4c 69 74 65 43 6f 6d 6d 61  ing (SQLiteComma
35d00 6e 64 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c  nd cmd = new SQL
35d10 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c 70 65  iteCommand(Helpe
35d20 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
35d30 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66  ormat(CultureInf
35d40 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75  o.InvariantCultu
35d50 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b 30 7d  re, "PRAGMA [{0}
35d60 5d 2e 69 6e 64 65 78 5f 6c 69 73 74 28 5b 7b 31  ].index_list([{1
35d70 7d 5d 29 22 2c 20 73 74 72 43 61 74 61 6c 6f 67  }])", strCatalog
35d80 2c 20 72 64 54 61 62 6c 65 73 2e 47 65 74 53 74  , rdTables.GetSt
35d90 72 69 6e 67 28 32 29 29 2c 20 74 68 69 73 29 29  ring(2)), this))
35da0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
35db0 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74  using (SQLiteDat
35dc0 61 52 65 61 64 65 72 20 72 64 20 3d 20 28 53 51  aReader rd = (SQ
35dd0 4c 69 74 65 44 61 74 61 52 65 61 64 65 72 29 63  LiteDataReader)c
35de0 6d 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  md.ExecuteReader
35df0 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
35e00 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
35e10 20 20 20 20 20 20 77 68 69 6c 65 20 28 72 64 2e        while (rd.
35e20 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20  Read())..       
35e30 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
35e40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
35e50 20 28 53 74 72 69 6e 67 2e 43 6f 6d 70 61 72 65   (String.Compare
35e60 28 72 64 2e 47 65 74 53 74 72 69 6e 67 28 31 29  (rd.GetString(1)
35e70 2c 20 73 74 72 49 6e 64 65 78 2c 20 53 74 72 69  , strIndex, Stri
35e80 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
35e90 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
35ea0 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20  == 0..          
35eb0 20 20 20 20 20 20 20 20 7c 7c 20 73 74 72 49 6e          || strIn
35ec0 64 65 78 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dex == null)..  
35ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35ee0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
35ef0 20 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c         row = tbl
35f00 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20 20  .NewRow();....  
35f10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35f20 20 20 72 6f 77 5b 22 54 41 42 4c 45 5f 43 41 54    row["TABLE_CAT
35f30 41 4c 4f 47 22 5d 20 3d 20 73 74 72 43 61 74 61  ALOG"] = strCata
35f40 6c 6f 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  log;..          
35f50 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 54            row["T
35f60 41 42 4c 45 5f 4e 41 4d 45 22 5d 20 3d 20 72 64  ABLE_NAME"] = rd
35f70 54 61 62 6c 65 73 2e 47 65 74 53 74 72 69 6e 67  Tables.GetString
35f80 28 32 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  (2);..          
35f90 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 49            row["I
35fa0 4e 44 45 58 5f 43 41 54 41 4c 4f 47 22 5d 20 3d  NDEX_CATALOG"] =
35fb0 20 73 74 72 43 61 74 61 6c 6f 67 3b 0d 0a 20 20   strCatalog;..  
35fc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
35fd0 20 20 72 6f 77 5b 22 49 4e 44 45 58 5f 4e 41 4d    row["INDEX_NAM
35fe0 45 22 5d 20 3d 20 72 64 2e 47 65 74 53 74 72 69  E"] = rd.GetStri
35ff0 6e 67 28 31 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng(1);..        
36000 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
36010 22 55 4e 49 51 55 45 22 5d 20 3d 20 53 51 4c 69  "UNIQUE"] = SQLi
36020 74 65 43 6f 6e 76 65 72 74 2e 54 6f 42 6f 6f 6c  teConvert.ToBool
36030 65 61 6e 28 72 64 2e 47 65 74 56 61 6c 75 65 28  ean(rd.GetValue(
36040 32 29 2c 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e  2), CultureInfo.
36050 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65  InvariantCulture
36060 2c 20 66 61 6c 73 65 29 3b 0d 0a 20 20 20 20 20  , false);..     
36070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
36080 6f 77 5b 22 50 52 49 4d 41 52 59 5f 4b 45 59 22  ow["PRIMARY_KEY"
36090 5d 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  ] = false;....  
360a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360b0 20 20 2f 2f 20 67 65 74 20 74 68 65 20 69 6e 64    // get the ind
360c0 65 78 20 64 65 66 69 6e 69 74 69 6f 6e 0d 0a 20  ex definition.. 
360d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
360e0 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65     using (SQLite
360f0 43 6f 6d 6d 61 6e 64 20 63 6d 64 49 6e 64 65 78  Command cmdIndex
36100 65 73 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  es = new SQLiteC
36110 6f 6d 6d 61 6e 64 28 48 65 6c 70 65 72 4d 65 74  ommand(HelperMet
36120 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
36130 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
36140 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20  variantCulture, 
36150 22 53 45 4c 45 43 54 20 2a 20 46 52 4f 4d 20 5b  "SELECT * FROM [
36160 7b 30 7d 5d 2e 5b 7b 32 7d 5d 20 57 48 45 52 45  {0}].[{2}] WHERE
36170 20 5b 74 79 70 65 5d 20 4c 49 4b 45 20 27 69 6e   [type] LIKE 'in
36180 64 65 78 27 20 41 4e 44 20 5b 6e 61 6d 65 5d 20  dex' AND [name] 
36190 4c 49 4b 45 20 27 7b 31 7d 27 22 2c 20 73 74 72  LIKE '{1}'", str
361a0 43 61 74 61 6c 6f 67 2c 20 72 64 2e 47 65 74 53  Catalog, rd.GetS
361b0 74 72 69 6e 67 28 31 29 2e 52 65 70 6c 61 63 65  tring(1).Replace
361c0 28 22 27 22 2c 20 22 27 27 22 29 2c 20 6d 61 73  ("'", "''"), mas
361d0 74 65 72 29 2c 20 74 68 69 73 29 29 0d 0a 20 20  ter), this))..  
361e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
361f0 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74 65 44    using (SQLiteD
36200 61 74 61 52 65 61 64 65 72 20 72 64 49 6e 64 65  ataReader rdInde
36210 78 65 73 20 3d 20 63 6d 64 49 6e 64 65 78 65 73  xes = cmdIndexes
36220 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28 29  .ExecuteReader()
36230 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
36240 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
36250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36260 77 68 69 6c 65 20 28 72 64 49 6e 64 65 78 65 73  while (rdIndexes
36270 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20  .Read())..      
36280 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36290 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
362a0 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
362b0 64 49 6e 64 65 78 65 73 2e 49 73 44 42 4e 75 6c  dIndexes.IsDBNul
362c0 6c 28 34 29 20 3d 3d 20 66 61 6c 73 65 29 0d 0a  l(4) == false)..
362d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
362e0 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22 49            row["I
362f0 4e 44 45 58 5f 44 45 46 49 4e 49 54 49 4f 4e 22  NDEX_DEFINITION"
36300 5d 20 3d 20 72 64 49 6e 64 65 78 65 73 2e 47 65  ] = rdIndexes.Ge
36310 74 53 74 72 69 6e 67 28 34 29 3b 0d 0a 20 20 20  tString(4);..   
36320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36330 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
36340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36350 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36360 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
36370 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36380 20 20 20 2f 2f 20 4e 6f 77 20 66 6f 72 20 74 68     // Now for th
36390 65 20 72 65 61 6c 6c 79 20 68 61 72 64 20 77 6f  e really hard wo
363a0 72 6b 2e 20 20 46 69 67 75 72 65 20 6f 75 74 20  rk.  Figure out 
363b0 77 68 69 63 68 20 69 6e 64 65 78 20 69 73 20 74  which index is t
363c0 68 65 20 70 72 69 6d 61 72 79 20 6b 65 79 20 69  he primary key i
363d0 6e 64 65 78 2e 0d 0a 20 20 20 20 20 20 20 20 20  ndex...         
363e0 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 54 68             // Th
363f0 65 20 6f 6e 6c 79 20 77 61 79 20 74 6f 20 66 69  e only way to fi
36400 67 75 72 65 20 69 74 20 6f 75 74 20 69 73 20 74  gure it out is t
36410 6f 20 63 68 65 63 6b 20 69 66 20 74 68 65 20 69  o check if the i
36420 6e 64 65 78 20 77 61 73 20 61 6e 20 61 75 74 6f  ndex was an auto
36430 69 6e 64 65 78 20 61 6e 64 20 69 66 20 77 65 20  index and if we 
36440 68 61 76 65 20 61 20 6e 6f 6e 2d 72 6f 77 69 64  have a non-rowid
36450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
36460 20 20 20 20 20 20 2f 2f 20 70 72 69 6d 61 72 79        // primary
36470 20 6b 65 79 2c 20 61 6e 64 20 61 6c 6c 20 74 68   key, and all th
36480 65 20 63 6f 6c 75 6d 6e 73 20 69 6e 20 74 68 65  e columns in the
36490 20 67 69 76 65 6e 20 69 6e 64 65 78 20 6d 61 74   given index mat
364a0 63 68 20 74 68 65 20 70 72 69 6d 61 72 79 20 6b  ch the primary k
364b0 65 79 20 63 6f 6c 75 6d 6e 73 0d 0a 20 20 20 20  ey columns..    
364c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
364d0 69 66 20 28 70 72 69 6d 61 72 79 4b 65 79 73 2e  if (primaryKeys.
364e0 43 6f 75 6e 74 20 3e 20 30 20 26 26 20 72 64 2e  Count > 0 && rd.
364f0 47 65 74 53 74 72 69 6e 67 28 31 29 2e 53 74 61  GetString(1).Sta
36500 72 74 73 57 69 74 68 28 22 73 71 6c 69 74 65 5f  rtsWith("sqlite_
36510 61 75 74 6f 69 6e 64 65 78 5f 22 20 2b 20 72 64  autoindex_" + rd
36520 54 61 62 6c 65 73 2e 47 65 74 53 74 72 69 6e 67  Tables.GetString
36530 28 32 29 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61  (2), StringCompa
36540 72 69 73 6f 6e 2e 49 6e 76 61 72 69 61 6e 74 43  rison.InvariantC
36550 75 6c 74 75 72 65 49 67 6e 6f 72 65 43 61 73 65  ultureIgnoreCase
36560 29 20 3d 3d 20 74 72 75 65 29 0d 0a 20 20 20 20  ) == true)..    
36570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36580 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
36590 20 20 20 20 20 20 20 20 20 75 73 69 6e 67 20 28           using (
365a0 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d  SQLiteCommand cm
365b0 64 44 65 74 61 69 6c 73 20 3d 20 6e 65 77 20 53  dDetails = new S
365c0 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 28 48 65 6c  QLiteCommand(Hel
365d0 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
365e0 67 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49  gFormat(CultureI
365f0 6e 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c  nfo.InvariantCul
36600 74 75 72 65 2c 20 22 50 52 41 47 4d 41 20 5b 7b  ture, "PRAGMA [{
36610 30 7d 5d 2e 69 6e 64 65 78 5f 69 6e 66 6f 28 5b  0}].index_info([
36620 7b 31 7d 5d 29 22 2c 20 73 74 72 43 61 74 61 6c  {1}])", strCatal
36630 6f 67 2c 20 72 64 2e 47 65 74 53 74 72 69 6e 67  og, rd.GetString
36640 28 31 29 29 2c 20 74 68 69 73 29 29 0d 0a 20 20  (1)), this))..  
36650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36660 20 20 20 20 75 73 69 6e 67 20 28 53 51 4c 69 74      using (SQLit
36670 65 44 61 74 61 52 65 61 64 65 72 20 72 64 44 65  eDataReader rdDe
36680 74 61 69 6c 73 20 3d 20 63 6d 64 44 65 74 61 69  tails = cmdDetai
36690 6c 73 2e 45 78 65 63 75 74 65 52 65 61 64 65 72  ls.ExecuteReader
366a0 28 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ())..           
366b0 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
366c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
366d0 20 20 20 20 20 20 69 6e 74 20 6e 4d 61 74 63 68        int nMatch
366e0 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  es = 0;..       
366f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36700 20 77 68 69 6c 65 20 28 72 64 44 65 74 61 69 6c   while (rdDetail
36710 73 2e 52 65 61 64 28 29 29 0d 0a 20 20 20 20 20  s.Read())..     
36720 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
36740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36750 69 66 20 28 70 72 69 6d 61 72 79 4b 65 79 73 2e  if (primaryKeys.
36760 43 6f 6e 74 61 69 6e 73 28 72 64 44 65 74 61 69  Contains(rdDetai
36770 6c 73 2e 47 65 74 49 6e 74 33 32 28 31 29 29 20  ls.GetInt32(1)) 
36780 3d 3d 20 66 61 6c 73 65 29 0d 0a 20 20 20 20 20  == false)..     
36790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367a0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
367b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
367c0 20 20 20 20 6e 4d 61 74 63 68 65 73 20 3d 20 30      nMatches = 0
367d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
367e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62                 b
367f0 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20  reak;..         
36800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36810 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
36820 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 4d                nM
36830 61 74 63 68 65 73 2b 2b 3b 0d 0a 20 20 20 20 20  atches++;..     
36840 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36850 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
36860 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
36870 20 28 6e 4d 61 74 63 68 65 73 20 3d 3d 20 70 72   (nMatches == pr
36880 69 6d 61 72 79 4b 65 79 73 2e 43 6f 75 6e 74 29  imaryKeys.Count)
36890 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
368a0 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
368b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
368c0 20 20 20 20 20 20 20 72 6f 77 5b 22 50 52 49 4d         row["PRIM
368d0 41 52 59 5f 4b 45 59 22 5d 20 3d 20 74 72 75 65  ARY_KEY"] = true
368e0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
368f0 20 20 20 20 20 20 20 20 20 20 20 20 20 70 72 69               pri
36900 6d 61 72 79 4b 65 79 73 2e 43 6c 65 61 72 28 29  maryKeys.Clear()
36910 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
36920 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
36930 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36940 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
36950 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
36960 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
36970 20 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64      tbl.Rows.Add
36980 28 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 20 20  (row);..        
36990 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
369a0 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
369b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
369c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
369d0 20 20 20 20 20 20 20 20 20 20 20 20 63 61 74 63              catc
369e0 68 20 28 53 51 4c 69 74 65 45 78 63 65 70 74 69  h (SQLiteExcepti
369f0 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on)..           
36a00 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
36a10 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
36a20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
36a30 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e   }....      tbl.
36a40 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29 3b  AcceptChanges();
36a50 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64 4c  ..      tbl.EndL
36a60 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  oadData();....  
36a70 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b 0d      return tbl;.
36a80 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72  .    }....    pr
36a90 69 76 61 74 65 20 44 61 74 61 54 61 62 6c 65 20  ivate DataTable 
36aa0 53 63 68 65 6d 61 5f 54 72 69 67 67 65 72 73 28  Schema_Triggers(
36ab0 73 74 72 69 6e 67 20 63 61 74 61 6c 6f 67 2c 20  string catalog, 
36ac0 73 74 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74  string table, st
36ad0 72 69 6e 67 20 74 72 69 67 67 65 72 4e 61 6d 65  ring triggerName
36ae0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
36af0 44 61 74 61 54 61 62 6c 65 20 74 62 6c 20 3d 20  DataTable tbl = 
36b00 6e 65 77 20 44 61 74 61 54 61 62 6c 65 28 22 54  new DataTable("T
36b10 72 69 67 67 65 72 73 22 29 3b 0d 0a 20 20 20 20  riggers");..    
36b20 20 20 44 61 74 61 52 6f 77 20 72 6f 77 3b 0d 0a    DataRow row;..
36b30 0d 0a 20 20 20 20 20 20 74 62 6c 2e 4c 6f 63 61  ..      tbl.Loca
36b40 6c 65 20 3d 20 43 75 6c 74 75 72 65 49 6e 66 6f  le = CultureInfo
36b50 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
36b60 65 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  e;..      tbl.Co
36b70 6c 75 6d 6e 73 2e 41 64 64 28 22 54 41 42 4c 45  lumns.Add("TABLE
36b80 5f 43 41 54 41 4c 4f 47 22 2c 20 74 79 70 65 6f  _CATALOG", typeo
36b90 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20  f(string));..   
36ba0 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
36bb0 64 64 28 22 54 41 42 4c 45 5f 53 43 48 45 4d 41  dd("TABLE_SCHEMA
36bc0 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  ", typeof(string
36bd0 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
36be0 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 54 41 42 4c  olumns.Add("TABL
36bf0 45 5f 4e 41 4d 45 22 2c 20 74 79 70 65 6f 66 28  E_NAME", typeof(
36c00 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  string));..     
36c10 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
36c20 28 22 54 52 49 47 47 45 52 5f 4e 41 4d 45 22 2c  ("TRIGGER_NAME",
36c30 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29   typeof(string))
36c40 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f 6c  ;..      tbl.Col
36c50 75 6d 6e 73 2e 41 64 64 28 22 54 52 49 47 47 45  umns.Add("TRIGGE
36c60 52 5f 44 45 46 49 4e 49 54 49 4f 4e 22 2c 20 74  R_DEFINITION", t
36c70 79 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d  ypeof(string));.
36c80 0a 0d 0a 20 20 20 20 20 20 74 62 6c 2e 42 65 67  ...      tbl.Beg
36c90 69 6e 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d  inLoadData();...
36ca0 0a 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e  .      if (Strin
36cb0 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28  g.IsNullOrEmpty(
36cc0 74 61 62 6c 65 29 29 20 74 61 62 6c 65 20 3d 20  table)) table = 
36cd0 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 69 66 20  null;..      if 
36ce0 28 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  (String.IsNullOr
36cf0 45 6d 70 74 79 28 63 61 74 61 6c 6f 67 29 29 20  Empty(catalog)) 
36d00 63 61 74 61 6c 6f 67 20 3d 20 47 65 74 44 65 66  catalog = GetDef
36d10 61 75 6c 74 43 61 74 61 6c 6f 67 4e 61 6d 65 28  aultCatalogName(
36d20 29 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67  );..      string
36d30 20 6d 61 73 74 65 72 20 3d 20 47 65 74 4d 61 73   master = GetMas
36d40 74 65 72 54 61 62 6c 65 4e 61 6d 65 28 49 73 54  terTableName(IsT
36d50 65 6d 70 6f 72 61 72 79 43 61 74 61 6c 6f 67 4e  emporaryCatalogN
36d60 61 6d 65 28 63 61 74 61 6c 6f 67 29 29 3b 0d 0a  ame(catalog));..
36d70 0d 0a 20 20 20 20 20 20 75 73 69 6e 67 20 28 53  ..      using (S
36d80 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63 6d 64  QLiteCommand cmd
36d90 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6d   = new SQLiteCom
36da0 6d 61 6e 64 28 48 65 6c 70 65 72 4d 65 74 68 6f  mand(HelperMetho
36db0 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
36dc0 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
36dd0 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20 22 53  riantCulture, "S
36de0 45 4c 45 43 54 20 5b 74 79 70 65 5d 2c 20 5b 6e  ELECT [type], [n
36df0 61 6d 65 5d 2c 20 5b 74 62 6c 5f 6e 61 6d 65 5d  ame], [tbl_name]
36e00 2c 20 5b 72 6f 6f 74 70 61 67 65 5d 2c 20 5b 73  , [rootpage], [s
36e10 71 6c 5d 2c 20 5b 72 6f 77 69 64 5d 20 46 52 4f  ql], [rowid] FRO
36e20 4d 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20 57 48  M [{0}].[{1}] WH
36e30 45 52 45 20 5b 74 79 70 65 5d 20 4c 49 4b 45 20  ERE [type] LIKE 
36e40 27 74 72 69 67 67 65 72 27 22 2c 20 63 61 74 61  'trigger'", cata
36e50 6c 6f 67 2c 20 6d 61 73 74 65 72 29 2c 20 74 68  log, master), th
36e60 69 73 29 29 0d 0a 20 20 20 20 20 20 75 73 69 6e  is))..      usin
36e70 67 20 28 53 51 4c 69 74 65 44 61 74 61 52 65 61  g (SQLiteDataRea
36e80 64 65 72 20 72 64 20 3d 20 28 53 51 4c 69 74 65  der rd = (SQLite
36e90 44 61 74 61 52 65 61 64 65 72 29 63 6d 64 2e 45  DataReader)cmd.E
36ea0 78 65 63 75 74 65 52 65 61 64 65 72 28 29 29 0d  xecuteReader()).
36eb0 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
36ec0 20 20 77 68 69 6c 65 20 28 72 64 2e 52 65 61 64    while (rd.Read
36ed0 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ())..        {..
36ee0 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74            if (St
36ef0 72 69 6e 67 2e 43 6f 6d 70 61 72 65 28 72 64 2e  ring.Compare(rd.
36f00 47 65 74 53 74 72 69 6e 67 28 31 29 2c 20 74 72  GetString(1), tr
36f10 69 67 67 65 72 4e 61 6d 65 2c 20 53 74 72 69 6e  iggerName, Strin
36f20 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
36f30 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
36f40 3d 20 30 0d 0a 20 20 20 20 20 20 20 20 20 20 20  = 0..           
36f50 20 7c 7c 20 74 72 69 67 67 65 72 4e 61 6d 65 20   || triggerName 
36f60 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
36f70 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
36f80 20 20 20 69 66 20 28 74 61 62 6c 65 20 3d 3d 20     if (table == 
36f90 6e 75 6c 6c 20 7c 7c 20 53 74 72 69 6e 67 2e 43  null || String.C
36fa0 6f 6d 70 61 72 65 28 74 61 62 6c 65 2c 20 72 64  ompare(table, rd
36fb0 2e 47 65 74 53 74 72 69 6e 67 28 32 29 2c 20 53  .GetString(2), S
36fc0 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e  tringComparison.
36fd0 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73  OrdinalIgnoreCas
36fe0 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20  e) == 0)..      
36ff0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
37000 20 20 20 20 20 20 20 72 6f 77 20 3d 20 74 62 6c         row = tbl
37010 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a 0d 0a 20 20  .NewRow();....  
37020 20 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b              row[
37030 22 54 41 42 4c 45 5f 43 41 54 41 4c 4f 47 22 5d  "TABLE_CATALOG"]
37040 20 3d 20 63 61 74 61 6c 6f 67 3b 0d 0a 20 20 20   = catalog;..   
37050 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 5b 22             row["
37060 54 41 42 4c 45 5f 4e 41 4d 45 22 5d 20 3d 20 72  TABLE_NAME"] = r
37070 64 2e 47 65 74 53 74 72 69 6e 67 28 32 29 3b 0d  d.GetString(2);.
37080 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72  .              r
37090 6f 77 5b 22 54 52 49 47 47 45 52 5f 4e 41 4d 45  ow["TRIGGER_NAME
370a0 22 5d 20 3d 20 72 64 2e 47 65 74 53 74 72 69 6e  "] = rd.GetStrin
370b0 67 28 31 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  g(1);..         
370c0 20 20 20 20 20 72 6f 77 5b 22 54 52 49 47 47 45       row["TRIGGE
370d0 52 5f 44 45 46 49 4e 49 54 49 4f 4e 22 5d 20 3d  R_DEFINITION"] =
370e0 20 72 64 2e 47 65 74 53 74 72 69 6e 67 28 34 29   rd.GetString(4)
370f0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
37100 20 20 20 74 62 6c 2e 52 6f 77 73 2e 41 64 64 28     tbl.Rows.Add(
37110 72 6f 77 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  row);..         
37120 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
37130 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
37140 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 74 62 6c      }..      tbl
37150 2e 41 63 63 65 70 74 43 68 61 6e 67 65 73 28 29  .AcceptChanges()
37160 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 45 6e 64  ;..      tbl.End
37170 4c 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20  LoadData();.... 
37180 20 20 20 20 20 72 65 74 75 72 6e 20 74 62 6c 3b       return tbl;
37190 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
371a0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
371b0 20 20 2f 2f 2f 20 52 65 74 72 69 65 76 65 73 20    /// Retrieves 
371c0 74 61 62 6c 65 20 73 63 68 65 6d 61 20 69 6e 66  table schema inf
371d0 6f 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65  ormation for the
371e0 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 63 61   database and ca
371f0 74 61 6c 6f 67 0d 0a 20 20 20 20 2f 2f 2f 20 3c  talog..    /// <
37200 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
37210 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
37220 73 74 72 43 61 74 61 6c 6f 67 22 3e 54 68 65 20  strCatalog">The 
37230 63 61 74 61 6c 6f 67 20 28 61 74 74 61 63 68 65  catalog (attache
37240 64 20 64 61 74 61 62 61 73 65 29 20 74 6f 20 72  d database) to r
37250 65 74 72 69 65 76 65 20 74 61 62 6c 65 73 20 6f  etrieve tables o
37260 6e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  n</param>..    /
37270 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
37280 73 74 72 54 61 62 6c 65 22 3e 54 68 65 20 74 61  strTable">The ta
37290 62 6c 65 20 74 6f 20 72 65 74 72 69 65 76 65 2c  ble to retrieve,
372a0 20 63 61 6e 20 62 65 20 6e 75 6c 6c 3c 2f 70 61   can be null</pa
372b0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
372c0 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 54 79  aram name="strTy
372d0 70 65 22 3e 54 68 65 20 74 61 62 6c 65 20 74 79  pe">The table ty
372e0 70 65 2c 20 63 61 6e 20 62 65 20 6e 75 6c 6c 3c  pe, can be null<
372f0 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
37300 20 3c 72 65 74 75 72 6e 73 3e 44 61 74 61 54 61   <returns>DataTa
37310 62 6c 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ble</returns>.. 
37320 20 20 20 70 72 69 76 61 74 65 20 44 61 74 61 54     private DataT
37330 61 62 6c 65 20 53 63 68 65 6d 61 5f 54 61 62 6c  able Schema_Tabl
37340 65 73 28 73 74 72 69 6e 67 20 73 74 72 43 61 74  es(string strCat
37350 61 6c 6f 67 2c 20 73 74 72 69 6e 67 20 73 74 72  alog, string str
37360 54 61 62 6c 65 2c 20 73 74 72 69 6e 67 20 73 74  Table, string st
37370 72 54 79 70 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  rType)..    {.. 
37380 20 20 20 20 20 44 61 74 61 54 61 62 6c 65 20 74       DataTable t
37390 62 6c 20 3d 20 6e 65 77 20 44 61 74 61 54 61 62  bl = new DataTab
373a0 6c 65 28 22 54 61 62 6c 65 73 22 29 3b 0d 0a 20  le("Tables");.. 
373b0 20 20 20 20 20 44 61 74 61 52 6f 77 20 72 6f 77       DataRow row
373c0 3b 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ;..      string 
373d0 73 74 72 49 74 65 6d 3b 0d 0a 0d 0a 20 20 20 20  strItem;....    
373e0 20 20 74 62 6c 2e 4c 6f 63 61 6c 65 20 3d 20 43    tbl.Locale = C
373f0 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72  ultureInfo.Invar
37400 69 61 6e 74 43 75 6c 74 75 72 65 3b 0d 0a 20 20  iantCulture;..  
37410 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e      tbl.Columns.
37420 41 64 64 28 22 54 41 42 4c 45 5f 43 41 54 41 4c  Add("TABLE_CATAL
37430 4f 47 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69  OG", typeof(stri
37440 6e 67 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c  ng));..      tbl
37450 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 54 41  .Columns.Add("TA
37460 42 4c 45 5f 53 43 48 45 4d 41 22 2c 20 74 79 70  BLE_SCHEMA", typ
37470 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a 20  eof(string));.. 
37480 20 20 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73       tbl.Columns
37490 2e 41 64 64 28 22 54 41 42 4c 45 5f 4e 41 4d 45  .Add("TABLE_NAME
374a0 22 2c 20 74 79 70 65 6f 66 28 73 74 72 69 6e 67  ", typeof(string
374b0 29 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43  ));..      tbl.C
374c0 6f 6c 75 6d 6e 73 2e 41 64 64 28 22 54 41 42 4c  olumns.Add("TABL
374d0 45 5f 54 59 50 45 22 2c 20 74 79 70 65 6f 66 28  E_TYPE", typeof(
374e0 73 74 72 69 6e 67 29 29 3b 0d 0a 20 20 20 20 20  string));..     
374f0 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41 64 64   tbl.Columns.Add
37500 28 22 54 41 42 4c 45 5f 49 44 22 2c 20 74 79 70  ("TABLE_ID", typ
37510 65 6f 66 28 6c 6f 6e 67 29 29 3b 0d 0a 20 20 20  eof(long));..   
37520 20 20 20 74 62 6c 2e 43 6f 6c 75 6d 6e 73 2e 41     tbl.Columns.A
37530 64 64 28 22 54 41 42 4c 45 5f 52 4f 4f 54 50 41  dd("TABLE_ROOTPA
37540 47 45 22 2c 20 74 79 70 65 6f 66 28 69 6e 74 29  GE", typeof(int)
37550 29 3b 0d 0a 20 20 20 20 20 20 74 62 6c 2e 43 6f  );..      tbl.Co
37560 6c 75 6d 6e 73 2e 41 64 64 28 22 54 41 42 4c 45  lumns.Add("TABLE
37570 5f 44 45 46 49 4e 49 54 49 4f 4e 22 2c 20 74 79  _DEFINITION", ty
37580 70 65 6f 66 28 73 74 72 69 6e 67 29 29 3b 0d 0a  peof(string));..
37590 20 20 20 20 20 20 74 62 6c 2e 42 65 67 69 6e 4c        tbl.BeginL
375a0 6f 61 64 44 61 74 61 28 29 3b 0d 0a 0d 0a 20 20  oadData();....  
375b0 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
375c0 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72  sNullOrEmpty(str
375d0 43 61 74 61 6c 6f 67 29 29 20 73 74 72 43 61 74  Catalog)) strCat
375e0 61 6c 6f 67 20 3d 20 47 65 74 44 65 66 61 75 6c  alog = GetDefaul
375f0 74 43 61 74 61 6c 6f 67 4e 61 6d 65 28 29 3b 0d  tCatalogName();.
37600 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ...      string 
37610 6d 61 73 74 65 72 20 3d 20 47 65 74 4d 61 73 74  master = GetMast
37620 65 72 54 61 62 6c 65 4e 61 6d 65 28 49 73 54 65  erTableName(IsTe
37630 6d 70 6f 72 61 72 79 43 61 74 61 6c 6f 67 4e 61  mporaryCatalogNa
37640 6d 65 28 73 74 72 43 61 74 61 6c 6f 67 29 29 3b  me(strCatalog));
37650 0d 0a 0d 0a 20 20 20 20 20 20 75 73 69 6e 67 20  ....      using 
37660 28 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20 63  (SQLiteCommand c
37670 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  md = new SQLiteC
37680 6f 6d 6d 61 6e 64 28 48 65 6c 70 65 72 4d 65 74  ommand(HelperMet
37690 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
376a0 74 28 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e  t(CultureInfo.In
376b0 76 61 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 20  variantCulture, 
376c0 22 53 45 4c 45 43 54 20 5b 74 79 70 65 5d 2c 20  "SELECT [type], 
376d0 5b 6e 61 6d 65 5d 2c 20 5b 74 62 6c 5f 6e 61 6d  [name], [tbl_nam
376e0 65 5d 2c 20 5b 72 6f 6f 74 70 61 67 65 5d 2c 20  e], [rootpage], 
376f0 5b 73 71 6c 5d 2c 20 5b 72 6f 77 69 64 5d 20 46  [sql], [rowid] F
37700 52 4f 4d 20 5b 7b 30 7d 5d 2e 5b 7b 31 7d 5d 20  ROM [{0}].[{1}] 
37710 57 48 45 52 45 20 5b 74 79 70 65 5d 20 4c 49 4b  WHERE [type] LIK
37720 45 20 27 74 61 62 6c 65 27 22 2c 20 73 74 72 43  E 'table'", strC
37730 61 74 61 6c 6f 67 2c 20 6d 61 73 74 65 72 29 2c  atalog, master),
37740 20 74 68 69 73 29 29 0d 0a 20 20 20 20 20 20 75   this))..      u
37750 73 69 6e 67 20 28 53 51 4c 69 74 65 44 61 74 61  sing (SQLiteData
37760 52 65 61 64 65 72 20 72 64 20 3d 20 28 53 51 4c  Reader rd = (SQL
37770 69 74 65 44 61 74 61 52 65 61 64 65 72 29 63 6d  iteDataReader)cm
37780 64 2e 45 78 65 63 75 74 65 52 65 61 64 65 72 28  d.ExecuteReader(
37790 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
377a0 20 20 20 20 20 77 68 69 6c 65 20 28 72 64 2e 52       while (rd.R
377b0 65 61 64 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ead())..        
377c0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  {..          str
377d0 49 74 65 6d 20 3d 20 72 64 2e 47 65 74 53 74 72  Item = rd.GetStr
377e0 69 6e 67 28 30 29 3b 0d 0a 20 20 20 20 20 20 20  ing(0);..       
377f0 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f     if (String.Co
37800 6d 70 61 72 65 28 72 64 2e 47 65 74 53 74 72 69  mpare(rd.GetStri
37810 6e 67 28 32 29 2c 20 30 2c 20 22 53 51 4c 49 54  ng(2), 0, "SQLIT
37820 45 5f 22 2c 20 30 2c 20 37 2c 20 53 74 72 69 6e  E_", 0, 7, Strin
37830 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
37840 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
37850 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
37860 20 20 73 74 72 49 74 65 6d 20 3d 20 22 53 59 53    strItem = "SYS
37870 54 45 4d 5f 54 41 42 4c 45 22 3b 0d 0a 0d 0a 20  TEM_TABLE";.... 
37880 20 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72           if (Str
37890 69 6e 67 2e 43 6f 6d 70 61 72 65 28 73 74 72 54  ing.Compare(strT
378a0 79 70 65 2c 20 73 74 72 49 74 65 6d 2c 20 53 74  ype, strItem, St
378b0 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f  ringComparison.O
378c0 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65  rdinalIgnoreCase
378d0 29 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20 20 20  ) == 0..        
378e0 20 20 20 20 7c 7c 20 73 74 72 54 79 70 65 20 3d      || strType =
378f0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
37900 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
37910 20 20 69 66 20 28 53 74 72 69 6e 67 2e 43 6f 6d    if (String.Com
37920 70 61 72 65 28 72 64 2e 47 65 74 53 74 72 69 6e  pare(rd.GetStrin
37930 67 28 32 29 2c 20 73 74 72 54 61 62 6c 65 2c 20  g(2), strTable, 
37940 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e  StringComparison
37950 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61  .OrdinalIgnoreCa
37960 73 65 29 20 3d 3d 20 30 0d 0a 20 20 20 20 20 20  se) == 0..      
37970 20 20 20 20 20 20 20 20 7c 7c 20 73 74 72 54 61          || strTa
37980 62 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ble == null)..  
37990 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
379a0 20 20 20 20 20 20 20 20 20 20 20 72 6f 77 20 3d             row =
379b0 20 74 62 6c 2e 4e 65 77 52 6f 77 28 29 3b 0d 0a   tbl.NewRow();..
379c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
379d0 72 6f 77 5b 22 54 41 42 4c 45 5f 43 41 54 41 4c  row["TABLE_CATAL
379e0 4f 47 22 5d 20 3d 20 73 74 72 43 61 74 61 6c 6f  OG"] = strCatalo
379f0 67 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  g;..            
37a00 20 20 72 6f 77 5b 22 54 41 42 4c 45 5f 4e 41 4d    row["TABLE_NAM
37a10 45 22 5d 20 3d 20 72 64 2e 47 65 74 53 74 72 69  E"] = rd.GetStri
37a20 6e 67 28 32 29 3b 0d 0a 20 20 20 20 20 20 20 20  ng(2);..        
37a30 20 20 20 20 20 20 72 6f 77 5b 22 54 41 42 4c 45        row["TABLE
37a40 5f 54 59 50 45 22 5d 20 3d 20 73 74 72 49 74 65  _TYPE"] = strIte
37a50 6d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  m;..            
37a60 20 20 72 6f 77 5b 22 54 41 42 4c 45 5f 49 44 22    row["TABLE_ID"
37a70 5d 20 3d 20 72 64 2e 47 65 74 49 6e 74 36 34 28  ] = rd.GetInt64(
37a80 35 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  5);..           
37a90 20 20 20 72 6f 77 5b 22 54 41 42 4c 45 5f 52 4f     row["TABLE_RO
37aa0 4f 54 50 41 47 45 22 5d 20 3d 20 72 64 2e 47 65  OTPAGE"] = rd.Ge
37ab0 74 49 6e 74 33 32 28 33 29 3b 0d 0a 20 20 20 20  tInt32(3)