System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact dbfc69e3ad1ea2ee449af9ccd14ba1a3d9d6a952:


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 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
0190: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
01a0: 20 75 73 69 6e 67 20 53 79 73 74 65 6d 2e 52 75   using System.Ru
01b0: 6e 74 69 6d 65 2e 49 6e 74 65 72 6f 70 53 65 72  ntime.InteropSer
01c0: 76 69 63 65 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a  vices;..#endif..
01d0: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
01e0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73 20 69 6e  >..  /// This in
01f0: 74 65 72 6e 61 6c 20 63 6c 61 73 73 20 70 72 6f  ternal class pro
0200: 76 69 64 65 73 20 74 68 65 20 66 6f 75 6e 64 61  vides the founda
0210: 74 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 20 73  tion of SQLite s
0220: 75 70 70 6f 72 74 2e 20 20 49 74 20 64 65 66 69  upport.  It defi
0230: 6e 65 73 20 61 6c 6c 20 74 68 65 20 61 62 73 74  nes all the abst
0240: 72 61 63 74 20 6d 65 6d 62 65 72 73 20 6e 65 65  ract members nee
0250: 64 65 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74  ded to implement
0260: 0d 0a 20 20 2f 2f 2f 20 61 20 53 51 4c 69 74 65  ..  /// a SQLite
0270: 20 64 61 74 61 20 70 72 6f 76 69 64 65 72 2c 20   data provider, 
0280: 61 6e 64 20 69 6e 68 65 72 69 74 73 20 66 72 6f  and inherits fro
0290: 6d 20 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 20  m SQLiteConvert 
02a0: 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 66 6f 72  which allows for
02b0: 20 73 69 6d 70 6c 65 20 74 72 61 6e 73 6c 61 74   simple translat
02c0: 69 6f 6e 73 20 6f 66 20 73 74 72 69 6e 67 20 74  ions of string t
02d0: 6f 20 61 6e 64 20 66 72 6f 6d 20 53 51 4c 69 74  o and from SQLit
02e0: 65 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  e...  /// </summ
02f0: 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e 61 6c  ary>..  internal
0300: 20 61 62 73 74 72 61 63 74 20 63 6c 61 73 73 20   abstract class 
0310: 53 51 4c 69 74 65 42 61 73 65 20 3a 20 53 51 4c  SQLiteBase : SQL
0320: 69 74 65 43 6f 6e 76 65 72 74 2c 20 49 44 69 73  iteConvert, IDis
0330: 70 6f 73 61 62 6c 65 0d 0a 20 20 7b 0d 0a 20 20  posable..  {..  
0340: 20 20 23 72 65 67 69 6f 6e 20 50 72 69 76 61 74    #region Privat
0350: 65 20 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20  e Constants..   
0360: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0370: 20 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f      /// The erro
0380: 72 20 63 6f 64 65 20 75 73 65 64 20 66 6f 72 20  r code used for 
0390: 6c 6f 67 67 69 6e 67 20 65 78 63 65 70 74 69 6f  logging exceptio
03a0: 6e 73 20 63 61 75 67 68 74 20 69 6e 20 75 73 65  ns caught in use
03b0: 72 2d 70 72 6f 76 69 64 65 64 0d 0a 20 20 20 20  r-provided..    
03c0: 2f 2f 2f 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f  /// code...    /
03d0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
03e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 63 6f 6e 73     internal cons
03f0: 74 20 69 6e 74 20 43 4f 52 5f 45 5f 45 58 43 45  t int COR_E_EXCE
0400: 50 54 49 4f 4e 20 3d 20 75 6e 63 68 65 63 6b 65  PTION = unchecke
0410: 64 28 28 69 6e 74 29 30 78 38 30 31 33 31 35 30  d((int)0x8013150
0420: 30 29 3b 0d 0a 20 20 20 20 23 65 6e 64 72 65 67  0);..    #endreg
0430: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
0440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0480: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ////....    inte
0490: 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73 65 28  rnal SQLiteBase(
04a0: 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
04b0: 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d 65 4b  s fmt, DateTimeK
04c0: 69 6e 64 20 6b 69 6e 64 2c 20 73 74 72 69 6e 67  ind kind, string
04d0: 20 66 6d 74 53 74 72 69 6e 67 29 0d 0a 20 20 20   fmtString)..   
04e0: 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b     : base(fmt, k
04f0: 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67 29 20  ind, fmtString) 
0500: 7b 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  { }....    /// <
0510: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0520: 2f 20 52 65 74 75 72 6e 73 20 61 20 73 74 72 69  / Returns a stri
0530: 6e 67 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20  ng representing 
0540: 74 68 65 20 61 63 74 69 76 65 20 76 65 72 73 69  the active versi
0550: 6f 6e 20 6f 66 20 53 51 4c 69 74 65 0d 0a 20 20  on of SQLite..  
0560: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0570: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
0580: 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20 56  bstract string V
0590: 65 72 73 69 6f 6e 20 7b 20 67 65 74 3b 20 7d 0d  ersion { get; }.
05a0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
05b0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
05c0: 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72 20 72  rns an integer r
05d0: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
05e0: 61 63 74 69 76 65 20 76 65 72 73 69 6f 6e 20 6f  active version o
05f0: 66 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f  f SQLite..    //
0600: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0610: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
0620: 61 63 74 20 69 6e 74 20 56 65 72 73 69 6f 6e 4e  act int VersionN
0630: 75 6d 62 65 72 20 7b 20 67 65 74 3b 20 7d 0d 0a  umber { get; }..
0640: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0650: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
0660: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
0670: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  his connection t
0680: 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  o the database i
0690: 73 20 72 65 61 64 2d 6f 6e 6c 79 2e 0d 0a 20 20  s read-only...  
06a0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
06b0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
06c0: 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 49 73 52  bstract bool IsR
06d0: 65 61 64 4f 6e 6c 79 28 73 74 72 69 6e 67 20 6e  eadOnly(string n
06e0: 61 6d 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ame);..    /// <
06f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0700: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 72 6f  / Returns the ro
0710: 77 69 64 20 6f 66 20 74 68 65 20 6d 6f 73 74 20  wid of the most 
0720: 72 65 63 65 6e 74 20 73 75 63 63 65 73 73 66 75  recent successfu
0730: 6c 20 49 4e 53 45 52 54 20 69 6e 74 6f 20 74 68  l INSERT into th
0740: 65 20 64 61 74 61 62 61 73 65 20 66 72 6f 6d 20  e database from 
0750: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  this connection.
0760: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0770: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
0780: 61 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67  al abstract long
0790: 20 4c 61 73 74 49 6e 73 65 72 74 52 6f 77 49 64   LastInsertRowId
07a0: 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f   { get; }..    /
07b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
07c0: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
07d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 63 68 61 6e  e number of chan
07e0: 67 65 73 20 74 68 65 20 6c 61 73 74 20 65 78 65  ges the last exe
07f0: 63 75 74 69 6e 67 20 69 6e 73 65 72 74 2f 75 70  cuting insert/up
0800: 64 61 74 65 20 63 61 75 73 65 64 2e 0d 0a 20 20  date caused...  
0810: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0820: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
0830: 62 73 74 72 61 63 74 20 69 6e 74 20 43 68 61 6e  bstract int Chan
0840: 67 65 73 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20  ges { get; }..  
0850: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0860: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
0870: 20 74 68 65 20 61 6d 6f 75 6e 74 20 6f 66 20 6d   the amount of m
0880: 65 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29  emory (in bytes)
0890: 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20 75 73   currently in us
08a0: 65 20 62 79 20 74 68 65 20 53 51 4c 69 74 65 20  e by the SQLite 
08b0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20 54  core library.  T
08c0: 68 69 73 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c  his is not reall
08d0: 79 20 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69  y a per-connecti
08e0: 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  on..    /// valu
08f0: 65 2c 20 69 74 20 69 73 20 67 6c 6f 62 61 6c 20  e, it is global 
0900: 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d  to the process..
0910: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0920: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
0930: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
0940: 4d 65 6d 6f 72 79 55 73 65 64 20 7b 20 67 65 74  MemoryUsed { get
0950: 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ; }..    /// <su
0960: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0970: 52 65 74 75 72 6e 73 20 74 68 65 20 6d 61 78 69  Returns the maxi
0980: 6d 75 6d 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65  mum amount of me
0990: 6d 6f 72 79 20 28 69 6e 20 62 79 74 65 73 29 20  mory (in bytes) 
09a0: 75 73 65 64 20 62 79 20 74 68 65 20 53 51 4c 69  used by the SQLi
09b0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
09c0: 73 69 6e 63 65 20 74 68 65 20 68 69 67 68 2d 77  since the high-w
09d0: 61 74 65 72 20 6d 61 72 6b 20 77 61 73 20 6c 61  ater mark was la
09e0: 73 74 20 72 65 73 65 74 2e 0d 0a 20 20 20 20 2f  st reset...    /
09f0: 2f 2f 20 54 68 69 73 20 69 73 20 6e 6f 74 20 72  // This is not r
0a00: 65 61 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e 6e  eally a per-conn
0a10: 65 63 74 69 6f 6e 20 76 61 6c 75 65 2c 20 69 74  ection value, it
0a20: 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
0a30: 65 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  e process...    
0a40: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0a50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
0a60: 74 72 61 63 74 20 6c 6f 6e 67 20 4d 65 6d 6f 72  tract long Memor
0a70: 79 48 69 67 68 77 61 74 65 72 20 7b 20 67 65 74  yHighwater { get
0a80: 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ; }..    /// <su
0a90: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
0aa0: 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
0ab0: 20 69 66 20 74 68 65 20 75 6e 64 65 72 6c 79 69   if the underlyi
0ac0: 6e 67 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65 63  ng native connec
0ad0: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 6f  tion handle is o
0ae0: 77 6e 65 64 20 62 79 20 74 68 69 73 20 69 6e 73  wned by this ins
0af0: 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  tance...    /// 
0b00: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0b10: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
0b20: 74 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c 65  t bool OwnHandle
0b30: 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f   { get; }..    /
0b40: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
0b50: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
0b60: 65 20 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f  e logical list o
0b70: 66 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f  f functions asso
0b80: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
0b90: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
0ba0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0bb0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
0bc0: 62 73 74 72 61 63 74 20 49 44 69 63 74 69 6f 6e  bstract IDiction
0bd0: 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ary<SQLiteFuncti
0be0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
0bf0: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e  iteFunction> Fun
0c00: 63 74 69 6f 6e 73 20 7b 20 67 65 74 3b 20 7d 0d  ctions { get; }.
0c10: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
0c20: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 73  y>..    /// Sets
0c30: 20 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74   the status of t
0c40: 68 65 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20  he memory usage 
0c50: 74 72 61 63 6b 69 6e 67 20 73 75 62 73 79 73 74  tracking subsyst
0c60: 65 6d 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65  em in the SQLite
0c70: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20   core library.  
0c80: 42 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73  By default, this
0c90: 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20   is enabled...  
0ca0: 20 20 2f 2f 2f 20 49 66 20 74 68 69 73 20 69 73    /// If this is
0cb0: 20 64 69 73 61 62 6c 65 64 2c 20 6d 65 6d 6f 72   disabled, memor
0cc0: 79 20 75 73 61 67 65 20 74 72 61 63 6b 69 6e 67  y usage tracking
0cd0: 20 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70 65 72   will not be per
0ce0: 66 6f 72 6d 65 64 2e 20 20 54 68 69 73 20 69 73  formed.  This is
0cf0: 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20 70 65   not really a pe
0d00: 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 76 61 6c  r-connection val
0d10: 75 65 2c 20 69 74 20 69 73 0d 0a 20 20 20 20 2f  ue, it is..    /
0d20: 2f 2f 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65  // global to the
0d30: 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f   process...    /
0d40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0d50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
0d60: 6d 65 3d 22 76 61 6c 75 65 22 3e 4e 6f 6e 2d 7a  me="value">Non-z
0d70: 65 72 6f 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65  ero to enable me
0d80: 6d 6f 72 79 20 75 73 61 67 65 20 74 72 61 63 6b  mory usage track
0d90: 69 6e 67 2c 20 7a 65 72 6f 20 6f 74 68 65 72 77  ing, zero otherw
0da0: 69 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ise.</param>..  
0db0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41    /// <returns>A
0dc0: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
0dd0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e   return code (i.
0de0: 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63  e. zero for succ
0df0: 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f  ess and non-zero
0e00: 20 66 6f 72 20 66 61 69 6c 75 72 65 29 2e 3c 2f   for failure).</
0e10: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
0e20: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0e30: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
0e40: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
0e50: 62 6f 6f 6c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  bool value);..  
0e60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0e70: 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74  .    /// Attempt
0e80: 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75 63  s to free as muc
0e90: 68 20 68 65 61 70 20 6d 65 6d 6f 72 79 20 61 73  h heap memory as
0ea0: 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20 74 68   possible for th
0eb0: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
0ec0: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
0ed0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0ee0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20 73  /// <returns>A s
0ef0: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
0f00: 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65 2e  eturn code (i.e.
0f10: 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65 73   zero for succes
0f20: 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66  s and non-zero f
0f30: 6f 72 20 66 61 69 6c 75 72 65 29 2e 3c 2f 72 65  or failure).</re
0f40: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
0f50: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51  rnal abstract SQ
0f60: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 52 65  LiteErrorCode Re
0f70: 6c 65 61 73 65 4d 65 6d 6f 72 79 28 29 3b 0d 0a  leaseMemory();..
0f80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0f90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64  >..    /// Shutd
0fa0: 6f 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65  own the SQLite e
0fb0: 6e 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74  ngine so that it
0fc0: 20 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65   can be restarte
0fd0: 64 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74  d with different
0fe0: 20 63 6f 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e   config options.
0ff0: 0d 0a 20 20 20 20 2f 2f 2f 20 57 65 20 64 65 70  ..    /// We dep
1000: 65 6e 64 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74  end on auto init
1010: 69 61 6c 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65  ialization to re
1020: 63 6f 76 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20  cover...    /// 
1030: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
1040: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1050: 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
1060: 65 20 53 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20  e Shutdown();.. 
1070: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1080: 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
1090: 69 6e 65 73 20 69 66 20 74 68 65 20 61 73 73 6f  ines if the asso
10a0: 63 69 61 74 65 64 20 6e 61 74 69 76 65 20 63 6f  ciated native co
10b0: 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20  nnection handle 
10c0: 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f  is open...    //
10d0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
10e0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
10f0: 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72  .    /// Non-zer
1100: 6f 20 69 66 20 61 20 64 61 74 61 62 61 73 65 20  o if a database 
1110: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 6f 70  connection is op
1120: 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  en...    /// </r
1130: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
1140: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62  ernal abstract b
1150: 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 3b 0d 0a 20  ool IsOpen();.. 
1160: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1170: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
1180: 73 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  s the fully qual
1190: 69 66 69 65 64 20 70 61 74 68 20 61 6e 64 20 66  ified path and f
11a0: 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
11b0: 20 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 0d   currently open.
11c0: 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73  .    /// databas
11d0: 65 2c 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20  e, if any...    
11e0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
11f0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1200: 61 6d 65 3d 22 64 62 4e 61 6d 65 22 3e 0d 0a 20  ame="dbName">.. 
1210: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
1220: 6f 66 20 74 68 65 20 61 74 74 61 63 68 65 64 20  of the attached 
1230: 64 61 74 61 62 61 73 65 20 74 6f 20 71 75 65 72  database to quer
1240: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  y...    /// </pa
1250: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
1260: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
1270: 20 54 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   The fully quali
1280: 66 69 65 64 20 70 61 74 68 20 61 6e 64 20 66 69  fied path and fi
1290: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20  le name for the 
12a0: 63 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64  currently open d
12b0: 61 74 61 62 61 73 65 2c 0d 0a 20 20 20 20 2f 2f  atabase,..    //
12c0: 2f 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f  / if any...    /
12d0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
12e0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
12f0: 72 61 63 74 20 73 74 72 69 6e 67 20 47 65 74 46  ract string GetF
1300: 69 6c 65 4e 61 6d 65 28 73 74 72 69 6e 67 20 64  ileName(string d
1310: 62 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f  bName);..    ///
1320: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1330: 2f 2f 2f 20 4f 70 65 6e 73 20 61 20 64 61 74 61  /// Opens a data
1340: 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  base...    /// <
1350: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1360: 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20  // <remarks>..  
1370: 20 20 2f 2f 2f 20 49 6d 70 6c 65 6d 65 6e 74 65    /// Implemente
1380: 72 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53  rs should call S
1390: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69  QLiteFunction.Bi
13a0: 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20 61 6e  ndFunctions() an
13b0: 64 20 73 61 76 65 20 74 68 65 20 61 72 72 61 79  d save the array
13c0: 20 61 66 74 65 72 20 6f 70 65 6e 69 6e 67 20 61   after opening a
13d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20   connection..   
13e0: 20 2f 2f 2f 20 74 6f 20 62 69 6e 64 20 61 6c 6c   /// to bind all
13f0: 20 61 74 74 72 69 62 75 74 65 64 20 75 73 65 72   attributed user
1400: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
1410: 6e 73 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  ns and collating
1420: 20 73 65 71 75 65 6e 63 65 73 20 74 6f 20 74 68   sequences to th
1430: 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e  e new connection
1440: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 6d  ...    /// </rem
1450: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  arks>..    /// <
1460: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 46  param name="strF
1470: 69 6c 65 6e 61 6d 65 22 3e 54 68 65 20 66 69 6c  ilename">The fil
1480: 65 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 61 74  ename of the dat
1490: 61 62 61 73 65 20 74 6f 20 6f 70 65 6e 2e 20 20  abase to open.  
14a0: 53 51 4c 69 74 65 20 61 75 74 6f 6d 61 74 69 63  SQLite automatic
14b0: 61 6c 6c 79 20 63 72 65 61 74 65 73 20 69 74 20  ally creates it 
14c0: 69 66 20 69 74 20 64 6f 65 73 6e 27 74 20 65 78  if it doesn't ex
14d0: 69 73 74 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ist.</param>..  
14e0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
14f0: 65 3d 22 76 66 73 4e 61 6d 65 22 3e 54 68 65 20  e="vfsName">The 
1500: 6e 61 6d 65 20 6f 66 20 74 68 65 20 56 46 53 20  name of the VFS 
1510: 74 6f 20 75 73 65 20 2d 4f 52 2d 20 6e 75 6c 6c  to use -OR- null
1520: 20 74 6f 20 75 73 65 20 74 68 65 20 64 65 66 61   to use the defa
1530: 75 6c 74 20 56 46 53 2e 3c 2f 70 61 72 61 6d 3e  ult VFS.</param>
1540: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1550: 20 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f   name="connectio
1560: 6e 46 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67  nFlags">The flag
1570: 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
1580: 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e  h the parent con
1590: 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 3c 2f  nection object</
15a0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
15b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 65  <param name="ope
15c0: 6e 46 6c 61 67 73 22 3e 54 68 65 20 6f 70 65 6e  nFlags">The open
15d0: 20 66 6c 61 67 73 20 74 6f 20 75 73 65 20 77 68   flags to use wh
15e0: 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20  en creating the 
15f0: 63 6f 6e 6e 65 63 74 69 6f 6e 3c 2f 70 61 72 61  connection</para
1600: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
1610: 61 6d 20 6e 61 6d 65 3d 22 6d 61 78 50 6f 6f 6c  am name="maxPool
1620: 53 69 7a 65 22 3e 54 68 65 20 6d 61 78 69 6d 75  Size">The maximu
1630: 6d 20 73 69 7a 65 20 6f 66 20 74 68 65 20 70 6f  m size of the po
1640: 6f 6c 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e  ol for the given
1650: 20 66 69 6c 65 6e 61 6d 65 3c 2f 70 61 72 61 6d   filename</param
1660: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1670: 6d 20 6e 61 6d 65 3d 22 75 73 65 50 6f 6f 6c 22  m name="usePool"
1680: 3e 49 66 20 74 72 75 65 2c 20 74 68 65 20 63 6f  >If true, the co
1690: 6e 6e 65 63 74 69 6f 6e 20 63 61 6e 20 62 65 20  nnection can be 
16a0: 70 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20  pulled from the 
16b0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 3c  connection pool<
16c0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
16d0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
16e0: 6f 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20  oid Open(string 
16f0: 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 73 74 72  strFilename, str
1700: 69 6e 67 20 76 66 73 4e 61 6d 65 2c 20 53 51 4c  ing vfsName, SQL
1710: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
1720: 67 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  gs connectionFla
1730: 67 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c  gs, SQLiteOpenFl
1740: 61 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67  agsEnum openFlag
1750: 73 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69  s, int maxPoolSi
1760: 7a 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c  ze, bool usePool
1770: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
1780: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
1790: 6c 6f 73 65 73 20 74 68 65 20 63 75 72 72 65 6e  loses the curren
17a0: 74 6c 79 2d 6f 70 65 6e 20 64 61 74 61 62 61 73  tly-open databas
17b0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
17c0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
17d0: 3c 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f  <remarks>..    /
17e0: 2f 2f 20 41 66 74 65 72 20 74 68 65 20 64 61 74  // After the dat
17f0: 61 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 63  abase has been c
1800: 6c 6f 73 65 64 20 69 6d 70 6c 65 6d 65 74 65 72  losed implemeter
1810: 73 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53 51  s should call SQ
1820: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62  LiteFunction.Unb
1830: 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20 74  indFunctions() t
1840: 6f 20 64 65 61 6c 6c 6f 63 61 74 65 20 61 6c 6c  o deallocate all
1850: 20 69 6e 74 65 72 6f 70 20 61 6c 6c 6f 63 61 74   interop allocat
1860: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f  ed..    /// memo
1870: 72 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ry associated wi
1880: 74 68 20 74 68 65 20 75 73 65 72 2d 64 65 66 69  th the user-defi
1890: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e  ned functions an
18a0: 64 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75  d collating sequ
18b0: 65 6e 63 65 73 20 74 69 65 64 20 74 6f 20 74 68  ences tied to th
18c0: 65 20 63 6c 6f 73 65 64 20 63 6f 6e 6e 65 63 74  e closed connect
18d0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
18e0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
18f0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64  / <param name="d
1900: 69 73 70 6f 73 69 6e 67 22 3e 4e 6f 6e 2d 7a 65  isposing">Non-ze
1910: 72 6f 20 69 66 20 63 6f 6e 6e 65 63 74 69 6f 6e  ro if connection
1920: 20 69 73 20 62 65 69 6e 67 20 64 69 73 70 6f 73   is being dispos
1930: 65 64 2c 20 7a 65 72 6f 20 6f 74 68 65 72 77 69  ed, zero otherwi
1940: 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
1950: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
1960: 63 74 20 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f  ct void Close(bo
1970: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 3b 0d 0a  ol disposing);..
1980: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
1990: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 73 20  >..    /// Sets 
19a0: 74 68 65 20 62 75 73 79 20 74 69 6d 65 6f 75 74  the busy timeout
19b0: 20 6f 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   on the connecti
19c0: 6f 6e 2e 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61  on.  SQLiteComma
19d0: 6e 64 20 77 69 6c 6c 20 63 61 6c 6c 20 74 68 69  nd will call thi
19e0: 73 20 62 65 66 6f 72 65 20 65 78 65 63 75 74 69  s before executi
19f0: 6e 67 20 61 6e 79 20 63 6f 6d 6d 61 6e 64 2e 0d  ng any command..
1a00: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1a10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1a20: 72 61 6d 20 6e 61 6d 65 3d 22 6e 54 69 6d 65 6f  ram name="nTimeo
1a30: 75 74 4d 53 22 3e 54 68 65 20 6e 75 6d 62 65 72  utMS">The number
1a40: 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73   of milliseconds
1a50: 20 74 6f 20 77 61 69 74 20 62 65 66 6f 72 65 20   to wait before 
1a60: 72 65 74 75 72 6e 69 6e 67 20 53 51 4c 49 54 45  returning SQLITE
1a70: 5f 42 55 53 59 3c 2f 70 61 72 61 6d 3e 0d 0a 20  _BUSY</param>.. 
1a80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
1a90: 72 61 63 74 20 76 6f 69 64 20 53 65 74 54 69 6d  ract void SetTim
1aa0: 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75  eout(int nTimeou
1ab0: 74 4d 53 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tMS);..    /// <
1ac0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1ad0: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74 65  / Returns the te
1ae0: 78 74 20 6f 66 20 74 68 65 20 6c 61 73 74 20 65  xt of the last e
1af0: 72 72 6f 72 20 69 73 73 75 65 64 20 62 79 20 53  rror issued by S
1b00: 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c  QLite..    /// <
1b10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1b20: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65  // <returns></re
1b30: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1b40: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
1b50: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
1b60: 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  r();....    /// 
1b70: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
1b80: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 74  // Returns the t
1b90: 65 78 74 20 6f 66 20 74 68 65 20 6c 61 73 74 20  ext of the last 
1ba0: 65 72 72 6f 72 20 69 73 73 75 65 64 20 62 79 20  error issued by 
1bb0: 53 51 4c 69 74 65 20 2d 4f 52 2d 20 74 68 65 20  SQLite -OR- the 
1bc0: 73 70 65 63 69 66 69 65 64 20 64 65 66 61 75 6c  specified defaul
1bd0: 74 20 65 72 72 6f 72 20 74 65 78 74 20 69 66 0d  t error text if.
1be0: 0a 20 20 20 20 2f 2f 2f 20 6e 6f 6e 65 20 69 73  .    /// none is
1bf0: 20 61 76 61 69 6c 61 62 6c 65 20 66 72 6f 6d 20   available from 
1c00: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1c10: 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f 2f  library...    //
1c20: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1c30: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1c40: 65 3d 22 64 65 66 56 61 6c 75 65 22 3e 0d 0a 20  e="defValue">.. 
1c50: 20 20 20 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72     /// The error
1c60: 20 74 65 78 74 20 74 6f 20 72 65 74 75 72 6e 20   text to return 
1c70: 69 6e 20 74 68 65 20 65 76 65 6e 74 20 74 68 61  in the event tha
1c80: 74 20 6f 6e 65 20 69 73 20 6e 6f 74 20 61 76 61  t one is not ava
1c90: 69 6c 61 62 6c 65 20 66 72 6f 6d 20 74 68 65 20  ilable from the 
1ca0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
1cb0: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
1cc0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1cd0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
1ce0: 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 74 65 78  // The error tex
1cf0: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  t...    /// </re
1d00: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
1d10: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
1d20: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
1d30: 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c 75  r(string defValu
1d40: 65 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  e);....    /// <
1d50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1d60: 2f 20 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20 69  / When pooling i
1d70: 73 20 65 6e 61 62 6c 65 64 2c 20 66 6f 72 63 65  s enabled, force
1d80: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
1d90: 20 74 6f 20 62 65 20 64 69 73 70 6f 73 65 64 20   to be disposed 
1da0: 72 61 74 68 65 72 20 74 68 61 6e 20 72 65 74 75  rather than retu
1db0: 72 6e 65 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c  rned to the pool
1dc0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1dd0: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
1de0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
1df0: 20 43 6c 65 61 72 50 6f 6f 6c 28 29 3b 0d 0a 0d   ClearPool();...
1e00: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
1e10: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e  y>..    /// When
1e20: 20 70 6f 6f 6c 69 6e 67 20 69 73 20 65 6e 61 62   pooling is enab
1e30: 6c 65 64 2c 20 72 65 74 75 72 6e 73 20 74 68 65  led, returns the
1e40: 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c 20   number of pool 
1e50: 65 6e 74 72 69 65 73 20 6d 61 74 63 68 69 6e 67  entries matching
1e60: 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c   the current fil
1e70: 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f  e name...    ///
1e80: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1e90: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
1ea0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c  e number of pool
1eb0: 20 65 6e 74 72 69 65 73 20 6d 61 74 63 68 69 6e   entries matchin
1ec0: 67 20 74 68 65 20 63 75 72 72 65 6e 74 20 66 69  g the current fi
1ed0: 6c 65 20 6e 61 6d 65 2e 3c 2f 72 65 74 75 72 6e  le name.</return
1ee0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1ef0: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 43 6f   abstract int Co
1f00: 75 6e 74 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20 20  untPool();....  
1f10: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
1f20: 0a 20 20 20 20 2f 2f 2f 20 50 72 65 70 61 72 65  .    /// Prepare
1f30: 73 20 61 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  s a SQL statemen
1f40: 74 20 66 6f 72 20 65 78 65 63 75 74 69 6f 6e 2e  t for execution.
1f50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
1f60: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
1f70: 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 22 3e  aram name="cnn">
1f80: 54 68 65 20 73 6f 75 72 63 65 20 63 6f 6e 6e 65  The source conne
1f90: 63 74 69 6f 6e 20 70 72 65 70 61 72 69 6e 67 20  ction preparing 
1fa0: 74 68 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 43 61  the command.  Ca
1fb0: 6e 20 62 65 20 6e 75 6c 6c 20 66 6f 72 20 61 6e  n be null for an
1fc0: 79 20 63 61 6c 6c 65 72 20 65 78 63 65 70 74 20  y caller except 
1fd0: 4c 49 4e 51 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  LINQ</param>..  
1fe0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1ff0: 65 3d 22 73 74 72 53 71 6c 22 3e 54 68 65 20 53  e="strSql">The S
2000: 51 4c 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74 20  QL command text 
2010: 74 6f 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61  to prepare</para
2020: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
2030: 61 6d 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f 75  am name="previou
2040: 73 22 3e 54 68 65 20 70 72 65 76 69 6f 75 73 20  s">The previous 
2050: 73 74 61 74 65 6d 65 6e 74 20 69 6e 20 61 20 6d  statement in a m
2060: 75 6c 74 69 2d 73 74 61 74 65 6d 65 6e 74 20 63  ulti-statement c
2070: 6f 6d 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c 20  ommand, or null 
2080: 69 66 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 73  if no previous s
2090: 74 61 74 65 6d 65 6e 74 20 65 78 69 73 74 73 3c  tatement exists<
20a0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
20b0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 69   <param name="ti
20c0: 6d 65 6f 75 74 4d 53 22 3e 54 68 65 20 74 69 6d  meoutMS">The tim
20d0: 65 6f 75 74 20 74 6f 20 77 61 69 74 20 62 65 66  eout to wait bef
20e0: 6f 72 65 20 61 62 6f 72 74 69 6e 67 20 74 68 65  ore aborting the
20f0: 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d 3e   prepare</param>
2100: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
2110: 20 6e 61 6d 65 3d 22 73 74 72 52 65 6d 61 69 6e   name="strRemain
2120: 22 3e 54 68 65 20 72 65 6d 61 69 6e 64 65 72 20  ">The remainder 
2130: 6f 66 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74  of the statement
2140: 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20 70 72   that was not pr
2150: 6f 63 65 73 73 65 64 2e 20 20 45 61 63 68 20 63  ocessed.  Each c
2160: 61 6c 6c 20 74 6f 20 70 72 65 70 61 72 65 20 70  all to prepare p
2170: 61 72 73 65 73 20 74 68 65 0d 0a 20 20 20 20 2f  arses the..    /
2180: 2f 2f 20 53 51 4c 20 75 70 20 74 6f 20 74 6f 20  // SQL up to to 
2190: 65 69 74 68 65 72 20 74 68 65 20 65 6e 64 20 6f  either the end o
21a0: 66 20 74 68 65 20 74 65 78 74 20 6f 72 20 74 6f  f the text or to
21b0: 20 74 68 65 20 66 69 72 73 74 20 73 65 6d 69 2d   the first semi-
21c0: 63 6f 6c 6f 6e 20 64 65 6c 69 6d 69 74 65 72 2e  colon delimiter.
21d0: 20 20 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20    The remaining 
21e0: 74 65 78 74 20 69 73 20 72 65 74 75 72 6e 65 64  text is returned
21f0: 0d 0a 20 20 20 20 2f 2f 2f 20 68 65 72 65 20 66  ..    /// here f
2200: 6f 72 20 61 20 73 75 62 73 65 71 75 65 6e 74 20  or a subsequent 
2210: 63 61 6c 6c 20 74 6f 20 50 72 65 70 61 72 65 28  call to Prepare(
2220: 29 20 75 6e 74 69 6c 20 61 6c 6c 20 74 68 65 20  ) until all the 
2230: 74 65 78 74 20 68 61 73 20 62 65 65 6e 20 70 72  text has been pr
2240: 6f 63 65 73 73 65 64 2e 3c 2f 70 61 72 61 6d 3e  ocessed.</param>
2250: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
2260: 6e 73 3e 52 65 74 75 72 6e 73 20 61 6e 20 69 6e  ns>Returns an in
2270: 69 74 69 61 6c 69 7a 65 64 20 53 51 4c 69 74 65  itialized SQLite
2280: 53 74 61 74 65 6d 65 6e 74 2e 3c 2f 72 65 74 75  Statement.</retu
2290: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
22a0: 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69  al abstract SQLi
22b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70  teStatement Prep
22c0: 61 72 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  are(SQLiteConnec
22d0: 74 69 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67  tion cnn, string
22e0: 20 73 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53   strSql, SQLiteS
22f0: 74 61 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75  tatement previou
2300: 73 2c 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d  s, uint timeoutM
2310: 53 2c 20 72 65 66 20 73 74 72 69 6e 67 20 73 74  S, ref string st
2320: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 2f  rRemain);..    /
2330: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
2340: 20 20 2f 2f 2f 20 53 74 65 70 73 20 74 68 72 6f    /// Steps thro
2350: 75 67 68 20 61 20 70 72 65 70 61 72 65 64 20 73  ugh a prepared s
2360: 74 61 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f  tatement...    /
2370: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
2380: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
2390: 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 53 51  me="stmt">The SQ
23a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6f  LiteStatement to
23b0: 20 73 74 65 70 20 74 68 72 6f 75 67 68 3c 2f 70   step through</p
23c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
23d0: 72 65 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20  returns>True if 
23e0: 61 20 72 6f 77 20 77 61 73 20 72 65 74 75 72 6e  a row was return
23f0: 65 64 2c 20 46 61 6c 73 65 20 69 66 20 6e 6f 74  ed, False if not
2400: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
2410: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2420: 63 74 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c  ct bool Step(SQL
2430: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2440: 74 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  t);..    /// <su
2450: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2460: 52 65 74 75 72 6e 73 20 6e 6f 6e 2d 7a 65 72 6f  Returns non-zero
2470: 20 69 66 20 74 68 65 20 73 70 65 63 69 66 69 65   if the specifie
2480: 64 20 73 74 61 74 65 6d 65 6e 74 20 69 73 20 72  d statement is r
2490: 65 61 64 2d 6f 6e 6c 79 20 69 6e 20 6e 61 74 75  ead-only in natu
24a0: 72 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  re...    /// </s
24b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
24c0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74   <param name="st
24d0: 6d 74 22 3e 54 68 65 20 73 74 61 74 65 6d 65 6e  mt">The statemen
24e0: 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72  t to check.</par
24f0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
2500: 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 74 68  turns>True if th
2510: 65 20 6f 75 74 65 72 20 71 75 65 72 79 20 69 73  e outer query is
2520: 20 72 65 61 64 2d 6f 6e 6c 79 2e 3c 2f 72 65 74   read-only.</ret
2530: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
2540: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f  nal abstract boo
2550: 6c 20 49 73 52 65 61 64 4f 6e 6c 79 28 53 51 4c  l IsReadOnly(SQL
2560: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2570: 74 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  t);..    /// <su
2580: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
2590: 52 65 73 65 74 73 20 61 20 70 72 65 70 61 72 65  Resets a prepare
25a0: 64 20 73 74 61 74 65 6d 65 6e 74 20 73 6f 20 69  d statement so i
25b0: 74 20 63 61 6e 20 62 65 20 65 78 65 63 75 74 65  t can be execute
25c0: 64 20 61 67 61 69 6e 2e 20 20 49 66 20 74 68 65  d again.  If the
25d0: 20 65 72 72 6f 72 20 72 65 74 75 72 6e 65 64 20   error returned 
25e0: 69 73 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  is SQLITE_SCHEMA
25f0: 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 72 61 6e 73  ,..    /// trans
2600: 70 61 72 65 6e 74 6c 79 20 61 74 74 65 6d 70 74  parently attempt
2610: 20 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20   to rebuild the 
2620: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  SQL statement an
2630: 64 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72  d throw an error
2640: 20 69 66 20 74 68 61 74 20 77 61 73 20 6e 6f 74   if that was not
2650: 20 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20 20   possible...    
2660: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
2670: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
2680: 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73  ame="stmt">The s
2690: 74 61 74 65 6d 65 6e 74 20 74 6f 20 72 65 73 65  tatement to rese
26a0: 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  t</param>..    /
26b0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
26c0: 72 6e 73 20 2d 31 20 69 66 20 74 68 65 20 73 63  rns -1 if the sc
26d0: 68 65 6d 61 20 63 68 61 6e 67 65 64 20 77 68 69  hema changed whi
26e0: 6c 65 20 72 65 73 65 74 74 69 6e 67 2c 20 30 20  le resetting, 0 
26f0: 69 66 20 74 68 65 20 72 65 73 65 74 20 77 61 73  if the reset was
2700: 20 73 75 63 65 73 73 66 75 6c 20 6f 72 20 36 20   sucessful or 6 
2710: 28 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 20  (SQLITE_LOCKED) 
2720: 69 66 20 74 68 65 20 72 65 73 65 74 20 66 61 69  if the reset fai
2730: 6c 65 64 20 64 75 65 20 74 6f 20 61 20 6c 6f 63  led due to a loc
2740: 6b 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  k</returns>..   
2750: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2760: 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
2770: 64 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53  de Reset(SQLiteS
2780: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 3b 0d  tatement stmt);.
2790: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
27a0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
27b0: 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72  tempts to interr
27c0: 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75  upt the query cu
27d0: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
27e0: 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61  g on the associa
27f0: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74  ted..    /// nat
2800: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
2810: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
2820: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
2830: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
2840: 61 63 74 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  act void Cancel(
2850: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
2860: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
2870: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 62   This function b
2880: 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65 66 69  inds a user-defi
2890: 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  ned function to 
28a0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d  the connection..
28b0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
28c0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
28d0: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
28e0: 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20  onAttribute">.. 
28f0: 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20     /// The <see 
2900: 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63  cref="SQLiteFunc
2910: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e  tionAttribute"/>
2920: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
2930: 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20   containing..   
2940: 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74   /// the metadat
2950: 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69  a for the functi
2960: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
2970: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2980: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2990: 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f 6e  m name="function
29a0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
29b0: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
29c0: 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f 62 6a  eFunction"/> obj
29d0: 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74 68 61  ect instance tha
29e0: 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74 68 65  t implements the
29f0: 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69  ..    /// functi
2a00: 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64 2e 0d  on to be bound..
2a10: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
2a20: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
2a30: 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d  m name="flags">.
2a40: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61  .    /// The fla
2a50: 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
2a60: 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f  th the parent co
2a70: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
2a80: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
2a90: 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
2aa0: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42   abstract void B
2ab0: 69 6e 64 46 75 6e 63 74 69 6f 6e 28 53 51 4c 69  indFunction(SQLi
2ac0: 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  teFunctionAttrib
2ad0: 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  ute functionAttr
2ae0: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
2af0: 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 2c 20  ction function, 
2b00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
2b10: 46 6c 61 67 73 20 66 6c 61 67 73 29 3b 0d 0a 0d  Flags flags);...
2b20: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
2b30: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73  y>..    /// This
2b40: 20 66 75 6e 63 74 69 6f 6e 20 75 6e 62 69 6e 64   function unbind
2b50: 73 20 61 20 75 73 65 72 2d 64 65 66 69 6e 65 64  s a user-defined
2b60: 20 66 75 6e 63 74 69 6f 6e 20 66 72 6f 6d 20 74   function from t
2b70: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  he connection...
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 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
2ba0: 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69 6f  am name="functio
2bb0: 6e 41 74 74 72 69 62 75 74 65 22 3e 0d 0a 20 20  nAttribute">..  
2bc0: 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65 65 20 63    /// The <see c
2bd0: 72 65 66 3d 22 53 51 4c 69 74 65 46 75 6e 63 74  ref="SQLiteFunct
2be0: 69 6f 6e 41 74 74 72 69 62 75 74 65 22 2f 3e 20  ionAttribute"/> 
2bf0: 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20  object instance 
2c00: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
2c10: 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64 61 74 61  /// the metadata
2c20: 20 66 6f 72 20 74 68 65 20 66 75 6e 63 74 69 6f   for the functio
2c30: 6e 20 74 6f 20 62 65 20 75 6e 62 6f 75 6e 64 2e  n to be unbound.
2c40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
2c50: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
2c60: 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
2c70: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
2c80: 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77  ags associated w
2c90: 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20 63  ith the parent c
2ca0: 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74  onnection object
2cb0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
2cc0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
2cd0: 74 75 72 6e 73 3e 4e 6f 6e 2d 7a 65 72 6f 20 69  turns>Non-zero i
2ce0: 66 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 77  f the function w
2cf0: 61 73 20 75 6e 62 6f 75 6e 64 2e 3c 2f 72 65 74  as unbound.</ret
2d00: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
2d10: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f  nal abstract boo
2d20: 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  l UnbindFunction
2d30: 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41  (SQLiteFunctionA
2d40: 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69 6f  ttribute functio
2d50: 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69  nAttribute, SQLi
2d60: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
2d70: 73 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20  s flags);....   
2d80: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2d90: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f 75  ct void Bind_Dou
2da0: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
2db0: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
2dc0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
2dd0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
2de0: 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29 3b  , double value);
2df0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2e00: 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e  bstract void Bin
2e10: 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  d_Int32(SQLiteSt
2e20: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
2e30: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
2e40: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
2e50: 6e 64 65 78 2c 20 49 6e 74 33 32 20 76 61 6c 75  ndex, Int32 valu
2e60: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
2e70: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2e80: 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c 69  Bind_UInt32(SQLi
2e90: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2ea0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
2eb0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
2ec0: 6e 74 20 69 6e 64 65 78 2c 20 55 49 6e 74 33 32  nt index, UInt32
2ed0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e   value);..    in
2ee0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2ef0: 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34 28  void Bind_Int64(
2f00: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2f10: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
2f20: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
2f30: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 49 6e  s, int index, In
2f40: 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  t64 value);..   
2f50: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2f60: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  ct void Bind_UIn
2f70: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
2f80: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
2f90: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
2fa0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
2fb0: 2c 20 55 49 6e 74 36 34 20 76 61 6c 75 65 29 3b  , UInt64 value);
2fc0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2fd0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e  bstract void Bin
2fe0: 64 5f 42 6f 6f 6c 65 61 6e 28 53 51 4c 69 74 65  d_Boolean(SQLite
2ff0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
3000: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
3010: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
3020: 20 69 6e 64 65 78 2c 20 62 6f 6f 6c 20 76 61 6c   index, bool val
3030: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
3040: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
3050: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
3060: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
3070: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3080: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
3090: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
30a0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74  value);..    int
30b0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
30c0: 6f 69 64 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51  oid Bind_Blob(SQ
30d0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
30e0: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
30f0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
3100: 20 69 6e 74 20 69 6e 64 65 78 2c 20 62 79 74 65   int index, byte
3110: 5b 5d 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  [] blobData);.. 
3120: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3130: 72 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44  ract void Bind_D
3140: 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65 53 74  ateTime(SQLiteSt
3150: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
3160: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3170: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
3180: 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65 20 64  ndex, DateTime d
3190: 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
31a0: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
31b0: 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65  Bind_Null(SQLite
31c0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
31d0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
31e0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
31f0: 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20   index);....    
3200: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3210: 74 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d  t int Bind_Param
3220: 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74  Count(SQLiteStat
3230: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
3240: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
3250: 73 20 66 6c 61 67 73 29 3b 0d 0a 20 20 20 20 69  s flags);..    i
3260: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3270: 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72   string Bind_Par
3280: 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  amName(SQLiteSta
3290: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
32a0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
32b0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
32c0: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
32d0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
32e0: 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78   Bind_ParamIndex
32f0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
3300: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
3310: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
3320: 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d  gs, string param
3330: 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e  Name);....    in
3340: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
3350: 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28  int ColumnCount(
3360: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3370: 73 74 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65  stmt);..    inte
3380: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
3390: 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28  ring ColumnName(
33a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
33b0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
33c0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
33d0: 61 62 73 74 72 61 63 74 20 54 79 70 65 41 66 66  abstract TypeAff
33e0: 69 6e 69 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69  inity ColumnAffi
33f0: 6e 69 74 79 28 53 51 4c 69 74 65 53 74 61 74 65  nity(SQLiteState
3400: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
3410: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
3420: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
3430: 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28  ring ColumnType(
3440: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3450: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
3460: 20 72 65 66 20 54 79 70 65 41 66 66 69 6e 69 74   ref TypeAffinit
3470: 79 20 6e 41 66 66 69 6e 69 74 79 29 3b 0d 0a 20  y nAffinity);.. 
3480: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3490: 72 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 49  ract int ColumnI
34a0: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
34b0: 6d 65 6e 74 20 73 74 6d 74 2c 20 73 74 72 69 6e  ment stmt, strin
34c0: 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a  g columnName);..
34d0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
34e0: 74 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c  tract string Col
34f0: 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
3500: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3510: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
3520: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
3530: 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20  abstract string 
3540: 43 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61  ColumnDatabaseNa
3550: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
3560: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
3570: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
3580: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
3590: 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
35a0: 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
35b0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
35c0: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
35d0: 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  al abstract bool
35e0: 20 44 6f 65 73 54 61 62 6c 65 45 78 69 73 74 28   DoesTableExist(
35f0: 73 74 72 69 6e 67 20 64 61 74 61 42 61 73 65 2c  string dataBase,
3600: 20 73 74 72 69 6e 67 20 74 61 62 6c 65 29 3b 0d   string table);.
3610: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3620: 73 74 72 61 63 74 20 62 6f 6f 6c 20 43 6f 6c 75  stract bool Colu
3630: 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69 6e  mnMetaData(strin
3640: 67 20 64 61 74 61 42 61 73 65 2c 20 73 74 72 69  g dataBase, stri
3650: 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e 67  ng table, string
3660: 20 63 6f 6c 75 6d 6e 2c 20 62 6f 6f 6c 20 63 61   column, bool ca
3670: 6e 54 68 72 6f 77 2c 20 72 65 66 20 73 74 72 69  nThrow, ref stri
3680: 6e 67 20 64 61 74 61 54 79 70 65 2c 20 72 65 66  ng dataType, ref
3690: 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74 65 53   string collateS
36a0: 65 71 75 65 6e 63 65 2c 20 72 65 66 20 62 6f 6f  equence, ref boo
36b0: 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66 20 62  l notNull, ref b
36c0: 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79 2c 20  ool primaryKey, 
36d0: 72 65 66 20 62 6f 6f 6c 20 61 75 74 6f 49 6e 63  ref bool autoInc
36e0: 72 65 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 69 6e  rement);..    in
36f0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
3700: 76 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c  void GetIndexCol
3710: 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28  umnExtendedInfo(
3720: 73 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c  string database,
3730: 20 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73   string index, s
3740: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65  tring column, re
3750: 66 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20  f int sortMode, 
3760: 72 65 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c  ref int onError,
3770: 20 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c   ref string coll
3780: 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 3b 0d  ationSequence);.
3790: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
37a0: 61 62 73 74 72 61 63 74 20 6f 62 6a 65 63 74 20  abstract object 
37b0: 47 65 74 4f 62 6a 65 63 74 28 53 51 4c 69 74 65  GetObject(SQLite
37c0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
37d0: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
37e0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
37f0: 63 74 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  ct double GetDou
3800: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
3810: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
3820: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
3830: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 42 6f 6f  nal abstract Boo
3840: 6c 65 61 6e 20 47 65 74 42 6f 6f 6c 65 61 6e 28  lean GetBoolean(
3850: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3860: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
3870: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
3880: 61 62 73 74 72 61 63 74 20 53 42 79 74 65 20 47  abstract SByte G
3890: 65 74 53 42 79 74 65 28 53 51 4c 69 74 65 53 74  etSByte(SQLiteSt
38a0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
38b0: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
38c0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
38d0: 20 42 79 74 65 20 47 65 74 42 79 74 65 28 53 51   Byte GetByte(SQ
38e0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
38f0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
3900: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3910: 73 74 72 61 63 74 20 49 6e 74 31 36 20 47 65 74  stract Int16 Get
3920: 49 6e 74 31 36 28 53 51 4c 69 74 65 53 74 61 74  Int16(SQLiteStat
3930: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
3940: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
3950: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 55  ernal abstract U
3960: 49 6e 74 31 36 20 47 65 74 55 49 6e 74 31 36 28  Int16 GetUInt16(
3970: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
3980: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
3990: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
39a0: 61 62 73 74 72 61 63 74 20 49 6e 74 33 32 20 47  abstract Int32 G
39b0: 65 74 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74  etInt32(SQLiteSt
39c0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
39d0: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
39e0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
39f0: 20 55 49 6e 74 33 32 20 47 65 74 55 49 6e 74 33   UInt32 GetUInt3
3a00: 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  2(SQLiteStatemen
3a10: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
3a20: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
3a30: 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 36 34  l abstract Int64
3a40: 20 47 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65   GetInt64(SQLite
3a50: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
3a60: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
3a70: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3a80: 63 74 20 55 49 6e 74 36 34 20 47 65 74 55 49 6e  ct UInt64 GetUIn
3a90: 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t64(SQLiteStatem
3aa0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
3ab0: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
3ac0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
3ad0: 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c 69  ing GetText(SQLi
3ae0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
3af0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20  , int index);.. 
3b00: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3b10: 72 61 63 74 20 6c 6f 6e 67 20 47 65 74 42 79 74  ract long GetByt
3b20: 65 73 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  es(SQLiteStateme
3b30: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
3b40: 65 78 2c 20 69 6e 74 20 6e 44 61 74 61 6f 66 66  ex, int nDataoff
3b50: 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73  set, byte[] bDes
3b60: 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69  t, int nStart, i
3b70: 6e 74 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  nt nLength);..  
3b80: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
3b90: 61 63 74 20 63 68 61 72 20 47 65 74 43 68 61 72  act char GetChar
3ba0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
3bb0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
3bc0: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
3bd0: 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47   abstract long G
3be0: 65 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74  etChars(SQLiteSt
3bf0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
3c00: 74 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61  t index, int nDa
3c10: 74 61 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d  taoffset, char[]
3c20: 20 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61   bDest, int nSta
3c30: 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29  rt, int nLength)
3c40: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
3c50: 61 62 73 74 72 61 63 74 20 44 61 74 65 54 69 6d  abstract DateTim
3c60: 65 20 47 65 74 44 61 74 65 54 69 6d 65 28 53 51  e GetDateTime(SQ
3c70: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
3c80: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
3c90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3ca0: 73 74 72 61 63 74 20 62 6f 6f 6c 20 49 73 4e 75  stract bool IsNu
3cb0: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
3cc0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
3cd0: 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  ex);....    inte
3ce0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51  rnal abstract SQ
3cf0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43 72  LiteErrorCode Cr
3d00: 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28 73 74  eateCollation(st
3d10: 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74 69 6f  ring strCollatio
3d20: 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69  n, SQLiteCollati
3d30: 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74 65 43  on func, SQLiteC
3d40: 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31 36 2c  ollation func16,
3d50: 20 62 6f 6f 6c 20 40 74 68 72 6f 77 29 3b 0d 0a   bool @throw);..
3d60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3d70: 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
3d80: 72 43 6f 64 65 20 43 72 65 61 74 65 46 75 6e 63  rCode CreateFunc
3d90: 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46  tion(string strF
3da0: 75 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72  unction, int nAr
3db0: 67 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c  gs, bool needCol
3dc0: 6c 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c  lSeq, SQLiteCall
3dd0: 62 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74  back func, SQLit
3de0: 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74  eCallback funcst
3df0: 65 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43  ep, SQLiteFinalC
3e00: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61  allback funcfina
3e10: 6c 2c 20 62 6f 6f 6c 20 40 74 68 72 6f 77 29 3b  l, bool @throw);
3e20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
3e30: 62 73 74 72 61 63 74 20 43 6f 6c 6c 61 74 69 6f  bstract Collatio
3e40: 6e 53 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c  nSequence GetCol
3e50: 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53  lationSequence(S
3e60: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75  QLiteFunction fu
3e70: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
3e80: 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  xt);..    intern
3e90: 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20  al abstract int 
3ea0: 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f  ContextCollateCo
3eb0: 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45  mpare(CollationE
3ec0: 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c  ncodingEnum enc,
3ed0: 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c   IntPtr context,
3ee0: 20 73 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69   string s1, stri
3ef0: 6e 67 20 73 32 29 3b 0d 0a 20 20 20 20 69 6e 74  ng s2);..    int
3f00: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
3f10: 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
3f20: 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
3f30: 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
3f40: 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
3f50: 78 74 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63  xt, char[] c1, c
3f60: 68 61 72 5b 5d 20 63 32 29 3b 0d 0a 0d 0a 20 20  har[] c2);....  
3f70: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
3f80: 61 63 74 20 69 6e 74 20 41 67 67 72 65 67 61 74  act int Aggregat
3f90: 65 43 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f  eCount(IntPtr co
3fa0: 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74  ntext);..    int
3fb0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49  ernal abstract I
3fc0: 6e 74 50 74 72 20 41 67 67 72 65 67 61 74 65 43  ntPtr AggregateC
3fd0: 6f 6e 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f  ontext(IntPtr co
3fe0: 6e 74 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 69  ntext);....    i
3ff0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
4000: 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
4010: 6c 75 65 42 79 74 65 73 28 49 6e 74 50 74 72 20  lueBytes(IntPtr 
4020: 70 74 72 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66  ptr, int nDataOf
4030: 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65  fset, byte[] bDe
4040: 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20  st, int nStart, 
4050: 69 6e 74 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20  int nLength);.. 
4060: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
4070: 72 61 63 74 20 64 6f 75 62 6c 65 20 47 65 74 50  ract double GetP
4080: 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28  aramValueDouble(
4090: 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20  IntPtr ptr);..  
40a0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
40b0: 61 63 74 20 69 6e 74 20 47 65 74 50 61 72 61 6d  act int GetParam
40c0: 56 61 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74  ValueInt32(IntPt
40d0: 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74  r ptr);..    int
40e0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49  ernal abstract I
40f0: 6e 74 36 34 20 47 65 74 50 61 72 61 6d 56 61 6c  nt64 GetParamVal
4100: 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70  ueInt64(IntPtr p
4110: 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  tr);..    intern
4120: 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69  al abstract stri
4130: 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  ng GetParamValue
4140: 54 65 78 74 28 49 6e 74 50 74 72 20 70 74 72 29  Text(IntPtr ptr)
4150: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
4160: 61 62 73 74 72 61 63 74 20 54 79 70 65 41 66 66  abstract TypeAff
4170: 69 6e 69 74 79 20 47 65 74 50 61 72 61 6d 56 61  inity GetParamVa
4180: 6c 75 65 54 79 70 65 28 49 6e 74 50 74 72 20 70  lueType(IntPtr p
4190: 74 72 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65  tr);....    inte
41a0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
41b0: 69 64 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e  id ReturnBlob(In
41c0: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79  tPtr context, by
41d0: 74 65 5b 5d 20 76 61 6c 75 65 29 3b 0d 0a 20 20  te[] value);..  
41e0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
41f0: 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 44  act void ReturnD
4200: 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e  ouble(IntPtr con
4210: 74 65 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c  text, double val
4220: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
4230: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
4240: 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74   ReturnError(Int
4250: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
4260: 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ing value);..   
4270: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
4280: 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  ct void ReturnIn
4290: 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t32(IntPtr conte
42a0: 78 74 2c 20 49 6e 74 33 32 20 76 61 6c 75 65 29  xt, Int32 value)
42b0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
42c0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52 65  abstract void Re
42d0: 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72  turnInt64(IntPtr
42e0: 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 36 34 20   context, Int64 
42f0: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74  value);..    int
4300: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
4310: 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49  oid ReturnNull(I
4320: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d  ntPtr context);.
4330: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
4340: 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75  stract void Retu
4350: 72 6e 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f  rnText(IntPtr co
4360: 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
4370: 6c 75 65 29 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54  lue);....#if INT
4380: 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42  EROP_VIRTUAL_TAB
4390: 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  LE..    /// <sum
43a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
43b0: 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
43c0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
43d0: 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
43e0: 63 72 65 61 74 65 20 61 20 64 69 73 70 6f 73 61  create a disposa
43f0: 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64  ble..    /// mod
4400: 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ule containing t
4410: 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f  he implementatio
4420: 6e 20 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74  n of a virtual t
4430: 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  able...    /// <
4440: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
4450: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4460: 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
4470: 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a  / The module obj
4480: 65 63 74 20 74 6f 20 62 65 20 75 73 65 64 20 77  ect to be used w
4490: 68 65 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65  hen creating the
44a0: 20 6e 61 74 69 76 65 20 64 69 73 70 6f 73 61 62   native disposab
44b0: 6c 65 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20  le module...    
44c0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
44d0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
44e0: 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20 20  e="flags">..    
44f0: 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 66 6f  /// The flags fo
4500: 72 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  r the associated
4510: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
4520: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e  teConnection" />
4530: 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65   object instance
4540: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
4550: 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  am>..    interna
4560: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
4570: 43 72 65 61 74 65 4d 6f 64 75 6c 65 28 53 51 4c  CreateModule(SQL
4580: 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65  iteModule module
4590: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
45a0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 3b 0d  onFlags flags);.
45b0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
45c0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
45d0: 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
45e0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
45f0: 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
4600: 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75  leanup the resou
4610: 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  rces..    /// as
4620: 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
4630: 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  module containin
4640: 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
4650: 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61  tion of a virtua
4660: 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  l table...    //
4670: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4680: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4690: 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
46a0: 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
46b0: 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c  object previousl
46c0: 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  y passed to the 
46d0: 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74  <see cref="Creat
46e0: 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
46f0: 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
4700: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
4710: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4720: 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
4730: 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
4740: 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
4750: 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
4760: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
4770: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
4780: 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
4790: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
47a0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
47b0: 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28  d DisposeModule(
47c0: 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
47d0: 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ule, SQLiteConne
47e0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
47f0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
4800: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4810: 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
4820: 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
4830: 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
4840: 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74  o declare a virt
4850: 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
4860: 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  // in response t
4870: 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
4880: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
4890: 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
48a0: 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
48b0: 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
48c0: 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
48d0: 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
48e0: 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
48f0: 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
4900: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
4910: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
4920: 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
4930: 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
4940: 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
4950: 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
4960: 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
4970: 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
4980: 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20  ..    /// being 
4990: 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
49a0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
49b0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
49c0: 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20  ="strSql">..    
49d0: 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63  /// The string c
49e0: 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
49f0: 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63  L statement desc
4a00: 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75  ribing the virtu
4a10: 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20  al table to..   
4a20: 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64   /// be declared
4a30: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
4a40: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4a50: 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
4a60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
4a70: 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
4a80: 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
4a90: 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
4aa0: 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
4ab0: 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
4ac0: 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
4ad0: 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
4ae0: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
4af0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
4b00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4b10: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
4b20: 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
4b30: 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
4b40: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
4b50: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
4b60: 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72  stract SQLiteErr
4b70: 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
4b80: 72 74 75 61 6c 54 61 62 6c 65 28 53 51 4c 69 74  rtualTable(SQLit
4b90: 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20  eModule module, 
4ba0: 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 72  string strSql, r
4bb0: 65 66 20 73 74 72 69 6e 67 20 65 72 72 6f 72 29  ef string error)
4bc0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
4bd0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4be0: 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65  Calls the native
4bf0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
4c00: 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f  rary in order to
4c10: 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75   declare a virtu
4c20: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
4c30: 2f 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65  / function in re
4c40: 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c  sponse to a call
4c50: 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63   into the <see c
4c60: 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
4c70: 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65  veModule.xCreate
4c80: 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72  " />..    /// or
4c90: 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c   <see cref="ISQL
4ca0: 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e  iteNativeModule.
4cb0: 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72  xConnect" /> vir
4cc0: 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f  tual table metho
4cd0: 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ds...    /// </s
4ce0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4cf0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
4d00: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
4d10: 54 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  The virtual tabl
4d20: 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73  e module that is
4d30: 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62   to be responsib
4d40: 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75  le for the virtu
4d50: 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f  al table..    //
4d60: 2f 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  / function being
4d70: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
4d80: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
4d90: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4da0: 65 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74  e="argumentCount
4db0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
4dc0: 6e 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65  number of argume
4dd0: 6e 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74  nts to the funct
4de0: 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
4df0: 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
4e00: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4e10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65  param name="name
4e20: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
4e30: 6e 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63  name of the func
4e40: 74 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61  tion being decla
4e50: 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  red...    /// </
4e60: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
4e70: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
4e80: 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70  or">..    /// Up
4e90: 6f 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20  on success, the 
4ea0: 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73  contents of this
4eb0: 20 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75   parameter are u
4ec0: 6e 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20  ndefined.  Upon 
4ed0: 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f  failure,..    //
4ee0: 2f 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74  / it should cont
4ef0: 61 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61  ain an appropria
4f00: 74 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65  te error message
4f10: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
4f20: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
4f30: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
4f40: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
4f50: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a  e return code...
4f60: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
4f70: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
4f80: 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
4f90: 45 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72  ErrorCode Declar
4fa0: 65 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e  eVirtualFunction
4fb0: 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
4fc0: 64 75 6c 65 2c 20 69 6e 74 20 61 72 67 75 6d 65  dule, int argume
4fd0: 6e 74 43 6f 75 6e 74 2c 20 73 74 72 69 6e 67 20  ntCount, string 
4fe0: 6e 61 6d 65 2c 20 72 65 66 20 73 74 72 69 6e 67  name, ref string
4ff0: 20 65 72 72 6f 72 29 3b 0d 0a 23 65 6e 64 69 66   error);..#endif
5000: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
5010: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
5020: 65 74 75 72 6e 73 20 74 68 65 20 63 75 72 72 65  eturns the curre
5030: 6e 74 20 61 6e 64 2f 6f 72 20 68 69 67 68 77 61  nt and/or highwa
5040: 74 65 72 20 76 61 6c 75 65 73 20 66 6f 72 20 74  ter values for t
5050: 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
5060: 61 62 61 73 65 20 73 74 61 74 75 73 20 70 61 72  abase status par
5070: 61 6d 65 74 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f  ameter...    ///
5080: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5090: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
50a0: 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20 20 20 20  ="option">..    
50b0: 2f 2f 2f 20 54 68 65 20 64 61 74 61 62 61 73 65  /// The database
50c0: 20 73 74 61 74 75 73 20 70 61 72 61 6d 65 74 65   status paramete
50d0: 72 20 74 6f 20 71 75 65 72 79 2e 0d 0a 20 20 20  r to query...   
50e0: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
50f0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5100: 6d 65 3d 22 72 65 73 65 74 22 3e 0d 0a 20 20 20  me="reset">..   
5110: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f   /// Non-zero to
5120: 20 72 65 73 65 74 20 74 68 65 20 68 69 67 68 77   reset the highw
5130: 61 74 65 72 20 76 61 6c 75 65 20 74 6f 20 74 68  ater value to th
5140: 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 2e  e current value.
5150: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
5160: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5170: 61 6d 20 6e 61 6d 65 3d 22 63 75 72 72 65 6e 74  am name="current
5180: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 61  ">..    /// If a
5190: 70 70 6c 69 63 61 62 6c 65 2c 20 72 65 63 65 69  pplicable, recei
51a0: 76 65 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  ves the current 
51b0: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  value...    /// 
51c0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
51d0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 68  / <param name="h
51e0: 69 67 68 77 61 74 65 72 22 3e 0d 0a 20 20 20 20  ighwater">..    
51f0: 2f 2f 2f 20 49 66 20 61 70 70 6c 69 63 61 62 6c  /// If applicabl
5200: 65 2c 20 72 65 63 65 69 76 65 73 20 74 68 65 20  e, receives the 
5210: 68 69 67 68 77 61 74 65 72 20 76 61 6c 75 65 2e  highwater value.
5220: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
5230: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
5240: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
5250: 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
5260: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
5270: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
5280: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
5290: 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
52a0: 72 72 6f 72 43 6f 64 65 20 47 65 74 53 74 61 74  rrorCode GetStat
52b0: 75 73 50 61 72 61 6d 65 74 65 72 28 53 51 4c 69  usParameter(SQLi
52c0: 74 65 53 74 61 74 75 73 4f 70 73 45 6e 75 6d 20  teStatusOpsEnum 
52d0: 6f 70 74 69 6f 6e 2c 20 62 6f 6f 6c 20 72 65 73  option, bool res
52e0: 65 74 2c 20 72 65 66 20 69 6e 74 20 63 75 72 72  et, ref int curr
52f0: 65 6e 74 2c 20 72 65 66 20 69 6e 74 20 68 69 67  ent, ref int hig
5300: 68 77 61 74 65 72 29 3b 0d 0a 20 20 20 20 2f 2f  hwater);..    //
5310: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5320: 20 2f 2f 2f 20 43 68 61 6e 67 65 20 61 20 63 6f   /// Change a co
5330: 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
5340: 6f 6e 20 76 61 6c 75 65 20 66 6f 72 20 74 68 65  on value for the
5350: 20 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20   database...    
5360: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
5370: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5380: 61 6d 65 3d 22 6f 70 74 69 6f 6e 22 3e 0d 0a 20  ame="option">.. 
5390: 20 20 20 2f 2f 2f 20 54 68 65 20 64 61 74 61 62     /// The datab
53a0: 61 73 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f  ase configuratio
53b0: 6e 20 6f 70 74 69 6f 6e 20 74 6f 20 63 68 61 6e  n option to chan
53c0: 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ge...    /// </p
53d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
53e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 76 61 6c 75  param name="valu
53f0: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
5400: 20 6e 65 77 20 76 61 6c 75 65 20 66 6f 72 20 74   new value for t
5410: 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6e  he specified con
5420: 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69 6f  figuration optio
5430: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  n...    /// </pa
5440: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
5450: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
5460: 20 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69   A standard SQLi
5470: 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d  te return code..
5480: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72  .    /// </retur
5490: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
54a0: 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  l abstract SQLit
54b0: 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 43 6f  eErrorCode SetCo
54c0: 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70 74 69 6f  nfigurationOptio
54d0: 6e 28 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62  n(SQLiteConfigDb
54e0: 4f 70 73 45 6e 75 6d 20 6f 70 74 69 6f 6e 2c 20  OpsEnum option, 
54f0: 6f 62 6a 65 63 74 20 76 61 6c 75 65 29 3b 0d 0a  object value);..
5500: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5510: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  >..    /// Enabl
5520: 65 73 20 6f 72 20 64 69 73 61 62 6c 65 73 20 65  es or disables e
5530: 78 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67  xtension loading
5540: 20 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20   by SQLite...   
5550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
5560: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5570: 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a  name="bOnOff">..
5580: 20 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20      /// True to 
5590: 65 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f  enable loading o
55a0: 66 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61  f extensions, fa
55b0: 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d  lse to disable..
55c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
55d0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
55e0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65  abstract void Se
55f0: 74 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62  tLoadExtension(b
5600: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20  ool bOnOff);..  
5610: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5620: 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61  .    /// Loads a
5630: 20 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f   SQLite extensio
5640: 6e 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74  n library from t
5650: 68 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a  he named file...
5660: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5670: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
5680: 61 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d  am name="fileNam
5690: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
56a0: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e   name of the dyn
56b0: 61 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72  amic link librar
56c0: 79 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  y file containin
56d0: 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  g the extension.
56e0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
56f0: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
5700: 61 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d  am name="procNam
5710: 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  e">..    /// The
5720: 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70   name of the exp
5730: 6f 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75  orted function u
5740: 73 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a  sed to initializ
5750: 65 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e  e the extension.
5760: 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c  ..    /// If nul
5770: 6c 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22  l, the default "
5780: 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f  sqlite3_extensio
5790: 6e 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20  n_init" will be 
57a0: 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  used...    /// <
57b0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
57c0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
57d0: 6f 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f  oid LoadExtensio
57e0: 6e 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d  n(string fileNam
57f0: 65 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61  e, string procNa
5800: 6d 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  me);..    /// <s
5810: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
5820: 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61   Enables or disa
5830: 62 6c 65 64 20 65 78 74 65 6e 65 64 20 72 65 73  bled extened res
5840: 75 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e  ult codes return
5850: 65 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20  ed by SQLite..  
5860: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5870: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
5880: 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 74   name="bOnOff">t
5890: 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 65 78  rue to enable ex
58a0: 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f  tended result co
58b0: 64 65 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69  des, false to di
58c0: 73 61 62 6c 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  sable.</param>..
58d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
58e0: 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  ></returns>..   
58f0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
5900: 63 74 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e  ct void SetExten
5910: 64 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62  dedResultCodes(b
5920: 6f 6f 6c 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20  ool bOnOff);..  
5930: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5940: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
5950: 20 74 68 65 20 6e 75 6d 65 72 69 63 20 72 65 73   the numeric res
5960: 75 6c 74 20 63 6f 64 65 20 66 6f 72 20 74 68 65  ult code for the
5970: 20 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 61 69   most recent fai
5980: 6c 65 64 20 53 51 4c 69 74 65 20 41 50 49 20 63  led SQLite API c
5990: 61 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73  all..    /// ass
59a0: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
59b0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
59c0: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
59d0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
59e0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 73 75  // <returns>Resu
59f0: 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73  lt code</returns
5a00: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
5a10: 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45  abstract SQLiteE
5a20: 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43  rrorCode ResultC
5a30: 6f 64 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  ode();..    /// 
5a40: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5a50: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 65  // Returns the e
5a60: 78 74 65 6e 64 65 64 20 6e 75 6d 65 72 69 63 20  xtended numeric 
5a70: 72 65 73 75 6c 74 20 63 6f 64 65 20 66 6f 72 20  result code for 
5a80: 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74 20  the most recent 
5a90: 66 61 69 6c 65 64 20 53 51 4c 69 74 65 20 41 50  failed SQLite AP
5aa0: 49 20 63 61 6c 6c 0d 0a 20 20 20 20 2f 2f 2f 20  I call..    /// 
5ab0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
5ac0: 74 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  the database con
5ad0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
5ae0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
5af0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 45    /// <returns>E
5b00: 78 74 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63  xtended result c
5b10: 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
5b20: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
5b30: 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72  ract SQLiteError
5b40: 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73  Code ExtendedRes
5b50: 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20  ultCode();....  
5b60: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5b70: 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c  .    /// Add a l
5b80: 6f 67 20 6d 65 73 73 61 67 65 20 76 69 61 20 74  og message via t
5b90: 68 65 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65  he SQLite sqlite
5ba0: 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e  3_log interface.
5bb0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5bc0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
5bd0: 61 72 61 6d 20 6e 61 6d 65 3d 22 69 45 72 72 43  aram name="iErrC
5be0: 6f 64 65 22 3e 45 72 72 6f 72 20 63 6f 64 65 20  ode">Error code 
5bf0: 74 6f 20 62 65 20 6c 6f 67 67 65 64 20 77 69 74  to be logged wit
5c00: 68 20 74 68 65 20 6d 65 73 73 61 67 65 2e 3c 2f  h the message.</
5c10: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
5c20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4d 65  <param name="zMe
5c30: 73 73 61 67 65 22 3e 53 74 72 69 6e 67 20 74 6f  ssage">String to
5c40: 20 62 65 20 6c 6f 67 67 65 64 2e 20 20 55 6e 6c   be logged.  Unl
5c50: 69 6b 65 20 74 68 65 20 53 51 4c 69 74 65 20 73  ike the SQLite s
5c60: 71 6c 69 74 65 33 5f 6c 6f 67 28 29 0d 0a 20 20  qlite3_log()..  
5c70: 20 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 2c    /// interface,
5c80: 20 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20   this should be 
5c90: 70 72 65 2d 66 6f 72 6d 61 74 74 65 64 2e 20 20  pre-formatted.  
5ca0: 43 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 74  Consider using t
5cb0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 53 74 72 69  he..    /// Stri
5cc0: 6e 67 2e 46 6f 72 6d 61 74 28 29 20 66 75 6e 63  ng.Format() func
5cd0: 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
5ce0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5cf0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5d00: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
5d10: 74 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67  t void LogMessag
5d20: 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
5d30: 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
5d40: 6e 67 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 0d  ng zMessage);...
5d50: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
5d60: 45 43 20 7c 7c 20 49 4e 54 45 52 4f 50 5f 49 4e  EC || INTEROP_IN
5d70: 43 4c 55 44 45 5f 53 45 45 0d 0a 20 20 20 20 69  CLUDE_SEE..    i
5d80: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
5d90: 20 76 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72   void SetPasswor
5da0: 64 28 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72  d(byte[] passwor
5db0: 64 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 69 6e  dBytes);..    in
5dc0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
5dd0: 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
5de0: 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
5df0: 73 73 77 6f 72 64 42 79 74 65 73 29 3b 0d 0a 23  sswordBytes);..#
5e00: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
5e10: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
5e20: 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73 73 48  oid SetProgressH
5e30: 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20 53 51  ook(int nOps, SQ
5e40: 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61 6c 6c  LiteProgressCall
5e50: 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20  back func);..   
5e60: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
5e70: 63 74 20 76 6f 69 64 20 53 65 74 41 75 74 68 6f  ct void SetAutho
5e80: 72 69 7a 65 72 48 6f 6f 6b 28 53 51 4c 69 74 65  rizerHook(SQLite
5e90: 41 75 74 68 6f 72 69 7a 65 72 43 61 6c 6c 62 61  AuthorizerCallba
5ea0: 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69  ck func);..    i
5eb0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
5ec0: 20 76 6f 69 64 20 53 65 74 55 70 64 61 74 65 48   void SetUpdateH
5ed0: 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61 74 65  ook(SQLiteUpdate
5ee0: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d  Callback func);.
5ef0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
5f00: 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 43  stract void SetC
5f10: 6f 6d 6d 69 74 48 6f 6f 6b 28 53 51 4c 69 74 65  ommitHook(SQLite
5f20: 43 6f 6d 6d 69 74 43 61 6c 6c 62 61 63 6b 20 66  CommitCallback f
5f30: 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  unc);..    inter
5f40: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
5f50: 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c 62 61  d SetTraceCallba
5f60: 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65 43 61  ck(SQLiteTraceCa
5f70: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20  llback func);.. 
5f80: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
5f90: 72 61 63 74 20 76 6f 69 64 20 53 65 74 54 72 61  ract void SetTra
5fa0: 63 65 43 61 6c 6c 62 61 63 6b 32 28 53 51 4c 69  ceCallback2(SQLi
5fb0: 74 65 54 72 61 63 65 46 6c 61 67 73 20 6d 61 73  teTraceFlags mas
5fc0: 6b 2c 20 53 51 4c 69 74 65 54 72 61 63 65 43 61  k, SQLiteTraceCa
5fd0: 6c 6c 62 61 63 6b 32 20 66 75 6e 63 29 3b 0d 0a  llback2 func);..
5fe0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
5ff0: 74 72 61 63 74 20 76 6f 69 64 20 53 65 74 52 6f  tract void SetRo
6000: 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51 4c 69 74  llbackHook(SQLit
6010: 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c 62 61 63  eRollbackCallbac
6020: 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e  k func);..    in
6030: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
6040: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6050: 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 53  SetLogCallback(S
6060: 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b  QLiteLogCallback
6070: 20 66 75 6e 63 29 3b 0d 0a 0d 0a 20 20 20 20 2f   func);....    /
6080: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6090: 20 20 2f 2f 2f 20 43 68 65 63 6b 73 20 69 66 20    /// Checks if 
60a0: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
60b0: 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
60c0: 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e 20   initialized in 
60d0: 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f 63  the current proc
60e0: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
60f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6100: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
6110: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
6120: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
6130: 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65   library has bee
6140: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 69 6e  n initialized in
6150: 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 72 6f   the current pro
6160: 63 65 73 73 2c 0d 0a 20 20 20 20 2f 2f 2f 20 7a  cess,..    /// z
6170: 65 72 6f 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a  ero otherwise...
6180: 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
6190: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
61a0: 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 49   abstract bool I
61b0: 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d  sInitialized();.
61c0: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
61d0: 61 62 73 74 72 61 63 74 20 69 6e 74 20 47 65 74  abstract int Get
61e0: 43 75 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53  CursorForTable(S
61f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
6200: 74 6d 74 2c 20 69 6e 74 20 64 61 74 61 62 61 73  tmt, int databas
6210: 65 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  e, int rootPage)
6220: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
6230: 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65  abstract long Ge
6240: 74 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28  tRowIdForCursor(
6250: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
6260: 73 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72  stmt, int cursor
6270: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
6280: 61 6c 20 61 62 73 74 72 61 63 74 20 6f 62 6a 65  al abstract obje
6290: 63 74 20 47 65 74 56 61 6c 75 65 28 53 51 4c 69  ct GetValue(SQLi
62a0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
62b0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
62c0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
62d0: 6e 74 20 69 6e 64 65 78 2c 20 53 51 4c 69 74 65  nt index, SQLite
62e0: 54 79 70 65 20 74 79 70 29 3b 0d 0a 0d 0a 20 20  Type typ);....  
62f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6300: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
6310: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
6320: 20 67 69 76 65 6e 20 64 61 74 61 62 61 73 65 20   given database 
6330: 63 6f 6e 6e 65 63 74 69 6f 6e 20 69 73 20 69 6e  connection is in
6340: 20 61 75 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65   autocommit mode
6350: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 41 75 74 6f 63  ...    /// Autoc
6360: 6f 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 6f 6e  ommit mode is on
6370: 20 62 79 20 64 65 66 61 75 6c 74 2e 20 20 41 75   by default.  Au
6380: 74 6f 63 6f 6d 6d 69 74 20 6d 6f 64 65 20 69 73  tocommit mode is
6390: 20 64 69 73 61 62 6c 65 64 20 62 79 20 61 20 42   disabled by a B
63a0: 45 47 49 4e 0d 0a 20 20 20 20 2f 2f 2f 20 73 74  EGIN..    /// st
63b0: 61 74 65 6d 65 6e 74 2e 20 20 41 75 74 6f 63 6f  atement.  Autoco
63c0: 6d 6d 69 74 20 6d 6f 64 65 20 69 73 20 72 65 2d  mmit mode is re-
63d0: 65 6e 61 62 6c 65 64 20 62 79 20 61 20 43 4f 4d  enabled by a COM
63e0: 4d 49 54 20 6f 72 20 52 4f 4c 4c 42 41 43 4b 2e  MIT or ROLLBACK.
63f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6400: 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ary>..    intern
6410: 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  al abstract bool
6420: 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20   AutoCommit..   
6430: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 3b 0d 0a   {..      get;..
6440: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6450: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53  ernal abstract S
6460: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46  QLiteErrorCode F
6470: 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e  ileControl(strin
6480: 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f  g zDbName, int o
6490: 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 3b  p, IntPtr pArg);
64a0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
64b0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
64c0: 72 65 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c  reates a new SQL
64d0: 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  ite backup objec
64e0: 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70  t based on the p
64f0: 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e 61 74  rovided destinat
6500: 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74  ion..    /// dat
6510: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
6520: 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 64 61  .  The source da
6530: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
6540: 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20  n is the one..  
6550: 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64    /// associated
6560: 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63   with this objec
6570: 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20 61  t.  The source a
6580: 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  nd destination d
6590: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
65a0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e   connections can
65b0: 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e  not be the same.
65c0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
65d0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
65e0: 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43  aram name="destC
65f0: 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  nn">The destinat
6600: 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ion database con
6610: 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e  nection.</param>
6620: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6630: 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22   name="destName"
6640: 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e  >The destination
6650: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c   database name.<
6660: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
6670: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f   <param name="so
6680: 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f  urceName">The so
6690: 75 72 63 65 20 64 61 74 61 62 61 73 65 20 6e 61  urce database na
66a0: 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  me.</param>..   
66b0: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
66c0: 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20  e newly created 
66d0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f  backup object.</
66e0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
66f0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
6700: 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69  SQLiteBackup Ini
6710: 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a  tializeBackup(..
6720: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
6730: 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e  nnection destCnn
6740: 2c 20 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d  , string destNam
6750: 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69  e,..        stri
6760: 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d  ng sourceName);.
6770: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
6780: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
6790: 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67  pies up to N pag
67a0: 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  es from the sour
67b0: 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  ce database to t
67c0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  he destination..
67d0: 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
67e0: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
67f0: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
6800: 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
6810: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6820: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6830: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
6840: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
6850: 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  t to use.</param
6860: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6870: 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d  m name="nPage">.
6880: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
6890: 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
68a0: 63 6f 70 79 20 6f 72 20 6e 65 67 61 74 69 76 65  copy or negative
68b0: 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d   to copy all rem
68c0: 61 69 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20  aining pages... 
68d0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
68e0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
68f0: 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20  name="retry">.. 
6900: 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72     /// Set to tr
6910: 75 65 20 69 66 20 74 68 65 20 6f 70 65 72 61 74  ue if the operat
6920: 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20  ion needs to be 
6930: 72 65 74 72 69 65 64 20 64 75 65 20 74 6f 20 64  retried due to d
6940: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f  atabase..    ///
6950: 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 2e   locking issues.
6960: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
6970: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
6980: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
6990: 72 75 65 20 69 66 20 74 68 65 72 65 20 61 72 65  rue if there are
69a0: 20 6d 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62   more pages to b
69b0: 65 20 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20  e copied, false 
69c0: 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20  otherwise...    
69d0: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
69e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
69f0: 74 72 61 63 74 20 62 6f 6f 6c 20 53 74 65 70 42  tract bool StepB
6a00: 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63 6b  ackup(SQLiteBack
6a10: 75 70 20 62 61 63 6b 75 70 2c 20 69 6e 74 20 6e  up backup, int n
6a20: 50 61 67 65 2c 20 72 65 66 20 62 6f 6f 6c 20 72  Page, ref bool r
6a30: 65 74 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  etry);....    //
6a40: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
6a50: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
6a60: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
6a70: 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
6a80: 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
6a90: 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f   source..    ///
6aa0: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
6ab0: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
6ac0: 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
6ad0: 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
6ae0: 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63  ied..    /// bac
6af0: 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
6b00: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6b10: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6b20: 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
6b30: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
6b40: 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
6b50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
6b60: 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
6b70: 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
6b80: 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c  g to be copied.<
6b90: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
6ba0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
6bb0: 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61   int RemainingBa
6bc0: 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75  ckup(SQLiteBacku
6bd0: 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20  p backup);....  
6be0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6bf0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
6c00: 20 74 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65   the total numbe
6c10: 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68  r of pages in th
6c20: 65 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73  e source databas
6c30: 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20  e associated..  
6c40: 20 20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73    /// with the s
6c50: 70 65 63 69 66 69 65 64 20 62 61 63 6b 75 70 20  pecified backup 
6c60: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
6c70: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
6c80: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
6c90: 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61  ="backup">The ba
6ca0: 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63  ckup object to c
6cb0: 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  heck.</param>.. 
6cc0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
6cd0: 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72  The total number
6ce0: 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65   of pages in the
6cf0: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
6d00: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
6d10: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
6d20: 63 74 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74  ct int PageCount
6d30: 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63  Backup(SQLiteBac
6d40: 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a  kup backup);....
6d50: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
6d60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72  >..    /// Destr
6d70: 6f 79 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f  oys the backup o
6d80: 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62  bject, rolling b
6d90: 61 63 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74  ack any backup t
6da0: 68 61 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20  hat may be in.. 
6db0: 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d     /// progess..
6dc0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
6dd0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
6de0: 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70  ram name="backup
6df0: 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  ">The backup obj
6e00: 65 63 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c  ect to destroy.<
6e10: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74  /param>..    int
6e20: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
6e30: 6f 69 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70  oid FinishBackup
6e40: 28 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61  (SQLiteBackup ba
6e50: 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ckup);....    //
6e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
6eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
6ec0: 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69  .    #region IDi
6ed0: 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73  sposable Members
6ee0: 0d 0a 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69  ..    public voi
6ef0: 64 20 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20  d Dispose()..   
6f00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 44 69 73 70   {..        Disp
6f10: 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20  ose(true);..    
6f20: 20 20 20 20 47 43 2e 53 75 70 70 72 65 73 73 46      GC.SuppressF
6f30: 69 6e 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a  inalize(this);..
6f40: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
6f50: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
6fc0: 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73      #region IDis
6fd0: 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e  posable "Pattern
6fe0: 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 70  " Members..    p
6ff0: 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70  rivate bool disp
7000: 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69 76 61  osed;..    priva
7010: 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73  te void CheckDis
7020: 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77  posed() /* throw
7030: 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20   */..    {..#if 
7040: 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45  THROW_ON_DISPOSE
7050: 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 64  D..        if (d
7060: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
7070: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7080: 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78  ObjectDisposedEx
7090: 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53  ception(typeof(S
70a0: 51 4c 69 74 65 42 61 73 65 29 2e 4e 61 6d 65 29  QLiteBase).Name)
70b0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
70c0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
70d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
70f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7100: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7110: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7120: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
7130: 72 6f 74 65 63 74 65 64 20 76 69 72 74 75 61 6c  rotected virtual
7140: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
7150: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
7160: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
7170: 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20   (!disposed)..  
7180: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
7190: 20 20 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f       //if (dispo
71a0: 73 69 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20  sing)..         
71b0: 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20     //{..        
71c0: 20 20 20 20 2f 2f 20 20 20 20 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 0d 0a  //////////////..
71f0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
7200: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
7210: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
7220: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
7230: 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f      //    //////
7240: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7250: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
7260: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d              //}.
7270: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
7280: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7290: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
72a0: 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20  /////..         
72b0: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
72c0: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
72d0: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
72e0: 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f         /////////
72f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d  /////////////...
7310: 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 69 73  .            dis
7320: 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20  posed = true;.. 
7330: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
7340: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
7350: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
7360: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7370: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7380: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7390: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
73b0: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72  //////....    #r
73c0: 65 67 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72  egion Destructor
73d0: 0d 0a 20 20 20 20 7e 53 51 4c 69 74 65 42 61 73  ..    ~SQLiteBas
73e0: 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
73f0: 20 20 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73      Dispose(fals
7400: 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  e);..    }..    
7410: 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20  #endregion....  
7420: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
7430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7460: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7470: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7480: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 54 68 65 73  /....    // Thes
7490: 65 20 73 74 61 74 69 63 73 20 61 72 65 20 68 65  e statics are he
74a0: 72 65 20 66 6f 72 20 6c 61 63 6b 20 6f 66 20 61  re for lack of a
74b0: 20 62 65 74 74 65 72 20 70 6c 61 63 65 20 74 6f   better place to
74c0: 20 70 75 74 20 74 68 65 6d 2e 0d 0a 20 20 20 20   put them...    
74d0: 2f 2f 20 54 68 65 79 20 65 78 69 73 74 20 68 65  // They exist he
74e0: 72 65 20 62 65 63 61 75 73 65 20 74 68 65 79 20  re because they 
74f0: 61 72 65 20 63 61 6c 6c 65 64 20 64 75 72 69 6e  are called durin
7500: 67 20 74 68 65 20 66 69 6e 61 6c 69 7a 61 74 69  g the finalizati
7510: 6f 6e 20 6f 66 0d 0a 20 20 20 20 2f 2f 20 61 20  on of..    // a 
7520: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
7530: 61 6e 64 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e  andle, SQLiteCon
7540: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 2c 20 61  nectionHandle, a
7550: 6e 64 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  nd SQLiteFunctio
7560: 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 2e 0d 0a  nCookieHandle...
7570: 20 20 20 20 2f 2f 20 54 68 65 72 65 66 6f 72 65      // Therefore
7580: 20 74 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73   these functions
7590: 20 68 61 76 65 20 74 6f 20 62 65 20 73 74 61 74   have to be stat
75a0: 69 63 2c 20 61 6e 64 20 68 61 76 65 20 74 6f 20  ic, and have to 
75b0: 62 65 20 6c 6f 77 2d 6c 65 76 65 6c 2e 0d 0a 0d  be low-level....
75c0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
75d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
75f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7620: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76  ////....    priv
7630: 61 74 65 20 73 74 61 74 69 63 20 73 74 72 69 6e  ate static strin
7640: 67 5b 5d 20 5f 65 72 72 6f 72 4d 65 73 73 61 67  g[] _errorMessag
7650: 65 73 20 3d 20 7b 0d 0a 20 20 20 20 20 20 20 20  es = {..        
7660: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20  /* SQLITE_OK    
7670: 20 20 20 20 20 20 2a 2f 20 22 6e 6f 74 20 61 6e        */ "not an
7680: 20 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20   error",..      
7690: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 45 52 52 4f    /* SQLITE_ERRO
76a0: 52 20 20 20 20 20 20 20 2a 2f 20 22 53 51 4c 20  R       */ "SQL 
76b0: 6c 6f 67 69 63 20 65 72 72 6f 72 22 2c 0d 0a 20  logic error",.. 
76c0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
76d0: 5f 49 4e 54 45 52 4e 41 4c 20 20 20 20 2a 2f 20  _INTERNAL    */ 
76e0: 22 69 6e 74 65 72 6e 61 6c 20 6c 6f 67 69 63 20  "internal logic 
76f0: 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20  error",..       
7700: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 45 52 4d 20   /* SQLITE_PERM 
7710: 20 20 20 20 20 20 20 2a 2f 20 22 61 63 63 65 73         */ "acces
7720: 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65 6e  s permission den
7730: 69 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  ied",..        /
7740: 2a 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20 20  * SQLITE_ABORT  
7750: 20 20 20 20 20 2a 2f 20 22 71 75 65 72 79 20 61       */ "query a
7760: 62 6f 72 74 65 64 22 2c 0d 0a 20 20 20 20 20 20  borted",..      
7770: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 42 55 53 59    /* SQLITE_BUSY
7780: 20 20 20 20 20 20 20 20 2a 2f 20 22 64 61 74 61          */ "data
7790: 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64 22 2c  base is locked",
77a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
77b0: 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20 20 20 20  ITE_LOCKED      
77c0: 2a 2f 20 22 64 61 74 61 62 61 73 65 20 74 61 62  */ "database tab
77d0: 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 2c 0d 0a  le is locked",..
77e0: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
77f0: 45 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 20 2a 2f  E_NOMEM       */
7800: 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72 79 22   "out of memory"
7810: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
7820: 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20 20 20  LITE_READONLY   
7830: 20 2a 2f 20 22 61 74 74 65 6d 70 74 20 74 6f 20   */ "attempt to 
7840: 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e 6c 79  write a readonly
7850: 20 64 61 74 61 62 61 73 65 22 2c 0d 0a 20 20 20   database",..   
7860: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 49       /* SQLITE_I
7870: 4e 54 45 52 52 55 50 54 20 20 20 2a 2f 20 22 69  NTERRUPT   */ "i
7880: 6e 74 65 72 72 75 70 74 65 64 22 2c 0d 0a 20 20  nterrupted",..  
7890: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
78a0: 49 4f 45 52 52 20 20 20 20 20 20 20 2a 2f 20 22  IOERR       */ "
78b0: 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72 22 2c  disk I/O error",
78c0: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
78d0: 49 54 45 5f 43 4f 52 52 55 50 54 20 20 20 20 20  ITE_CORRUPT     
78e0: 2a 2f 20 22 64 61 74 61 62 61 73 65 20 64 69 73  */ "database dis
78f0: 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c 66 6f  k image is malfo
7900: 72 6d 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20  rmed",..        
7910: 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55  /* SQLITE_NOTFOU
7920: 4e 44 20 20 20 20 2a 2f 20 22 75 6e 6b 6e 6f 77  ND    */ "unknow
7930: 6e 20 6f 70 65 72 61 74 69 6f 6e 22 2c 0d 0a 20  n operation",.. 
7940: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
7950: 5f 46 55 4c 4c 20 20 20 20 20 20 20 20 2a 2f 20  _FULL        */ 
7960: 22 64 61 74 61 62 61 73 65 20 6f 72 20 64 69 73  "database or dis
7970: 6b 20 69 73 20 66 75 6c 6c 22 2c 0d 0a 20 20 20  k is full",..   
7980: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 43       /* SQLITE_C
7990: 41 4e 54 4f 50 45 4e 20 20 20 20 2a 2f 20 22 75  ANTOPEN    */ "u
79a0: 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20 64 61  nable to open da
79b0: 74 61 62 61 73 65 20 66 69 6c 65 22 2c 0d 0a 20  tabase file",.. 
79c0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
79d0: 5f 50 52 4f 54 4f 43 4f 4c 20 20 20 20 2a 2f 20  _PROTOCOL    */ 
79e0: 22 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f 63 6f  "locking protoco
79f0: 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  l",..        /* 
7a00: 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20 20 20  SQLITE_EMPTY    
7a10: 20 20 20 2a 2f 20 22 74 61 62 6c 65 20 63 6f 6e     */ "table con
7a20: 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22 2c 0d  tains no data",.
7a30: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
7a40: 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20 20 2a  TE_SCHEMA      *
7a50: 2f 20 22 64 61 74 61 62 61 73 65 20 73 63 68 65  / "database sche
7a60: 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64 22 2c  ma has changed",
7a70: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
7a80: 49 54 45 5f 54 4f 4f 42 49 47 20 20 20 20 20 20  ITE_TOOBIG      
7a90: 2a 2f 20 22 73 74 72 69 6e 67 20 6f 72 20 62 6c  */ "string or bl
7aa0: 6f 62 20 74 6f 6f 20 62 69 67 22 2c 0d 0a 20 20  ob too big",..  
7ab0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
7ac0: 43 4f 4e 53 54 52 41 49 4e 54 20 20 2a 2f 20 22  CONSTRAINT  */ "
7ad0: 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69 6c 65  constraint faile
7ae0: 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  d",..        /* 
7af0: 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43 48 20  SQLITE_MISMATCH 
7b00: 20 20 20 2a 2f 20 22 64 61 74 61 74 79 70 65 20     */ "datatype 
7b10: 6d 69 73 6d 61 74 63 68 22 2c 0d 0a 20 20 20 20  mismatch",..    
7b20: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49      /* SQLITE_MI
7b30: 53 55 53 45 20 20 20 20 20 20 2a 2f 20 22 62 61  SUSE      */ "ba
7b40: 64 20 70 61 72 61 6d 65 74 65 72 20 6f 72 20 6f  d parameter or o
7b50: 74 68 65 72 20 41 50 49 20 6d 69 73 75 73 65 22  ther API misuse"
7b60: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
7b70: 4c 49 54 45 5f 4e 4f 4c 46 53 20 20 20 20 20 20  LITE_NOLFS      
7b80: 20 2a 2f 20 22 6c 61 72 67 65 20 66 69 6c 65 20   */ "large file 
7b90: 73 75 70 70 6f 72 74 20 69 73 20 64 69 73 61 62  support is disab
7ba0: 6c 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  led",..        /
7bb0: 2a 20 53 51 4c 49 54 45 5f 41 55 54 48 20 20 20  * SQLITE_AUTH   
7bc0: 20 20 20 20 20 2a 2f 20 22 61 75 74 68 6f 72 69       */ "authori
7bd0: 7a 61 74 69 6f 6e 20 64 65 6e 69 65 64 22 2c 0d  zation denied",.
7be0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
7bf0: 54 45 5f 46 4f 52 4d 41 54 20 20 20 20 20 20 2a  TE_FORMAT      *
7c00: 2f 20 22 61 75 78 69 6c 69 61 72 79 20 64 61 74  / "auxiliary dat
7c10: 61 62 61 73 65 20 66 6f 72 6d 61 74 20 65 72 72  abase format err
7c20: 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  or",..        /*
7c30: 20 53 51 4c 49 54 45 5f 52 41 4e 47 45 20 20 20   SQLITE_RANGE   
7c40: 20 20 20 20 2a 2f 20 22 63 6f 6c 75 6d 6e 20 69      */ "column i
7c50: 6e 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67  ndex out of rang
7c60: 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  e",..        /* 
7c70: 53 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20  SQLITE_NOTADB   
7c80: 20 20 20 2a 2f 20 22 66 69 6c 65 20 69 73 20 6e     */ "file is n
7c90: 6f 74 20 61 20 64 61 74 61 62 61 73 65 22 2c 0d  ot a database",.
7ca0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
7cb0: 54 45 5f 4e 4f 54 49 43 45 20 20 20 20 20 20 2a  TE_NOTICE      *
7cc0: 2f 20 22 6e 6f 74 69 66 69 63 61 74 69 6f 6e 20  / "notification 
7cd0: 6d 65 73 73 61 67 65 22 2c 0d 0a 20 20 20 20 20  message",..     
7ce0: 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 57 41 52     /* SQLITE_WAR
7cf0: 4e 49 4e 47 20 20 20 20 20 2a 2f 20 22 77 61 72  NING     */ "war
7d00: 6e 69 6e 67 20 6d 65 73 73 61 67 65 22 0d 0a 20  ning message".. 
7d10: 20 20 20 7d 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f     };....    ///
7d20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
7d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
7d80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
7d90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
7da0: 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73  ns the error mes
7db0: 73 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65  sage for the spe
7dc0: 63 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65  cified SQLite re
7dd0: 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d  turn code using.
7de0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 74  .    /// the int
7df0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f 6f  ernal static loo
7e00: 6b 75 70 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20  kup table...    
7e10: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
7e20: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
7e30: 61 6d 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c  ame="rc">The SQL
7e40: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
7e50: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
7e60: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65  / <returns>The e
7e70: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20  rror message or 
7e80: 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f  null if it canno
7e90: 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74  t be found.</ret
7ea0: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 6f 74 65  urns>..    prote
7eb0: 63 74 65 64 20 73 74 61 74 69 63 20 73 74 72 69  cted static stri
7ec0: 6e 67 20 46 61 6c 6c 62 61 63 6b 47 65 74 45 72  ng FallbackGetEr
7ed0: 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74 65  rorString(SQLite
7ee0: 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a 20  ErrorCode rc).. 
7ef0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77     {..        sw
7f00: 69 74 63 68 20 28 72 63 29 0d 0a 20 20 20 20 20  itch (rc)..     
7f10: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7f20: 20 20 63 61 73 65 20 53 51 4c 69 74 65 45 72 72    case SQLiteErr
7f30: 6f 72 43 6f 64 65 2e 41 62 6f 72 74 5f 52 6f 6c  orCode.Abort_Rol
7f40: 6c 62 61 63 6b 3a 0d 0a 20 20 20 20 20 20 20 20  lback:..        
7f50: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22          return "
7f60: 61 62 6f 72 74 20 64 75 65 20 74 6f 20 52 4f 4c  abort due to ROL
7f70: 4c 42 41 43 4b 22 3b 0d 0a 20 20 20 20 20 20 20  LBACK";..       
7f80: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
7f90: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 3a 0d 0a  ErrorCode.Row:..
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fb0: 72 65 74 75 72 6e 20 22 61 6e 6f 74 68 65 72 20  return "another 
7fc0: 72 6f 77 20 61 76 61 69 6c 61 62 6c 65 22 3b 0d  row available";.
7fd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73  .            cas
7fe0: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
7ff0: 65 2e 44 6f 6e 65 3a 0d 0a 20 20 20 20 20 20 20  e.Done:..       
8000: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8010: 22 6e 6f 20 6d 6f 72 65 20 72 6f 77 73 20 61 76  "no more rows av
8020: 61 69 6c 61 62 6c 65 22 3b 0d 0a 20 20 20 20 20  ailable";..     
8030: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
8040: 69 66 20 28 5f 65 72 72 6f 72 4d 65 73 73 61 67  if (_errorMessag
8050: 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  es == null)..   
8060: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
8070: 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  null;....       
8080: 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 28 69 6e   int index = (in
8090: 74 29 28 72 63 20 26 20 53 51 4c 69 74 65 45 72  t)(rc & SQLiteEr
80a0: 72 6f 72 43 6f 64 65 2e 4e 6f 6e 45 78 74 65 6e  rorCode.NonExten
80b0: 64 65 64 4d 61 73 6b 29 3b 0d 0a 0d 0a 20 20 20  dedMask);....   
80c0: 20 20 20 20 20 69 66 20 28 28 69 6e 64 65 78 20       if ((index 
80d0: 3c 20 30 29 20 7c 7c 20 28 69 6e 64 65 78 20 3e  < 0) || (index >
80e0: 3d 20 5f 65 72 72 6f 72 4d 65 73 73 61 67 65 73  = _errorMessages
80f0: 2e 4c 65 6e 67 74 68 29 29 0d 0a 20 20 20 20 20  .Length))..     
8100: 20 20 20 20 20 20 20 69 6e 64 65 78 20 3d 20 28         index = (
8110: 69 6e 74 29 53 51 4c 69 74 65 45 72 72 6f 72 43  int)SQLiteErrorC
8120: 6f 64 65 2e 45 72 72 6f 72 3b 20 2f 2a 20 4d 61  ode.Error; /* Ma
8130: 6b 65 20 69 6e 74 6f 20 67 65 6e 65 72 69 63 20  ke into generic 
8140: 65 72 72 6f 72 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  error. */....   
8150: 20 20 20 20 20 72 65 74 75 72 6e 20 5f 65 72 72       return _err
8160: 6f 72 4d 65 73 73 61 67 65 73 5b 69 6e 64 65 78  orMessages[index
8170: 5d 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ];..    }....   
8180: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
8190: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
81a0: 72 72 6f 72 28 53 51 4c 69 74 65 43 6f 6e 6e 65  rror(SQLiteConne
81b0: 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c  ctionHandle hdl,
81c0: 20 49 6e 74 50 74 72 20 64 62 29 0d 0a 20 20 20   IntPtr db)..   
81d0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
81e0: 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c  (hdl == null) ||
81f0: 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a   (db == IntPtr.Z
8200: 65 72 6f 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ero))..         
8210: 20 20 20 72 65 74 75 72 6e 20 22 6e 75 6c 6c 20     return "null 
8220: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 72 20 64 61  connection or da
8230: 74 61 62 61 73 65 20 68 61 6e 64 6c 65 22 3b 0d  tabase handle";.
8240: 0a 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ...        strin
8250: 67 20 72 65 73 75 6c 74 20 3d 20 6e 75 6c 6c 3b  g result = null;
8260: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
8270: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
8280: 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f          // do no
8290: 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20  thing...        
82a0: 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c  }..        final
82b0: 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65  ly /* NOTE: Thre
82c0: 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65  ad.Abort() prote
82d0: 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20  ction. */..     
82e0: 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f     {..#if PLATFO
82f0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
8300: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
8310: 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52   lock (hdl.syncR
8320: 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  oot)..#else..   
8330: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68           lock (h
8340: 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  dl)..#endif..   
8350: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
8360: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8370: 21 68 64 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26  !hdl.IsInvalid &
8380: 26 20 21 68 64 6c 2e 49 73 43 6c 6f 73 65 64 29  & !hdl.IsClosed)
8390: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83a0: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
83b0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
83d0: 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20  nt len = 0;..   
83e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83f0: 20 72 65 73 75 6c 74 20 3d 20 55 54 46 38 54 6f   result = UTF8To
8400: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
8410: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8420: 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f  e3_errmsg_intero
8430: 70 28 64 62 2c 20 72 65 66 20 6c 65 6e 29 2c 20  p(db, ref len), 
8440: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8460: 20 20 72 65 73 75 6c 74 20 3d 20 55 54 46 38 54    result = UTF8T
8470: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
8480: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
8490: 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20  te3_errmsg(db), 
84a0: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
84c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84d0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
84e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
84f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
8500: 73 75 6c 74 20 3d 20 22 63 6c 6f 73 65 64 20 6f  sult = "closed o
8510: 72 20 69 6e 76 61 6c 69 64 20 63 6f 6e 6e 65 63  r invalid connec
8520: 74 69 6f 6e 20 68 61 6e 64 6c 65 22 3b 0d 0a 20  tion handle";.. 
8530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8540: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
8550: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
8560: 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65      GC.KeepAlive
8570: 28 68 64 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  (hdl);..        
8580: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
8590: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
85a0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
85b0: 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 53  d FinishBackup(S
85c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
85d0: 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74  andle hdl, IntPt
85e0: 72 20 62 61 63 6b 75 70 29 0d 0a 20 20 20 20 7b  r backup)..    {
85f0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 68  ..        if ((h
8600: 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  dl == null) || (
8610: 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72  backup == IntPtr
8620: 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 3b 0d  .Zero)) return;.
8630: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
8640: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
8650: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
8660: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
8670: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
8680: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
8690: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
86a0: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
86b0: 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52    {..#if PLATFOR
86c0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
86d0: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
86e0: 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f  lock (hdl.syncRo
86f0: 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ot)..#else..    
8700: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64          lock (hd
8710: 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l)..#endif..    
8720: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
8730: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
8740: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8750: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8760: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8770: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8780: 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69  _backup_finish_i
8790: 6e 74 65 72 6f 70 28 62 61 63 6b 75 70 29 3b 0d  nterop(backup);.
87a0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
87b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
87c0: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
87d0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
87e0: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
87f0: 69 6e 69 73 68 28 62 61 63 6b 75 70 29 3b 0d 0a  inish(backup);..
8800: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
8810: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
8820: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8830: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
8840: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
8850: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
8860: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8870: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
8880: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
8890: 20 76 6f 69 64 20 43 6c 6f 73 65 42 6c 6f 62 28   void CloseBlob(
88a0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
88b0: 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50  Handle hdl, IntP
88c0: 74 72 20 62 6c 6f 62 29 0d 0a 20 20 20 20 7b 0d  tr blob)..    {.
88d0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 68 64  .        if ((hd
88e0: 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 62  l == null) || (b
88f0: 6c 6f 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65  lob == IntPtr.Ze
8900: 72 6f 29 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a  ro)) return;....
8910: 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20          try..   
8920: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
8930: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
8940: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  g...        }.. 
8950: 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f         finally /
8960: 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41  * NOTE: Thread.A
8970: 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f  bort() protectio
8980: 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b  n. */..        {
8990: 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43  ..#if PLATFORM_C
89a0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
89b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63  .            loc
89c0: 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29  k (hdl.syncRoot)
89d0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
89e0: 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d       lock (hdl).
89f0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
8a00: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c       {..#if !SQL
8a10: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
8a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
8a30: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
8a40: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
8a50: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 6c  thods.sqlite3_bl
8a60: 6f 62 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70  ob_close_interop
8a70: 28 62 6c 6f 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a  (blob);..#else..
8a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8a90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8aa0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8ab0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8ac0: 62 6c 6f 62 5f 63 6c 6f 73 65 28 62 6c 6f 62 29  blob_close(blob)
8ad0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
8ae0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
8af0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
8b00: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
8b10: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8b20: 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  n(n, null);..   
8b30: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8b40: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
8b50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
8b60: 74 69 63 20 76 6f 69 64 20 46 69 6e 61 6c 69 7a  tic void Finaliz
8b70: 65 53 74 61 74 65 6d 65 6e 74 28 53 51 4c 69 74  eStatement(SQLit
8b80: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
8b90: 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 73 74  e hdl, IntPtr st
8ba0: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
8bb0: 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20      if ((hdl == 
8bc0: 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 6d 74 20 3d  null) || (stmt =
8bd0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20  = IntPtr.Zero)) 
8be0: 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20  return;....     
8bf0: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
8c00: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
8c10: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8c20: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
8c30: 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54    finally /* NOT
8c40: 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28  E: Thread.Abort(
8c50: 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f  ) protection. */
8c60: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
8c70: 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43   PLATFORM_COMPAC
8c80: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
8c90: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64          lock (hd
8ca0: 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c  l.syncRoot)..#el
8cb0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
8cc0: 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64  lock (hdl)..#end
8cd0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
8ce0: 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53  {..#if !SQLITE_S
8cf0: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
8d00: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
8d10: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
8d20: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8d30: 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
8d40: 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b  e_interop(stmt);
8d50: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
8d60: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
8d70: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
8d80: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
8d90: 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a  .sqlite3_finaliz
8da0: 65 28 73 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66  e(stmt);..#endif
8db0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8dc0: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
8dd0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
8de0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
8df0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
8e00: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
8e10: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
8e20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
8e30: 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69 64 20  nal static void 
8e40: 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 28  CloseConnection(
8e50: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
8e60: 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50  Handle hdl, IntP
8e70: 74 72 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20  tr db)..    {.. 
8e80: 20 20 20 20 20 20 20 69 66 20 28 28 68 64 6c 20         if ((hdl 
8e90: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20  == null) || (db 
8ea0: 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29  == IntPtr.Zero))
8eb0: 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20   return;....    
8ec0: 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
8ed0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8ee0: 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a  // do nothing...
8ef0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8f00: 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f     finally /* NO
8f10: 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74  TE: Thread.Abort
8f20: 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a  () protection. *
8f30: 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  /..        {..#i
8f40: 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41  f PLATFORM_COMPA
8f50: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
8f60: 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68           lock (h
8f70: 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65  dl.syncRoot)..#e
8f80: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
8f90: 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e   lock (hdl)..#en
8fa0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20  dif..           
8fb0: 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f   {..#if !SQLITE_
8fc0: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
8fd0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
8fe0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
8ff0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
9000: 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f  s.sqlite3_close_
9010: 69 6e 74 65 72 6f 70 28 64 62 29 3b 0d 0a 23 65  interop(db);..#e
9020: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
9030: 20 20 20 20 20 52 65 73 65 74 43 6f 6e 6e 65 63       ResetConnec
9040: 74 69 6f 6e 28 68 64 6c 2c 20 64 62 2c 20 66 61  tion(hdl, db, fa
9050: 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  lse);....       
9060: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
9070: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
9080: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
9090: 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64  .sqlite3_close(d
90a0: 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  b);..#endif..   
90b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
90c0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
90d0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
90e0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
90f0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
9100: 72 6f 72 28 68 64 6c 2c 20 64 62 29 29 3b 0d 0a  ror(hdl, db));..
9110: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9120: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
9130: 0a 0d 0a 23 69 66 20 21 49 4e 54 45 52 4f 50 5f  ...#if !INTEROP_
9140: 4c 45 47 41 43 59 5f 43 4c 4f 53 45 0d 0a 20 20  LEGACY_CLOSE..  
9150: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
9160: 63 20 76 6f 69 64 20 43 6c 6f 73 65 43 6f 6e 6e  c void CloseConn
9170: 65 63 74 69 6f 6e 56 32 28 53 51 4c 69 74 65 43  ectionV2(SQLiteC
9180: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
9190: 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 29 0d  hdl, IntPtr db).
91a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
91b0: 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c  if ((hdl == null
91c0: 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50  ) || (db == IntP
91d0: 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e  tr.Zero)) return
91e0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79  ;....        try
91f0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
9200: 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e           // do n
9210: 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20  othing...       
9220: 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
9230: 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72  lly /* NOTE: Thr
9240: 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74  ead.Abort() prot
9250: 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20  ection. */..    
9260: 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46      {..#if PLATF
9270: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
9280: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
9290: 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63    lock (hdl.sync
92a0: 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20  Root)..#else..  
92b0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
92c0: 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  hdl)..#endif..  
92d0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
92e0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
92f0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  D..             
9300: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
9310: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
9320: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
9330: 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70  e3_close_interop
9340: 28 64 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  (db);..#else..  
9350: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 52 65                Re
9360: 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 68 64  setConnection(hd
9370: 6c 2c 20 64 62 2c 20 66 61 6c 73 65 29 3b 0d 0a  l, db, false);..
9380: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
9390: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
93a0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
93b0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
93c0: 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29 3b 0d  3_close_v2(db);.
93d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
93e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
93f0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
9400: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
9410: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
9420: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
9430: 68 64 6c 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20  hdl, db));..    
9440: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9450: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e     }..    }..#en
9460: 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
9470: 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
9480: 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  ResetConnection(
9490: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
94a0: 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50  Handle hdl, IntP
94b0: 74 72 20 64 62 2c 20 62 6f 6f 6c 20 63 61 6e 54  tr db, bool canT
94c0: 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  hrow)..    {..  
94d0: 20 20 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d        if ((hdl =
94e0: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d  = null) || (db =
94f0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20  = IntPtr.Zero)) 
9500: 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d  return false;...
9510: 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65  .        bool re
9520: 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  sult = false;...
9530: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
9540: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9550: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
9560: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
9570: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
9580: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
9590: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
95a0: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
95b0: 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f  {..#if PLATFORM_
95c0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
95d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
95e0: 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74  ck (hdl.syncRoot
95f0: 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  )..#else..      
9600: 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29        lock (hdl)
9610: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
9620: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9630: 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61 6e           if (can
9640: 54 68 72 6f 77 20 26 26 20 68 64 6c 2e 49 73 49  Throw && hdl.IsI
9650: 6e 76 61 6c 69 64 29 0d 0a 20 20 20 20 20 20 20  nvalid)..       
9660: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
9670: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
9680: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
9690: 28 22 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ("The connection
96a0: 20 68 61 6e 64 6c 65 20 69 73 20 69 6e 76 61 6c   handle is inval
96b0: 69 64 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  id.");....      
96c0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63 61            if (ca
96d0: 6e 54 68 72 6f 77 20 26 26 20 68 64 6c 2e 49 73  nThrow && hdl.Is
96e0: 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20  Closed)..       
96f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
9700: 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
9710: 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
9720: 28 22 54 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ("The connection
9730: 20 68 61 6e 64 6c 65 20 69 73 20 63 6c 6f 73 65   handle is close
9740: 64 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  d.");....       
9750: 20 20 20 20 20 20 20 20 20 69 66 20 28 21 68 64           if (!hd
9760: 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21  l.IsInvalid && !
9770: 68 64 6c 2e 49 73 43 6c 6f 73 65 64 29 0d 0a 20  hdl.IsClosed).. 
9780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
9790: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97a0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d        IntPtr stm
97b0: 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  t = IntPtr.Zero;
97c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
97d0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
97e0: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20  rCode n;....    
97f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9800: 64 6f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  do..            
9810: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
9820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9830: 20 20 20 73 74 6d 74 20 3d 20 55 6e 73 61 66 65     stmt = Unsafe
9840: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9850: 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d 74 28  lite3_next_stmt(
9860: 64 62 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20  db, stmt);..    
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 20 20 20 69 66 20 28 73 74 6d 74 20 21 3d 20      if (stmt != 
9890: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
98a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98b0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
98c0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
98d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
98e0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55             n = U
98f0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
9900: 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 65 74  ds.sqlite3_reset
9910: 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b 0d  _interop(stmt);.
9920: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
9930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9940: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
9950: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9960: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 29 3b  te3_reset(stmt);
9970: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
9980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9990: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
99a0: 20 20 20 20 20 20 20 20 20 7d 20 77 68 69 6c 65           } while
99b0: 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50 74 72   (stmt != IntPtr
99c0: 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20  .Zero);....     
99d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
99e0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
99f0: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
9a00: 49 73 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  Is a transaction
9a10: 20 4e 4f 54 20 70 65 6e 64 69 6e 67 20 6f 6e 20   NOT pending on 
9a20: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 3f 0d  the connection?.
9a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9a40: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
9a50: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
9a60: 28 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 68 64  (IsAutocommit(hd
9a70: 6c 2c 20 64 62 29 29 0d 0a 20 20 20 20 20 20 20  l, db))..       
9a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9aa0: 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d          result =
9ab0: 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
9ac0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ae0: 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
9af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
9b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b10: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
9b20: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
9b30: 73 71 6c 69 74 65 33 5f 65 78 65 63 28 0d 0a 20  sqlite3_exec(.. 
9b40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9b50: 20 20 20 20 20 20 20 20 20 20 20 64 62 2c 20 54             db, T
9b60: 6f 55 54 46 38 28 22 52 4f 4c 4c 42 41 43 4b 22  oUTF8("ROLLBACK"
9b70: 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20  ), IntPtr.Zero, 
9b80: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20  IntPtr.Zero,..  
9b90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ba0: 20 20 20 20 20 20 20 20 20 20 72 65 66 20 73 74            ref st
9bb0: 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  mt);....        
9bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9bd0: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
9be0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
9bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c00: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
9c10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c20: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 74 72       result = tr
9c30: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
9c40: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
9c50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c60: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
9c70: 28 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20  (canThrow)..    
9c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9c90: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9ca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9cb0: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
9cc0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
9cd0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 68 64 6c  GetLastError(hdl
9ce0: 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20 20 20 20  , db));..       
9cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9d00: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9d10: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
9d20: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9d30: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
9d40: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
9d50: 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 68 64 6c  GC.KeepAlive(hdl
9d60: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  );..        retu
9d70: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
9d80: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
9d90: 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 49 73  l static bool Is
9da0: 41 75 74 6f 63 6f 6d 6d 69 74 28 53 51 4c 69 74  Autocommit(SQLit
9db0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
9dc0: 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62  e hdl, IntPtr db
9dd0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9de0: 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75    if ((hdl == nu
9df0: 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e  ll) || (db == In
9e00: 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75  tPtr.Zero)) retu
9e10: 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20  rn false;....   
9e20: 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c 74       bool result
9e30: 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20   = false;....   
9e40: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
9e50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9e60: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
9e70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9e80: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
9e90: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
9ea0: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
9eb0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
9ec0: 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
9ed0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
9ee0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
9ef0: 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23  hdl.syncRoot)..#
9f00: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
9f10: 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65    lock (hdl)..#e
9f20: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
9f30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9f40: 20 20 20 20 20 69 66 20 28 21 68 64 6c 2e 49 73       if (!hdl.Is
9f50: 49 6e 76 61 6c 69 64 20 26 26 20 21 68 64 6c 2e  Invalid && !hdl.
9f60: 49 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20  IsClosed)..     
9f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
9f80: 65 73 75 6c 74 20 3d 20 28 55 6e 73 61 66 65 4e  esult = (UnsafeN
9f90: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
9fa0: 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d  ite3_get_autocom
9fb0: 6d 69 74 28 64 62 29 20 3d 3d 20 31 29 3b 0d 0a  mit(db) == 1);..
9fc0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
9fd0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9fe0: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 68    GC.KeepAlive(h
9ff0: 64 6c 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e  dl); /* NOTE: Un
a000: 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65 2e 20  reachable code. 
a010: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  */..        retu
a020: 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20  rn result;..    
a030: 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20  }..  }....  /// 
a040: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f  <summary>..  ///
a050: 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72  ..  /// </summar
a060: 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 69 6e 74  y>..  public int
a070: 65 72 66 61 63 65 20 49 53 51 4c 69 74 65 53 63  erface ISQLiteSc
a080: 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 0d 0a  hemaExtensions..
a090: 20 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c    {..      /// <
a0a0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a0b0: 2f 2f 2f 20 43 72 65 61 74 65 73 20 74 65 6d 70  /// Creates temp
a0c0: 6f 72 61 72 79 20 74 61 62 6c 65 73 20 6f 6e 20  orary tables on 
a0d0: 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73  the connection s
a0e0: 6f 20 73 63 68 65 6d 61 20 69 6e 66 6f 72 6d 61  o schema informa
a0f0: 74 69 6f 6e 20 63 61 6e 20 62 65 20 71 75 65 72  tion can be quer
a100: 69 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ied...      /// 
a110: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
a120: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
a130: 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e 22 3e 0d  e="connection">.
a140: 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 63  .      /// The c
a150: 6f 6e 6e 65 63 74 69 6f 6e 20 75 70 6f 6e 20 77  onnection upon w
a160: 68 69 63 68 20 74 6f 20 62 75 69 6c 64 20 74 68  hich to build th
a170: 65 20 73 63 68 65 6d 61 20 74 61 62 6c 65 73 2e  e schema tables.
a180: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  ..      /// </pa
a190: 72 61 6d 3e 0d 0a 20 20 20 20 20 20 76 6f 69 64  ram>..      void
a1a0: 20 42 75 69 6c 64 54 65 6d 70 53 63 68 65 6d 61   BuildTempSchema
a1b0: 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  (SQLiteConnectio
a1c0: 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 29 3b 0d 0a  n connection);..
a1d0: 20 20 7d 0d 0a 0d 0a 20 20 5b 46 6c 61 67 73 5d    }....  [Flags]
a1e0: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75  ..  internal enu
a1f0: 6d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  m SQLiteOpenFlag
a200: 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20  sEnum..  {..    
a210: 4e 6f 6e 65 20 3d 20 30 2c 0d 0a 20 20 20 20 52  None = 0,..    R
a220: 65 61 64 4f 6e 6c 79 20 3d 20 30 78 31 2c 0d 0a  eadOnly = 0x1,..
a230: 20 20 20 20 52 65 61 64 57 72 69 74 65 20 3d 20      ReadWrite = 
a240: 30 78 32 2c 0d 0a 20 20 20 20 43 72 65 61 74 65  0x2,..    Create
a250: 20 3d 20 30 78 34 2c 0d 0a 20 20 20 20 55 72 69   = 0x4,..    Uri
a260: 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20 20 4d 65   = 0x40,..    Me
a270: 6d 6f 72 79 20 3d 20 30 78 38 30 2c 0d 0a 20 20  mory = 0x80,..  
a280: 20 20 44 65 66 61 75 6c 74 20 3d 20 52 65 61 64    Default = Read
a290: 57 72 69 74 65 20 7c 20 43 72 65 61 74 65 2c 0d  Write | Create,.
a2a0: 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73  .  }....  /// <s
a2b0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54  ummary>..  /// T
a2c0: 68 65 20 65 78 74 72 61 20 62 65 68 61 76 69 6f  he extra behavio
a2d0: 72 61 6c 20 66 6c 61 67 73 20 74 68 61 74 20 63  ral flags that c
a2e0: 61 6e 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f  an be applied to
a2f0: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a   a connection...
a300: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a310: 0d 0a 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20  ..  [Flags()].. 
a320: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c   public enum SQL
a330: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a340: 67 73 20 3a 20 6c 6f 6e 67 0d 0a 20 20 7b 0d 0a  gs : long..  {..
a350: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
a360: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 4e  ry>..      /// N
a370: 6f 20 65 78 74 72 61 20 66 6c 61 67 73 2e 0d 0a  o extra flags...
a380: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
a390: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 6e 65  ary>..      None
a3a0: 20 3d 20 30 78 30 2c 0d 0a 0d 0a 20 20 20 20 20   = 0x0,....     
a3b0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
a3c0: 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65        /// Enable
a3d0: 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20   logging of all 
a3e0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 74  SQL statements t
a3f0: 6f 20 62 65 20 70 72 65 70 61 72 65 64 2e 0d 0a  o be prepared...
a400: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
a410: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 50  ary>..      LogP
a420: 72 65 70 61 72 65 20 3d 20 30 78 31 2c 0d 0a 0d  repare = 0x1,...
a430: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
a440: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
a450: 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f  Enable logging o
a460: 66 20 61 6c 6c 20 62 6f 75 6e 64 20 70 61 72 61  f all bound para
a470: 6d 65 74 65 72 20 74 79 70 65 73 20 61 6e 64 20  meter types and 
a480: 72 61 77 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20  raw values...   
a490: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
a4a0: 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 50 72 65 42  >..      LogPreB
a4b0: 69 6e 64 20 3d 20 30 78 32 2c 0d 0a 0d 0a 20 20  ind = 0x2,....  
a4c0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a4d0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61  >..      /// Ena
a4e0: 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61  ble logging of a
a4f0: 6c 6c 20 62 6f 75 6e 64 20 70 61 72 61 6d 65 74  ll bound paramet
a500: 65 72 20 73 74 72 6f 6e 67 6c 79 20 74 79 70 65  er strongly type
a510: 64 20 76 61 6c 75 65 73 2e 0d 0a 20 20 20 20 20  d values...     
a520: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
a530: 0a 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 20 3d  .      LogBind =
a540: 20 30 78 34 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   0x4,....      /
a550: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
a560: 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c      /// Enable l
a570: 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20 65 78  ogging of all ex
a580: 63 65 70 74 69 6f 6e 73 20 63 61 75 67 68 74 20  ceptions caught 
a590: 66 72 6f 6d 20 75 73 65 72 2d 70 72 6f 76 69 64  from user-provid
a5a0: 65 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6d 61  ed..      /// ma
a5b0: 6e 61 67 65 64 20 63 6f 64 65 20 63 61 6c 6c 65  naged code calle
a5c0: 64 20 66 72 6f 6d 20 6e 61 74 69 76 65 20 63 6f  d from native co
a5d0: 64 65 20 76 69 61 20 64 65 6c 65 67 61 74 65 73  de via delegates
a5e0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
a5f0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c  ummary>..      L
a600: 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70 74  ogCallbackExcept
a610: 69 6f 6e 20 3d 20 30 78 38 2c 0d 0a 0d 0a 20 20  ion = 0x8,....  
a620: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
a630: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61  >..      /// Ena
a640: 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20 62  ble logging of b
a650: 61 63 6b 75 70 20 41 50 49 20 65 72 72 6f 72 73  ackup API errors
a660: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
a670: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c  ummary>..      L
a680: 6f 67 42 61 63 6b 75 70 20 3d 20 30 78 31 30 2c  ogBackup = 0x10,
a690: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
a6a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
a6b0: 2f 2f 20 53 6b 69 70 20 61 64 64 69 6e 67 20 74  // Skip adding t
a6c0: 68 65 20 65 78 74 65 6e 73 69 6f 6e 20 66 75 6e  he extension fun
a6d0: 63 74 69 6f 6e 73 20 70 72 6f 76 69 64 65 64 20  ctions provided 
a6e0: 62 79 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20  by the native.. 
a6f0: 20 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 6f 70       /// interop
a700: 20 61 73 73 65 6d 62 6c 79 2e 0d 0a 20 20 20 20   assembly...    
a710: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
a720: 0d 0a 20 20 20 20 20 20 4e 6f 45 78 74 65 6e 73  ..      NoExtens
a730: 69 6f 6e 46 75 6e 63 74 69 6f 6e 73 20 3d 20 30  ionFunctions = 0
a740: 78 32 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  x20,....      //
a750: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
a760: 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62 69 6e 64     /// When bind
a770: 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20 76 61  ing parameter va
a780: 6c 75 65 73 20 77 69 74 68 20 74 68 65 20 3c 73  lues with the <s
a790: 65 65 20 63 72 65 66 3d 22 55 49 6e 74 33 32 22  ee cref="UInt32"
a7a0: 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74   />..      /// t
a7b0: 79 70 65 2c 20 75 73 65 20 74 68 65 20 69 6e 74  ype, use the int
a7c0: 65 72 6f 70 20 6d 65 74 68 6f 64 20 74 68 61 74  erop method that
a7d0: 20 61 63 63 65 70 74 73 20 61 6e 20 3c 73 65 65   accepts an <see
a7e0: 20 63 72 65 66 3d 22 49 6e 74 36 34 22 20 2f 3e   cref="Int64" />
a7f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 76 61 6c 75  ..      /// valu
a800: 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  e...      /// </
a810: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
a820: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
a830: 34 20 3d 20 30 78 34 30 2c 0d 0a 0d 0a 20 20 20  4 = 0x40,....   
a840: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
a850: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e  ..      /// When
a860: 20 62 69 6e 64 69 6e 67 20 70 61 72 61 6d 65 74   binding paramet
a870: 65 72 20 76 61 6c 75 65 73 2c 20 61 6c 77 61 79  er values, alway
a880: 73 20 62 69 6e 64 20 74 68 65 6d 20 61 73 20 74  s bind them as t
a890: 68 6f 75 67 68 20 74 68 65 79 20 77 65 72 65 0d  hough they were.
a8a0: 0a 20 20 20 20 20 20 2f 2f 2f 20 70 6c 61 69 6e  .      /// plain
a8b0: 20 74 65 78 74 20 28 69 2e 65 2e 20 6e 6f 20 6e   text (i.e. no n
a8c0: 75 6d 65 72 69 63 2c 20 64 61 74 65 2f 74 69 6d  umeric, date/tim
a8d0: 65 2c 20 6f 72 20 6f 74 68 65 72 20 63 6f 6e 76  e, or other conv
a8e0: 65 72 73 69 6f 6e 73 20 73 68 6f 75 6c 64 0d 0a  ersions should..
a8f0: 20 20 20 20 20 20 2f 2f 2f 20 62 65 20 61 74 74        /// be att
a900: 65 6d 70 74 65 64 29 2e 0d 0a 20 20 20 20 20 20  empted)...      
a910: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
a920: 20 20 20 20 20 20 42 69 6e 64 41 6c 6c 41 73 54        BindAllAsT
a930: 65 78 74 20 3d 20 30 78 38 30 2c 0d 0a 0d 0a 20  ext = 0x80,.... 
a940: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
a950: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68  y>..      /// Wh
a960: 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6c  en returning col
a970: 75 6d 6e 20 76 61 6c 75 65 73 2c 20 61 6c 77 61  umn values, alwa
a980: 79 73 20 72 65 74 75 72 6e 20 74 68 65 6d 20 61  ys return them a
a990: 73 20 74 68 6f 75 67 68 20 74 68 65 79 20 77 65  s though they we
a9a0: 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70 6c  re..      /// pl
a9b0: 61 69 6e 20 74 65 78 74 20 28 69 2e 65 2e 20 6e  ain text (i.e. n
a9c0: 6f 20 6e 75 6d 65 72 69 63 2c 20 64 61 74 65 2f  o numeric, date/
a9d0: 74 69 6d 65 2c 20 6f 72 20 6f 74 68 65 72 20 63  time, or other c
a9e0: 6f 6e 76 65 72 73 69 6f 6e 73 20 73 68 6f 75 6c  onversions shoul
a9f0: 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62 65 20  d..      /// be 
aa00: 61 74 74 65 6d 70 74 65 64 29 2e 0d 0a 20 20 20  attempted)...   
aa10: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
aa20: 3e 0d 0a 20 20 20 20 20 20 47 65 74 41 6c 6c 41  >..      GetAllA
aa30: 73 54 65 78 74 20 3d 20 30 78 31 30 30 2c 0d 0a  sText = 0x100,..
aa40: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
aa50: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
aa60: 20 50 72 65 76 65 6e 74 20 74 68 69 73 20 3c 73   Prevent this <s
aa70: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
aa80: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62  onnection" /> ob
aa90: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 66 72  ject instance fr
aaa0: 6f 6d 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6c 6f  om..      /// lo
aab0: 61 64 69 6e 67 20 65 78 74 65 6e 73 69 6f 6e 73  ading extensions
aac0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
aad0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e  ummary>..      N
aae0: 6f 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 20 3d  oLoadExtension =
aaf0: 20 30 78 32 30 30 2c 0d 0a 0d 0a 23 69 66 20 49   0x200,....#if I
ab00: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
ab10: 41 42 4c 45 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ABLE..      /// 
ab20: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
ab30: 20 2f 2f 2f 20 50 72 65 76 65 6e 74 20 74 68 69   /// Prevent thi
ab40: 73 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  s <see cref="SQL
ab50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
ab60: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
ab70: 65 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 2f 2f  e from..      //
ab80: 2f 20 63 72 65 61 74 69 6e 67 20 76 69 72 74 75  / creating virtu
ab90: 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 73  al table modules
aba0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
abb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e  ummary>..      N
abc0: 6f 43 72 65 61 74 65 4d 6f 64 75 6c 65 20 3d 20  oCreateModule = 
abd0: 30 78 34 30 30 2c 0d 0a 23 65 6e 64 69 66 0d 0a  0x400,..#endif..
abe0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
abf0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
ac00: 20 53 6b 69 70 20 62 69 6e 64 69 6e 67 20 61 6e   Skip binding an
ac10: 79 20 66 75 6e 63 74 69 6f 6e 73 20 70 72 6f 76  y functions prov
ac20: 69 64 65 64 20 62 79 20 6f 74 68 65 72 20 6d 61  ided by other ma
ac30: 6e 61 67 65 64 20 61 73 73 65 6d 62 6c 69 65 73  naged assemblies
ac40: 20 77 68 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f   when..      ///
ac50: 20 6f 70 65 6e 69 6e 67 20 74 68 65 20 63 6f 6e   opening the con
ac60: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 20 20  nection...      
ac70: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
ac80: 20 20 20 20 20 20 4e 6f 42 69 6e 64 46 75 6e 63        NoBindFunc
ac90: 74 69 6f 6e 73 20 3d 20 30 78 38 30 30 2c 0d 0a  tions = 0x800,..
aca0: 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
acb0: 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
acc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
acd0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 53 6b 69 70  ..      /// Skip
ace0: 20 73 65 74 74 69 6e 67 20 74 68 65 20 6c 6f 67   setting the log
acf0: 67 69 6e 67 20 72 65 6c 61 74 65 64 20 70 72 6f  ging related pro
ad00: 70 65 72 74 69 65 73 20 6f 66 20 74 68 65 0d 0a  perties of the..
ad10: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
ad20: 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75 6c  ref="SQLiteModul
ad30: 65 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  e" /> object ins
ad40: 74 61 6e 63 65 20 74 68 61 74 20 77 61 73 20 70  tance that was p
ad50: 61 73 73 65 64 20 74 6f 0d 0a 20 20 20 20 20 20  assed to..      
ad60: 2f 2f 2f 20 74 68 65 20 3c 73 65 65 20 63 72 65  /// the <see cre
ad70: 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
ad80: 69 6f 6e 2e 43 72 65 61 74 65 4d 6f 64 75 6c 65  ion.CreateModule
ad90: 22 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20  " /> method...  
ada0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
adb0: 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 4c 6f 67 4d  y>..      NoLogM
adc0: 6f 64 75 6c 65 20 3d 20 30 78 31 30 30 30 2c 0d  odule = 0x1000,.
add0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
ade0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
adf0: 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67  / Enable logging
ae00: 20 6f 66 20 61 6c 6c 20 76 69 72 74 75 61 6c 20   of all virtual 
ae10: 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 65 72 72  table module err
ae20: 6f 72 73 20 73 65 65 6e 20 62 79 20 74 68 65 0d  ors seen by the.
ae30: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
ae40: 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64 75  cref="SQLiteModu
ae50: 6c 65 2e 53 65 74 54 61 62 6c 65 45 72 72 6f 72  le.SetTableError
ae60: 28 49 6e 74 50 74 72 2c 53 74 72 69 6e 67 29 22  (IntPtr,String)"
ae70: 20 2f 3e 20 6d 65 74 68 6f 64 2e 0d 0a 20 20 20   /> method...   
ae80: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
ae90: 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 4d 6f 64 75  >..      LogModu
aea0: 6c 65 45 72 72 6f 72 20 3d 20 30 78 32 30 30 30  leError = 0x2000
aeb0: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
aec0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
aed0: 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69  /// Enable loggi
aee0: 6e 67 20 6f 66 20 63 65 72 74 61 69 6e 20 76 69  ng of certain vi
aef0: 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75  rtual table modu
af00: 6c 65 20 65 78 63 65 70 74 69 6f 6e 73 20 74 68  le exceptions th
af10: 61 74 20 63 61 6e 6e 6f 74 0d 0a 20 20 20 20 20  at cannot..     
af20: 20 2f 2f 2f 20 62 65 20 65 61 73 69 6c 79 20 64   /// be easily d
af30: 69 73 63 6f 76 65 72 65 64 20 76 69 61 20 6f 74  iscovered via ot
af40: 68 65 72 20 6d 65 61 6e 73 2e 0d 0a 20 20 20 20  her means...    
af50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
af60: 0d 0a 20 20 20 20 20 20 4c 6f 67 4d 6f 64 75 6c  ..      LogModul
af70: 65 45 78 63 65 70 74 69 6f 6e 20 3d 20 30 78 34  eException = 0x4
af80: 30 30 30 2c 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a  000,..#endif....
af90: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
afa0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45  ry>..      /// E
afb0: 6e 61 62 6c 65 20 74 72 61 63 69 6e 67 20 6f 66  nable tracing of
afc0: 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 69 6d 70   potentially imp
afd0: 6f 72 74 61 6e 74 20 5b 6e 6f 6e 2d 66 61 74 61  ortant [non-fata
afe0: 6c 5d 20 65 72 72 6f 72 20 63 6f 6e 64 69 74 69  l] error conditi
aff0: 6f 6e 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74  ons..      /// t
b000: 68 61 74 20 63 61 6e 6e 6f 74 20 62 65 20 65 61  hat cannot be ea
b010: 73 69 6c 79 20 72 65 70 6f 72 74 65 64 20 74 68  sily reported th
b020: 72 6f 75 67 68 20 6f 74 68 65 72 20 6d 65 61 6e  rough other mean
b030: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
b040: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
b050: 54 72 61 63 65 57 61 72 6e 69 6e 67 20 3d 20 30  TraceWarning = 0
b060: 78 38 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  x8000,....      
b070: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b080: 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62 69       /// When bi
b090: 6e 64 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20  nding parameter 
b0a0: 76 61 6c 75 65 73 2c 20 61 6c 77 61 79 73 20 75  values, always u
b0b0: 73 65 20 74 68 65 20 69 6e 76 61 72 69 61 6e 74  se the invariant
b0c0: 20 63 75 6c 74 75 72 65 20 77 68 65 6e 0d 0a 20   culture when.. 
b0d0: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74       /// convert
b0e0: 69 6e 67 20 74 68 65 69 72 20 76 61 6c 75 65 73  ing their values
b0f0: 20 66 72 6f 6d 20 73 74 72 69 6e 67 73 2e 0d 0a   from strings...
b100: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
b110: 61 72 79 3e 0d 0a 20 20 20 20 20 20 43 6f 6e 76  ary>..      Conv
b120: 65 72 74 49 6e 76 61 72 69 61 6e 74 54 65 78 74  ertInvariantText
b130: 20 3d 20 30 78 31 30 30 30 30 2c 0d 0a 0d 0a 20   = 0x10000,.... 
b140: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
b150: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68  y>..      /// Wh
b160: 65 6e 20 62 69 6e 64 69 6e 67 20 70 61 72 61 6d  en binding param
b170: 65 74 65 72 20 76 61 6c 75 65 73 2c 20 61 6c 77  eter values, alw
b180: 61 79 73 20 75 73 65 20 74 68 65 20 69 6e 76 61  ays use the inva
b190: 72 69 61 6e 74 20 63 75 6c 74 75 72 65 20 77 68  riant culture wh
b1a0: 65 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63 6f  en..      /// co
b1b0: 6e 76 65 72 74 69 6e 67 20 74 68 65 69 72 20 76  nverting their v
b1c0: 61 6c 75 65 73 20 74 6f 20 73 74 72 69 6e 67 73  alues to strings
b1d0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
b1e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 42  ummary>..      B
b1f0: 69 6e 64 49 6e 76 61 72 69 61 6e 74 54 65 78 74  indInvariantText
b200: 20 3d 20 30 78 32 30 30 30 30 2c 0d 0a 0d 0a 20   = 0x20000,.... 
b210: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
b220: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 44 69  y>..      /// Di
b230: 73 61 62 6c 65 20 75 73 69 6e 67 20 74 68 65 20  sable using the 
b240: 63 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 20  connection pool 
b250: 62 79 20 64 65 66 61 75 6c 74 2e 20 20 49 66 20  by default.  If 
b260: 74 68 65 20 22 50 6f 6f 6c 69 6e 67 22 0d 0a 20  the "Pooling".. 
b270: 20 20 20 20 20 2f 2f 2f 20 63 6f 6e 6e 65 63 74       /// connect
b280: 69 6f 6e 20 73 74 72 69 6e 67 20 70 72 6f 70 65  ion string prope
b290: 72 74 79 20 69 73 20 73 70 65 63 69 66 69 65 64  rty is specified
b2a0: 2c 20 69 74 73 20 76 61 6c 75 65 20 77 69 6c 6c  , its value will
b2b0: 20 6f 76 65 72 72 69 64 65 0d 0a 20 20 20 20 20   override..     
b2c0: 20 2f 2f 2f 20 74 68 69 73 20 66 6c 61 67 2e 20   /// this flag. 
b2d0: 20 54 68 65 20 70 72 65 63 69 73 65 20 6f 75 74   The precise out
b2e0: 63 6f 6d 65 20 6f 66 20 63 6f 6d 62 69 6e 69 6e  come of combinin
b2f0: 67 20 74 68 69 73 20 66 6c 61 67 20 77 69 74 68  g this flag with
b300: 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   the..      /// 
b310: 3c 73 65 65 20 63 72 65 66 3d 22 55 73 65 43 6f  <see cref="UseCo
b320: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 22 20 2f 3e  nnectionPool" />
b330: 20 66 6c 61 67 20 69 73 20 75 6e 73 70 65 63 69   flag is unspeci
b340: 66 69 65 64 3b 20 68 6f 77 65 76 65 72 2c 0d 0a  fied; however,..
b350: 20 20 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 66        /// one of
b360: 20 74 68 65 20 66 6c 61 67 73 20 77 69 6c 6c 20   the flags will 
b370: 62 65 20 69 6e 20 65 66 66 65 63 74 2e 0d 0a 20  be in effect... 
b380: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
b390: 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 43 6f 6e  ry>..      NoCon
b3a0: 6e 65 63 74 69 6f 6e 50 6f 6f 6c 20 3d 20 30 78  nectionPool = 0x
b3b0: 34 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  40000,....      
b3c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b3d0: 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20       /// Enable 
b3e0: 75 73 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63  using the connec
b3f0: 74 69 6f 6e 20 70 6f 6f 6c 20 62 79 20 64 65 66  tion pool by def
b400: 61 75 6c 74 2e 20 20 49 66 20 74 68 65 20 22 50  ault.  If the "P
b410: 6f 6f 6c 69 6e 67 22 0d 0a 20 20 20 20 20 20 2f  ooling"..      /
b420: 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 73 74  // connection st
b430: 72 69 6e 67 20 70 72 6f 70 65 72 74 79 20 69 73  ring property is
b440: 20 73 70 65 63 69 66 69 65 64 2c 20 69 74 73 20   specified, its 
b450: 76 61 6c 75 65 20 77 69 6c 6c 20 6f 76 65 72 72  value will overr
b460: 69 64 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74  ide..      /// t
b470: 68 69 73 20 66 6c 61 67 2e 20 20 54 68 65 20 70  his flag.  The p
b480: 72 65 63 69 73 65 20 6f 75 74 63 6f 6d 65 20 6f  recise outcome o
b490: 66 20 63 6f 6d 62 69 6e 69 6e 67 20 74 68 69 73  f combining this
b4a0: 20 66 6c 61 67 20 77 69 74 68 20 74 68 65 0d 0a   flag with the..
b4b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
b4c0: 72 65 66 3d 22 4e 6f 43 6f 6e 6e 65 63 74 69 6f  ref="NoConnectio
b4d0: 6e 50 6f 6f 6c 22 20 2f 3e 20 66 6c 61 67 20 69  nPool" /> flag i
b4e0: 73 20 75 6e 73 70 65 63 69 66 69 65 64 3b 20 68  s unspecified; h
b4f0: 6f 77 65 76 65 72 2c 0d 0a 20 20 20 20 20 20 2f  owever,..      /
b500: 2f 2f 20 6f 6e 65 20 6f 66 20 74 68 65 20 66 6c  // one of the fl
b510: 61 67 73 20 77 69 6c 6c 20 62 65 20 69 6e 20 65  ags will be in e
b520: 66 66 65 63 74 2e 0d 0a 20 20 20 20 20 20 2f 2f  ffect...      //
b530: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b540: 20 20 20 20 55 73 65 43 6f 6e 6e 65 63 74 69 6f      UseConnectio
b550: 6e 50 6f 6f 6c 20 3d 20 30 78 38 30 30 30 30 2c  nPool = 0x80000,
b560: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
b570: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
b580: 2f 2f 20 45 6e 61 62 6c 65 20 75 73 69 6e 67 20  // Enable using 
b590: 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d  per-connection m
b5a0: 61 70 70 69 6e 67 73 20 62 65 74 77 65 65 6e 20  appings between 
b5b0: 74 79 70 65 20 6e 61 6d 65 73 20 61 6e 64 0d 0a  type names and..
b5c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
b5d0: 72 65 66 3d 22 44 62 54 79 70 65 22 20 2f 3e 20  ref="DbType" /> 
b5e0: 76 61 6c 75 65 73 2e 20 20 41 6c 73 6f 20 73 65  values.  Also se
b5f0: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f  e the..      ///
b600: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
b610: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 65  teConnection.Cle
b620: 61 72 54 79 70 65 4d 61 70 70 69 6e 67 73 22 20  arTypeMappings" 
b630: 2f 3e 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  />,..      /// <
b640: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b650: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 47 65 74 54 79  Connection.GetTy
b660: 70 65 4d 61 70 70 69 6e 67 73 22 20 2f 3e 2c 20  peMappings" />, 
b670: 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  and..      /// <
b680: 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65  see cref="SQLite
b690: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 41 64 64 54 79  Connection.AddTy
b6a0: 70 65 4d 61 70 70 69 6e 67 22 20 2f 3e 20 6d 65  peMapping" /> me
b6b0: 74 68 6f 64 73 2e 20 20 54 68 65 73 65 0d 0a 20  thods.  These.. 
b6c0: 20 20 20 20 20 2f 2f 2f 20 70 65 72 2d 63 6f 6e       /// per-con
b6d0: 6e 65 63 74 69 6f 6e 20 6d 61 70 70 69 6e 67 73  nection mappings
b6e0: 2c 20 77 68 65 6e 20 70 72 65 73 65 6e 74 2c 20  , when present, 
b6f0: 6f 76 65 72 72 69 64 65 20 74 68 65 20 63 6f 72  override the cor
b700: 72 65 73 70 6f 6e 64 69 6e 67 0d 0a 20 20 20 20  responding..    
b710: 20 20 2f 2f 2f 20 67 6c 6f 62 61 6c 20 6d 61 70    /// global map
b720: 70 69 6e 67 73 2e 0d 0a 20 20 20 20 20 20 2f 2f  pings...      //
b730: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
b740: 20 20 20 20 55 73 65 43 6f 6e 6e 65 63 74 69 6f      UseConnectio
b750: 6e 54 79 70 65 73 20 3d 20 30 78 31 30 30 30 30  nTypes = 0x10000
b760: 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  0,....      /// 
b770: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
b780: 20 2f 2f 2f 20 44 69 73 61 62 6c 65 20 75 73 69   /// Disable usi
b790: 6e 67 20 67 6c 6f 62 61 6c 20 6d 61 70 70 69 6e  ng global mappin
b7a0: 67 73 20 62 65 74 77 65 65 6e 20 74 79 70 65 20  gs between type 
b7b0: 6e 61 6d 65 73 20 61 6e 64 0d 0a 20 20 20 20 20  names and..     
b7c0: 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22   /// <see cref="
b7d0: 44 62 54 79 70 65 22 20 2f 3e 20 76 61 6c 75 65  DbType" /> value
b7e0: 73 2e 20 20 54 68 69 73 20 6d 61 79 20 62 65 20  s.  This may be 
b7f0: 75 73 65 66 75 6c 20 69 6e 20 73 6f 6d 65 20 76  useful in some v
b800: 65 72 79 20 6e 61 72 72 6f 77 0d 0a 20 20 20 20  ery narrow..    
b810: 20 20 2f 2f 2f 20 63 61 73 65 73 3b 20 68 6f 77    /// cases; how
b820: 65 76 65 72 2c 20 69 66 20 74 68 65 72 65 20 61  ever, if there a
b830: 72 65 20 6e 6f 20 70 65 72 2d 63 6f 6e 6e 65 63  re no per-connec
b840: 74 69 6f 6e 20 74 79 70 65 20 6d 61 70 70 69 6e  tion type mappin
b850: 67 73 2c 20 74 68 65 0d 0a 20 20 20 20 20 20 2f  gs, the..      /
b860: 2f 2f 20 66 61 6c 6c 62 61 63 6b 20 64 65 66 61  // fallback defa
b870: 75 6c 74 73 20 77 69 6c 6c 20 62 65 20 75 73 65  ults will be use
b880: 64 20 66 6f 72 20 62 6f 74 68 20 74 79 70 65 20  d for both type 
b890: 6e 61 6d 65 73 20 61 6e 64 20 74 68 65 69 72 0d  names and their.
b8a0: 0a 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  .      /// assoc
b8b0: 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66 3d  iated <see cref=
b8c0: 22 44 62 54 79 70 65 22 20 2f 3e 20 76 61 6c 75  "DbType" /> valu
b8d0: 65 73 2e 20 20 54 68 65 72 65 66 6f 72 65 2c 20  es.  Therefore, 
b8e0: 75 73 65 20 6f 66 20 74 68 69 73 20 66 6c 61 67  use of this flag
b8f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 6e  ..      /// is n
b900: 6f 74 20 72 65 63 6f 6d 6d 65 6e 64 65 64 2e 0d  ot recommended..
b910: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
b920: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 47  mary>..      NoG
b930: 6c 6f 62 61 6c 54 79 70 65 73 20 3d 20 30 78 32  lobalTypes = 0x2
b940: 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  00000,....      
b950: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
b960: 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 74 68       /// When th
b970: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
b980: 69 74 65 44 61 74 61 52 65 61 64 65 72 2e 48 61  iteDataReader.Ha
b990: 73 52 6f 77 73 22 20 2f 3e 20 70 72 6f 70 65 72  sRows" /> proper
b9a0: 74 79 20 69 73 20 75 73 65 64 2c 20 69 74 0d 0a  ty is used, it..
b9b0: 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75 6c 64        /// should
b9c0: 20 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f   return non-zero
b9d0: 20 69 66 20 74 68 65 72 65 20 77 65 72 65 20 65   if there were e
b9e0: 76 65 72 20 61 6e 79 20 72 6f 77 73 20 69 6e 20  ver any rows in 
b9f0: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 0d 0a  the associated..
ba00: 20 20 20 20 20 20 2f 2f 2f 20 72 65 73 75 6c 74        /// result
ba10: 20 73 65 74 73 2e 0d 0a 20 20 20 20 20 20 2f 2f   sets...      //
ba20: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
ba30: 20 20 20 20 53 74 69 63 6b 79 48 61 73 52 6f 77      StickyHasRow
ba40: 73 20 3d 20 30 78 34 30 30 30 30 30 2c 0d 0a 0d  s = 0x400000,...
ba50: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
ba60: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
ba70: 45 6e 61 62 6c 65 20 22 73 74 72 69 63 74 22 20  Enable "strict" 
ba80: 74 72 61 6e 73 61 63 74 69 6f 6e 20 65 6e 6c 69  transaction enli
ba90: 73 74 6d 65 6e 74 20 73 65 6d 61 6e 74 69 63 73  stment semantics
baa0: 2e 20 20 53 65 74 74 69 6e 67 20 74 68 69 73 20  .  Setting this 
bab0: 66 6c 61 67 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  flag..      /// 
bac0: 77 69 6c 6c 20 63 61 75 73 65 20 61 6e 20 65 78  will cause an ex
bad0: 63 65 70 74 69 6f 6e 20 74 6f 20 62 65 20 74 68  ception to be th
bae0: 72 6f 77 6e 20 69 66 20 61 6e 20 61 74 74 65 6d  rown if an attem
baf0: 70 74 20 69 73 20 6d 61 64 65 20 74 6f 20 65 6e  pt is made to en
bb00: 6c 69 73 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  list..      /// 
bb10: 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  in a transaction
bb20: 20 77 69 74 68 20 61 6e 20 75 6e 61 76 61 69 6c   with an unavail
bb30: 61 62 6c 65 20 6f 72 20 75 6e 73 75 70 70 6f 72  able or unsuppor
bb40: 74 65 64 20 69 73 6f 6c 61 74 69 6f 6e 20 6c 65  ted isolation le
bb50: 76 65 6c 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  vel...      /// 
bb60: 49 6e 20 74 68 65 20 66 75 74 75 72 65 2c 20 6d  In the future, m
bb70: 6f 72 65 20 65 78 74 65 6e 73 69 76 65 20 63 68  ore extensive ch
bb80: 65 63 6b 73 20 6d 61 79 20 62 65 20 65 6e 61 62  ecks may be enab
bb90: 6c 65 64 20 62 79 20 74 68 69 73 20 66 6c 61 67  led by this flag
bba0: 20 61 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77   as..      /// w
bbb0: 65 6c 6c 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ell...      /// 
bbc0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
bbd0: 20 20 53 74 72 69 63 74 45 6e 6c 69 73 74 6d 65    StrictEnlistme
bbe0: 6e 74 20 3d 20 30 78 38 30 30 30 30 30 2c 0d 0a  nt = 0x800000,..
bbf0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
bc00: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
bc10: 20 45 6e 61 62 6c 65 20 6d 61 70 70 69 6e 67 20   Enable mapping 
bc20: 6f 66 20 75 6e 73 75 70 70 6f 72 74 65 64 20 74  of unsupported t
bc30: 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 6f 6c 61  ransaction isola
bc40: 74 69 6f 6e 20 6c 65 76 65 6c 73 20 74 6f 20 74  tion levels to t
bc50: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 63 6c  he..      /// cl
bc60: 6f 73 65 73 74 20 73 75 70 70 6f 72 74 65 64 20  osest supported 
bc70: 74 72 61 6e 73 61 63 74 69 6f 6e 20 69 73 6f 6c  transaction isol
bc80: 61 74 69 6f 6e 20 6c 65 76 65 6c 2e 0d 0a 20 20  ation level...  
bc90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
bca0: 79 3e 0d 0a 20 20 20 20 20 20 4d 61 70 49 73 6f  y>..      MapIso
bcb0: 6c 61 74 69 6f 6e 4c 65 76 65 6c 73 20 3d 20 30  lationLevels = 0
bcc0: 78 31 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20  x1000000,....   
bcd0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
bce0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e  ..      /// When
bcf0: 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6c 75 6d   returning colum
bd00: 6e 20 76 61 6c 75 65 73 2c 20 61 74 74 65 6d 70  n values, attemp
bd10: 74 20 74 6f 20 64 65 74 65 63 74 20 74 68 65 20  t to detect the 
bd20: 61 66 66 69 6e 69 74 79 20 6f 66 0d 0a 20 20 20  affinity of..   
bd30: 20 20 20 2f 2f 2f 20 74 65 78 74 75 61 6c 20 76     /// textual v
bd40: 61 6c 75 65 73 20 62 79 20 63 68 65 63 6b 69 6e  alues by checkin
bd50: 67 20 69 66 20 74 68 65 79 20 66 75 6c 6c 79 20  g if they fully 
bd60: 63 6f 6e 66 6f 72 6d 20 74 6f 20 74 68 6f 73 65  conform to those
bd70: 20 6f 66 20 74 68 65 0d 0a 20 20 20 20 20 20 2f   of the..      /
bd80: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 54 79  // <see cref="Ty
bd90: 70 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 22  peAffinity.Null"
bda0: 20 2f 3e 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   />,..      /// 
bdb0: 3c 73 65 65 20 63 72 65 66 3d 22 54 79 70 65 41  <see cref="TypeA
bdc0: 66 66 69 6e 69 74 79 2e 49 6e 74 36 34 22 20 2f  ffinity.Int64" /
bdd0: 3e 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  >,..      /// <s
bde0: 65 65 20 63 72 65 66 3d 22 54 79 70 65 41 66 66  ee cref="TypeAff
bdf0: 69 6e 69 74 79 2e 44 6f 75 62 6c 65 22 20 2f 3e  inity.Double" />
be00: 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6f 72 20  ,..      /// or 
be10: 3c 73 65 65 20 63 72 65 66 3d 22 54 79 70 65 41  <see cref="TypeA
be20: 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69 6d 65  ffinity.DateTime
be30: 22 20 2f 3e 20 74 79 70 65 73 2e 0d 0a 20 20 20  " /> types...   
be40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
be50: 3e 0d 0a 20 20 20 20 20 20 44 65 74 65 63 74 54  >..      DetectT
be60: 65 78 74 41 66 66 69 6e 69 74 79 20 3d 20 30 78  extAffinity = 0x
be70: 32 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20  2000000,....    
be80: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
be90: 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20  .      /// When 
bea0: 72 65 74 75 72 6e 69 6e 67 20 63 6f 6c 75 6d 6e  returning column
beb0: 20 76 61 6c 75 65 73 2c 20 61 74 74 65 6d 70 74   values, attempt
bec0: 20 74 6f 20 64 65 74 65 63 74 20 74 68 65 20 74   to detect the t
bed0: 79 70 65 20 6f 66 0d 0a 20 20 20 20 20 20 2f 2f  ype of..      //
bee0: 2f 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73 20  / string values 
bef0: 62 79 20 63 68 65 63 6b 69 6e 67 20 69 66 20 74  by checking if t
bf00: 68 65 79 20 66 75 6c 6c 79 20 63 6f 6e 66 6f 72  hey fully confor
bf10: 6d 20 74 6f 20 74 68 6f 73 65 20 6f 66 0d 0a 20  m to those of.. 
bf20: 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 3c 73 65       /// the <se
bf30: 65 20 63 72 65 66 3d 22 54 79 70 65 41 66 66 69  e cref="TypeAffi
bf40: 6e 69 74 79 2e 4e 75 6c 6c 22 20 2f 3e 2c 0d 0a  nity.Null" />,..
bf50: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
bf60: 72 65 66 3d 22 54 79 70 65 41 66 66 69 6e 69 74  ref="TypeAffinit
bf70: 79 2e 49 6e 74 36 34 22 20 2f 3e 2c 0d 0a 20 20  y.Int64" />,..  
bf80: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
bf90: 66 3d 22 54 79 70 65 41 66 66 69 6e 69 74 79 2e  f="TypeAffinity.
bfa0: 44 6f 75 62 6c 65 22 20 2f 3e 2c 0d 0a 20 20 20  Double" />,..   
bfb0: 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63     /// or <see c
bfc0: 72 65 66 3d 22 54 79 70 65 41 66 66 69 6e 69 74  ref="TypeAffinit
bfd0: 79 2e 44 61 74 65 54 69 6d 65 22 20 2f 3e 20 74  y.DateTime" /> t
bfe0: 79 70 65 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ypes...      ///
bff0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
c000: 20 20 20 44 65 74 65 63 74 53 74 72 69 6e 67 54     DetectStringT
c010: 79 70 65 20 3d 20 30 78 34 30 30 30 30 30 30 2c  ype = 0x4000000,
c020: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
c030: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
c040: 2f 2f 20 53 6b 69 70 20 71 75 65 72 79 69 6e 67  // Skip querying
c050: 20 72 75 6e 74 69 6d 65 20 63 6f 6e 66 69 67 75   runtime configu
c060: 72 61 74 69 6f 6e 20 73 65 74 74 69 6e 67 73 20  ration settings 
c070: 66 6f 72 20 75 73 65 20 62 79 20 74 68 65 0d 0a  for use by the..
c080: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63        /// <see c
c090: 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 76 65  ref="SQLiteConve
c0a0: 72 74 22 20 2f 3e 20 63 6c 61 73 73 2c 20 69 6e  rt" /> class, in
c0b0: 63 6c 75 64 69 6e 67 20 74 68 65 20 64 65 66 61  cluding the defa
c0c0: 75 6c 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ult..      /// <
c0d0: 73 65 65 20 63 72 65 66 3d 22 44 62 54 79 70 65  see cref="DbType
c0e0: 22 20 2f 3e 20 76 61 6c 75 65 20 61 6e 64 20 64  " /> value and d
c0f0: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
c100: 74 79 70 65 20 6e 61 6d 65 2e 0d 0a 20 20 20 20  type name...    
c110: 20 20 2f 2f 2f 20 3c 62 3e 4e 4f 54 45 3a 20 49    /// <b>NOTE: I
c120: 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  f the <see cref=
c130: 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
c140: 6e 2e 44 65 66 61 75 6c 74 44 62 54 79 70 65 22  n.DefaultDbType"
c150: 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 61   />..      /// a
c160: 6e 64 2f 6f 72 20 3c 73 65 65 20 63 72 65 66 3d  nd/or <see cref=
c170: 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f  "SQLiteConnectio
c180: 6e 2e 44 65 66 61 75 6c 74 54 79 70 65 4e 61 6d  n.DefaultTypeNam
c190: 65 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  e" />..      ///
c1a0: 20 70 72 6f 70 65 72 74 69 65 73 20 61 72 65 20   properties are 
c1b0: 6e 6f 74 20 73 65 74 20 65 78 70 6c 69 63 69 74  not set explicit
c1c0: 6c 79 20 6e 6f 72 20 73 65 74 20 76 69 61 20 74  ly nor set via t
c1d0: 68 65 69 72 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d  heir connection.
c1e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 73 74 72 69 6e  .      /// strin
c1f0: 67 20 70 72 6f 70 65 72 74 69 65 73 20 61 6e 64  g properties and
c200: 20 72 65 70 65 61 74 65 64 20 63 61 6c 6c 73 20   repeated calls 
c210: 74 6f 20 64 65 74 65 72 6d 69 6e 65 20 74 68 65  to determine the
c220: 73 65 20 72 75 6e 74 69 6d 65 0d 0a 20 20 20 20  se runtime..    
c230: 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61 74    /// configurat
c240: 69 6f 6e 20 73 65 74 74 69 6e 67 73 20 61 72 65  ion settings are
c250: 20 73 65 65 6e 20 74 6f 20 62 65 20 61 20 70 72   seen to be a pr
c260: 6f 62 6c 65 6d 2c 20 74 68 69 73 20 66 6c 61 67  oblem, this flag
c270: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75  ..      /// shou
c280: 6c 64 20 62 65 20 73 65 74 2e 3c 2f 62 3e 0d 0a  ld be set.</b>..
c290: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c2a0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 43 6f  ary>..      NoCo
c2b0: 6e 76 65 72 74 53 65 74 74 69 6e 67 73 20 3d 20  nvertSettings = 
c2c0: 30 78 38 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20  0x8000000,....  
c2d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
c2e0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65  >..      /// Whe
c2f0: 6e 20 62 69 6e 64 69 6e 67 20 70 61 72 61 6d 65  n binding parame
c300: 74 65 72 20 76 61 6c 75 65 73 20 77 69 74 68 20  ter values with 
c310: 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 44  the <see cref="D
c320: 61 74 65 54 69 6d 65 22 20 2f 3e 0d 0a 20 20 20  ateTime" />..   
c330: 20 20 20 2f 2f 2f 20 74 79 70 65 2c 20 74 61 6b     /// type, tak
c340: 65 20 74 68 65 69 72 20 3c 73 65 65 20 63 72 65  e their <see cre
c350: 66 3d 22 44 61 74 65 54 69 6d 65 4b 69 6e 64 22  f="DateTimeKind"
c360: 20 2f 3e 20 69 6e 74 6f 20 61 63 63 6f 75 6e 74   /> into account
c370: 20 61 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77   as..      /// w
c380: 65 6c 6c 20 61 73 20 74 68 61 74 20 6f 66 20 74  ell as that of t
c390: 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73  he associated <s
c3a0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
c3b0: 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 2e 0d 0a  onnection" />...
c3c0: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
c3d0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 42 69 6e 64  ary>..      Bind
c3e0: 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e 64  DateTimeWithKind
c3f0: 20 3d 20 30 78 31 30 30 30 30 30 30 30 2c 0d 0a   = 0x10000000,..
c400: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
c410: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
c420: 20 49 66 20 61 6e 20 65 78 63 65 70 74 69 6f 6e   If an exception
c430: 20 69 73 20 63 61 75 67 68 74 20 77 68 65 6e 20   is caught when 
c440: 72 61 69 73 69 6e 67 20 74 68 65 0d 0a 20 20 20  raising the..   
c450: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
c460: 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
c470: 6f 6e 2e 43 6f 6d 6d 69 74 22 20 2f 3e 20 65 76  on.Commit" /> ev
c480: 65 6e 74 2c 20 74 68 65 20 74 72 61 6e 73 61 63  ent, the transac
c490: 74 69 6f 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  tion..      /// 
c4a0: 73 68 6f 75 6c 64 20 62 65 20 72 6f 6c 6c 65 64  should be rolled
c4b0: 20 62 61 63 6b 2e 20 20 49 66 20 74 68 69 73 20   back.  If this 
c4c0: 69 73 20 6e 6f 74 20 73 70 65 63 69 66 69 65 64  is not specified
c4d0: 2c 20 74 68 65 20 74 72 61 6e 73 61 63 74 69 6f  , the transactio
c4e0: 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77 69 6c  n..      /// wil
c4f0: 6c 20 63 6f 6e 74 69 6e 75 65 20 74 68 65 20 63  l continue the c
c500: 6f 6d 6d 69 74 20 70 72 6f 63 65 73 73 20 69 6e  ommit process in
c510: 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 2f 2f  stead...      //
c520: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
c530: 20 20 20 20 52 6f 6c 6c 62 61 63 6b 4f 6e 45 78      RollbackOnEx
c540: 63 65 70 74 69 6f 6e 20 3d 20 30 78 32 30 30 30  ception = 0x2000
c550: 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  0000,....      /
c560: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
c570: 20 20 20 20 2f 2f 2f 20 49 66 20 61 6e 20 65 78      /// If an ex
c580: 63 65 70 74 69 6f 6e 20 69 73 20 63 61 75 67 68  ception is caugh
c590: 74 20 77 68 65 6e 20 72 61 69 73 69 6e 67 20 74  t when raising t
c5a0: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
c5b0: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
c5c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 41 75 74 68 6f 72  onnection.Author
c5d0: 69 7a 65 22 20 2f 3e 20 65 76 65 6e 74 2c 20 74  ize" /> event, t
c5e0: 68 65 20 61 63 74 69 6f 6e 20 73 68 6f 75 6c 64  he action should
c5f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f 75  ..      /// shou
c600: 6c 64 20 62 65 20 64 65 6e 69 65 64 2e 20 20 49  ld be denied.  I
c610: 66 20 74 68 69 73 20 69 73 20 6e 6f 74 20 73 70  f this is not sp
c620: 65 63 69 66 69 65 64 2c 20 74 68 65 20 61 63 74  ecified, the act
c630: 69 6f 6e 20 77 69 6c 6c 20 62 65 0d 0a 20 20 20  ion will be..   
c640: 20 20 20 2f 2f 2f 20 61 6c 6c 6f 77 65 64 20 69     /// allowed i
c650: 6e 73 74 65 61 64 2e 0d 0a 20 20 20 20 20 20 2f  nstead...      /
c660: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
c670: 20 20 20 20 20 44 65 6e 79 4f 6e 45 78 63 65 70       DenyOnExcep
c680: 74 69 6f 6e 20 3d 20 30 78 34 30 30 30 30 30 30  tion = 0x4000000
c690: 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  0,....      /// 
c6a0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
c6b0: 20 2f 2f 2f 20 49 66 20 61 6e 20 65 78 63 65 70   /// If an excep
c6c0: 74 69 6f 6e 20 69 73 20 63 61 75 67 68 74 20 77  tion is caught w
c6d0: 68 65 6e 20 72 61 69 73 69 6e 67 20 74 68 65 0d  hen raising the.
c6e0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
c6f0: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
c700: 65 63 74 69 6f 6e 2e 50 72 6f 67 72 65 73 73 22  ection.Progress"
c710: 20 2f 3e 20 65 76 65 6e 74 2c 20 74 68 65 20 6f   /> event, the o
c720: 70 65 72 61 74 69 6f 6e 0d 0a 20 20 20 20 20 20  peration..      
c730: 2f 2f 2f 20 73 68 6f 75 6c 64 20 62 65 20 69 6e  /// should be in
c740: 74 65 72 72 75 70 74 65 64 2e 20 20 49 66 20 74  terrupted.  If t
c750: 68 69 73 20 69 73 20 6e 6f 74 20 73 70 65 63 69  his is not speci
c760: 66 69 65 64 2c 20 74 68 65 20 6f 70 65 72 61 74  fied, the operat
c770: 69 6f 6e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 77  ion..      /// w
c780: 69 6c 6c 20 73 69 6d 70 6c 79 20 63 6f 6e 74 69  ill simply conti
c790: 6e 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  nue...      /// 
c7a0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
c7b0: 20 20 49 6e 74 65 72 72 75 70 74 4f 6e 45 78 63    InterruptOnExc
c7c0: 65 70 74 69 6f 6e 20 3d 20 30 78 38 30 30 30 30  eption = 0x80000
c7d0: 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  000,....      //
c7e0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
c7f0: 20 20 20 2f 2f 2f 20 41 74 74 65 6d 70 74 20 74     /// Attempt t
c800: 6f 20 75 6e 62 69 6e 64 20 61 6c 6c 20 66 75 6e  o unbind all fun
c810: 63 74 69 6f 6e 73 20 70 72 6f 76 69 64 65 64 20  ctions provided 
c820: 62 79 20 6f 74 68 65 72 20 6d 61 6e 61 67 65 64  by other managed
c830: 20 61 73 73 65 6d 62 6c 69 65 73 0d 0a 20 20 20   assemblies..   
c840: 20 20 20 2f 2f 2f 20 77 68 65 6e 20 63 6c 6f 73     /// when clos
c850: 69 6e 67 20 74 68 65 20 63 6f 6e 6e 65 63 74 69  ing the connecti
c860: 6f 6e 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  on...      /// <
c870: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
c880: 20 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73   UnbindFunctions
c890: 4f 6e 43 6c 6f 73 65 20 3d 20 30 78 31 30 30 30  OnClose = 0x1000
c8a0: 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  00000,....      
c8b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
c8c0: 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 72 65       /// When re
c8d0: 74 75 72 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 76  turning column v
c8e0: 61 6c 75 65 73 20 61 73 20 61 20 3c 73 65 65 20  alues as a <see 
c8f0: 63 72 65 66 3d 22 53 74 72 69 6e 67 22 20 2f 3e  cref="String" />
c900: 2c 20 73 6b 69 70 0d 0a 20 20 20 20 20 20 2f 2f  , skip..      //
c910: 2f 20 76 65 72 69 66 79 69 6e 67 20 74 68 65 69  / verifying thei
c920: 72 20 61 66 66 69 6e 69 74 79 2e 0d 0a 20 20 20  r affinity...   
c930: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
c940: 3e 0d 0a 20 20 20 20 20 20 4e 6f 56 65 72 69 66  >..      NoVerif
c950: 79 54 65 78 74 41 66 66 69 6e 69 74 79 20 3d 20  yTextAffinity = 
c960: 30 78 32 30 30 30 30 30 30 30 30 2c 0d 0a 0d 0a  0x200000000,....
c970: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
c980: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45  ry>..      /// E
c990: 6e 61 62 6c 65 20 75 73 69 6e 67 20 70 65 72 2d  nable using per-
c9a0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6d 61 70 70 69  connection mappi
c9b0: 6e 67 73 20 62 65 74 77 65 65 6e 20 74 79 70 65  ngs between type
c9c0: 20 6e 61 6d 65 73 20 61 6e 64 0d 0a 20 20 20 20   names and..    
c9d0: 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d    /// <see cref=
c9e0: 22 53 51 4c 69 74 65 42 69 6e 64 56 61 6c 75 65  "SQLiteBindValue
c9f0: 43 61 6c 6c 62 61 63 6b 22 20 2f 3e 20 76 61 6c  Callback" /> val
ca00: 75 65 73 2e 20 20 41 6c 73 6f 20 73 65 65 20 74  ues.  Also see t
ca10: 68 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  he..      /// <s
ca20: 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43  ee cref="SQLiteC
ca30: 6f 6e 6e 65 63 74 69 6f 6e 2e 43 6c 65 61 72 54  onnection.ClearT
ca40: 79 70 65 43 61 6c 6c 62 61 63 6b 73 22 20 2f 3e  ypeCallbacks" />
ca50: 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65  ,..      /// <se
ca60: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
ca70: 6e 6e 65 63 74 69 6f 6e 2e 54 72 79 47 65 74 54  nnection.TryGetT
ca80: 79 70 65 43 61 6c 6c 62 61 63 6b 73 22 20 2f 3e  ypeCallbacks" />
ca90: 2c 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f 2f  , and..      ///
caa0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
cab0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53 65 74  teConnection.Set
cac0: 54 79 70 65 43 61 6c 6c 62 61 63 6b 73 22 20 2f  TypeCallbacks" /
cad0: 3e 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20  > methods...    
cae0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
caf0: 0d 0a 20 20 20 20 20 20 55 73 65 43 6f 6e 6e 65  ..      UseConne
cb00: 63 74 69 6f 6e 42 69 6e 64 56 61 6c 75 65 43 61  ctionBindValueCa
cb10: 6c 6c 62 61 63 6b 73 20 3d 20 30 78 34 30 30 30  llbacks = 0x4000
cb20: 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  00000,....      
cb30: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
cb40: 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20       /// Enable 
cb50: 75 73 69 6e 67 20 70 65 72 2d 63 6f 6e 6e 65 63  using per-connec
cb60: 74 69 6f 6e 20 6d 61 70 70 69 6e 67 73 20 62 65  tion mappings be
cb70: 74 77 65 65 6e 20 74 79 70 65 20 6e 61 6d 65 73  tween type names
cb80: 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20   and..      /// 
cb90: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
cba0: 65 52 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61  eReadValueCallba
cbb0: 63 6b 22 20 2f 3e 20 76 61 6c 75 65 73 2e 20 20  ck" /> values.  
cbc0: 41 6c 73 6f 20 73 65 65 20 74 68 65 0d 0a 20 20  Also see the..  
cbd0: 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65      /// <see cre
cbe0: 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  f="SQLiteConnect
cbf0: 69 6f 6e 2e 43 6c 65 61 72 54 79 70 65 43 61 6c  ion.ClearTypeCal
cc00: 6c 62 61 63 6b 73 22 20 2f 3e 2c 0d 0a 20 20 20  lbacks" />,..   
cc10: 20 20 20 2f 2f 2f 20 3c 73 65 65 20 63 72 65 66     /// <see cref
cc20: 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
cc30: 6f 6e 2e 54 72 79 47 65 74 54 79 70 65 43 61 6c  on.TryGetTypeCal
cc40: 6c 62 61 63 6b 73 22 20 2f 3e 2c 20 61 6e 64 0d  lbacks" />, and.
cc50: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 65 65 20  .      /// <see 
cc60: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
cc70: 65 63 74 69 6f 6e 2e 53 65 74 54 79 70 65 43 61  ection.SetTypeCa
cc80: 6c 6c 62 61 63 6b 73 22 20 2f 3e 20 6d 65 74 68  llbacks" /> meth
cc90: 6f 64 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ods...      /// 
cca0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ccb0: 20 20 55 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 52    UseConnectionR
ccc0: 65 61 64 56 61 6c 75 65 43 61 6c 6c 62 61 63 6b  eadValueCallback
ccd0: 73 20 3d 20 30 78 38 30 30 30 30 30 30 30 30 2c  s = 0x800000000,
cce0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
ccf0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
cd00: 2f 2f 20 49 66 20 74 68 65 20 64 61 74 61 62 61  // If the databa
cd10: 73 65 20 74 79 70 65 20 6e 61 6d 65 20 68 61 73  se type name has
cd20: 20 6e 6f 74 20 62 65 65 6e 20 65 78 70 6c 69 63   not been explic
cd30: 69 74 6c 79 20 73 65 74 20 66 6f 72 20 74 68 65  itly set for the
cd40: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61  ..      /// para
cd50: 6d 65 74 65 72 20 73 70 65 63 69 66 69 65 64 2c  meter specified,
cd60: 20 66 61 6c 6c 62 61 63 6b 20 74 6f 20 75 73 69   fallback to usi
cd70: 6e 67 20 74 68 65 20 70 61 72 61 6d 65 74 65 72  ng the parameter
cd80: 20 6e 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f   name...      //
cd90: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
cda0: 20 20 20 20 55 73 65 50 61 72 61 6d 65 74 65 72      UseParameter
cdb0: 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d 65 20  NameForTypeName 
cdc0: 3d 20 30 78 31 30 30 30 30 30 30 30 30 30 2c 0d  = 0x1000000000,.
cdd0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
cde0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
cdf0: 2f 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73  / If the databas
ce00: 65 20 74 79 70 65 20 6e 61 6d 65 20 68 61 73 20  e type name has 
ce10: 6e 6f 74 20 62 65 65 6e 20 65 78 70 6c 69 63 69  not been explici
ce20: 74 6c 79 20 73 65 74 20 66 6f 72 20 74 68 65 0d  tly set for the.
ce30: 0a 20 20 20 20 20 20 2f 2f 2f 20 70 61 72 61 6d  .      /// param
ce40: 65 74 65 72 20 73 70 65 63 69 66 69 65 64 2c 20  eter specified, 
ce50: 66 61 6c 6c 62 61 63 6b 20 74 6f 20 75 73 69 6e  fallback to usin
ce60: 67 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  g the database t
ce70: 79 70 65 20 6e 61 6d 65 0d 0a 20 20 20 20 20 20  ype name..      
ce80: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
ce90: 69 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65  ith the <see cre
cea0: 66 3d 22 44 62 54 79 70 65 22 20 2f 3e 20 76 61  f="DbType" /> va
ceb0: 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  lue...      /// 
cec0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ced0: 20 20 55 73 65 50 61 72 61 6d 65 74 65 72 44 62    UseParameterDb
cee0: 54 79 70 65 46 6f 72 54 79 70 65 4e 61 6d 65 20  TypeForTypeName 
cef0: 3d 20 30 78 32 30 30 30 30 30 30 30 30 30 2c 0d  = 0x2000000000,.
cf00: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
cf10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
cf20: 2f 20 57 68 65 6e 20 72 65 74 75 72 6e 69 6e 67  / When returning
cf30: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20   column values, 
cf40: 73 6b 69 70 20 76 65 72 69 66 79 69 6e 67 20 74  skip verifying t
cf50: 68 65 69 72 20 61 66 66 69 6e 69 74 79 2e 0d 0a  heir affinity...
cf60: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
cf70: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 56 65  ary>..      NoVe
cf80: 72 69 66 79 54 79 70 65 41 66 66 69 6e 69 74 79  rifyTypeAffinity
cf90: 20 3d 20 30 78 34 30 30 30 30 30 30 30 30 30 2c   = 0x4000000000,
cfa0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
cfb0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
cfc0: 2f 2f 20 41 6c 6c 6f 77 20 74 72 61 6e 73 61 63  // Allow transac
cfd0: 74 69 6f 6e 73 20 74 6f 20 62 65 20 6e 65 73 74  tions to be nest
cfe0: 65 64 2e 20 20 54 68 65 20 6f 75 74 65 72 6d 6f  ed.  The outermo
cff0: 73 74 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 73  st transaction s
d000: 74 69 6c 6c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  till..      /// 
d010: 63 6f 6e 74 72 6f 6c 73 20 77 68 65 74 68 65 72  controls whether
d020: 20 6f 72 20 6e 6f 74 20 61 6e 79 20 63 68 61 6e   or not any chan
d030: 67 65 73 20 61 72 65 20 75 6c 74 69 6d 61 74 65  ges are ultimate
d040: 6c 79 20 63 6f 6d 6d 69 74 74 65 64 20 6f 72 0d  ly committed or.
d050: 0a 20 20 20 20 20 20 2f 2f 2f 20 72 6f 6c 6c 65  .      /// rolle
d060: 64 20 62 61 63 6b 2e 20 20 41 6c 6c 20 6e 6f 6e  d back.  All non
d070: 2d 6f 75 74 65 72 6d 6f 73 74 20 74 72 61 6e 73  -outermost trans
d080: 61 63 74 69 6f 6e 73 20 61 72 65 20 69 6d 70 6c  actions are impl
d090: 65 6d 65 6e 74 65 64 20 75 73 69 6e 67 0d 0a 20  emented using.. 
d0a0: 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 53 41 56       /// the SAV
d0b0: 45 50 4f 49 4e 54 20 63 6f 6e 73 74 72 75 63 74  EPOINT construct
d0c0: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
d0d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 41  ummary>..      A
d0e0: 6c 6c 6f 77 4e 65 73 74 65 64 54 72 61 6e 73 61  llowNestedTransa
d0f0: 63 74 69 6f 6e 73 20 3d 20 30 78 38 30 30 30 30  ctions = 0x80000
d100: 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20 20  00000,....      
d110: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
d120: 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62 69       /// When bi
d130: 6e 64 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20  nding parameter 
d140: 76 61 6c 75 65 73 2c 20 61 6c 77 61 79 73 20 62  values, always b
d150: 69 6e 64 20 3c 73 65 65 20 63 72 65 66 3d 22 44  ind <see cref="D
d160: 65 63 69 6d 61 6c 22 20 2f 3e 0d 0a 20 20 20 20  ecimal" />..    
d170: 20 20 2f 2f 2f 20 76 61 6c 75 65 73 20 61 73 20    /// values as 
d180: 74 68 6f 75 67 68 20 74 68 65 79 20 77 65 72 65  though they were
d190: 20 70 6c 61 69 6e 20 74 65 78 74 20 28 69 2e 65   plain text (i.e
d1a0: 2e 20 6e 6f 74 20 3c 73 65 65 20 63 72 65 66 3d  . not <see cref=
d1b0: 22 44 65 63 69 6d 61 6c 22 20 2f 3e 2c 0d 0a 20  "Decimal" />,.. 
d1c0: 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 69       /// which i
d1d0: 73 20 74 68 65 20 6c 65 67 61 63 79 20 62 65 68  s the legacy beh
d1e0: 61 76 69 6f 72 29 2e 0d 0a 20 20 20 20 20 20 2f  avior)...      /
d1f0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d200: 20 20 20 20 20 42 69 6e 64 44 65 63 69 6d 61 6c       BindDecimal
d210: 41 73 54 65 78 74 20 3d 20 30 78 31 30 30 30 30  AsText = 0x10000
d220: 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20  000000,....     
d230: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d240: 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 72        /// When r
d250: 65 74 75 72 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20  eturning column 
d260: 76 61 6c 75 65 73 2c 20 61 6c 77 61 79 73 20 72  values, always r
d270: 65 74 75 72 6e 20 3c 73 65 65 20 63 72 65 66 3d  eturn <see cref=
d280: 22 44 65 63 69 6d 61 6c 22 20 2f 3e 0d 0a 20 20  "Decimal" />..  
d290: 20 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 20 61      /// values a
d2a0: 73 20 74 68 6f 75 67 68 20 74 68 65 79 20 77 65  s though they we
d2b0: 72 65 20 70 6c 61 69 6e 20 74 65 78 74 20 28 69  re plain text (i
d2c0: 2e 65 2e 20 6e 6f 74 20 3c 73 65 65 20 63 72 65  .e. not <see cre
d2d0: 66 3d 22 44 6f 75 62 6c 65 22 20 2f 3e 2c 0d 0a  f="Double" />,..
d2e0: 20 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20        /// which 
d2f0: 69 73 20 74 68 65 20 6c 65 67 61 63 79 20 62 65  is the legacy be
d300: 68 61 76 69 6f 72 29 2e 0d 0a 20 20 20 20 20 20  havior)...      
d310: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
d320: 20 20 20 20 20 20 47 65 74 44 65 63 69 6d 61 6c        GetDecimal
d330: 41 73 54 65 78 74 20 3d 20 30 78 32 30 30 30 30  AsText = 0x20000
d340: 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20  000000,....     
d350: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d360: 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62        /// When b
d370: 69 6e 64 69 6e 67 20 3c 73 65 65 20 63 72 65 66  inding <see cref
d380: 3d 22 44 65 63 69 6d 61 6c 22 20 2f 3e 20 70 61  ="Decimal" /> pa
d390: 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73 2c 20  rameter values, 
d3a0: 61 6c 77 61 79 73 20 75 73 65 0d 0a 20 20 20 20  always use..    
d3b0: 20 20 2f 2f 2f 20 74 68 65 20 69 6e 76 61 72 69    /// the invari
d3c0: 61 6e 74 20 63 75 6c 74 75 72 65 20 77 68 65 6e  ant culture when
d3d0: 20 63 6f 6e 76 65 72 74 69 6e 67 20 74 68 65 69   converting thei
d3e0: 72 20 76 61 6c 75 65 73 20 74 6f 20 73 74 72 69  r values to stri
d3f0: 6e 67 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ngs...      /// 
d400: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d410: 20 20 42 69 6e 64 49 6e 76 61 72 69 61 6e 74 44    BindInvariantD
d420: 65 63 69 6d 61 6c 20 3d 20 30 78 34 30 30 30 30  ecimal = 0x40000
d430: 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20  000000,....     
d440: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d450: 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 72        /// When r
d460: 65 74 75 72 6e 69 6e 67 20 3c 73 65 65 20 63 72  eturning <see cr
d470: 65 66 3d 22 44 65 63 69 6d 61 6c 22 20 2f 3e 20  ef="Decimal" /> 
d480: 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20 61  column values, a
d490: 6c 77 61 79 73 20 75 73 65 0d 0a 20 20 20 20 20  lways use..     
d4a0: 20 2f 2f 2f 20 74 68 65 20 69 6e 76 61 72 69 61   /// the invaria
d4b0: 6e 74 20 63 75 6c 74 75 72 65 20 77 68 65 6e 20  nt culture when 
d4c0: 63 6f 6e 76 65 72 74 69 6e 67 20 74 68 65 69 72  converting their
d4d0: 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73 74 72   values from str
d4e0: 69 6e 67 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ings...      ///
d4f0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
d500: 20 20 20 47 65 74 49 6e 76 61 72 69 61 6e 74 44     GetInvariantD
d510: 65 63 69 6d 61 6c 20 3d 20 30 78 38 30 30 30 30  ecimal = 0x80000
d520: 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20 20 20  000000,....     
d530: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
d540: 20 20 20 20 20 20 2f 2f 2f 20 3c 62 3e 45 58 50        /// <b>EXP
d550: 45 52 49 4d 45 4e 54 41 4c 3c 2f 62 3e 20 2d 2d  ERIMENTAL</b> --
d560: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ..      /// Enab
d570: 6c 65 20 77 61 69 74 69 6e 67 20 66 6f 72 20 74  le waiting for t
d580: 68 65 20 65 6e 6c 69 73 74 6d 65 6e 74 20 74 6f  he enlistment to
d590: 20 62 65 20 72 65 73 65 74 20 70 72 69 6f 72 20   be reset prior 
d5a0: 74 6f 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a 20  to attempting.. 
d5b0: 20 20 20 20 20 2f 2f 2f 20 74 6f 20 63 72 65 61       /// to crea
d5c0: 74 65 20 61 20 6e 65 77 20 65 6e 6c 69 73 74 6d  te a new enlistm
d5d0: 65 6e 74 2e 20 20 54 68 69 73 20 6d 61 79 20 62  ent.  This may b
d5e0: 65 20 6e 65 63 65 73 73 61 72 79 20 64 75 65 20  e necessary due 
d5f0: 74 6f 20 74 68 65 0d 0a 20 20 20 20 20 20 2f 2f  to the..      //
d600: 2f 20 73 65 6d 61 6e 74 69 63 73 20 75 73 65 64  / semantics used
d610: 20 62 79 20 64 69 73 74 72 69 62 75 74 65 64 20   by distributed 
d620: 74 72 61 6e 73 61 63 74 69 6f 6e 73 2c 20 77 68  transactions, wh
d630: 69 63 68 20 63 6f 6d 70 6c 65 74 65 0d 0a 20 20  ich complete..  
d640: 20 20 20 20 2f 2f 2f 20 61 73 79 6e 63 68 72 6f      /// asynchro
d650: 6e 6f 75 73 6c 79 2e 0d 0a 20 20 20 20 20 20 2f  nously...      /
d660: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d670: 20 20 20 20 20 57 61 69 74 46 6f 72 45 6e 6c 69       WaitForEnli
d680: 73 74 6d 65 6e 74 52 65 73 65 74 20 3d 20 30 78  stmentReset = 0x
d690: 31 30 30 30 30 30 30 30 30 30 30 30 2c 0d 0a 0d  100000000000,...
d6a0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
d6b0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
d6c0: 57 68 65 6e 20 72 65 74 75 72 6e 69 6e 67 20 3c  When returning <
d6d0: 73 65 65 20 63 72 65 66 3d 22 49 6e 74 36 34 22  see cref="Int64"
d6e0: 20 2f 3e 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65   /> column value
d6f0: 73 2c 20 61 6c 77 61 79 73 20 75 73 65 0d 0a 20  s, always use.. 
d700: 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 76       /// the inv
d710: 61 72 69 61 6e 74 20 63 75 6c 74 75 72 65 20 77  ariant culture w
d720: 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 74  hen converting t
d730: 68 65 69 72 20 76 61 6c 75 65 73 20 66 72 6f 6d  heir values from
d740: 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20 20   strings...     
d750: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
d760: 0a 20 20 20 20 20 20 47 65 74 49 6e 76 61 72 69  .      GetInvari
d770: 61 6e 74 49 6e 74 36 34 20 3d 20 30 78 32 30 30  antInt64 = 0x200
d780: 30 30 30 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20  000000000,....  
d790: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
d7a0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65  >..      /// Whe
d7b0: 6e 20 72 65 74 75 72 6e 69 6e 67 20 3c 73 65 65  n returning <see
d7c0: 20 63 72 65 66 3d 22 44 6f 75 62 6c 65 22 20 2f   cref="Double" /
d7d0: 3e 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c  > column values,
d7e0: 20 61 6c 77 61 79 73 20 75 73 65 0d 0a 20 20 20   always use..   
d7f0: 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 76 61 72     /// the invar
d800: 69 61 6e 74 20 63 75 6c 74 75 72 65 20 77 68 65  iant culture whe
d810: 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 74 68 65  n converting the
d820: 69 72 20 76 61 6c 75 65 73 20 66 72 6f 6d 20 73  ir values from s
d830: 74 72 69 6e 67 73 2e 0d 0a 20 20 20 20 20 20 2f  trings...      /
d840: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
d850: 20 20 20 20 20 47 65 74 49 6e 76 61 72 69 61 6e       GetInvarian
d860: 74 44 6f 75 62 6c 65 20 3d 20 30 78 34 30 30 30  tDouble = 0x4000
d870: 30 30 30 30 30 30 30 30 2c 0d 0a 0d 0a 20 20 20  00000000,....   
d880: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
d890: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e  ..      /// When
d8a0: 20 62 69 6e 64 69 6e 67 20 70 61 72 61 6d 65 74   binding paramet
d8b0: 65 72 20 76 61 6c 75 65 73 20 6f 72 20 72 65 74  er values or ret
d8c0: 75 72 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61  urning column va
d8d0: 6c 75 65 73 2c 20 61 6c 77 61 79 73 0d 0a 20 20  lues, always..  
d8e0: 20 20 20 20 2f 2f 2f 20 74 72 65 61 74 20 74 68      /// treat th
d8f0: 65 6d 20 61 73 20 74 68 6f 75 67 68 20 74 68 65  em as though the
d900: 79 20 77 65 72 65 20 70 6c 61 69 6e 20 74 65 78  y were plain tex
d910: 74 20 28 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72  t (i.e. no numer
d920: 69 63 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 64  ic,..      /// d
d930: 61 74 65 2f 74 69 6d 65 2c 20 6f 72 20 6f 74 68  ate/time, or oth
d940: 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 73  er conversions s
d950: 68 6f 75 6c 64 20 62 65 20 61 74 74 65 6d 70 74  hould be attempt
d960: 65 64 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ed)...      /// 
d970: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
d980: 20 20 42 69 6e 64 41 6e 64 47 65 74 41 6c 6c 41    BindAndGetAllA
d990: 73 54 65 78 74 20 3d 20 42 69 6e 64 41 6c 6c 41  sText = BindAllA
d9a0: 73 54 65 78 74 20 7c 20 47 65 74 41 6c 6c 41 73  sText | GetAllAs
d9b0: 54 65 78 74 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  Text,....      /
d9c0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
d9d0: 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62 69 6e      /// When bin
d9e0: 64 69 6e 67 20 70 61 72 61 6d 65 74 65 72 20 76  ding parameter v
d9f0: 61 6c 75 65 73 2c 20 61 6c 77 61 79 73 20 75 73  alues, always us
da00: 65 20 74 68 65 20 69 6e 76 61 72 69 61 6e 74 20  e the invariant 
da10: 63 75 6c 74 75 72 65 20 77 68 65 6e 0d 0a 20 20  culture when..  
da20: 20 20 20 20 2f 2f 2f 20 63 6f 6e 76 65 72 74 69      /// converti
da30: 6e 67 20 74 68 65 69 72 20 76 61 6c 75 65 73 20  ng their values 
da40: 74 6f 20 73 74 72 69 6e 67 73 20 6f 72 20 66 72  to strings or fr
da50: 6f 6d 20 73 74 72 69 6e 67 73 2e 0d 0a 20 20 20  om strings...   
da60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
da70: 3e 0d 0a 20 20 20 20 20 20 43 6f 6e 76 65 72 74  >..      Convert
da80: 41 6e 64 42 69 6e 64 49 6e 76 61 72 69 61 6e 74  AndBindInvariant
da90: 54 65 78 74 20 3d 20 43 6f 6e 76 65 72 74 49 6e  Text = ConvertIn
daa0: 76 61 72 69 61 6e 74 54 65 78 74 20 7c 20 42 69  variantText | Bi
dab0: 6e 64 49 6e 76 61 72 69 61 6e 74 54 65 78 74 2c  ndInvariantText,
dac0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
dad0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
dae0: 2f 2f 20 57 68 65 6e 20 62 69 6e 64 69 6e 67 20  // When binding 
daf0: 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75 65 73  parameter values
db00: 20 6f 72 20 72 65 74 75 72 6e 69 6e 67 20 63 6f   or returning co
db10: 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20 61 6c 77  lumn values, alw
db20: 61 79 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74  ays..      /// t
db30: 72 65 61 74 20 74 68 65 6d 20 61 73 20 74 68 6f  reat them as tho
db40: 75 67 68 20 74 68 65 79 20 77 65 72 65 20 70 6c  ugh they were pl
db50: 61 69 6e 20 74 65 78 74 20 28 69 2e 65 2e 20 6e  ain text (i.e. n
db60: 6f 20 6e 75 6d 65 72 69 63 2c 0d 0a 20 20 20 20  o numeric,..    
db70: 20 20 2f 2f 2f 20 64 61 74 65 2f 74 69 6d 65 2c    /// date/time,
db80: 20 6f 72 20 6f 74 68 65 72 20 63 6f 6e 76 65 72   or other conver
db90: 73 69 6f 6e 73 20 73 68 6f 75 6c 64 20 62 65 20  sions should be 
dba0: 61 74 74 65 6d 70 74 65 64 29 20 61 6e 64 20 61  attempted) and a
dbb0: 6c 77 61 79 73 0d 0a 20 20 20 20 20 20 2f 2f 2f  lways..      ///
dbc0: 20 75 73 65 20 74 68 65 20 69 6e 76 61 72 69 61   use the invaria
dbd0: 6e 74 20 63 75 6c 74 75 72 65 20 77 68 65 6e 20  nt culture when 
dbe0: 63 6f 6e 76 65 72 74 69 6e 67 20 74 68 65 69 72  converting their
dbf0: 20 76 61 6c 75 65 73 20 74 6f 20 73 74 72 69 6e   values to strin
dc00: 67 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  gs...      /// <
dc10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
dc20: 20 42 69 6e 64 41 6e 64 47 65 74 41 6c 6c 41 73   BindAndGetAllAs
dc30: 49 6e 76 61 72 69 61 6e 74 54 65 78 74 20 3d 20  InvariantText = 
dc40: 42 69 6e 64 41 6e 64 47 65 74 41 6c 6c 41 73 54  BindAndGetAllAsT
dc50: 65 78 74 20 7c 20 42 69 6e 64 49 6e 76 61 72 69  ext | BindInvari
dc60: 61 6e 74 54 65 78 74 2c 0d 0a 0d 0a 20 20 20 20  antText,....    
dc70: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
dc80: 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20  .      /// When 
dc90: 62 69 6e 64 69 6e 67 20 70 61 72 61 6d 65 74 65  binding paramete
dca0: 72 20 76 61 6c 75 65 73 20 6f 72 20 72 65 74 75  r values or retu
dcb0: 72 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61 6c  rning column val
dcc0: 75 65 73 2c 20 61 6c 77 61 79 73 0d 0a 20 20 20  ues, always..   
dcd0: 20 20 20 2f 2f 2f 20 74 72 65 61 74 20 74 68 65     /// treat the
dce0: 6d 20 61 73 20 74 68 6f 75 67 68 20 74 68 65 79  m as though they
dcf0: 20 77 65 72 65 20 70 6c 61 69 6e 20 74 65 78 74   were plain text
dd00: 20 28 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72 69   (i.e. no numeri
dd10: 63 2c 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 64 61  c,..      /// da
dd20: 74 65 2f 74 69 6d 65 2c 20 6f 72 20 6f 74 68 65  te/time, or othe
dd30: 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 73 68  r conversions sh
dd40: 6f 75 6c 64 20 62 65 20 61 74 74 65 6d 70 74 65  ould be attempte
dd50: 64 29 20 61 6e 64 20 61 6c 77 61 79 73 0d 0a 20  d) and always.. 
dd60: 20 20 20 20 20 2f 2f 2f 20 75 73 65 20 74 68 65       /// use the
dd70: 20 69 6e 76 61 72 69 61 6e 74 20 63 75 6c 74 75   invariant cultu
dd80: 72 65 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69  re when converti
dd90: 6e 67 20 74 68 65 69 72 20 76 61 6c 75 65 73 20  ng their values 
dda0: 74 6f 20 73 74 72 69 6e 67 73 0d 0a 20 20 20 20  to strings..    
ddb0: 20 20 2f 2f 2f 20 6f 72 20 66 72 6f 6d 20 73 74    /// or from st
ddc0: 72 69 6e 67 73 2e 0d 0a 20 20 20 20 20 20 2f 2f  rings...      //
ddd0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
dde0: 20 20 20 20 43 6f 6e 76 65 72 74 41 6e 64 42 69      ConvertAndBi
ddf0: 6e 64 41 6e 64 47 65 74 41 6c 6c 41 73 49 6e 76  ndAndGetAllAsInv
de00: 61 72 69 61 6e 74 54 65 78 74 20 3d 20 42 69 6e  ariantText = Bin
de10: 64 41 6e 64 47 65 74 41 6c 6c 41 73 54 65 78 74  dAndGetAllAsText
de20: 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   |..            
de30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
de50: 20 20 20 43 6f 6e 76 65 72 74 41 6e 64 42 69 6e     ConvertAndBin
de60: 64 49 6e 76 61 72 69 61 6e 74 54 65 78 74 2c 0d  dInvariantText,.
de70: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
de80: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
de90: 2f 20 45 6e 61 62 6c 65 73 20 75 73 65 20 6f 66  / Enables use of
dea0: 20 61 6c 6c 20 70 65 72 2d 63 6f 6e 6e 65 63 74   all per-connect
deb0: 69 6f 6e 20 76 61 6c 75 65 20 68 61 6e 64 6c 69  ion value handli
dec0: 6e 67 20 63 61 6c 6c 62 61 63 6b 73 2e 0d 0a 20  ng callbacks... 
ded0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
dee0: 72 79 3e 0d 0a 20 20 20 20 20 20 55 73 65 43 6f  ry>..      UseCo
def0: 6e 6e 65 63 74 69 6f 6e 41 6c 6c 56 61 6c 75 65  nnectionAllValue
df00: 43 61 6c 6c 62 61 63 6b 73 20 3d 20 55 73 65 43  Callbacks = UseC
df10: 6f 6e 6e 65 63 74 69 6f 6e 42 69 6e 64 56 61 6c  onnectionBindVal
df20: 75 65 43 61 6c 6c 62 61 63 6b 73 20 7c 0d 0a 20  ueCallbacks |.. 
df30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
df50: 20 20 20 20 20 20 55 73 65 43 6f 6e 6e 65 63 74        UseConnect
df60: 69 6f 6e 52 65 61 64 56 61 6c 75 65 43 61 6c 6c  ionReadValueCall
df70: 62 61 63 6b 73 2c 0d 0a 0d 0a 20 20 20 20 20 20  backs,....      
df80: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
df90: 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73       /// Enables
dfa0: 20 75 73 65 20 6f 66 20 61 6c 6c 20 61 70 70 6c   use of all appl
dfb0: 69 63 61 62 6c 65 20 3c 73 65 65 20 63 72 65 66  icable <see cref
dfc0: 3d 22 53 51 4c 69 74 65 50 61 72 61 6d 65 74 65  ="SQLiteParamete
dfd0: 72 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  r" />..      ///
dfe0: 20 70 72 6f 70 65 72 74 69 65 73 20 61 73 20 66   properties as f
dff0: 61 6c 6c 62 61 63 6b 73 20 66 6f 72 20 74 68 65  allbacks for the
e000: 20 64 61 74 61 62 61 73 65 20 74 79 70 65 20 6e   database type n
e010: 61 6d 65 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ame...      /// 
e020: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e030: 20 20 55 73 65 50 61 72 61 6d 65 74 65 72 41 6e    UseParameterAn
e040: 79 74 68 69 6e 67 46 6f 72 54 79 70 65 4e 61 6d  ythingForTypeNam
e050: 65 20 3d 20 55 73 65 50 61 72 61 6d 65 74 65 72  e = UseParameter
e060: 4e 61 6d 65 46 6f 72 54 79 70 65 4e 61 6d 65 20  NameForTypeName 
e070: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
e080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e090: 20 20 20 20 20 20 20 20 20 20 20 55 73 65 50 61             UsePa
e0a0: 72 61 6d 65 74 65 72 44 62 54 79 70 65 46 6f 72  rameterDbTypeFor
e0b0: 54 79 70 65 4e 61 6d 65 2c 0d 0a 0d 0a 20 20 20  TypeName,....   
e0c0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
e0d0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ..      /// Enab
e0e0: 6c 65 20 61 6c 6c 20 6c 6f 67 67 69 6e 67 2e 0d  le all logging..
e0f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
e100: 6d 61 72 79 3e 0d 0a 23 69 66 20 49 4e 54 45 52  mary>..#if INTER
e110: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
e120: 0d 0a 20 20 20 20 20 20 4c 6f 67 41 6c 6c 20 3d  ..      LogAll =
e130: 20 4c 6f 67 50 72 65 70 61 72 65 20 7c 20 4c 6f   LogPrepare | Lo
e140: 67 50 72 65 42 69 6e 64 20 7c 20 4c 6f 67 42 69  gPreBind | LogBi
e150: 6e 64 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20  nd |..          
e160: 20 20 20 20 20 4c 6f 67 43 61 6c 6c 62 61 63 6b       LogCallback
e170: 45 78 63 65 70 74 69 6f 6e 20 7c 20 4c 6f 67 42  Exception | LogB
e180: 61 63 6b 75 70 20 7c 20 4c 6f 67 4d 6f 64 75 6c  ackup | LogModul
e190: 65 45 72 72 6f 72 20 7c 0d 0a 20 20 20 20 20 20  eError |..      
e1a0: 20 20 20 20 20 20 20 20 20 4c 6f 67 4d 6f 64 75           LogModu
e1b0: 6c 65 45 78 63 65 70 74 69 6f 6e 2c 0d 0a 23 65  leException,..#e
e1c0: 6c 73 65 0d 0a 20 20 20 20 20 20 4c 6f 67 41 6c  lse..      LogAl
e1d0: 6c 20 3d 20 4c 6f 67 50 72 65 70 61 72 65 20 7c  l = LogPrepare |
e1e0: 20 4c 6f 67 50 72 65 42 69 6e 64 20 7c 20 4c 6f   LogPreBind | Lo
e1f0: 67 42 69 6e 64 20 7c 0d 0a 20 20 20 20 20 20 20  gBind |..       
e200: 20 20 20 20 20 20 20 20 4c 6f 67 43 61 6c 6c 62          LogCallb
e210: 61 63 6b 45 78 63 65 70 74 69 6f 6e 20 7c 20 4c  ackException | L
e220: 6f 67 42 61 63 6b 75 70 2c 0d 0a 23 65 6e 64 69  ogBackup,..#endi
e230: 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  f....      /// <
e240: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e250: 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74 20  /// The default 
e260: 6c 6f 67 67 69 6e 67 20 72 65 6c 61 74 65 64 20  logging related 
e270: 66 6c 61 67 73 20 66 6f 72 20 6e 65 77 20 63 6f  flags for new co
e280: 6e 6e 65 63 74 69 6f 6e 73 2e 0d 0a 20 20 20 20  nnections...    
e290: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e2a0: 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49  ..#if INTEROP_VI
e2b0: 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20  RTUAL_TABLE..   
e2c0: 20 20 20 4c 6f 67 44 65 66 61 75 6c 74 20 3d 20     LogDefault = 
e2d0: 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78 63 65 70  LogCallbackExcep
e2e0: 74 69 6f 6e 20 7c 20 4c 6f 67 4d 6f 64 75 6c 65  tion | LogModule
e2f0: 45 78 63 65 70 74 69 6f 6e 2c 0d 0a 23 65 6c 73  Exception,..#els
e300: 65 0d 0a 20 20 20 20 20 20 4c 6f 67 44 65 66 61  e..      LogDefa
e310: 75 6c 74 20 3d 20 4c 6f 67 43 61 6c 6c 62 61 63  ult = LogCallbac
e320: 6b 45 78 63 65 70 74 69 6f 6e 2c 0d 0a 23 65 6e  kException,..#en
e330: 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  dif....      ///
e340: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
e350: 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c    /// The defaul
e360: 74 20 65 78 74 72 61 20 66 6c 61 67 73 20 66 6f  t extra flags fo
e370: 72 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e  r new connection
e380: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
e390: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e3a0: 44 65 66 61 75 6c 74 20 3d 20 4c 6f 67 44 65 66  Default = LogDef
e3b0: 61 75 6c 74 20 7c 20 42 69 6e 64 49 6e 76 61 72  ault | BindInvar
e3c0: 69 61 6e 74 44 65 63 69 6d 61 6c 20 7c 20 47 65  iantDecimal | Ge
e3d0: 74 49 6e 76 61 72 69 61 6e 74 44 65 63 69 6d 61  tInvariantDecima
e3e0: 6c 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  l,....      /// 
e3f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
e400: 20 2f 2f 2f 20 54 68 65 20 64 65 66 61 75 6c 74   /// The default
e410: 20 65 78 74 72 61 20 66 6c 61 67 73 20 66 6f 72   extra flags for
e420: 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69 6f 6e 73   new connections
e430: 20 77 69 74 68 20 61 6c 6c 20 6c 6f 67 67 69 6e   with all loggin
e440: 67 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20 20  g enabled...    
e450: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
e460: 0d 0a 20 20 20 20 20 20 44 65 66 61 75 6c 74 41  ..      DefaultA
e470: 6e 64 4c 6f 67 41 6c 6c 20 3d 20 44 65 66 61 75  ndLogAll = Defau
e480: 6c 74 20 7c 20 4c 6f 67 41 6c 6c 0d 0a 20 20 7d  lt | LogAll..  }
e490: 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ....  /// <summa
e4a0: 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 73 65  ry>..  /// These
e4b0: 20 61 72 65 20 74 68 65 20 73 75 70 70 6f 72 74   are the support
e4c0: 65 64 20 73 74 61 74 75 73 20 70 61 72 61 6d 65  ed status parame
e4d0: 74 65 72 73 20 66 6f 72 20 75 73 65 20 77 69 74  ters for use wit
e4e0: 68 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20  h the native..  
e4f0: 2f 2f 2f 20 53 51 4c 69 74 65 20 6c 69 62 72 61  /// SQLite libra
e500: 72 79 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ry...  /// </sum
e510: 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e 61  mary>..  interna
e520: 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65 53 74 61  l enum SQLiteSta
e530: 74 75 73 4f 70 73 45 6e 75 6d 0d 0a 20 20 7b 0d  tusOpsEnum..  {.
e540: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
e550: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
e560: 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 72  This parameter r
e570: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
e580: 72 20 6f 66 20 6c 6f 6f 6b 61 73 69 64 65 20 6d  r of lookaside m
e590: 65 6d 6f 72 79 20 73 6c 6f 74 73 0d 0a 20 20 20  emory slots..   
e5a0: 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e 74 6c 79     /// currently
e5b0: 20 63 68 65 63 6b 65 64 20 6f 75 74 2e 0d 0a 20   checked out... 
e5c0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
e5d0: 72 79 3e 0d 0a 20 20 20 20 20 20 53 51 4c 49 54  ry>..      SQLIT
e5e0: 45 5f 44 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41  E_DBSTATUS_LOOKA
e5f0: 53 49 44 45 5f 55 53 45 44 20 3d 20 30 2c 0d 0a  SIDE_USED = 0,..
e600: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
e610: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
e620: 20 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   This parameter 
e630: 72 65 74 75 72 6e 73 20 74 68 65 20 61 70 70 72  returns the appr
e640: 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65 72 20 6f  oximate number o
e650: 66 20 62 79 74 65 73 20 6f 66 0d 0a 20 20 20 20  f bytes of..    
e660: 20 20 2f 2f 2f 20 68 65 61 70 20 6d 65 6d 6f 72    /// heap memor
e670: 79 20 75 73 65 64 20 62 79 20 61 6c 6c 20 70 61  y used by all pa
e680: 67 65 72 20 63 61 63 68 65 73 20 61 73 73 6f 63  ger caches assoc
e690: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 0d 0a  iated with the..
e6a0: 20 20 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61        /// databa
e6b0: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 54  se connection. T
e6c0: 68 65 20 68 69 67 68 77 61 74 65 72 20 6d 61 72  he highwater mar
e6d0: 6b 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  k associated wit
e6e0: 68 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c  h..      /// SQL
e6f0: 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43  ITE_DBSTATUS_CAC
e700: 48 45 5f 55 53 45 44 20 69 73 20 61 6c 77 61 79  HE_USED is alway
e710: 73 20 30 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  s 0...      /// 
e720: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
e730: 20 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55    SQLITE_DBSTATU
e740: 53 5f 43 41 43 48 45 5f 55 53 45 44 20 3d 20 31  S_CACHE_USED = 1
e750: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
e760: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
e770: 2f 2f 2f 20 54 68 69 73 20 70 61 72 61 6d 65 74  /// This paramet
e780: 65 72 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  er returns the a
e790: 70 70 72 6f 78 69 6d 61 74 65 20 6e 75 6d 62 65  pproximate numbe
e7a0: 72 20 6f 66 20 62 79 74 65 73 20 6f 66 0d 0a 20  r of bytes of.. 
e7b0: 20 20 20 20 20 2f 2f 2f 20 68 65 61 70 20 6d 65       /// heap me
e7c0: 6d 6f 72 79 20 75 73 65 64 20 74 6f 20 73 74 6f  mory used to sto
e7d0: 72 65 20 74 68 65 20 73 63 68 65 6d 61 20 66 6f  re the schema fo
e7e0: 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65 73 0d  r all databases.
e7f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63  .      /// assoc
e800: 69 61 74 65 64 20 77 69 74 68 20 74 68 65 20 63  iated with the c
e810: 6f 6e 6e 65 63 74 69 6f 6e 20 2d 20 6d 61 69 6e  onnection - main
e820: 2c 20 74 65 6d 70 2c 20 61 6e 64 20 61 6e 79 20  , temp, and any 
e830: 41 54 54 41 43 48 2d 65 64 0d 0a 20 20 20 20 20  ATTACH-ed..     
e840: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 73 2e 20   /// databases. 
e850: 54 68 65 20 66 75 6c 6c 20 61 6d 6f 75 6e 74 20  The full amount 
e860: 6f 66 20 6d 65 6d 6f 72 79 20 75 73 65 64 20 62  of memory used b
e870: 79 20 74 68 65 20 73 63 68 65 6d 61 73 20 69 73  y the schemas is
e880: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 72 65 70 6f  ..      /// repo
e890: 72 74 65 64 2c 20 65 76 65 6e 20 69 66 20 74 68  rted, even if th
e8a0: 65 20 73 63 68 65 6d 61 20 6d 65 6d 6f 72 79 20  e schema memory 
e8b0: 69 73 20 73 68 61 72 65 64 20 77 69 74 68 20 6f  is shared with o
e8c0: 74 68 65 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ther..      /// 
e8d0: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
e8e0: 69 6f 6e 73 20 64 75 65 20 74 6f 20 73 68 61 72  ions due to shar
e8f0: 65 64 20 63 61 63 68 65 20 6d 6f 64 65 20 62 65  ed cache mode be
e900: 69 6e 67 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20  ing enabled...  
e910: 20 20 20 20 2f 2f 2f 20 54 68 65 20 68 69 67 68      /// The high
e920: 77 61 74 65 72 20 6d 61 72 6b 20 61 73 73 6f 63  water mark assoc
e930: 69 61 74 65 64 20 77 69 74 68 20 53 51 4c 49 54  iated with SQLIT
e940: 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45 4d  E_DBSTATUS_SCHEM
e950: 41 5f 55 53 45 44 0d 0a 20 20 20 20 20 20 2f 2f  A_USED..      //
e960: 2f 20 69 73 20 61 6c 77 61 79 73 20 30 2e 0d 0a  / is always 0...
e970: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
e980: 61 72 79 3e 0d 0a 20 20 20 20 20 20 53 51 4c 49  ary>..      SQLI
e990: 54 45 5f 44 42 53 54 41 54 55 53 5f 53 43 48 45  TE_DBSTATUS_SCHE
e9a0: 4d 41 5f 55 53 45 44 20 3d 20 32 2c 0d 0a 0d 0a  MA_USED = 2,....
e9b0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
e9c0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
e9d0: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 72 65  his parameter re
e9e0: 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72  turns the number
e9f0: 20 6d 61 6c 6c 6f 63 20 61 74 74 65 6d 70 74 73   malloc attempts
ea00: 20 74 68 61 74 20 6d 69 67 68 74 0a 20 20 20 20   that might.    
ea10: 20 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e 20    /// have been 
ea20: 73 61 74 69 73 66 69 65 64 20 75 73 69 6e 67 20  satisfied using 
ea30: 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79  lookaside memory
ea40: 20 62 75 74 20 66 61 69 6c 65 64 20 64 75 65 20   but failed due 
ea50: 74 6f 0a 20 20 20 20 20 20 2f 2f 2f 20 61 6c 6c  to.      /// all
ea60: 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72   lookaside memor
ea70: 79 20 61 6c 72 65 61 64 79 20 62 65 69 6e 67 20  y already being 
ea80: 69 6e 20 75 73 65 2e 20 4f 6e 6c 79 20 74 68 65  in use. Only the
ea90: 20 68 69 67 68 2d 77 61 74 65 72 0d 0a 20 20 20   high-water..   
eaa0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 20 69 73 20     /// value is 
eab0: 6d 65 61 6e 69 6e 67 66 75 6c 3b 20 74 68 65 20  meaningful; the 
eac0: 63 75 72 72 65 6e 74 20 76 61 6c 75 65 20 69 73  current value is
ead0: 20 61 6c 77 61 79 73 20 7a 65 72 6f 2e 0d 0a 20   always zero... 
eae0: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
eaf0: 72 79 3e 0d 0a 20 20 20 20 20 20 53 51 4c 49 54  ry>..      SQLIT
eb00: 45 5f 44 42 53 54 41 54 55 53 5f 53 54 4d 54 5f  E_DBSTATUS_STMT_
eb10: 55 53 45 44 20 3d 20 33 2c 0d 0a 0d 0a 20 20 20  USED = 3,....   
eb20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
eb30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69 73  ..      /// This
eb40: 20 70 61 72 61 6d 65 74 65 72 20 72 65 74 75 72   parameter retur
eb50: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6d 61  ns the number ma
eb60: 6c 6c 6f 63 20 61 74 74 65 6d 70 74 73 20 74 68  lloc attempts th
eb70: 61 74 20 77 65 72 65 0d 0a 20 20 20 20 20 20 2f  at were..      /
eb80: 2f 2f 20 73 61 74 69 73 66 69 65 64 20 75 73 69  // satisfied usi
eb90: 6e 67 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  ng lookaside mem
eba0: 6f 72 79 2e 20 4f 6e 6c 79 20 74 68 65 20 68 69  ory. Only the hi
ebb0: 67 68 2d 77 61 74 65 72 20 76 61 6c 75 65 0d 0a  gh-water value..
ebc0: 20 20 20 20 20 20 2f 2f 2f 20 69 73 20 6d 65 61        /// is mea
ebd0: 6e 69 6e 67 66 75 6c 3b 20 74 68 65 20 63 75 72  ningful; the cur
ebe0: 72 65 6e 74 20 76 61 6c 75 65 20 69 73 20 61 6c  rent value is al
ebf0: 77 61 79 73 20 7a 65 72 6f 2e 0d 0a 20 20 20 20  ways zero...    
ec00: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
ec10: 0d 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 44  ..      SQLITE_D
ec20: 42 53 54 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44  BSTATUS_LOOKASID
ec30: 45 5f 48 49 54 20 3d 20 34 2c 0d 0a 0d 0a 20 20  E_HIT = 4,....  
ec40: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
ec50: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  >..      /// Thi
ec60: 73 20 70 61 72 61 6d 65 74 65 72 20 72 65 74 75  s parameter retu
ec70: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6d  rns the number m
ec80: 61 6c 6c 6f 63 20 61 74 74 65 6d 70 74 73 20 74  alloc attempts t
ec90: 68 61 74 20 6d 69 67 68 74 0a 20 20 20 20 20 20  hat might.      
eca0: 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e 20 73 61  /// have been sa
ecb0: 74 69 73 66 69 65 64 20 75 73 69 6e 67 20 6c 6f  tisfied using lo
ecc0: 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20 62  okaside memory b
ecd0: 75 74 20 66 61 69 6c 65 64 20 64 75 65 20 74 6f  ut failed due to
ece0: 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 20 61  .      /// the a
ecf0: 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20  mount of memory 
ed00: 72 65 71 75 65 73 74 65 64 20 62 65 69 6e 67 20  requested being 
ed10: 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68 65 20  larger than the 
ed20: 6c 6f 6f 6b 61 73 69 64 65 0a 20 20 20 20 20 20  lookaside.      
ed30: 2f 2f 2f 20 73 6c 6f 74 20 73 69 7a 65 2e 20 4f  /// slot size. O
ed40: 6e 6c 79 20 74 68 65 20 68 69 67 68 2d 77 61 74  nly the high-wat
ed50: 65 72 20 76 61 6c 75 65 20 69 73 20 6d 65 61 6e  er value is mean
ed60: 69 6e 67 66 75 6c 3b 20 74 68 65 20 63 75 72 72  ingful; the curr
ed70: 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 76  ent..      /// v
ed80: 61 6c 75 65 20 69 73 20 61 6c 77 61 79 73 20 7a  alue is always z
ed90: 65 72 6f 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ero...      /// 
eda0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
edb0: 20 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55    SQLITE_DBSTATU
edc0: 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d 49 53 53  S_LOOKASIDE_MISS
edd0: 5f 53 49 5a 45 20 3d 20 35 2c 0d 0a 0d 0a 20 20  _SIZE = 5,....  
ede0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
edf0: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68 69  >..      /// Thi
ee00: 73 20 70 61 72 61 6d 65 74 65 72 20 72 65 74 75  s parameter retu
ee10: 72 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6d  rns the number m
ee20: 61 6c 6c 6f 63 20 61 74 74 65 6d 70 74 73 20 74  alloc attempts t
ee30: 68 61 74 20 6d 69 67 68 74 0d 0a 20 20 20 20 20  hat might..     
ee40: 20 2f 2f 2f 20 68 61 76 65 20 62 65 65 6e 20 73   /// have been s
ee50: 61 74 69 73 66 69 65 64 20 75 73 69 6e 67 20 6c  atisfied using l
ee60: 6f 6f 6b 61 73 69 64 65 20 6d 65 6d 6f 72 79 20  ookaside memory 
ee70: 62 75 74 20 66 61 69 6c 65 64 20 64 75 65 20 74  but failed due t
ee80: 6f 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65  o..      /// the
ee90: 20 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72   amount of memor
eea0: 79 20 72 65 71 75 65 73 74 65 64 20 62 65 69 6e  y requested bein
eeb0: 67 20 6c 61 72 67 65 72 20 74 68 61 6e 20 74 68  g larger than th
eec0: 65 20 6c 6f 6f 6b 61 73 69 64 65 0d 0a 20 20 20  e lookaside..   
eed0: 20 20 20 2f 2f 2f 20 73 6c 6f 74 20 73 69 7a 65     /// slot size
eee0: 2e 20 4f 6e 6c 79 20 74 68 65 20 68 69 67 68 2d  . Only the high-
eef0: 77 61 74 65 72 20 76 61 6c 75 65 20 69 73 20 6d  water value is m
ef00: 65 61 6e 69 6e 67 66 75 6c 3b 20 74 68 65 20 63  eaningful; the c
ef10: 75 72 72 65 6e 74 0d 0a 20 20 20 20 20 20 2f 2f  urrent..      //
ef20: 2f 20 76 61 6c 75 65 20 69 73 20 61 6c 77 61 79  / value is alway
ef30: 73 20 7a 65 72 6f 2e 0d 0a 20 20 20 20 20 20 2f  s zero...      /
ef40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
ef50: 20 20 20 20 20 53 51 4c 49 54 45 5f 44 42 53 54       SQLITE_DBST
ef60: 41 54 55 53 5f 4c 4f 4f 4b 41 53 49 44 45 5f 4d  ATUS_LOOKASIDE_M
ef70: 49 53 53 5f 46 55 4c 4c 20 3d 20 36 2c 0d 0a 0d  ISS_FULL = 6,...
ef80: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
ef90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
efa0: 54 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 72  This parameter r
efb0: 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d 62 65  eturns the numbe
efc0: 72 20 6f 66 20 70 61 67 65 72 20 63 61 63 68 65  r of pager cache
efd0: 20 68 69 74 73 20 74 68 61 74 0a 20 20 20 20 20   hits that.     
efe0: 20 2f 2f 2f 20 68 61 76 65 20 6f 63 63 75 72 72   /// have occurr
eff0: 65 64 2e 20 54 68 65 20 68 69 67 68 77 61 74 65  ed. The highwate
f000: 72 20 6d 61 72 6b 20 61 73 73 6f 63 69 61 74 65  r mark associate
f010: 64 20 77 69 74 68 0d 0a 20 20 20 20 20 20 2f 2f  d with..      //
f020: 2f 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55  / SQLITE_DBSTATU
f030: 53 5f 43 41 43 48 45 5f 48 49 54 20 69 73 20 61  S_CACHE_HIT is a
f040: 6c 77 61 79 73 20 30 2e 0d 0a 20 20 20 20 20 20  lways 0...      
f050: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
f060: 20 20 20 20 20 20 53 51 4c 49 54 45 5f 44 42 53        SQLITE_DBS
f070: 54 41 54 55 53 5f 43 41 43 48 45 5f 48 49 54 20  TATUS_CACHE_HIT 
f080: 3d 20 37 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  = 7,....      //
f090: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
f0a0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 70 61 72 61     /// This para
f0b0: 6d 65 74 65 72 20 72 65 74 75 72 6e 73 20 74 68  meter returns th
f0c0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
f0d0: 72 20 63 61 63 68 65 20 6d 69 73 73 65 73 20 74  r cache misses t
f0e0: 68 61 74 0a 20 20 20 20 20 20 2f 2f 2f 20 68 61  hat.      /// ha
f0f0: 76 65 20 6f 63 63 75 72 72 65 64 2e 20 54 68 65  ve occurred. The
f100: 20 68 69 67 68 77 61 74 65 72 20 6d 61 72 6b 20   highwater mark 
f110: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 0d  associated with.
f120: 0a 20 20 20 20 20 20 2f 2f 2f 20 53 51 4c 49 54  .      /// SQLIT
f130: 45 5f 44 42 53 54 41 54 55 53 5f 43 41 43 48 45  E_DBSTATUS_CACHE
f140: 5f 4d 49 53 53 20 69 73 20 61 6c 77 61 79 73 20  _MISS is always 
f150: 30 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  0...      /// </
f160: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
f170: 53 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f  SQLITE_DBSTATUS_
f180: 43 41 43 48 45 5f 4d 49 53 53 20 3d 20 38 2c 0d  CACHE_MISS = 8,.
f190: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
f1a0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
f1b0: 2f 20 54 68 69 73 20 70 61 72 61 6d 65 74 65 72  / This parameter
f1c0: 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   returns the num
f1d0: 62 65 72 20 6f 66 20 64 69 72 74 79 20 63 61 63  ber of dirty cac
f1e0: 68 65 20 65 6e 74 72 69 65 73 20 74 68 61 74 0d  he entries that.
f1f0: 0a 20 20 20 20 20 20 2f 2f 2f 20 68 61 76 65 20  .      /// have 
f200: 62 65 65 6e 20 77 72 69 74 74 65 6e 20 74 6f 20  been written to 
f210: 64 69 73 6b 2e 20 53 70 65 63 69 66 69 63 61 6c  disk. Specifical
f220: 6c 79 2c 20 74 68 65 20 6e 75 6d 62 65 72 20 6f  ly, the number o
f230: 66 20 70 61 67 65 73 0d 0a 20 20 20 20 20 20 2f  f pages..      /
f240: 2f 2f 20 77 72 69 74 74 65 6e 20 74 6f 20 74 68  // written to th
f250: 65 20 77 61 6c 20 66 69 6c 65 20 69 6e 20 77 61  e wal file in wa
f260: 6c 20 6d 6f 64 65 20 64 61 74 61 62 61 73 65 73  l mode databases
f270: 2c 20 6f 72 20 74 68 65 20 6e 75 6d 62 65 72 0d  , or the number.
f280: 0a 20 20 20 20 20 20 2f 2f 2f 20 6f 66 20 70 61  .      /// of pa
f290: 67 65 73 20 77 72 69 74 74 65 6e 20 74 6f 20 74  ges written to t
f2a0: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
f2b0: 20 69 6e 20 72 6f 6c 6c 62 61 63 6b 20 6d 6f 64   in rollback mod
f2c0: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 64 61 74  e..      /// dat
f2d0: 61 62 61 73 65 73 2e 20 41 6e 79 20 70 61 67 65  abases. Any page
f2e0: 73 20 77 72 69 74 74 65 6e 20 61 73 20 70 61 72  s written as par
f2f0: 74 20 6f 66 20 74 72 61 6e 73 61 63 74 69 6f 6e  t of transaction
f300: 20 72 6f 6c 6c 62 61 63 6b 0d 0a 20 20 20 20 20   rollback..     
f310: 20 2f 2f 2f 20 6f 72 20 64 61 74 61 62 61 73 65   /// or database
f320: 20 72 65 63 6f 76 65 72 79 20 6f 70 65 72 61 74   recovery operat
f330: 69 6f 6e 73 20 61 72 65 20 6e 6f 74 20 69 6e 63  ions are not inc
f340: 6c 75 64 65 64 2e 20 49 66 20 61 6e 20 49 4f 20  luded. If an IO 
f350: 6f 72 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 6f 74  or..      /// ot
f360: 68 65 72 20 65 72 72 6f 72 20 6f 63 63 75 72 73  her error occurs
f370: 20 77 68 69 6c 65 20 77 72 69 74 69 6e 67 20 61   while writing a
f380: 20 70 61 67 65 20 74 6f 20 64 69 73 6b 2c 20 74   page to disk, t
f390: 68 65 20 65 66 66 65 63 74 0d 0a 20 20 20 20 20  he effect..     
f3a0: 20 2f 2f 2f 20 6f 6e 20 73 75 62 73 65 71 75 65   /// on subseque
f3b0: 6e 74 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54  nt SQLITE_DBSTAT
f3c0: 55 53 5f 43 41 43 48 45 5f 57 52 49 54 45 20 72  US_CACHE_WRITE r
f3d0: 65 71 75 65 73 74 73 20 69 73 0d 0a 20 20 20 20  equests is..    
f3e0: 20 20 2f 2f 2f 20 75 6e 64 65 66 69 6e 65 64 2e    /// undefined.
f3f0: 20 54 68 65 20 68 69 67 68 77 61 74 65 72 20 6d   The highwater m
f400: 61 72 6b 20 61 73 73 6f 63 69 61 74 65 64 20 77  ark associated w
f410: 69 74 68 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 53  ith..      /// S
f420: 51 4c 49 54 45 5f 44 42 53 54 41 54 55 53 5f 43  QLITE_DBSTATUS_C
f430: 41 43 48 45 5f 57 52 49 54 45 20 69 73 20 61 6c  ACHE_WRITE is al
f440: 77 61 79 73 20 30 2e 0d 0a 20 20 20 20 20 20 2f  ways 0...      /
f450: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
f460: 20 20 20 20 20 53 51 4c 49 54 45 5f 44 42 53 54       SQLITE_DBST
f470: 41 54 55 53 5f 43 41 43 48 45 5f 57 52 49 54 45  ATUS_CACHE_WRITE
f480: 20 3d 20 39 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f   = 9,....      /
f490: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f4a0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 70 61 72      /// This par
f4b0: 61 6d 65 74 65 72 20 72 65 74 75 72 6e 73 20 7a  ameter returns z
f4c0: 65 72 6f 20 66 6f 72 20 74 68 65 20 63 75 72 72  ero for the curr
f4d0: 65 6e 74 20 76 61 6c 75 65 20 69 66 20 61 6e 64  ent value if and
f4e0: 20 6f 6e 6c 79 0a 20 20 20 20 20 20 2f 2f 2f 20   only.      /// 
f4f0: 69 66 20 61 6c 6c 20 66 6f 72 65 69 67 6e 20 6b  if all foreign k
f500: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 73 20 28  ey constraints (
f510: 64 65 66 65 72 72 65 64 20 6f 72 20 69 6d 6d 65  deferred or imme
f520: 64 69 61 74 65 29 20 68 61 76 65 0d 0a 20 20 20  diate) have..   
f530: 20 20 20 2f 2f 2f 20 62 65 65 6e 20 72 65 73 6f     /// been reso
f540: 6c 76 65 64 2e 20 54 68 65 20 68 69 67 68 77 61  lved. The highwa
f550: 74 65 72 20 6d 61 72 6b 20 69 73 20 61 6c 77 61  ter mark is alwa
f560: 79 73 20 30 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ys 0...      ///
f570: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f580: 20 20 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54     SQLITE_DBSTAT
f590: 55 53 5f 44 45 46 45 52 52 45 44 5f 46 4b 53 20  US_DEFERRED_FKS 
f5a0: 3d 20 31 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  = 10,....      /
f5b0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
f5c0: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 70 61 72      /// This par
f5d0: 61 6d 65 74 65 72 20 69 73 20 73 69 6d 69 6c 61  ameter is simila
f5e0: 72 20 74 6f 20 44 42 53 54 41 54 55 53 5f 43 41  r to DBSTATUS_CA
f5f0: 43 48 45 5f 55 53 45 44 2c 20 65 78 63 65 70 74  CHE_USED, except
f600: 20 74 68 61 74 0d 0a 20 20 20 20 20 20 2f 2f 2f   that..      ///
f610: 20 69 66 20 61 20 70 61 67 65 72 20 63 61 63 68   if a pager cach
f620: 65 20 69 73 20 73 68 61 72 65 64 20 62 65 74 77  e is shared betw
f630: 65 65 6e 20 74 77 6f 20 6f 72 20 6d 6f 72 65 20  een two or more 
f640: 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 74 68 65 0d  connections the.
f650: 0a 20 20 20 20 20 20 2f 2f 2f 20 62 79 74 65 73  .      /// bytes
f660: 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f 72 79 20   of heap memory 
f670: 75 73 65 64 20 62 79 20 74 68 61 74 20 70 61 67  used by that pag
f680: 65 72 20 63 61 63 68 65 20 69 73 20 64 69 76 69  er cache is divi
f690: 64 65 64 20 65 76 65 6e 6c 79 0d 0a 20 20 20 20  ded evenly..    
f6a0: 20 20 2f 2f 2f 20 62 65 74 77 65 65 6e 20 74 68    /// between th
f6b0: 65 20 61 74 74 61 63 68 65 64 20 63 6f 6e 6e 65  e attached conne
f6c0: 63 74 69 6f 6e 73 2e 20 49 6e 20 6f 74 68 65 72  ctions. In other
f6d0: 20 77 6f 72 64 73 2c 20 69 66 20 6e 6f 6e 65 20   words, if none 
f6e0: 6f 66 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68  of..      /// th
f6f0: 65 20 70 61 67 65 72 20 63 61 63 68 65 73 20 61  e pager caches a
f700: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
f710: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
f720: 65 63 74 69 6f 6e 20 61 72 65 0d 0a 20 20 20 20  ection are..    
f730: 20 20 2f 2f 2f 20 73 68 61 72 65 64 2c 20 74 68    /// shared, th
f740: 69 73 20 72 65 71 75 65 73 74 20 72 65 74 75 72  is request retur
f750: 6e 73 20 74 68 65 20 73 61 6d 65 20 76 61 6c 75  ns the same valu
f760: 65 20 61 73 20 44 42 53 54 41 54 55 53 5f 43 41  e as DBSTATUS_CA
f770: 43 48 45 5f 55 53 45 44 2e 0d 0a 20 20 20 20 20  CHE_USED...     
f780: 20 2f 2f 2f 20 4f 72 2c 20 69 66 20 6f 6e 65 20   /// Or, if one 
f790: 6f 72 20 6d 6f 72 65 20 6f 72 20 74 68 65 20 70  or more or the p
f7a0: 61 67 65 72 20 63 61 63 68 65 73 20 61 72 65 20  ager caches are 
f7b0: 73 68 61 72 65 64 2c 20 74 68 65 20 76 61 6c 75  shared, the valu
f7c0: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 72 65 74  e..      /// ret
f7d0: 75 72 6e 65 64 20 62 79 20 74 68 69 73 20 63 61  urned by this ca
f7e0: 6c 6c 20 77 69 6c 6c 20 62 65 20 73 6d 61 6c 6c  ll will be small
f7f0: 65 72 20 74 68 61 6e 20 74 68 61 74 20 72 65 74  er than that ret
f800: 75 72 6e 65 64 20 62 79 0d 0a 20 20 20 20 20 20  urned by..      
f810: 2f 2f 2f 20 44 42 53 54 41 54 55 53 5f 43 41 43  /// DBSTATUS_CAC
f820: 48 45 5f 55 53 45 44 2e 20 54 68 65 20 68 69 67  HE_USED. The hig
f830: 68 77 61 74 65 72 20 6d 61 72 6b 20 61 73 73 6f  hwater mark asso
f840: 63 69 61 74 65 64 20 77 69 74 68 0d 0a 20 20 20  ciated with..   
f850: 20 20 20 2f 2f 2f 20 53 51 4c 49 54 45 5f 44 42     /// SQLITE_DB
f860: 53 54 41 54 55 53 5f 43 41 43 48 45 5f 55 53 45  STATUS_CACHE_USE
f870: 44 5f 53 48 41 52 45 44 20 69 73 20 61 6c 77 61  D_SHARED is alwa
f880: 79 73 20 30 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ys 0...      ///
f890: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
f8a0: 20 20 20 53 51 4c 49 54 45 5f 44 42 53 54 41 54     SQLITE_DBSTAT
f8b0: 55 53 5f 43 41 43 48 45 5f 55 53 45 44 5f 53 48  US_CACHE_USED_SH
f8c0: 41 52 45 44 20 3d 20 31 31 0d 0a 20 20 7d 0d 0a  ARED = 11..  }..
f8d0: 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79  ..  /// <summary
f8e0: 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 73 65 20 61  >..  /// These a
f8f0: 72 65 20 74 68 65 20 73 75 70 70 6f 72 74 65 64  re the supported
f900: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76   configuration v
f910: 65 72 62 73 20 66 6f 72 20 75 73 65 20 77 69 74  erbs for use wit
f920: 68 20 74 68 65 20 6e 61 74 69 76 65 0d 0a 20 20  h the native..  
f930: 2f 2f 2f 20 53 51 4c 69 74 65 20 6c 69 62 72 61  /// SQLite libra
f940: 72 79 2e 20 20 54 68 65 79 20 61 72 65 20 75 73  ry.  They are us
f950: 65 64 20 77 69 74 68 20 74 68 65 0d 0a 20 20 2f  ed with the..  /
f960: 2f 2f 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  // <see cref="SQ
f970: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 53  LiteConnection.S
f980: 65 74 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f  etConfigurationO
f990: 70 74 69 6f 6e 22 20 2f 3e 20 6d 65 74 68 6f 64  ption" /> method
f9a0: 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  ...  /// </summa
f9b0: 72 79 3e 0d 0a 20 20 70 75 62 6c 69 63 20 65 6e  ry>..  public en
f9c0: 75 6d 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44  um SQLiteConfigD
f9d0: 62 4f 70 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20  bOpsEnum..  {.. 
f9e0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
f9f0: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
fa00: 69 73 20 76 61 6c 75 65 20 72 65 70 72 65 73 65  is value represe
fa10: 6e 74 73 20 61 6e 20 75 6e 6b 6e 6f 77 6e 20 28  nts an unknown (
fa20: 6f 72 20 69 6e 76 61 6c 69 64 29 20 6f 70 74 69  or invalid) opti
fa30: 6f 6e 2c 20 64 6f 20 6e 6f 74 20 75 73 65 20 69  on, do not use i
fa40: 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  t...      /// </
fa50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
fa60: 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
fa70: 4e 4f 4e 45 20 3d 20 30 2c 20 2f 2f 20 6e 69 6c  NONE = 0, // nil
fa80: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
fa90: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
faa0: 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  // This option i
fab0: 73 20 75 73 65 64 20 74 6f 20 63 68 61 6e 67 65  s used to change
fac0: 20 74 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   the name of the
fad0: 20 22 6d 61 69 6e 22 20 64 61 74 61 62 61 73 65   "main" database
fae0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 63 68 65  ..      /// sche
faf0: 6d 61 2e 20 20 54 68 65 20 73 6f 6c 65 20 61 72  ma.  The sole ar
fb00: 67 75 6d 65 6e 74 20 69 73 20 61 20 70 6f 69 6e  gument is a poin
fb10: 74 65 72 20 74 6f 20 61 20 63 6f 6e 73 74 61 6e  ter to a constan
fb20: 74 20 55 54 46 38 20 73 74 72 69 6e 67 0d 0a 20  t UTF8 string.. 
fb30: 20 20 20 20 20 2f 2f 2f 20 77 68 69 63 68 20 77       /// which w
fb40: 69 6c 6c 20 62 65 63 6f 6d 65 20 74 68 65 20 6e  ill become the n
fb50: 65 77 20 73 63 68 65 6d 61 20 6e 61 6d 65 20 69  ew schema name i
fb60: 6e 20 70 6c 61 63 65 20 6f 66 20 22 6d 61 69 6e  n place of "main
fb70: 22 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  "...      /// </
fb80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
fb90: 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
fba0: 4d 41 49 4e 44 42 4e 41 4d 45 20 3d 20 31 30 30  MAINDBNAME = 100
fbb0: 30 2c 20 2f 2f 20 63 68 61 72 2a 0d 0a 0d 0a 20  0, // char*.... 
fbc0: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
fbd0: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54 68  y>..      /// Th
fbe0: 69 73 20 6f 70 74 69 6f 6e 20 69 73 20 75 73 65  is option is use
fbf0: 64 20 74 6f 20 63 6f 6e 66 69 67 75 72 65 20 74  d to configure t
fc00: 68 65 20 6c 6f 6f 6b 61 73 69 64 65 20 6d 65 6d  he lookaside mem
fc10: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 2e 0d 0a  ory allocator...
fc20: 20 20 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 61        /// The va
fc30: 6c 75 65 20 6d 75 73 74 20 62 65 20 61 6e 20 61  lue must be an a
fc40: 72 72 61 79 20 77 69 74 68 20 74 68 72 65 65 20  rray with three 
fc50: 65 6c 65 6d 65 6e 74 73 2e 20 20 54 68 65 20 73  elements.  The s
fc60: 65 63 6f 6e 64 20 65 6c 65 6d 65 6e 74 0d 0a 20  econd element.. 
fc70: 20 20 20 20 20 2f 2f 2f 20 6d 75 73 74 20 62 65       /// must be
fc80: 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22 49   an <see cref="I
fc90: 6e 74 33 32 22 20 2f 3e 20 63 6f 6e 74 61 69 6e  nt32" /> contain
fca0: 69 6e 67 20 74 68 65 20 73 69 7a 65 20 6f 66 20  ing the size of 
fcb0: 65 61 63 68 20 62 75 66 66 65 72 0d 0a 20 20 20  each buffer..   
fcc0: 20 20 20 2f 2f 2f 20 73 6c 6f 74 2e 20 20 54 68     /// slot.  Th
fcd0: 65 20 74 68 69 72 64 20 65 6c 65 6d 65 6e 74 20  e third element 
fce0: 6d 75 73 74 20 62 65 20 61 6e 20 3c 73 65 65 20  must be an <see 
fcf0: 63 72 65 66 3d 22 49 6e 74 33 32 22 20 2f 3e 20  cref="Int32" /> 
fd00: 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20 20 20 20  containing..    
fd10: 20 20 2f 2f 2f 20 74 68 65 20 6e 75 6d 62 65 72    /// the number
fd20: 20 6f 66 20 73 6c 6f 74 73 2e 20 20 54 68 65 20   of slots.  The 
fd30: 66 69 72 73 74 20 65 6c 65 6d 65 6e 74 20 6d 75  first element mu
fd40: 73 74 20 62 65 20 61 6e 20 3c 73 65 65 20 63 72  st be an <see cr
fd50: 65 66 3d 22 49 6e 74 50 74 72 22 20 2f 3e 0d 0a  ef="IntPtr" />..
fd60: 20 20 20 20 20 20 2f 2f 2f 20 74 68 61 74 20 70        /// that p
fd70: 6f 69 6e 74 73 20 74 6f 20 61 20 6e 61 74 69 76  oints to a nativ
fd80: 65 20 6d 65 6d 6f 72 79 20 62 75 66 66 65 72 20  e memory buffer 
fd90: 6f 66 20 62 79 74 65 73 20 65 71 75 61 6c 20 74  of bytes equal t
fda0: 6f 20 6f 72 20 67 72 65 61 74 65 72 0d 0a 20 20  o or greater..  
fdb0: 20 20 20 20 2f 2f 2f 20 74 68 61 6e 20 74 68 65      /// than the
fdc0: 20 70 72 6f 64 75 63 74 20 6f 66 20 74 68 65 20   product of the 
fdd0: 73 65 63 6f 6e 64 20 61 6e 64 20 74 68 69 72 64  second and third
fde0: 20 65 6c 65 6d 65 6e 74 20 76 61 6c 75 65 73 2e   element values.
fdf0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
fe00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 53 51  mmary>..      SQ
fe10: 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4c 4f  LITE_DBCONFIG_LO
fe20: 4f 4b 41 53 49 44 45 20 3d 20 31 30 30 31 2c 20  OKASIDE = 1001, 
fe30: 2f 2f 20 76 6f 69 64 2a 20 69 6e 74 20 69 6e 74  // void* int int
fe40: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
fe50: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
fe60: 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  // This option i
fe70: 73 20 75 73 65 64 20 74 6f 20 65 6e 61 62 6c 65  s used to enable
fe80: 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20   or disable the 
fe90: 65 6e 66 6f 72 63 65 6d 65 6e 74 20 6f 66 0d 0a  enforcement of..
fea0: 20 20 20 20 20 20 2f 2f 2f 20 66 6f 72 65 69 67        /// foreig
feb0: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
fec0: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
fed0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
fee0: 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
fef0: 45 4e 41 42 4c 45 5f 46 4b 45 59 20 3d 20 31 30  ENABLE_FKEY = 10
ff00: 30 32 2c 20 2f 2f 20 69 6e 74 20 69 6e 74 2a 0d  02, // int int*.
ff10: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
ff20: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
ff30: 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69 73  / This option is
ff40: 20 75 73 65 64 20 74 6f 20 65 6e 61 62 6c 65 20   used to enable 
ff50: 6f 72 20 64 69 73 61 62 6c 65 20 74 72 69 67 67  or disable trigg
ff60: 65 72 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ers...      /// 
ff70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
ff80: 20 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49    SQLITE_DBCONFI
ff90: 47 5f 45 4e 41 42 4c 45 5f 54 52 49 47 47 45 52  G_ENABLE_TRIGGER
ffa0: 20 3d 20 31 30 30 33 2c 20 2f 2f 20 69 6e 74 20   = 1003, // int 
ffb0: 69 6e 74 2a 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  int*....      //
ffc0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
ffd0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 70 74 69     /// This opti
ffe0: 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  on is used to en
fff0: 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20  able or disable 
10000 74 68 65 20 74 77 6f 2d 61 72 67 75 6d 65 6e 74  the two-argument
10010 20 76 65 72 73 69 6f 6e 0d 0a 20 20 20 20 20 20   version..      
10020 2f 2f 2f 20 6f 66 20 74 68 65 20 66 74 73 33 5f  /// of the fts3_
10030 74 6f 6b 65 6e 69 7a 65 72 28 29 20 66 75 6e 63  tokenizer() func
10040 74 69 6f 6e 20 77 68 69 63 68 20 69 73 20 70 61  tion which is pa
10050 72 74 20 6f 66 20 74 68 65 20 46 54 53 33 20 66  rt of the FTS3 f
10060 75 6c 6c 2d 74 65 78 74 0d 0a 20 20 20 20 20 20  ull-text..      
10070 2f 2f 2f 20 73 65 61 72 63 68 20 65 6e 67 69 6e  /// search engin
10080 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20  e extension...  
10090 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
100a0 79 3e 0d 0a 20 20 20 20 20 20 53 51 4c 49 54 45  y>..      SQLITE
100b0 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45  _DBCONFIG_ENABLE
100c0 5f 46 54 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 20  _FTS3_TOKENIZER 
100d0 3d 20 31 30 30 34 2c 20 2f 2f 20 69 6e 74 20 69  = 1004, // int i
100e0 6e 74 2a 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  nt*....      ///
100f0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
10100 20 20 2f 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f    /// This optio
10110 6e 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 61  n is used to ena
10120 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20 74  ble or disable t
10130 68 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78  he loading of ex
10140 74 65 6e 73 69 6f 6e 73 2e 0d 0a 20 20 20 20 20  tensions...     
10150 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
10160 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f 44 42  .      SQLITE_DB
10170 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f  CONFIG_ENABLE_LO
10180 41 44 5f 45 58 54 45 4e 53 49 4f 4e 20 3d 20 31  AD_EXTENSION = 1
10190 30 30 35 2c 20 2f 2f 20 69 6e 74 20 69 6e 74 2a  005, // int int*
101a0 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
101b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
101c0 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20 69  // This option i
101d0 73 20 75 73 65 64 20 74 6f 20 65 6e 61 62 6c 65  s used to enable
101e0 20 6f 72 20 64 69 73 61 62 6c 65 20 74 68 65 20   or disable the 
101f0 61 75 74 6f 6d 61 74 69 63 20 63 68 65 63 6b 70  automatic checkp
10200 6f 69 6e 74 69 6e 67 0d 0a 20 20 20 20 20 20 2f  ointing..      /
10210 2f 2f 20 77 68 65 6e 20 61 20 57 41 4c 20 64 61  // when a WAL da
10220 74 61 62 61 73 65 20 69 73 20 63 6c 6f 73 65 64  tabase is closed
10230 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
10240 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 53  ummary>..      S
10250 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 4e  QLITE_DBCONFIG_N
10260 4f 5f 43 4b 50 54 5f 4f 4e 5f 43 4c 4f 53 45 20  O_CKPT_ON_CLOSE 
10270 3d 20 31 30 30 36 2c 20 2f 2f 20 69 6e 74 20 69  = 1006, // int i
10280 6e 74 2a 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  nt*....      ///
10290 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
102a0 20 20 2f 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f    /// This optio
102b0 6e 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e 61  n is used to ena
102c0 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20 74  ble or disable t
102d0 68 65 20 71 75 65 72 79 20 70 6c 61 6e 6e 65 72  he query planner
102e0 20 73 74 61 62 69 6c 69 74 79 0d 0a 20 20 20 20   stability..    
102f0 20 20 2f 2f 2f 20 67 75 61 72 61 6e 74 65 65 20    /// guarantee 
10300 28 51 50 53 47 29 2e 0d 0a 20 20 20 20 20 20 2f  (QPSG)...      /
10310 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
10320 20 20 20 20 20 53 51 4c 49 54 45 5f 44 42 43 4f       SQLITE_DBCO
10330 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 51 50 53 47  NFIG_ENABLE_QPSG
10340 20 3d 20 31 30 30 37 2c 20 2f 2f 20 69 6e 74 20   = 1007, // int 
10350 69 6e 74 2a 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  int*....      //
10360 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
10370 20 20 20 2f 2f 2f 20 54 68 69 73 20 6f 70 74 69     /// This opti
10380 6f 6e 20 69 73 20 75 73 65 64 20 74 6f 20 65 6e  on is used to en
10390 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c 65 20  able or disable 
103a0 74 68 65 20 65 78 74 72 61 20 45 58 50 4c 41 49  the extra EXPLAI
103b0 4e 20 51 55 45 52 59 20 50 4c 41 4e 0d 0a 20 20  N QUERY PLAN..  
103c0 20 20 20 20 2f 2f 2f 20 6f 75 74 70 75 74 20 66      /// output f
103d0 6f 72 20 74 72 69 67 67 65 72 20 70 72 6f 67 72  or trigger progr
103e0 61 6d 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ams...      /// 
103f0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
10400 20 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49    SQLITE_DBCONFI
10410 47 5f 54 52 49 47 47 45 52 5f 45 51 50 20 3d 20  G_TRIGGER_EQP = 
10420 31 30 30 38 2c 20 2f 2f 20 69 6e 74 20 69 6e 74  1008, // int int
10430 2a 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  *....      /// <
10440 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
10450 2f 2f 2f 20 54 68 69 73 20 6f 70 74 69 6f 6e 20  /// This option 
10460 69 73 20 75 73 65 64 20 61 73 20 70 61 72 74 20  is used as part 
10470 6f 66 20 74 68 65 20 70 72 6f 63 65 73 73 20 74  of the process t
10480 6f 20 72 65 73 65 74 20 61 20 64 61 74 61 62 61  o reset a databa
10490 73 65 20 62 61 63 6b 0d 0a 20 20 20 20 20 20 2f  se back..      /
104a0 2f 2f 20 74 6f 20 61 6e 20 65 6d 70 74 79 20 73  // to an empty s
104b0 74 61 74 65 2e 20 20 42 65 63 61 75 73 65 20 72  tate.  Because r
104c0 65 73 65 74 74 69 6e 67 20 61 20 64 61 74 61 62  esetting a datab
104d0 61 73 65 20 69 73 20 64 65 73 74 72 75 63 74 69  ase is destructi
104e0 76 65 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f  ve and..      //
104f0 2f 20 69 72 72 65 76 65 72 73 69 62 6c 65 2c 20  / irreversible, 
10500 74 68 65 20 70 72 6f 63 65 73 73 20 72 65 71 75  the process requ
10510 69 72 65 73 20 74 68 65 20 75 73 65 20 6f 66 20  ires the use of 
10520 74 68 69 73 20 6f 62 73 63 75 72 65 20 66 6c 61  this obscure fla
10530 67 20 61 6e 64 0d 0a 20 20 20 20 20 20 2f 2f 2f  g and..      ///
10540 20 6d 75 6c 74 69 70 6c 65 20 73 74 65 70 73 20   multiple steps 
10550 74 6f 20 68 65 6c 70 20 65 6e 73 75 72 65 20 74  to help ensure t
10560 68 61 74 20 69 74 20 64 6f 65 73 20 6e 6f 74 20  hat it does not 
10570 68 61 70 70 65 6e 20 62 79 20 61 63 63 69 64 65  happen by accide
10580 6e 74 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  nt...      /// <
10590 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
105a0 20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47   SQLITE_DBCONFIG
105b0 5f 52 45 53 45 54 5f 44 41 54 41 42 41 53 45 20  _RESET_DATABASE 
105c0 3d 20 31 30 30 39 20 2f 2f 20 69 6e 74 20 69 6e  = 1009 // int in
105d0 74 2a 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 20  t*..  }....  // 
105e0 54 68 65 73 65 20 61 72 65 20 74 68 65 20 6f 70  These are the op
105f0 74 69 6f 6e 73 20 74 6f 20 74 68 65 20 69 6e 74  tions to the int
10600 65 72 6e 61 6c 20 73 71 6c 69 74 65 33 5f 63 6f  ernal sqlite3_co
10610 6e 66 69 67 20 63 61 6c 6c 2e 0d 0a 20 20 69 6e  nfig call...  in
10620 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69  ternal enum SQLi
10630 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 0d  teConfigOpsEnum.
10640 0a 20 20 7b 0d 0a 20 20 20 20 53 51 4c 49 54 45  .  {..    SQLITE
10650 5f 43 4f 4e 46 49 47 5f 4e 4f 4e 45 20 3d 20 30  _CONFIG_NONE = 0
10660 2c 20 2f 2f 20 6e 69 6c 0d 0a 20 20 20 20 53 51  , // nil..    SQ
10670 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47  LITE_CONFIG_SING
10680 4c 45 54 48 52 45 41 44 20 3d 20 31 2c 20 2f 2f  LETHREAD = 1, //
10690 20 6e 69 6c 0d 0a 20 20 20 20 53 51 4c 49 54 45   nil..    SQLITE
106a0 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
106b0 45 41 44 20 3d 20 32 2c 20 2f 2f 20 6e 69 6c 0d  EAD = 2, // nil.
106c0 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
106d0 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 20 3d 20  IG_SERIALIZED = 
106e0 33 2c 20 2f 2f 20 6e 69 6c 0d 0a 20 20 20 20 53  3, // nil..    S
106f0 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 41 4c  QLITE_CONFIG_MAL
10700 4c 4f 43 20 3d 20 34 2c 20 2f 2f 20 73 71 6c 69  LOC = 4, // sqli
10710 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a  te3_mem_methods*
10720 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
10730 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43 20 3d 20  FIG_GETMALLOC = 
10740 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 65  5, // sqlite3_me
10750 6d 5f 6d 65 74 68 6f 64 73 2a 0d 0a 20 20 20 20  m_methods*..    
10760 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 53 43  SQLITE_CONFIG_SC
10770 52 41 54 43 48 20 3d 20 36 2c 20 2f 2f 20 76 6f  RATCH = 6, // vo
10780 69 64 2a 2c 20 69 6e 74 20 73 7a 2c 20 69 6e 74  id*, int sz, int
10790 20 4e 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43   N..    SQLITE_C
107a0 4f 4e 46 49 47 5f 50 41 47 45 43 41 43 48 45 20  ONFIG_PAGECACHE 
107b0 3d 20 37 2c 20 2f 2f 20 76 6f 69 64 2a 2c 20 69  = 7, // void*, i
107c0 6e 74 20 73 7a 2c 20 69 6e 74 20 4e 0d 0a 20 20  nt sz, int N..  
107d0 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
107e0 48 45 41 50 20 3d 20 38 2c 20 2f 2f 20 76 6f 69  HEAP = 8, // voi
107f0 64 2a 2c 20 69 6e 74 20 6e 42 79 74 65 2c 20 69  d*, int nByte, i
10800 6e 74 20 6d 69 6e 0d 0a 20 20 20 20 53 51 4c 49  nt min..    SQLI
10810 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41  TE_CONFIG_MEMSTA
10820 54 55 53 20 3d 20 39 2c 20 2f 2f 20 62 6f 6f 6c  TUS = 9, // bool
10830 65 61 6e 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  ean..    SQLITE_
10840 43 4f 4e 46 49 47 5f 4d 55 54 45 58 20 3d 20 31  CONFIG_MUTEX = 1
10850 30 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 75  0, // sqlite3_mu
10860 74 65 78 5f 6d 65 74 68 6f 64 73 2a 0d 0a 20 20  tex_methods*..  
10870 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
10880 47 45 54 4d 55 54 45 58 20 3d 20 31 31 2c 20 2f  GETMUTEX = 11, /
10890 2f 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  / sqlite3_mutex_
108a0 6d 65 74 68 6f 64 73 2a 0d 0a 20 20 20 20 2f 2f  methods*..    //
108b0 20 70 72 65 76 69 6f 75 73 6c 79 20 53 51 4c 49   previously SQLI
108c0 54 45 5f 43 4f 4e 46 49 47 5f 43 48 55 4e 4b 41  TE_CONFIG_CHUNKA
108d0 4c 4c 4f 43 20 31 32 20 77 68 69 63 68 20 69 73  LLOC 12 which is
108e0 20 6e 6f 77 20 75 6e 75 73 65 64 0d 0a 20 20 20   now unused..   
108f0 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4c   SQLITE_CONFIG_L
10900 4f 4f 4b 41 53 49 44 45 20 3d 20 31 33 2c 20 2f  OOKASIDE = 13, /
10910 2f 20 69 6e 74 20 69 6e 74 0d 0a 20 20 20 20 53  / int int..    S
10920 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50 43 41  QLITE_CONFIG_PCA
10930 43 48 45 20 3d 20 31 34 2c 20 2f 2f 20 73 71 6c  CHE = 14, // sql
10940 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68  ite3_pcache_meth
10950 6f 64 73 2a 0d 0a 20 20 20 20 53 51 4c 49 54 45  ods*..    SQLITE
10960 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43 41 43 48  _CONFIG_GETPCACH
10970 45 20 3d 20 31 35 2c 20 2f 2f 20 73 71 6c 69 74  E = 15, // sqlit
10980 65 33 5f 70 63 61 63 68 65 5f 6d 65 74 68 6f 64  e3_pcache_method
10990 73 2a 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  s*..    SQLITE_C
109a0 4f 4e 46 49 47 5f 4c 4f 47 20 3d 20 31 36 2c 20  ONFIG_LOG = 16, 
109b0 2f 2f 20 78 46 75 6e 63 2c 20 76 6f 69 64 2a 0d  // xFunc, void*.
109c0 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
109d0 49 47 5f 55 52 49 20 3d 20 31 37 2c 20 2f 2f 20  IG_URI = 17, // 
109e0 69 6e 74 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  int..    SQLITE_
109f0 43 4f 4e 46 49 47 5f 50 43 41 43 48 45 32 20 3d  CONFIG_PCACHE2 =
10a00 20 31 38 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f   18, // sqlite3_
10a10 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 2a  pcache_methods2*
10a20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
10a30 46 49 47 5f 47 45 54 50 43 41 43 48 45 32 20 3d  FIG_GETPCACHE2 =
10a40 20 31 39 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f   19, // sqlite3_
10a50 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 32 2a  pcache_methods2*
10a60 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
10a70 46 49 47 5f 43 4f 56 45 52 49 4e 47 5f 49 4e 44  FIG_COVERING_IND
10a80 45 58 5f 53 43 41 4e 20 3d 20 32 30 2c 20 2f 2f  EX_SCAN = 20, //
10a90 20 69 6e 74 0d 0a 20 20 20 20 53 51 4c 49 54 45   int..    SQLITE
10aa0 5f 43 4f 4e 46 49 47 5f 53 51 4c 4c 4f 47 20 3d  _CONFIG_SQLLOG =
10ab0 20 32 31 2c 20 2f 2f 20 78 53 71 6c 6c 6f 67 2c   21, // xSqllog,
10ac0 20 76 6f 69 64 2a 0d 0a 20 20 20 20 53 51 4c 49   void*..    SQLI
10ad0 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50 5f 53  TE_CONFIG_MMAP_S
10ae0 49 5a 45 20 3d 20 32 32 2c 20 2f 2f 20 73 71 6c  IZE = 22, // sql
10af0 69 74 65 33 5f 69 6e 74 36 34 2c 20 73 71 6c 69  ite3_int64, sqli
10b00 74 65 33 5f 69 6e 74 36 34 0d 0a 20 20 20 20 53  te3_int64..    S
10b10 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 57 49 4e  QLITE_CONFIG_WIN
10b20 33 32 5f 48 45 41 50 53 49 5a 45 20 3d 20 32 33  32_HEAPSIZE = 23
10b30 2c 20 2f 2f 20 69 6e 74 20 6e 42 79 74 65 0d 0a  , // int nByte..
10b40 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
10b50 47 5f 50 43 41 43 48 45 5f 48 44 52 53 5a 20 3d  G_PCACHE_HDRSZ =
10b60 20 32 34 2c 20 2f 2f 20 69 6e 74 20 2a 70 73 7a   24, // int *psz
10b70 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
10b80 46 49 47 5f 50 4d 41 53 5a 20 3d 20 32 35 20 2f  FIG_PMASZ = 25 /
10b90 2f 20 75 6e 73 69 67 6e 65 64 20 69 6e 74 20 73  / unsigned int s
10ba0 7a 50 6d 61 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f  zPma..  }....  /
10bb0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
10bc0 2f 2f 2f 20 54 68 65 73 65 20 63 6f 6e 73 74 61  /// These consta
10bd0 6e 74 73 20 61 72 65 20 75 73 65 64 20 77 69 74  nts are used wit
10be0 68 20 74 68 65 20 73 71 6c 69 74 65 33 5f 74 72  h the sqlite3_tr
10bf0 61 63 65 5f 76 32 28 29 20 41 50 49 20 61 6e 64  ace_v2() API and
10c00 20 74 68 65 0d 0a 20 20 2f 2f 2f 20 63 61 6c 6c   the..  /// call
10c10 62 61 63 6b 73 20 72 65 67 69 73 74 65 72 65 64  backs registered
10c20 20 62 79 20 69 74 2e 0d 0a 20 20 2f 2f 2f 20 3c   by it...  /// <
10c30 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 5b 46 6c  /summary>..  [Fl
10c40 61 67 73 28 29 5d 0d 0a 20 20 69 6e 74 65 72 6e  ags()]..  intern
10c50 61 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65 54 72  al enum SQLiteTr
10c60 61 63 65 46 6c 61 67 73 0d 0a 20 20 7b 0d 0a 20  aceFlags..  {.. 
10c70 20 20 20 20 20 53 51 4c 49 54 45 5f 54 52 41 43       SQLITE_TRAC
10c80 45 5f 4e 4f 4e 45 20 3d 20 30 78 30 2c 20 2f 2f  E_NONE = 0x0, //
10c90 20 6e 69 6c 0d 0a 20 20 20 20 20 20 53 51 4c 49   nil..      SQLI
10ca0 54 45 5f 54 52 41 43 45 5f 53 54 4d 54 20 3d 20  TE_TRACE_STMT = 
10cb0 30 78 31 2c 20 2f 2f 20 70 53 74 6d 74 2c 20 7a  0x1, // pStmt, z
10cc0 53 71 6c 0d 0a 20 20 20 20 20 20 53 51 4c 49 54  Sql..      SQLIT
10cd0 45 5f 54 52 41 43 45 5f 50 52 4f 46 49 4c 45 20  E_TRACE_PROFILE 
10ce0 3d 20 30 78 32 2c 20 2f 2f 20 70 53 74 6d 74 2c  = 0x2, // pStmt,
10cf0 20 70 69 4e 73 65 63 36 34 0d 0a 20 20 20 20 20   piNsec64..     
10d00 20 53 51 4c 49 54 45 5f 54 52 41 43 45 5f 52 4f   SQLITE_TRACE_RO
10d10 57 20 3d 20 30 78 34 2c 20 2f 2f 20 70 53 74 6d  W = 0x4, // pStm
10d20 74 0d 0a 20 20 20 20 20 20 53 51 4c 49 54 45 5f  t..      SQLITE_
10d30 54 52 41 43 45 5f 43 4c 4f 53 45 20 3d 20 30 78  TRACE_CLOSE = 0x
10d40 38 20 2f 2f 20 70 44 62 0d 0a 20 20 7d 0d 0a 7d  8 // pDb..  }..}
10d50 0d 0a                                            ..