System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact a689528ae87647f42576e7250f98c4c6f8a47a85:


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 20 0d 0a  soft.com).. * ..
00b0: 20 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74   * Released to t
00c0: 68 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e  he public domain
00d0: 2c 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77  , use at your ow
00e0: 6e 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a  n 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 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65  **/....namespace
0130: 20 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c   System.Data.SQL
0140: 69 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20  ite..{..  using 
0150: 53 79 73 74 65 6d 3b 0d 0a 0d 0a 23 69 66 20 21  System;....#if !
0160: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
0170: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 75 73 69  FRAMEWORK..  usi
0180: 6e 67 20 53 79 73 74 65 6d 2e 52 75 6e 74 69 6d  ng System.Runtim
0190: 65 2e 49 6e 74 65 72 6f 70 53 65 72 76 69 63 65  e.InteropService
01a0: 73 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20  s;..#endif....  
01b0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
01c0: 20 2f 2f 2f 20 54 68 69 73 20 69 6e 74 65 72 6e   /// This intern
01d0: 61 6c 20 63 6c 61 73 73 20 70 72 6f 76 69 64 65  al class provide
01e0: 73 20 74 68 65 20 66 6f 75 6e 64 61 74 69 6f 6e  s the foundation
01f0: 20 6f 66 20 53 51 4c 69 74 65 20 73 75 70 70 6f   of SQLite suppo
0200: 72 74 2e 20 20 49 74 20 64 65 66 69 6e 65 73 20  rt.  It defines 
0210: 61 6c 6c 20 74 68 65 20 61 62 73 74 72 61 63 74  all the abstract
0220: 20 6d 65 6d 62 65 72 73 20 6e 65 65 64 65 64 20   members needed 
0230: 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 0d 0a 20 20  to implement..  
0240: 2f 2f 2f 20 61 20 53 51 4c 69 74 65 20 64 61 74  /// a SQLite dat
0250: 61 20 70 72 6f 76 69 64 65 72 2c 20 61 6e 64 20  a provider, and 
0260: 69 6e 68 65 72 69 74 73 20 66 72 6f 6d 20 53 51  inherits from SQ
0270: 4c 69 74 65 43 6f 6e 76 65 72 74 20 77 68 69 63  LiteConvert whic
0280: 68 20 61 6c 6c 6f 77 73 20 66 6f 72 20 73 69 6d  h allows for sim
0290: 70 6c 65 20 74 72 61 6e 73 6c 61 74 69 6f 6e 73  ple translations
02a0: 20 6f 66 20 73 74 72 69 6e 67 20 74 6f 20 61 6e   of string to an
02b0: 64 20 66 72 6f 6d 20 53 51 4c 69 74 65 2e 0d 0a  d from SQLite...
02c0: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
02d0: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73  ..  internal abs
02e0: 74 72 61 63 74 20 63 6c 61 73 73 20 53 51 4c 69  tract class SQLi
02f0: 74 65 42 61 73 65 20 3a 20 53 51 4c 69 74 65 43  teBase : SQLiteC
0300: 6f 6e 76 65 72 74 2c 20 49 44 69 73 70 6f 73 61  onvert, IDisposa
0310: 62 6c 65 0d 0a 20 20 7b 0d 0a 20 20 20 20 69 6e  ble..  {..    in
0320: 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 42 61 73  ternal SQLiteBas
0330: 65 28 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d  e(SQLiteDateForm
0340: 61 74 73 20 66 6d 74 2c 20 44 61 74 65 54 69 6d  ats fmt, DateTim
0350: 65 4b 69 6e 64 20 6b 69 6e 64 2c 20 73 74 72 69  eKind kind, stri
0360: 6e 67 20 66 6d 74 53 74 72 69 6e 67 29 0d 0a 20  ng fmtString).. 
0370: 20 20 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c       : base(fmt,
0380: 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67   kind, fmtString
0390: 29 20 7b 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  ) { }....    ///
03a0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
03b0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 61 20 73 74  /// Returns a st
03c0: 72 69 6e 67 20 72 65 70 72 65 73 65 6e 74 69 6e  ring representin
03d0: 67 20 74 68 65 20 61 63 74 69 76 65 20 76 65 72  g the active ver
03e0: 73 69 6f 6e 20 6f 66 20 53 51 4c 69 74 65 0d 0a  sion of SQLite..
03f0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0400: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
0410: 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67   abstract string
0420: 20 56 65 72 73 69 6f 6e 20 7b 20 67 65 74 3b 20   Version { get; 
0430: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0440: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
0450: 74 75 72 6e 73 20 61 6e 20 69 6e 74 65 67 65 72  turns an integer
0460: 20 72 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68   representing th
0470: 65 20 61 63 74 69 76 65 20 76 65 72 73 69 6f 6e  e active version
0480: 20 6f 66 20 53 51 4c 69 74 65 0d 0a 20 20 20 20   of SQLite..    
0490: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
04a0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
04b0: 74 72 61 63 74 20 69 6e 74 20 56 65 72 73 69 6f  tract int Versio
04c0: 6e 4e 75 6d 62 65 72 20 7b 20 67 65 74 3b 20 7d  nNumber { get; }
04d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
04e0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
04f0: 75 72 6e 73 20 74 68 65 20 72 6f 77 69 64 20 6f  urns the rowid o
0500: 66 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e  f the most recen
0510: 74 20 73 75 63 63 65 73 73 66 75 6c 20 49 4e 53  t successful INS
0520: 45 52 54 20 69 6e 74 6f 20 74 68 65 20 64 61 74  ERT into the dat
0530: 61 62 61 73 65 20 66 72 6f 6d 20 74 68 69 73 20  abase from this 
0540: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20  connection...   
0550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0560: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
0570: 73 74 72 61 63 74 20 6c 6f 6e 67 20 4c 61 73 74  stract long Last
0580: 49 6e 73 65 72 74 52 6f 77 49 64 20 7b 20 67 65  InsertRowId { ge
0590: 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  t; }..    /// <s
05a0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
05b0: 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e 75 6d   Returns the num
05c0: 62 65 72 20 6f 66 20 63 68 61 6e 67 65 73 20 74  ber of changes t
05d0: 68 65 20 6c 61 73 74 20 65 78 65 63 75 74 69 6e  he last executin
05e0: 67 20 69 6e 73 65 72 74 2f 75 70 64 61 74 65 20  g insert/update 
05f0: 63 61 75 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  caused...    ///
0600: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
0610: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
0620: 63 74 20 69 6e 74 20 43 68 61 6e 67 65 73 20 7b  ct int Changes {
0630: 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f 2f   get; }..    ///
0640: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0650: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
0660: 61 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79  amount of memory
0670: 20 28 69 6e 20 62 79 74 65 73 29 20 63 75 72 72   (in bytes) curr
0680: 65 6e 74 6c 79 20 69 6e 20 75 73 65 20 62 79 20  ently in use by 
0690: 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
06a0: 6c 69 62 72 61 72 79 2e 20 20 54 68 69 73 20 69  library.  This i
06b0: 73 20 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20 70  s not really a p
06c0: 65 72 2d 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20  er-connection.. 
06d0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 2c 20 69 74     /// value, it
06e0: 20 69 73 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68   is global to th
06f0: 65 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  e process...    
0700: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
0710: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
0720: 74 72 61 63 74 20 6c 6f 6e 67 20 4d 65 6d 6f 72  tract long Memor
0730: 79 55 73 65 64 20 7b 20 67 65 74 3b 20 7d 0d 0a  yUsed { get; }..
0740: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0750: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
0760: 6e 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 61  ns the maximum a
0770: 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20  mount of memory 
0780: 28 69 6e 20 62 79 74 65 73 29 20 75 73 65 64 20  (in bytes) used 
0790: 62 79 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  by the SQLite co
07a0: 72 65 20 6c 69 62 72 61 72 79 20 73 69 6e 63 65  re library since
07b0: 20 74 68 65 20 68 69 67 68 2d 77 61 74 65 72 20   the high-water 
07c0: 6d 61 72 6b 20 77 61 73 20 6c 61 73 74 20 72 65  mark was last re
07d0: 73 65 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  set...    /// Th
07e0: 69 73 20 69 73 20 6e 6f 74 20 72 65 61 6c 6c 79  is is not really
07f0: 20 61 20 70 65 72 2d 63 6f 6e 6e 65 63 74 69 6f   a per-connectio
0800: 6e 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 67  n value, it is g
0810: 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20 70 72 6f  lobal to the pro
0820: 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  cess...    /// <
0830: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
0840: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
0850: 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68   long MemoryHigh
0860: 77 61 74 65 72 20 7b 20 67 65 74 3b 20 7d 0d 0a  water { get; }..
0870: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0880: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 73 20  >..    /// Sets 
0890: 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74 68  the status of th
08a0: 65 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 74  e memory usage t
08b0: 72 61 63 6b 69 6e 67 20 73 75 62 73 79 73 74 65  racking subsyste
08c0: 6d 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20  m in the SQLite 
08d0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20 42  core library.  B
08e0: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20  y default, this 
08f0: 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20  is enabled...   
0900: 20 2f 2f 2f 20 49 66 20 74 68 69 73 20 69 73 20   /// If this is 
0910: 64 69 73 61 62 6c 65 64 2c 20 6d 65 6d 6f 72 79  disabled, memory
0920: 20 75 73 61 67 65 20 74 72 61 63 6b 69 6e 67 20   usage tracking 
0930: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70 65 72 66  will not be perf
0940: 6f 72 6d 65 64 2e 20 20 54 68 69 73 20 69 73 20  ormed.  This is 
0950: 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20 70 65 72  not really a per
0960: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 76 61 6c 75  -connection valu
0970: 65 2c 20 69 74 20 69 73 0d 0a 20 20 20 20 2f 2f  e, it is..    //
0980: 2f 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  / global to the 
0990: 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
09a0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
09b0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
09c0: 65 3d 22 76 61 6c 75 65 22 3e 4e 6f 6e 2d 7a 65  e="value">Non-ze
09d0: 72 6f 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ro to enable mem
09e0: 6f 72 79 20 75 73 61 67 65 20 74 72 61 63 6b 69  ory usage tracki
09f0: 6e 67 2c 20 7a 65 72 6f 20 6f 74 68 65 72 77 69  ng, zero otherwi
0a00: 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
0a10: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20   /// <returns>A 
0a20: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
0a30: 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65  return code (i.e
0a40: 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65  . zero for succe
0a50: 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 20  ss and non-zero 
0a60: 66 6f 72 20 66 61 69 6c 75 72 65 29 2e 3c 2f 72  for failure).</r
0a70: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
0a80: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53  ernal abstract S
0a90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
0aa0: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
0ab0: 6f 6f 6c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ool value);..   
0ac0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0ad0: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
0ae0: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
0af0: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
0b00: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
0b10: 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f  ith different co
0b20: 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20  nfig options... 
0b30: 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64     /// We depend
0b40: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
0b50: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
0b60: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
0b70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
0b80: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53  ernal abstract S
0b90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
0ba0: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
0bb0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0bc0: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e     /// Returns n
0bd0: 6f 6e 2d 7a 65 72 6f 20 69 66 20 61 20 64 61 74  on-zero if a dat
0be0: 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
0bf0: 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f   is open...    /
0c00: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
0c10: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
0c20: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
0c30: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
0c40: 74 20 62 6f 6f 6c 20 49 73 4f 70 65 6e 28 29 3b  t bool IsOpen();
0c50: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0c60: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4f 70 65  ry>..    /// Ope
0c70: 6e 73 20 61 20 64 61 74 61 62 61 73 65 2e 0d 0a  ns a database...
0c80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0c90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 6d  y>..    /// <rem
0ca0: 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 49  arks>..    /// I
0cb0: 6d 70 6c 65 6d 65 6e 74 65 72 73 20 73 68 6f 75  mplementers shou
0cc0: 6c 64 20 63 61 6c 6c 20 53 51 4c 69 74 65 46 75  ld call SQLiteFu
0cd0: 6e 63 74 69 6f 6e 2e 42 69 6e 64 46 75 6e 63 74  nction.BindFunct
0ce0: 69 6f 6e 73 28 29 20 61 6e 64 20 73 61 76 65 20  ions() and save 
0cf0: 74 68 65 20 61 72 72 61 79 20 61 66 74 65 72 20  the array after 
0d00: 6f 70 65 6e 69 6e 67 20 61 20 63 6f 6e 6e 65 63  opening a connec
0d10: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f  tion..    /// to
0d20: 20 62 69 6e 64 20 61 6c 6c 20 61 74 74 72 69 62   bind all attrib
0d30: 75 74 65 64 20 75 73 65 72 2d 64 65 66 69 6e 65  uted user-define
0d40: 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64 20  d functions and 
0d50: 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65 6e  collating sequen
0d60: 63 65 73 20 74 6f 20 74 68 65 20 6e 65 77 20 63  ces to the new c
0d70: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
0d80: 2f 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a  /// </remarks>..
0d90: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
0da0: 61 6d 65 3d 22 73 74 72 46 69 6c 65 6e 61 6d 65  ame="strFilename
0db0: 22 3e 54 68 65 20 66 69 6c 65 6e 61 6d 65 20 6f  ">The filename o
0dc0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 74  f the database t
0dd0: 6f 20 6f 70 65 6e 2e 20 20 53 51 4c 69 74 65 20  o open.  SQLite 
0de0: 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 72  automatically cr
0df0: 65 61 74 65 73 20 69 74 20 69 66 20 69 74 20 64  eates it if it d
0e00: 6f 65 73 6e 27 74 20 65 78 69 73 74 2e 3c 2f 70  oesn't exist.</p
0e10: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
0e20: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 6f 6e 6e  param name="conn
0e30: 65 63 74 69 6f 6e 46 6c 61 67 73 22 3e 54 68 65  ectionFlags">The
0e40: 20 66 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65   flags associate
0e50: 64 20 77 69 74 68 20 74 68 65 20 70 61 72 65 6e  d with the paren
0e60: 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a  t connection obj
0e70: 65 63 74 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ect</param>..   
0e80: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
0e90: 3d 22 6f 70 65 6e 46 6c 61 67 73 22 3e 54 68 65  ="openFlags">The
0ea0: 20 6f 70 65 6e 20 66 6c 61 67 73 20 74 6f 20 75   open flags to u
0eb0: 73 65 20 77 68 65 6e 20 63 72 65 61 74 69 6e 67  se when creating
0ec0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 3c   the connection<
0ed0: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
0ee0: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 61   <param name="ma
0ef0: 78 50 6f 6f 6c 53 69 7a 65 22 3e 54 68 65 20 6d  xPoolSize">The m
0f00: 61 78 69 6d 75 6d 20 73 69 7a 65 20 6f 66 20 74  aximum size of t
0f10: 68 65 20 70 6f 6f 6c 20 66 6f 72 20 74 68 65 20  he pool for the 
0f20: 67 69 76 65 6e 20 66 69 6c 65 6e 61 6d 65 3c 2f  given filename</
0f30: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
0f40: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 75 73 65  <param name="use
0f50: 50 6f 6f 6c 22 3e 49 66 20 74 72 75 65 2c 20 74  Pool">If true, t
0f60: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 63 61  he connection ca
0f70: 6e 20 62 65 20 70 75 6c 6c 65 64 20 66 72 6f 6d  n be pulled from
0f80: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20   the connection 
0f90: 70 6f 6f 6c 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  pool</param>..  
0fa0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
0fb0: 61 63 74 20 76 6f 69 64 20 4f 70 65 6e 28 73 74  act void Open(st
0fc0: 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61 6d 65  ring strFilename
0fd0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
0fe0: 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63 74 69  onFlags connecti
0ff0: 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74 65 4f  onFlags, SQLiteO
1000: 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f 70 65  penFlagsEnum ope
1010: 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61 78 50  nFlags, int maxP
1020: 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20 75 73  oolSize, bool us
1030: 65 50 6f 6f 6c 29 3b 0d 0a 20 20 20 20 2f 2f 2f  ePool);..    ///
1040: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1050: 2f 2f 2f 20 43 6c 6f 73 65 73 20 74 68 65 20 63  /// Closes the c
1060: 75 72 72 65 6e 74 6c 79 2d 6f 70 65 6e 20 64 61  urrently-open da
1070: 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f  tabase...    ///
1080: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1090: 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d 0a   /// <remarks>..
10a0: 20 20 20 20 2f 2f 2f 20 41 66 74 65 72 20 74 68      /// After th
10b0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 62  e database has b
10c0: 65 65 6e 20 63 6c 6f 73 65 64 20 69 6d 70 6c 65  een closed imple
10d0: 6d 65 74 65 72 73 20 73 68 6f 75 6c 64 20 63 61  meters should ca
10e0: 6c 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  ll SQLiteFunctio
10f0: 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e  n.UnbindFunction
1100: 73 28 29 20 74 6f 20 64 65 61 6c 6c 6f 63 61 74  s() to deallocat
1110: 65 20 61 6c 6c 20 69 6e 74 65 72 6f 70 20 61 6c  e all interop al
1120: 6c 6f 63 61 74 65 64 0d 0a 20 20 20 20 2f 2f 2f  located..    ///
1130: 20 6d 65 6d 6f 72 79 20 61 73 73 6f 63 69 61 74   memory associat
1140: 65 64 20 77 69 74 68 20 74 68 65 20 75 73 65 72  ed with the user
1150: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
1160: 6e 73 20 61 6e 64 20 63 6f 6c 6c 61 74 69 6e 67  ns and collating
1170: 20 73 65 71 75 65 6e 63 65 73 20 74 69 65 64 20   sequences tied 
1180: 74 6f 20 74 68 65 20 63 6c 6f 73 65 64 20 63 6f  to the closed co
1190: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
11a0: 2f 2f 20 3c 2f 72 65 6d 61 72 6b 73 3e 0d 0a 20  // </remarks>.. 
11b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
11c0: 6d 65 3d 22 63 61 6e 54 68 72 6f 77 22 3e 4e 6f  me="canThrow">No
11d0: 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 6f 70  n-zero if the op
11e0: 65 72 61 74 69 6f 6e 20 69 73 20 61 6c 6c 6f 77  eration is allow
11f0: 65 64 20 74 6f 20 74 68 72 6f 77 20 65 78 63 65  ed to throw exce
1200: 70 74 69 6f 6e 73 2c 20 7a 65 72 6f 20 6f 74 68  ptions, zero oth
1210: 65 72 77 69 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  erwise.</param>.
1220: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1230: 73 74 72 61 63 74 20 76 6f 69 64 20 43 6c 6f 73  stract void Clos
1240: 65 28 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29  e(bool canThrow)
1250: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
1260: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65  ary>..    /// Se
1270: 74 73 20 74 68 65 20 62 75 73 79 20 74 69 6d 65  ts the busy time
1280: 6f 75 74 20 6f 6e 20 74 68 65 20 63 6f 6e 6e 65  out on the conne
1290: 63 74 69 6f 6e 2e 20 20 53 51 4c 69 74 65 43 6f  ction.  SQLiteCo
12a0: 6d 6d 61 6e 64 20 77 69 6c 6c 20 63 61 6c 6c 20  mmand will call 
12b0: 74 68 69 73 20 62 65 66 6f 72 65 20 65 78 65 63  this before exec
12c0: 75 74 69 6e 67 20 61 6e 79 20 63 6f 6d 6d 61 6e  uting any comman
12d0: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
12e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
12f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 54 69  <param name="nTi
1300: 6d 65 6f 75 74 4d 53 22 3e 54 68 65 20 6e 75 6d  meoutMS">The num
1310: 62 65 72 20 6f 66 20 6d 69 6c 6c 69 73 65 63 6f  ber of milliseco
1320: 6e 64 73 20 74 6f 20 77 61 69 74 20 62 65 66 6f  nds to wait befo
1330: 72 65 20 72 65 74 75 72 6e 69 6e 67 20 53 51 4c  re returning SQL
1340: 49 54 45 5f 42 55 53 59 3c 2f 70 61 72 61 6d 3e  ITE_BUSY</param>
1350: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
1360: 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74  bstract void Set
1370: 54 69 6d 65 6f 75 74 28 69 6e 74 20 6e 54 69 6d  Timeout(int nTim
1380: 65 6f 75 74 4d 53 29 3b 0d 0a 20 20 20 20 2f 2f  eoutMS);..    //
1390: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
13a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
13b0: 20 74 65 78 74 20 6f 66 20 74 68 65 20 6c 61 73   text of the las
13c0: 74 20 65 72 72 6f 72 20 69 73 73 75 65 64 20 62  t error issued b
13d0: 79 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f  y SQLite..    //
13e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
13f0: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 3c    /// <returns><
1400: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
1410: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1420: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
1430: 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f  rror();....    /
1440: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1450: 20 20 2f 2f 2f 20 57 68 65 6e 20 70 6f 6f 6c 69    /// When pooli
1460: 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2c 20 66  ng is enabled, f
1470: 6f 72 63 65 20 74 68 69 73 20 63 6f 6e 6e 65 63  orce this connec
1480: 74 69 6f 6e 20 74 6f 20 62 65 20 64 69 73 70 6f  tion to be dispo
1490: 73 65 64 20 72 61 74 68 65 72 20 74 68 61 6e 20  sed rather than 
14a0: 72 65 74 75 72 6e 65 64 20 74 6f 20 74 68 65 20  returned to the 
14b0: 70 6f 6f 6c 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  pool..    /// </
14c0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
14d0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
14e0: 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29  void ClearPool()
14f0: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
1500: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1510: 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20 69 73 20  When pooling is 
1520: 65 6e 61 62 6c 65 64 2c 20 72 65 74 75 72 6e 73  enabled, returns
1530: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
1540: 6f 6f 6c 20 65 6e 74 72 69 65 73 20 6d 61 74 63  ool entries matc
1550: 68 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e 74  hing the current
1560: 20 66 69 6c 65 20 6e 61 6d 65 2e 0d 0a 20 20 20   file name...   
1570: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1580: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1590: 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
15a0: 70 6f 6f 6c 20 65 6e 74 72 69 65 73 20 6d 61 74  pool entries mat
15b0: 63 68 69 6e 67 20 74 68 65 20 63 75 72 72 65 6e  ching the curren
15c0: 74 20 66 69 6c 65 20 6e 61 6d 65 2e 3c 2f 72 65  t file name.</re
15d0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
15e0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e  rnal abstract in
15f0: 74 20 43 6f 75 6e 74 50 6f 6f 6c 28 29 3b 0d 0a  t CountPool();..
1600: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1610: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 50 72 65  ry>..    /// Pre
1620: 70 61 72 65 73 20 61 20 53 51 4c 20 73 74 61 74  pares a SQL stat
1630: 65 6d 65 6e 74 20 66 6f 72 20 65 78 65 63 75 74  ement for execut
1640: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
1650: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1660: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63  / <param name="c
1670: 6e 6e 22 3e 54 68 65 20 73 6f 75 72 63 65 20 63  nn">The source c
1680: 6f 6e 6e 65 63 74 69 6f 6e 20 70 72 65 70 61 72  onnection prepar
1690: 69 6e 67 20 74 68 65 20 63 6f 6d 6d 61 6e 64 2e  ing the command.
16a0: 20 20 43 61 6e 20 62 65 20 6e 75 6c 6c 20 66 6f    Can be null fo
16b0: 72 20 61 6e 79 20 63 61 6c 6c 65 72 20 65 78 63  r any caller exc
16c0: 65 70 74 20 4c 49 4e 51 3c 2f 70 61 72 61 6d 3e  ept LINQ</param>
16d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
16e0: 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e 54   name="strSql">T
16f0: 68 65 20 53 51 4c 20 63 6f 6d 6d 61 6e 64 20 74  he SQL command t
1700: 65 78 74 20 74 6f 20 70 72 65 70 61 72 65 3c 2f  ext to prepare</
1710: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
1720: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 65  <param name="pre
1730: 76 69 6f 75 73 22 3e 54 68 65 20 70 72 65 76 69  vious">The previ
1740: 6f 75 73 20 73 74 61 74 65 6d 65 6e 74 20 69 6e  ous statement in
1750: 20 61 20 6d 75 6c 74 69 2d 73 74 61 74 65 6d 65   a multi-stateme
1760: 6e 74 20 63 6f 6d 6d 61 6e 64 2c 20 6f 72 20 6e  nt command, or n
1770: 75 6c 6c 20 69 66 20 6e 6f 20 70 72 65 76 69 6f  ull if no previo
1780: 75 73 20 73 74 61 74 65 6d 65 6e 74 20 65 78 69  us statement exi
1790: 73 74 73 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  sts</param>..   
17a0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
17b0: 3d 22 74 69 6d 65 6f 75 74 4d 53 22 3e 54 68 65  ="timeoutMS">The
17c0: 20 74 69 6d 65 6f 75 74 20 74 6f 20 77 61 69 74   timeout to wait
17d0: 20 62 65 66 6f 72 65 20 61 62 6f 72 74 69 6e 67   before aborting
17e0: 20 74 68 65 20 70 72 65 70 61 72 65 3c 2f 70 61   the prepare</pa
17f0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
1800: 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 52 65  aram name="strRe
1810: 6d 61 69 6e 22 3e 54 68 65 20 72 65 6d 61 69 6e  main">The remain
1820: 64 65 72 20 6f 66 20 74 68 65 20 73 74 61 74 65  der of the state
1830: 6d 65 6e 74 20 74 68 61 74 20 77 61 73 20 6e 6f  ment that was no
1840: 74 20 70 72 6f 63 65 73 73 65 64 2e 20 20 45 61  t processed.  Ea
1850: 63 68 20 63 61 6c 6c 20 74 6f 20 70 72 65 70 61  ch call to prepa
1860: 72 65 20 70 61 72 73 65 73 20 74 68 65 0d 0a 20  re parses the.. 
1870: 20 20 20 2f 2f 2f 20 53 51 4c 20 75 70 20 74 6f     /// SQL up to
1880: 20 74 6f 20 65 69 74 68 65 72 20 74 68 65 20 65   to either the e
1890: 6e 64 20 6f 66 20 74 68 65 20 74 65 78 74 20 6f  nd of the text o
18a0: 72 20 74 6f 20 74 68 65 20 66 69 72 73 74 20 73  r to the first s
18b0: 65 6d 69 2d 63 6f 6c 6f 6e 20 64 65 6c 69 6d 69  emi-colon delimi
18c0: 74 65 72 2e 20 20 54 68 65 20 72 65 6d 61 69 6e  ter.  The remain
18d0: 69 6e 67 20 74 65 78 74 20 69 73 20 72 65 74 75  ing text is retu
18e0: 72 6e 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 68 65  rned..    /// he
18f0: 72 65 20 66 6f 72 20 61 20 73 75 62 73 65 71 75  re for a subsequ
1900: 65 6e 74 20 63 61 6c 6c 20 74 6f 20 50 72 65 70  ent call to Prep
1910: 61 72 65 28 29 20 75 6e 74 69 6c 20 61 6c 6c 20  are() until all 
1920: 74 68 65 20 74 65 78 74 20 68 61 73 20 62 65 65  the text has bee
1930: 6e 20 70 72 6f 63 65 73 73 65 64 2e 3c 2f 70 61  n processed.</pa
1940: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
1950: 65 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61  eturns>Returns a
1960: 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 53 51  n initialized SQ
1970: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 2e 3c 2f  LiteStatement.</
1980: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
1990: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
19a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
19b0: 50 72 65 70 61 72 65 28 53 51 4c 69 74 65 43 6f  Prepare(SQLiteCo
19c0: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c 20 73 74  nnection cnn, st
19d0: 72 69 6e 67 20 73 74 72 53 71 6c 2c 20 53 51 4c  ring strSql, SQL
19e0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 70 72 65  iteStatement pre
19f0: 76 69 6f 75 73 2c 20 75 69 6e 74 20 74 69 6d 65  vious, uint time
1a00: 6f 75 74 4d 53 2c 20 6f 75 74 20 73 74 72 69 6e  outMS, out strin
1a10: 67 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20  g strRemain);.. 
1a20: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1a30: 0d 0a 20 20 20 20 2f 2f 2f 20 53 74 65 70 73 20  ..    /// Steps 
1a40: 74 68 72 6f 75 67 68 20 61 20 70 72 65 70 61 72  through a prepar
1a50: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  ed statement... 
1a60: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1a70: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1a80: 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68  m name="stmt">Th
1a90: 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e SQLiteStatemen
1aa0: 74 20 74 6f 20 73 74 65 70 20 74 68 72 6f 75 67  t to step throug
1ab0: 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  h</param>..    /
1ac0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 72 75 65  // <returns>True
1ad0: 20 69 66 20 61 20 72 6f 77 20 77 61 73 20 72 65   if a row was re
1ae0: 74 75 72 6e 65 64 2c 20 46 61 6c 73 65 20 69 66  turned, False if
1af0: 20 6e 6f 74 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d   not.</returns>.
1b00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
1b10: 73 74 72 61 63 74 20 62 6f 6f 6c 20 53 74 65 70  stract bool Step
1b20: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1b30: 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 2f 2f 2f   stmt);..    ///
1b40: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1b50: 2f 2f 2f 20 52 65 73 65 74 73 20 61 20 70 72 65  /// Resets a pre
1b60: 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e 74 20  pared statement 
1b70: 73 6f 20 69 74 20 63 61 6e 20 62 65 20 65 78 65  so it can be exe
1b80: 63 75 74 65 64 20 61 67 61 69 6e 2e 20 20 49 66  cuted again.  If
1b90: 20 74 68 65 20 65 72 72 6f 72 20 72 65 74 75 72   the error retur
1ba0: 6e 65 64 20 69 73 20 53 51 4c 49 54 45 5f 53 43  ned is SQLITE_SC
1bb0: 48 45 4d 41 2c 20 0d 0a 20 20 20 20 2f 2f 2f 20  HEMA, ..    /// 
1bc0: 74 72 61 6e 73 70 61 72 65 6e 74 6c 79 20 61 74  transparently at
1bd0: 74 65 6d 70 74 20 74 6f 20 72 65 62 75 69 6c 64  tempt to rebuild
1be0: 20 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65   the SQL stateme
1bf0: 6e 74 20 61 6e 64 20 74 68 72 6f 77 20 61 6e 20  nt and throw an 
1c00: 65 72 72 6f 72 20 69 66 20 74 68 61 74 20 77 61  error if that wa
1c10: 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 2e 0d  s not possible..
1c20: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
1c30: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
1c40: 72 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e  ram name="stmt">
1c50: 54 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f  The statement to
1c60: 20 72 65 73 65 74 3c 2f 70 61 72 61 6d 3e 0d 0a   reset</param>..
1c70: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1c80: 3e 52 65 74 75 72 6e 73 20 2d 31 20 69 66 20 74  >Returns -1 if t
1c90: 68 65 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65  he schema change
1ca0: 64 20 77 68 69 6c 65 20 72 65 73 65 74 74 69 6e  d while resettin
1cb0: 67 2c 20 30 20 69 66 20 74 68 65 20 72 65 73 65  g, 0 if the rese
1cc0: 74 20 77 61 73 20 73 75 63 65 73 73 66 75 6c 20  t was sucessful 
1cd0: 6f 72 20 36 20 28 53 51 4c 49 54 45 5f 4c 4f 43  or 6 (SQLITE_LOC
1ce0: 4b 45 44 29 20 69 66 20 74 68 65 20 72 65 73 65  KED) if the rese
1cf0: 74 20 66 61 69 6c 65 64 20 64 75 65 20 74 6f 20  t failed due to 
1d00: 61 20 6c 6f 63 6b 3c 2f 72 65 74 75 72 6e 73 3e  a lock</returns>
1d10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
1d20: 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
1d30: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
1d40: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
1d50: 6d 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  mt);..    intern
1d60: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
1d70: 20 43 61 6e 63 65 6c 28 29 3b 0d 0a 0d 0a 20 20   Cancel();....  
1d80: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1d90: 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 44 6f  act void Bind_Do
1da0: 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  uble(SQLiteState
1db0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
1dc0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
1dd0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
1de0: 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 29  x, double value)
1df0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1e00: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
1e10: 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65 53  nd_Int32(SQLiteS
1e20: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
1e30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
1e40: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
1e50: 69 6e 64 65 78 2c 20 49 6e 74 33 32 20 76 61 6c  index, Int32 val
1e60: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
1e70: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
1e80: 20 42 69 6e 64 5f 55 49 6e 74 33 32 28 53 51 4c   Bind_UInt32(SQL
1e90: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1ea0: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
1eb0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
1ec0: 69 6e 74 20 69 6e 64 65 78 2c 20 55 49 6e 74 33  int index, UInt3
1ed0: 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  2 value);..    i
1ee0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1ef0: 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 36 34   void Bind_Int64
1f00: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
1f10: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
1f20: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
1f30: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 49  gs, int index, I
1f40: 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a 20 20  nt64 value);..  
1f50: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
1f60: 61 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 55 49  act void Bind_UI
1f70: 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61 74 65  nt64(SQLiteState
1f80: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
1f90: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
1fa0: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
1fb0: 78 2c 20 55 49 6e 74 36 34 20 76 61 6c 75 65 29  x, UInt64 value)
1fc0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
1fd0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
1fe0: 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65 53 74  nd_Text(SQLiteSt
1ff0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
2000: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
2010: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
2020: 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c  ndex, string val
2030: 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ue);..    intern
2040: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2050: 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74   Bind_Blob(SQLit
2060: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2070: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2080: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
2090: 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20  t index, byte[] 
20a0: 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20 20 20 20  blobData);..    
20b0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
20c0: 74 20 76 6f 69 64 20 42 69 6e 64 5f 44 61 74 65  t void Bind_Date
20d0: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
20e0: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
20f0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
2100: 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
2110: 78 2c 20 44 61 74 65 54 69 6d 65 20 64 74 29 3b  x, DateTime dt);
2120: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2130: 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e  bstract void Bin
2140: 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  d_Null(SQLiteSta
2150: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
2160: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
2170: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
2180: 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  dex);....    int
2190: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
21a0: 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 43 6f 75  nt Bind_ParamCou
21b0: 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  nt(SQLiteStateme
21c0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
21d0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
21e0: 6c 61 67 73 29 3b 0d 0a 20 20 20 20 69 6e 74 65  lags);..    inte
21f0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74  rnal abstract st
2200: 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61 6d 4e  ring Bind_ParamN
2210: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
2220: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
2230: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
2240: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
2250: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2260: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 42 69   abstract int Bi
2270: 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78 28 53 51  nd_ParamIndex(SQ
2280: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2290: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
22a0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
22b0: 20 73 74 72 69 6e 67 20 70 61 72 61 6d 4e 61 6d   string paramNam
22c0: 65 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  e);....    inter
22d0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
22e0: 20 43 6f 6c 75 6d 6e 43 6f 75 6e 74 28 53 51 4c   ColumnCount(SQL
22f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2300: 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  t);..    interna
2310: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
2320: 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65 28 53 51 4c  g ColumnName(SQL
2330: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2340: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a  t, int index);..
2350: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2360: 74 72 61 63 74 20 54 79 70 65 41 66 66 69 6e 69  tract TypeAffini
2370: 74 79 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69 74  ty ColumnAffinit
2380: 79 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  y(SQLiteStatemen
2390: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
23a0: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
23b0: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
23c0: 67 20 43 6f 6c 75 6d 6e 54 79 70 65 28 53 51 4c  g ColumnType(SQL
23d0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
23e0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 6f 75  t, int index, ou
23f0: 74 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 6e  t TypeAffinity n
2400: 41 66 66 69 6e 69 74 79 29 3b 0d 0a 20 20 20 20  Affinity);..    
2410: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2420: 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65  t int ColumnInde
2430: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
2440: 74 20 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63  t stmt, string c
2450: 6f 6c 75 6d 6e 4e 61 6d 65 29 3b 0d 0a 20 20 20  olumnName);..   
2460: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2470: 63 74 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e  ct string Column
2480: 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28 53 51 4c  OriginalName(SQL
2490: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
24a0: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a  t, int index);..
24b0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
24c0: 74 72 61 63 74 20 73 74 72 69 6e 67 20 43 6f 6c  tract string Col
24d0: 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65 28  umnDatabaseName(
24e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
24f0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
2500: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2510: 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67 20  abstract string 
2520: 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61 6d 65 28  ColumnTableName(
2530: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2540: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
2550: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2560: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 6f  abstract void Co
2570: 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72  lumnMetaData(str
2580: 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73 74  ing dataBase, st
2590: 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69  ring table, stri
25a0: 6e 67 20 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 73  ng column, out s
25b0: 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20  tring dataType, 
25c0: 6f 75 74 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  out string colla
25d0: 74 65 53 65 71 75 65 6e 63 65 2c 20 6f 75 74 20  teSequence, out 
25e0: 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 6f 75  bool notNull, ou
25f0: 74 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65  t bool primaryKe
2600: 79 2c 20 6f 75 74 20 62 6f 6f 6c 20 61 75 74 6f  y, out bool auto
2610: 49 6e 63 72 65 6d 65 6e 74 29 3b 0d 0a 20 20 20  Increment);..   
2620: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2630: 63 74 20 76 6f 69 64 20 47 65 74 49 6e 64 65 78  ct void GetIndex
2640: 43 6f 6c 75 6d 6e 45 78 74 65 6e 64 65 64 49 6e  ColumnExtendedIn
2650: 66 6f 28 73 74 72 69 6e 67 20 64 61 74 61 62 61  fo(string databa
2660: 73 65 2c 20 73 74 72 69 6e 67 20 69 6e 64 65 78  se, string index
2670: 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c  , string column,
2680: 20 6f 75 74 20 69 6e 74 20 73 6f 72 74 4d 6f 64   out int sortMod
2690: 65 2c 20 6f 75 74 20 69 6e 74 20 6f 6e 45 72 72  e, out int onErr
26a0: 6f 72 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 63  or, out string c
26b0: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
26c0: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
26d0: 61 6c 20 61 62 73 74 72 61 63 74 20 64 6f 75 62  al abstract doub
26e0: 6c 65 20 47 65 74 44 6f 75 62 6c 65 28 53 51 4c  le GetDouble(SQL
26f0: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2700: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a  t, int index);..
2710: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2720: 74 72 61 63 74 20 53 42 79 74 65 20 47 65 74 53  tract SByte GetS
2730: 42 79 74 65 28 53 51 4c 69 74 65 53 74 61 74 65  Byte(SQLiteState
2740: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
2750: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
2760: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 42 79  rnal abstract By
2770: 74 65 20 47 65 74 42 79 74 65 28 53 51 4c 69 74  te GetByte(SQLit
2780: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2790: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20   int index);..  
27a0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
27b0: 61 63 74 20 49 6e 74 31 36 20 47 65 74 49 6e 74  act Int16 GetInt
27c0: 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
27d0: 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
27e0: 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ex);..    intern
27f0: 61 6c 20 61 62 73 74 72 61 63 74 20 55 49 6e 74  al abstract UInt
2800: 31 36 20 47 65 74 55 49 6e 74 31 36 28 53 51 4c  16 GetUInt16(SQL
2810: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
2820: 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a  t, int index);..
2830: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2840: 74 72 61 63 74 20 49 6e 74 33 32 20 47 65 74 49  tract Int32 GetI
2850: 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
2860: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
2870: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
2880: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 55 49  rnal abstract UI
2890: 6e 74 33 32 20 47 65 74 55 49 6e 74 33 32 28 53  nt32 GetUInt32(S
28a0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
28b0: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b  tmt, int index);
28c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
28d0: 62 73 74 72 61 63 74 20 49 6e 74 36 34 20 47 65  bstract Int64 Ge
28e0: 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  tInt64(SQLiteSta
28f0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2900: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
2910: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2920: 55 49 6e 74 36 34 20 47 65 74 55 49 6e 74 36 34  UInt64 GetUInt64
2930: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2940: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
2950: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2960: 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67   abstract string
2970: 20 47 65 74 54 65 78 74 28 53 51 4c 69 74 65 53   GetText(SQLiteS
2980: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
2990: 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  nt index);..    
29a0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
29b0: 74 20 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28  t long GetBytes(
29c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
29d0: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c  stmt, int index,
29e0: 20 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65 74   int nDataoffset
29f0: 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20  , byte[] bDest, 
2a00: 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20  int nStart, int 
2a10: 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69  nLength);..    i
2a20: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2a30: 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73 28 53   long GetChars(S
2a40: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
2a50: 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  tmt, int index, 
2a60: 69 6e 74 20 6e 44 61 74 61 6f 66 66 73 65 74 2c  int nDataoffset,
2a70: 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c 20 69   char[] bDest, i
2a80: 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e  nt nStart, int n
2a90: 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 69 6e  Length);..    in
2aa0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2ab0: 44 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65  DateTime GetDate
2ac0: 54 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65  Time(SQLiteState
2ad0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
2ae0: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ndex);..    inte
2af0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f  rnal abstract bo
2b00: 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65  ol IsNull(SQLite
2b10: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2b20: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20  int index);.... 
2b30: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2b40: 72 61 63 74 20 76 6f 69 64 20 43 72 65 61 74 65  ract void Create
2b50: 43 6f 6c 6c 61 74 69 6f 6e 28 73 74 72 69 6e 67  Collation(string
2b60: 20 73 74 72 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53   strCollation, S
2b70: 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66  QLiteCollation f
2b80: 75 6e 63 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  unc, SQLiteColla
2b90: 74 69 6f 6e 20 66 75 6e 63 31 36 29 3b 0d 0a 20  tion func16);.. 
2ba0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2bb0: 72 61 63 74 20 76 6f 69 64 20 43 72 65 61 74 65  ract void Create
2bc0: 46 75 6e 63 74 69 6f 6e 28 73 74 72 69 6e 67 20  Function(string 
2bd0: 73 74 72 46 75 6e 63 74 69 6f 6e 2c 20 69 6e 74  strFunction, int
2be0: 20 6e 41 72 67 73 2c 20 62 6f 6f 6c 20 6e 65 65   nArgs, bool nee
2bf0: 64 43 6f 6c 6c 53 65 71 2c 20 53 51 4c 69 74 65  dCollSeq, SQLite
2c00: 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 2c 20 53  Callback func, S
2c10: 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
2c20: 6e 63 73 74 65 70 2c 20 53 51 4c 69 74 65 46 69  ncstep, SQLiteFi
2c30: 6e 61 6c 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  nalCallback func
2c40: 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20 69 6e 74  final);..    int
2c50: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 43  ernal abstract C
2c60: 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65  ollationSequence
2c70: 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53 65 71   GetCollationSeq
2c80: 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75 6e 63  uence(SQLiteFunc
2c90: 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74 50 74  tion func, IntPt
2ca0: 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20  r context);..   
2cb0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2cc0: 63 74 20 69 6e 74 20 43 6f 6e 74 65 78 74 43 6f  ct int ContextCo
2cd0: 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43 6f 6c  llateCompare(Col
2ce0: 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e  lationEncodingEn
2cf0: 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72 20 63  um enc, IntPtr c
2d00: 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 73  ontext, string s
2d10: 31 2c 20 73 74 72 69 6e 67 20 73 32 29 3b 0d 0a  1, string s2);..
2d20: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2d30: 74 72 61 63 74 20 69 6e 74 20 43 6f 6e 74 65 78  tract int Contex
2d40: 74 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28  tCollateCompare(
2d50: 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
2d60: 67 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74  gEnum enc, IntPt
2d70: 72 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b  r context, char[
2d80: 5d 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29  ] c1, char[] c2)
2d90: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
2da0: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 41  l abstract int A
2db0: 67 67 72 65 67 61 74 65 43 6f 75 6e 74 28 49 6e  ggregateCount(In
2dc0: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a  tPtr context);..
2dd0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2de0: 74 72 61 63 74 20 49 6e 74 50 74 72 20 41 67 67  tract IntPtr Agg
2df0: 72 65 67 61 74 65 43 6f 6e 74 65 78 74 28 49 6e  regateContext(In
2e00: 74 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a  tPtr context);..
2e10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2e20: 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65 74  bstract long Get
2e30: 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65 73 28  ParamValueBytes(
2e40: 49 6e 74 50 74 72 20 70 74 72 2c 20 69 6e 74 20  IntPtr ptr, int 
2e50: 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
2e60: 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
2e70: 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
2e80: 74 68 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  th);..    intern
2e90: 61 6c 20 61 62 73 74 72 61 63 74 20 64 6f 75 62  al abstract doub
2ea0: 6c 65 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  le GetParamValue
2eb0: 44 6f 75 62 6c 65 28 49 6e 74 50 74 72 20 70 74  Double(IntPtr pt
2ec0: 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  r);..    interna
2ed0: 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 47  l abstract int G
2ee0: 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74 33  etParamValueInt3
2ef0: 32 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a  2(IntPtr ptr);..
2f00: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2f10: 74 72 61 63 74 20 49 6e 74 36 34 20 47 65 74 50  tract Int64 GetP
2f20: 61 72 61 6d 56 61 6c 75 65 49 6e 74 36 34 28 49  aramValueInt64(I
2f30: 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20  ntPtr ptr);..   
2f40: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2f50: 63 74 20 73 74 72 69 6e 67 20 47 65 74 50 61 72  ct string GetPar
2f60: 61 6d 56 61 6c 75 65 54 65 78 74 28 49 6e 74 50  amValueText(IntP
2f70: 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e  tr ptr);..    in
2f80: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2f90: 54 79 70 65 41 66 66 69 6e 69 74 79 20 47 65 74  TypeAffinity Get
2fa0: 50 61 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49  ParamValueType(I
2fb0: 6e 74 50 74 72 20 70 74 72 29 3b 0d 0a 0d 0a 20  ntPtr ptr);.... 
2fc0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2fd0: 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e  ract void Return
2fe0: 42 6c 6f 62 28 49 6e 74 50 74 72 20 63 6f 6e 74  Blob(IntPtr cont
2ff0: 65 78 74 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75  ext, byte[] valu
3000: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
3010: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
3020: 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e 74  ReturnDouble(Int
3030: 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f 75  Ptr context, dou
3040: 62 6c 65 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ble value);..   
3050: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3060: 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e 45 72  ct void ReturnEr
3070: 72 6f 72 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ror(IntPtr conte
3080: 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  xt, string value
3090: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
30a0: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52   abstract void R
30b0: 65 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74  eturnInt32(IntPt
30c0: 72 20 63 6f 6e 74 65 78 74 2c 20 49 6e 74 33 32  r context, Int32
30d0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e   value);..    in
30e0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
30f0: 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 36 34  void ReturnInt64
3100: 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
3110: 20 49 6e 74 36 34 20 76 61 6c 75 65 29 3b 0d 0a   Int64 value);..
3120: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3130: 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72  tract void Retur
3140: 6e 4e 75 6c 6c 28 49 6e 74 50 74 72 20 63 6f 6e  nNull(IntPtr con
3150: 74 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65  text);..    inte
3160: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
3170: 69 64 20 52 65 74 75 72 6e 54 65 78 74 28 49 6e  id ReturnText(In
3180: 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74  tPtr context, st
3190: 72 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 0d 0a  ring value);....
31a0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
31b0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
31c0: 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
31d0: 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
31e0: 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c  in order to decl
31f0: 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61  are a virtual ta
3200: 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20  ble..    /// in 
3210: 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61  response to a ca
3220: 6c 6c 20 69 6e 74 6f 20 74 68 65 20 78 43 72 65  ll into the xCre
3230: 61 74 65 20 6f 72 20 78 43 6f 6e 6e 65 63 74 20  ate or xConnect 
3240: 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65  virtual table me
3250: 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20  thods...    /// 
3260: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3270: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
3280: 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20 2f  "strSql">..    /
3290: 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63 6f  // The string co
32a0: 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51 4c  ntaining the SQL
32b0: 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63 72   statement descr
32c0: 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75 61  ibing the virtua
32d0: 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20 20  l table to..    
32e0: 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64 2e  /// be declared.
32f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
3300: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
3310: 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e  am name="error">
3320: 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73  ..    /// Upon s
3330: 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e 74  uccess, the cont
3340: 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61 72  ents of this par
3350: 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65 66  ameter are undef
3360: 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c  ined.  Upon fail
3370: 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74  ure,..    /// it
3380: 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20   should contain 
3390: 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20 65  an appropriate e
33a0: 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20  rror message... 
33b0: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
33c0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
33d0: 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74  s>..    /// A st
33e0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
33f0: 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20  turn code...    
3400: 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  /// </returns>..
3410: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
3420: 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
3430: 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69 72  rCode DeclareVir
3440: 74 75 61 6c 54 61 62 6c 65 28 73 74 72 69 6e 67  tualTable(string
3450: 20 73 74 72 53 71 6c 2c 20 72 65 66 20 73 74 72   strSql, ref str
3460: 69 6e 67 20 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20  ing error);.... 
3470: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3480: 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65  ..    /// Enable
3490: 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65 78  s or disabled ex
34a0: 74 65 6e 73 69 6f 6e 20 6c 6f 61 64 69 6e 67 20  tension loading 
34b0: 62 79 20 53 51 4c 69 74 65 2e 0d 0a 20 20 20 20  by SQLite...    
34c0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
34d0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
34e0: 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20  ame="bOnOff">.. 
34f0: 20 20 20 2f 2f 2f 20 54 72 75 65 20 74 6f 20 65     /// True to e
3500: 6e 61 62 6c 65 20 6c 6f 61 64 69 6e 67 20 6f 66  nable loading of
3510: 20 65 78 74 65 6e 73 69 6f 6e 73 2c 20 66 61 6c   extensions, fal
3520: 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e 0d 0a  se to disable...
3530: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
3540: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
3550: 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74  bstract void Set
3560: 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 62 6f  LoadExtension(bo
3570: 6f 6c 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20  ol bOnOff);..   
3580: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3590: 20 20 20 20 2f 2f 2f 20 4c 6f 61 64 73 20 61 20      /// Loads a 
35a0: 53 51 4c 69 74 65 20 65 78 74 65 6e 73 69 6f 6e  SQLite extension
35b0: 20 6c 69 62 72 61 72 79 20 66 72 6f 6d 20 74 68   library from th
35c0: 65 20 6e 61 6d 65 64 20 66 69 6c 65 2e 0d 0a 20  e named file... 
35d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
35e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
35f0: 6d 20 6e 61 6d 65 3d 22 66 69 6c 65 4e 61 6d 65  m name="fileName
3600: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3610: 6e 61 6d 65 20 6f 66 20 74 68 65 20 64 79 6e 61  name of the dyna
3620: 6d 69 63 20 6c 69 6e 6b 20 6c 69 62 72 61 72 79  mic link library
3630: 20 66 69 6c 65 20 63 6f 6e 74 61 69 6e 69 6e 67   file containing
3640: 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
3650: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3660: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3670: 6d 20 6e 61 6d 65 3d 22 70 72 6f 63 4e 61 6d 65  m name="procName
3680: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3690: 6e 61 6d 65 20 6f 66 20 74 68 65 20 65 78 70 6f  name of the expo
36a0: 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 20 75 73  rted function us
36b0: 65 64 20 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65  ed to initialize
36c0: 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e 2e 0d   the extension..
36d0: 0a 20 20 20 20 2f 2f 2f 20 49 66 20 6e 75 6c 6c  .    /// If null
36e0: 2c 20 74 68 65 20 64 65 66 61 75 6c 74 20 22 73  , the default "s
36f0: 71 6c 69 74 65 33 5f 65 78 74 65 6e 73 69 6f 6e  qlite3_extension
3700: 5f 69 6e 69 74 22 20 77 69 6c 6c 20 62 65 20 75  _init" will be u
3710: 73 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  sed...    /// </
3720: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
3730: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
3740: 69 64 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e  id LoadExtension
3750: 28 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65  (string fileName
3760: 2c 20 73 74 72 69 6e 67 20 70 72 6f 63 4e 61 6d  , string procNam
3770: 65 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  e);..    /// <su
3780: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
3790: 45 6e 61 62 6c 65 73 20 6f 72 20 64 69 73 61 62  Enables or disab
37a0: 6c 65 64 20 65 78 74 65 6e 65 64 20 72 65 73 75  led extened resu
37b0: 6c 74 20 63 6f 64 65 73 20 72 65 74 75 72 6e 65  lt codes returne
37c0: 64 20 62 79 20 53 51 4c 69 74 65 0d 0a 20 20 20  d by SQLite..   
37d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
37e0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
37f0: 6e 61 6d 65 3d 22 62 4f 6e 4f 66 66 22 3e 74 72  name="bOnOff">tr
3800: 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 65 78 74  ue to enable ext
3810: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
3820: 65 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73  es, false to dis
3830: 61 62 6c 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  able.</param>.. 
3840: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3850: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3860: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3870: 74 20 76 6f 69 64 20 53 65 74 45 78 74 65 6e 64  t void SetExtend
3880: 65 64 52 65 73 75 6c 74 43 6f 64 65 73 28 62 6f  edResultCodes(bo
3890: 6f 6c 20 62 4f 6e 4f 66 66 29 3b 0d 0a 20 20 20  ol bOnOff);..   
38a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
38b0: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
38c0: 74 68 65 20 6e 75 6d 65 72 69 63 20 72 65 73 75  the numeric resu
38d0: 6c 74 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20  lt code for the 
38e0: 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 61 69 6c  most recent fail
38f0: 65 64 20 53 51 4c 69 74 65 20 41 50 49 20 63 61  ed SQLite API ca
3900: 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73  ll ..    /// ass
3910: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
3920: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
3930: 74 69 6f 6e 2e 20 0d 0a 20 20 20 20 2f 2f 2f 20  tion. ..    /// 
3940: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3950: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 73  /// <returns>Res
3960: 75 6c 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e  ult code</return
3970: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
3980: 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
3990: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74  ErrorCode Result
39a0: 43 6f 64 65 28 29 3b 0d 0a 20 20 20 20 2f 2f 2f  Code();..    ///
39b0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
39c0: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
39d0: 65 78 74 65 6e 64 65 64 20 6e 75 6d 65 72 69 63  extended numeric
39e0: 20 72 65 73 75 6c 74 20 63 6f 64 65 20 66 6f 72   result code for
39f0: 20 74 68 65 20 6d 6f 73 74 20 72 65 63 65 6e 74   the most recent
3a00: 20 66 61 69 6c 65 64 20 53 51 4c 69 74 65 20 41   failed SQLite A
3a10: 50 49 20 63 61 6c 6c 20 0d 0a 20 20 20 20 2f 2f  PI call ..    //
3a20: 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  / associated wit
3a30: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  h the database c
3a40: 6f 6e 6e 65 63 74 69 6f 6e 2e 20 0d 0a 20 20 20  onnection. ..   
3a50: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
3a60: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
3a70: 73 3e 45 78 74 65 6e 64 65 64 20 72 65 73 75 6c  s>Extended resul
3a80: 74 20 63 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e  t code</returns>
3a90: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
3aa0: 62 73 74 72 61 63 74 20 53 51 4c 69 74 65 45 72  bstract SQLiteEr
3ab0: 72 6f 72 43 6f 64 65 20 45 78 74 65 6e 64 65 64  rorCode Extended
3ac0: 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d  ResultCode();...
3ad0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
3ae0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 64 64 20  y>..    /// Add 
3af0: 61 20 6c 6f 67 20 6d 65 73 73 61 67 65 20 76 69  a log message vi
3b00: 61 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c  a the SQLite sql
3b10: 69 74 65 33 5f 6c 6f 67 20 69 6e 74 65 72 66 61  ite3_log interfa
3b20: 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  ce...    /// </s
3b30: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3b40: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 69 45   <param name="iE
3b50: 72 72 43 6f 64 65 22 3e 45 72 72 6f 72 20 63 6f  rrCode">Error co
3b60: 64 65 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 20  de to be logged 
3b70: 77 69 74 68 20 74 68 65 20 6d 65 73 73 61 67 65  with the message
3b80: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
3b90: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3ba0: 7a 4d 65 73 73 61 67 65 22 3e 53 74 72 69 6e 67  zMessage">String
3bb0: 20 74 6f 20 62 65 20 6c 6f 67 67 65 64 2e 20 20   to be logged.  
3bc0: 55 6e 6c 69 6b 65 20 74 68 65 20 53 51 4c 69 74  Unlike the SQLit
3bd0: 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67 28 29 20  e sqlite3_log() 
3be0: 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 74 65 72 66  ..    /// interf
3bf0: 61 63 65 2c 20 74 68 69 73 20 73 68 6f 75 6c 64  ace, this should
3c00: 20 62 65 20 70 72 65 2d 66 6f 72 6d 61 74 74 65   be pre-formatte
3c10: 64 2e 20 20 43 6f 6e 73 69 64 65 72 20 75 73 69  d.  Consider usi
3c20: 6e 67 20 74 68 65 20 0d 0a 20 20 20 20 2f 2f 2f  ng the ..    ///
3c30: 20 53 74 72 69 6e 67 2e 46 6f 72 6d 61 74 28 29   String.Format()
3c40: 20 66 75 6e 63 74 69 6f 6e 2e 3c 2f 70 61 72 61   function.</para
3c50: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
3c60: 75 72 6e 73 3e 3c 2f 72 65 74 75 72 6e 73 3e 0d  urns></returns>.
3c70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3c80: 73 74 72 61 63 74 20 76 6f 69 64 20 4c 6f 67 4d  stract void LogM
3c90: 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
3ca0: 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
3cb0: 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
3cc0: 29 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f  );....#if INTERO
3cd0: 50 5f 43 4f 44 45 43 0d 0a 20 20 20 20 69 6e 74  P_CODEC..    int
3ce0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
3cf0: 6f 69 64 20 53 65 74 50 61 73 73 77 6f 72 64 28  oid SetPassword(
3d00: 62 79 74 65 5b 5d 20 70 61 73 73 77 6f 72 64 42  byte[] passwordB
3d10: 79 74 65 73 29 3b 0d 0a 20 20 20 20 69 6e 74 65  ytes);..    inte
3d20: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
3d30: 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f 72  id ChangePasswor
3d40: 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73 73  d(byte[] newPass
3d50: 77 6f 72 64 42 79 74 65 73 29 3b 0d 0a 23 65 6e  wordBytes);..#en
3d60: 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72  dif....    inter
3d70: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
3d80: 64 20 53 65 74 55 70 64 61 74 65 48 6f 6f 6b 28  d SetUpdateHook(
3d90: 53 51 4c 69 74 65 55 70 64 61 74 65 43 61 6c 6c  SQLiteUpdateCall
3da0: 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20  back func);..   
3db0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3dc0: 63 74 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69  ct void SetCommi
3dd0: 74 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d  tHook(SQLiteComm
3de0: 69 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  itCallback func)
3df0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
3e00: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65  abstract void Se
3e10: 74 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 28 53  tTraceCallback(S
3e20: 51 4c 69 74 65 54 72 61 63 65 43 61 6c 6c 62 61  QLiteTraceCallba
3e30: 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69  ck func);..    i
3e40: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3e50: 20 76 6f 69 64 20 53 65 74 52 6f 6c 6c 62 61 63   void SetRollbac
3e60: 6b 48 6f 6f 6b 28 53 51 4c 69 74 65 52 6f 6c 6c  kHook(SQLiteRoll
3e70: 62 61 63 6b 43 61 6c 6c 62 61 63 6b 20 66 75 6e  backCallback fun
3e80: 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  c);..    interna
3e90: 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74  l abstract SQLit
3ea0: 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74 4c 6f  eErrorCode SetLo
3eb0: 67 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  gCallback(SQLite
3ec0: 4c 6f 67 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  LogCallback func
3ed0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
3ee0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3ef0: 20 43 68 65 63 6b 73 20 69 66 20 74 68 65 20 53   Checks if the S
3f00: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
3f10: 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69 74  ry has been init
3f20: 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20 63  ialized in the c
3f30: 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d  urrent process..
3f40: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
3f50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  ry>..    /// <re
3f60: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
3f70: 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  Non-zero if the 
3f80: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
3f90: 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
3fa0: 74 69 61 6c 69 7a 65 64 20 69 6e 20 74 68 65 20  tialized in the 
3fb0: 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2c  current process,
3fc0: 0d 0a 20 20 20 20 2f 2f 2f 20 7a 65 72 6f 20 6f  ..    /// zero o
3fd0: 74 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f  therwise...    /
3fe0: 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  // </returns>.. 
3ff0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
4000: 72 61 63 74 20 62 6f 6f 6c 20 49 73 49 6e 69 74  ract bool IsInit
4010: 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 0d 0a 20 20  ialized();....  
4020: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
4030: 61 63 74 20 69 6e 74 20 47 65 74 43 75 72 73 6f  act int GetCurso
4040: 72 46 6f 72 54 61 62 6c 65 28 53 51 4c 69 74 65  rForTable(SQLite
4050: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
4060: 69 6e 74 20 64 61 74 61 62 61 73 65 2c 20 69 6e  int database, in
4070: 74 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a 20 20  t rootPage);..  
4080: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
4090: 61 63 74 20 6c 6f 6e 67 20 47 65 74 52 6f 77 49  act long GetRowI
40a0: 64 46 6f 72 43 75 72 73 6f 72 28 53 51 4c 69 74  dForCursor(SQLit
40b0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
40c0: 20 69 6e 74 20 63 75 72 73 6f 72 29 3b 0d 0a 0d   int cursor);...
40d0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
40e0: 73 74 72 61 63 74 20 6f 62 6a 65 63 74 20 47 65  stract object Ge
40f0: 74 56 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61  tValue(SQLiteSta
4100: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
4110: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
4120: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
4130: 64 65 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20  dex, SQLiteType 
4140: 74 79 70 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  typ);....    int
4150: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 62  ernal abstract b
4160: 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d 69 74 0d 0a  ool AutoCommit..
4170: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4180: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
4190: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
41a0: 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
41b0: 65 20 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74  e FileControl(st
41c0: 72 69 6e 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e  ring zDbName, in
41d0: 74 20 6f 70 2c 20 49 6e 74 50 74 72 20 70 41 72  t op, IntPtr pAr
41e0: 67 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  g);....    /// <
41f0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
4200: 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20  / Creates a new 
4210: 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62  SQLite backup ob
4220: 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68  ject based on th
4230: 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69  e provided desti
4240: 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
4250: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
4260: 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ion.  The source
4270: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
4280: 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d  tion is the one.
4290: 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
42a0: 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62  ted with this ob
42b0: 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63  ject.  The sourc
42c0: 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f  e and destinatio
42d0: 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  n database..    
42e0: 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  /// connections 
42f0: 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61  cannot be the sa
4300: 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  me...    /// </s
4310: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
4320: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65   <param name="de
4330: 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69  stCnn">The desti
4340: 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
4350: 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72  connection.</par
4360: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
4370: 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61  ram name="destNa
4380: 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  me">The destinat
4390: 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d  ion database nam
43a0: 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
43b0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
43c0: 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65  "sourceName">The
43d0: 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
43e0: 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   name.</param>..
43f0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4400: 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74  >The newly creat
4410: 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
4420: 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
4430: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
4440: 63 74 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20  ct SQLiteBackup 
4450: 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70  InitializeBackup
4460: 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
4470: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74  eConnection dest
4480: 43 6e 6e 2c 20 73 74 72 69 6e 67 20 64 65 73 74  Cnn, string dest
4490: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 73  Name,..        s
44a0: 74 72 69 6e 67 20 73 6f 75 72 63 65 4e 61 6d 65  tring sourceName
44b0: 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  );....    /// <s
44c0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
44d0: 20 43 6f 70 69 65 73 20 75 70 20 74 6f 20 4e 20   Copies up to N 
44e0: 70 61 67 65 73 20 66 72 6f 6d 20 74 68 65 20 73  pages from the s
44f0: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 74  ource database t
4500: 6f 20 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f  o the destinatio
4510: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
4520: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
4530: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
4540: 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
4550: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
4560: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
4570: 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75  aram name="backu
4580: 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62  p">The backup ob
4590: 6a 65 63 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61  ject to use.</pa
45a0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
45b0: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65  aram name="nPage
45c0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
45d0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
45e0: 74 6f 20 63 6f 70 79 20 6f 72 20 6e 65 67 61 74  to copy or negat
45f0: 69 76 65 20 74 6f 20 63 6f 70 79 20 61 6c 6c 20  ive to copy all 
4600: 72 65 6d 61 69 6e 69 6e 67 20 70 61 67 65 73 2e  remaining pages.
4610: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
4620: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
4630: 61 6d 20 6e 61 6d 65 3d 22 72 65 74 72 79 22 3e  am name="retry">
4640: 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 20 74 6f  ..    /// Set to
4650: 20 74 72 75 65 20 69 66 20 74 68 65 20 6f 70 65   true if the ope
4660: 72 61 74 69 6f 6e 20 6e 65 65 64 73 20 74 6f 20  ration needs to 
4670: 62 65 20 72 65 74 72 69 65 64 20 64 75 65 20 74  be retried due t
4680: 6f 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  o database..    
4690: 2f 2f 2f 20 6c 6f 63 6b 69 6e 67 20 69 73 73 75  /// locking issu
46a0: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
46b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
46c0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f  returns>..    //
46d0: 2f 20 54 72 75 65 20 69 66 20 74 68 65 72 65 20  / True if there 
46e0: 61 72 65 20 6d 6f 72 65 20 70 61 67 65 73 20 74  are more pages t
46f0: 6f 20 62 65 20 63 6f 70 69 65 64 2c 20 66 61 6c  o be copied, fal
4700: 73 65 20 6f 74 68 65 72 77 69 73 65 2e 0d 0a 20  se otherwise... 
4710: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
4720: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
4730: 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 53 74  abstract bool St
4740: 65 70 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42  epBackup(SQLiteB
4750: 61 63 6b 75 70 20 62 61 63 6b 75 70 2c 20 69 6e  ackup backup, in
4760: 74 20 6e 50 61 67 65 2c 20 6f 75 74 20 62 6f 6f  t nPage, out boo
4770: 6c 20 72 65 74 72 79 29 3b 0d 0a 0d 0a 20 20 20  l retry);....   
4780: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
4790: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
47a0: 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61  the number of pa
47b0: 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f  ges remaining to
47c0: 20 62 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20   be copied from 
47d0: 74 68 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20  the source..    
47e0: 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20  /// database to 
47f0: 74 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20  the destination 
4800: 64 61 74 61 62 61 73 65 20 61 73 73 6f 63 69 61  database associa
4810: 74 65 64 20 77 69 74 68 20 74 68 65 20 73 70 65  ted with the spe
4820: 63 69 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  cified..    /// 
4830: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a  backup object...
4840: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4850: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
4860: 61 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22  am name="backup"
4870: 3e 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65  >The backup obje
4880: 63 74 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61  ct to check.</pa
4890: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ram>..    /// <r
48a0: 65 74 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65  eturns>The numbe
48b0: 72 20 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69  r of pages remai
48c0: 6e 69 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65  ning to be copie
48d0: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
48e0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
48f0: 61 63 74 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e  act int Remainin
4900: 67 42 61 63 6b 75 70 28 53 51 4c 69 74 65 42 61  gBackup(SQLiteBa
4910: 63 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d  ckup backup);...
4920: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4930: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75  y>..    /// Retu
4940: 72 6e 73 20 74 68 65 20 74 6f 74 61 6c 20 6e 75  rns the total nu
4950: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
4960: 20 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   the source data
4970: 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 0d  base associated.
4980: 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 74 68  .    /// with th
4990: 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63 6b  e specified back
49a0: 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20  up object...    
49b0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
49c0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
49d0: 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
49e0: 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
49f0: 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e  o check.</param>
4a00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
4a10: 6e 73 3e 54 68 65 20 74 6f 74 61 6c 20 6e 75 6d  ns>The total num
4a20: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
4a30: 74 68 65 20 73 6f 75 72 63 65 20 64 61 74 61 62  the source datab
4a40: 61 73 65 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  ase.</returns>..
4a50: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
4a60: 74 72 61 63 74 20 69 6e 74 20 50 61 67 65 43 6f  tract int PageCo
4a70: 75 6e 74 42 61 63 6b 75 70 28 53 51 4c 69 74 65  untBackup(SQLite
4a80: 42 61 63 6b 75 70 20 62 61 63 6b 75 70 29 3b 0d  Backup backup);.
4a90: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
4aa0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
4ab0: 73 74 72 6f 79 73 20 74 68 65 20 62 61 63 6b 75  stroys the backu
4ac0: 70 20 6f 62 6a 65 63 74 2c 20 72 6f 6c 6c 69 6e  p object, rollin
4ad0: 67 20 62 61 63 6b 20 61 6e 79 20 62 61 63 6b 75  g back any backu
4ae0: 70 20 74 68 61 74 20 6d 61 79 20 62 65 20 69 6e  p that may be in
4af0: 0d 0a 20 20 20 20 2f 2f 2f 20 70 72 6f 67 65 73  ..    /// proges
4b00: 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
4b10: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
4b20: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 61 63  <param name="bac
4b30: 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75 70 20  kup">The backup 
4b40: 6f 62 6a 65 63 74 20 74 6f 20 64 65 73 74 72 6f  object to destro
4b50: 79 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  y.</param>..    
4b60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
4b70: 74 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63  t void FinishBac
4b80: 6b 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75 70  kup(SQLiteBackup
4b90: 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20 20   backup);....   
4ba0: 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
4bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4bf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4c00: 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20  ....    #region 
4c10: 49 44 69 73 70 6f 73 61 62 6c 65 20 4d 65 6d 62  IDisposable Memb
4c20: 65 72 73 0d 0a 20 20 20 20 70 75 62 6c 69 63 20  ers..    public 
4c30: 76 6f 69 64 20 44 69 73 70 6f 73 65 28 29 0d 0a  void Dispose()..
4c40: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 44      {..        D
4c50: 69 73 70 6f 73 65 28 74 72 75 65 29 3b 0d 0a 20  ispose(true);.. 
4c60: 20 20 20 20 20 20 20 47 43 2e 53 75 70 70 72 65         GC.Suppre
4c70: 73 73 46 69 6e 61 6c 69 7a 65 28 74 68 69 73 29  ssFinalize(this)
4c80: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  ;..    }..    #e
4c90: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
4ca0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
4d00: 0a 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49  ...    #region I
4d10: 44 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74  Disposable "Patt
4d20: 65 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20  ern" Members..  
4d30: 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64    private bool d
4d40: 69 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72  isposed;..    pr
4d50: 69 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b  ivate void Check
4d60: 44 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68  Disposed() /* th
4d70: 72 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23  row */..    {..#
4d80: 69 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50  if THROW_ON_DISP
4d90: 4f 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66  OSED..        if
4da0: 20 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20   (disposed)..   
4db0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
4dc0: 65 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65  ew ObjectDispose
4dd0: 64 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f  dException(typeo
4de0: 66 28 53 51 4c 69 74 65 42 61 73 65 29 2e 4e 61  f(SQLiteBase).Na
4df0: 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  me);..#endif..  
4e00: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    }....    /////
4e10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4e60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
4e70: 20 20 70 72 6f 74 65 63 74 65 64 20 76 69 72 74    protected virt
4e80: 75 61 6c 20 76 6f 69 64 20 44 69 73 70 6f 73 65  ual void Dispose
4e90: 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29  (bool disposing)
4ea0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
4eb0: 20 69 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d   if (!disposed).
4ec0: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
4ed0: 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64 69          //if (di
4ee0: 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20 20  sposing)..      
4ef0: 20 20 20 20 20 20 2f 2f 7b 0d 0a 20 20 20 20 20        //{..     
4f00: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
4f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f30: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
4f40: 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73 65 20  /    // dispose 
4f50: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
4f60: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
4f70: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f         //    ///
4f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fa0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  /..            /
4fb0: 2f 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  /}....          
4fc0: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
4fd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
4fe0: 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20  ////////..      
4ff0: 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61 73 65        // release
5000: 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73 6f 75   unmanaged resou
5010: 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20  rces here.....  
5020: 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f 2f            //////
5030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5050: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
5060: 64 69 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b  disposed = true;
5070: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
5080: 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69   }..    #endregi
5090: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
50a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
50f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
5100: 20 23 72 65 67 69 6f 6e 20 44 65 73 74 72 75 63   #region Destruc
5110: 74 6f 72 0d 0a 20 20 20 20 7e 53 51 4c 69 74 65  tor..    ~SQLite
5120: 42 61 73 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Base()..    {.. 
5130: 20 20 20 20 20 20 20 44 69 73 70 6f 73 65 28 66         Dispose(f
5140: 61 6c 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20  alse);..    }.. 
5150: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5160: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
5170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
51c0: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 20 54  ////....    // T
51d0: 68 65 73 65 20 73 74 61 74 69 63 73 20 61 72 65  hese statics are
51e0: 20 68 65 72 65 20 66 6f 72 20 6c 61 63 6b 20 6f   here for lack o
51f0: 66 20 61 20 62 65 74 74 65 72 20 70 6c 61 63 65  f a better place
5200: 20 74 6f 20 70 75 74 20 74 68 65 6d 2e 0d 0a 20   to put them... 
5210: 20 20 20 2f 2f 20 54 68 65 79 20 65 78 69 73 74     // They exist
5220: 20 68 65 72 65 20 62 65 63 61 75 73 65 20 74 68   here because th
5230: 65 79 20 61 72 65 20 63 61 6c 6c 65 64 20 64 75  ey are called du
5240: 72 69 6e 67 20 74 68 65 20 66 69 6e 61 6c 69 7a  ring the finaliz
5250: 61 74 69 6f 6e 20 6f 66 0d 0a 20 20 20 20 2f 2f  ation of..    //
5260: 20 61 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65   a SQLiteStateme
5270: 6e 74 48 61 6e 64 6c 65 2c 20 53 51 4c 69 74 65  ntHandle, SQLite
5280: 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65  ConnectionHandle
5290: 2c 20 61 6e 64 20 53 51 4c 69 74 65 46 75 6e 63  , and SQLiteFunc
52a0: 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65  tionCookieHandle
52b0: 2e 0d 0a 20 20 20 20 2f 2f 20 54 68 65 72 65 66  ...    // Theref
52c0: 6f 72 65 20 74 68 65 73 65 20 66 75 6e 63 74 69  ore these functi
52d0: 6f 6e 73 20 68 61 76 65 20 74 6f 20 62 65 20 73  ons have to be s
52e0: 74 61 74 69 63 2c 20 61 6e 64 20 68 61 76 65 20  tatic, and have 
52f0: 74 6f 20 62 65 20 6c 6f 77 2d 6c 65 76 65 6c 2e  to be low-level.
5300: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
5310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5320: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5330: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5340: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5350: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5360: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70  ///////....    p
5370: 72 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74  rivate static st
5380: 72 69 6e 67 5b 5d 20 5f 65 72 72 6f 72 4d 65 73  ring[] _errorMes
5390: 73 61 67 65 73 20 3d 20 7b 0a 20 20 20 20 20 20  sages = {.      
53a0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4b 20 20    /* SQLITE_OK  
53b0: 20 20 20 20 20 20 20 20 2a 2f 20 22 6e 6f 74 20          */ "not 
53c0: 61 6e 20 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20  an error",..    
53d0: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 45 52      /* SQLITE_ER
53e0: 52 4f 52 20 20 20 20 20 20 20 2a 2f 20 22 53 51  ROR       */ "SQ
53f0: 4c 20 6c 6f 67 69 63 20 65 72 72 6f 72 20 6f 72  L logic error or
5400: 20 6d 69 73 73 69 6e 67 20 64 61 74 61 62 61 73   missing databas
5410: 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  e",..        /* 
5420: 53 51 4c 49 54 45 5f 49 4e 54 45 52 4e 41 4c 20  SQLITE_INTERNAL 
5430: 20 20 20 2a 2f 20 22 69 6e 74 65 72 6e 61 6c 20     */ "internal 
5440: 6c 6f 67 69 63 20 65 72 72 6f 72 22 2c 0d 0a 20  logic error",.. 
5450: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
5460: 5f 50 45 52 4d 20 20 20 20 20 20 20 20 2a 2f 20  _PERM        */ 
5470: 22 61 63 63 65 73 73 20 70 65 72 6d 69 73 73 69  "access permissi
5480: 6f 6e 20 64 65 6e 69 65 64 22 2c 0d 0a 20 20 20  on denied",..   
5490: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 41       /* SQLITE_A
54a0: 42 4f 52 54 20 20 20 20 20 20 20 2a 2f 20 22 63  BORT       */ "c
54b0: 61 6c 6c 62 61 63 6b 20 72 65 71 75 65 73 74 65  allback requeste
54c0: 64 20 71 75 65 72 79 20 61 62 6f 72 74 22 2c 0d  d query abort",.
54d0: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
54e0: 54 45 5f 42 55 53 59 20 20 20 20 20 20 20 20 2a  TE_BUSY        *
54f0: 2f 20 22 64 61 74 61 62 61 73 65 20 69 73 20 6c  / "database is l
5500: 6f 63 6b 65 64 22 2c 0d 0a 20 20 20 20 20 20 20  ocked",..       
5510: 20 2f 2a 20 53 51 4c 49 54 45 5f 4c 4f 43 4b 45   /* SQLITE_LOCKE
5520: 44 20 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62  D      */ "datab
5530: 61 73 65 20 74 61 62 6c 65 20 69 73 20 6c 6f 63  ase table is loc
5540: 6b 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  ked",..        /
5550: 2a 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 20  * SQLITE_NOMEM  
5560: 20 20 20 20 20 2a 2f 20 22 6f 75 74 20 6f 66 20       */ "out of 
5570: 6d 65 6d 6f 72 79 22 2c 0d 0a 20 20 20 20 20 20  memory",..      
5580: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 52 45 41 44    /* SQLITE_READ
5590: 4f 4e 4c 59 20 20 20 20 2a 2f 20 22 61 74 74 65  ONLY    */ "atte
55a0: 6d 70 74 20 74 6f 20 77 72 69 74 65 20 61 20 72  mpt to write a r
55b0: 65 61 64 6f 6e 6c 79 20 64 61 74 61 62 61 73 65  eadonly database
55c0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
55d0: 51 4c 49 54 45 5f 49 4e 54 45 52 52 55 50 54 20  QLITE_INTERRUPT 
55e0: 20 20 2a 2f 20 22 69 6e 74 65 72 72 75 70 74 65    */ "interrupte
55f0: 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  d",..        /* 
5600: 53 51 4c 49 54 45 5f 49 4f 45 52 52 20 20 20 20  SQLITE_IOERR    
5610: 20 20 20 2a 2f 20 22 64 69 73 6b 20 49 2f 4f 20     */ "disk I/O 
5620: 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20  error",..       
5630: 20 2f 2a 20 53 51 4c 49 54 45 5f 43 4f 52 52 55   /* SQLITE_CORRU
5640: 50 54 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62  PT     */ "datab
5650: 61 73 65 20 64 69 73 6b 20 69 6d 61 67 65 20 69  ase disk image i
5660: 73 20 6d 61 6c 66 6f 72 6d 65 64 22 2c 0d 0a 20  s malformed",.. 
5670: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
5680: 5f 4e 4f 54 46 4f 55 4e 44 20 20 20 20 2a 2f 20  _NOTFOUND    */ 
5690: 22 75 6e 6b 6e 6f 77 6e 20 6f 70 65 72 61 74 69  "unknown operati
56a0: 6f 6e 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  on",..        /*
56b0: 20 53 51 4c 49 54 45 5f 46 55 4c 4c 20 20 20 20   SQLITE_FULL    
56c0: 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65      */ "database
56d0: 20 6f 72 20 64 69 73 6b 20 69 73 20 66 75 6c 6c   or disk is full
56e0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
56f0: 51 4c 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 20  QLITE_CANTOPEN  
5700: 20 20 2a 2f 20 22 75 6e 61 62 6c 65 20 74 6f 20    */ "unable to 
5710: 6f 70 65 6e 20 64 61 74 61 62 61 73 65 20 66 69  open database fi
5720: 6c 65 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a  le",..        /*
5730: 20 53 51 4c 49 54 45 5f 50 52 4f 54 4f 43 4f 4c   SQLITE_PROTOCOL
5740: 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 69 6e 67 20      */ "locking 
5750: 70 72 6f 74 6f 63 6f 6c 22 2c 0d 0a 20 20 20 20  protocol",..    
5760: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4d      /* SQLITE_EM
5770: 50 54 59 20 20 20 20 20 20 20 2a 2f 20 22 74 61  PTY       */ "ta
5780: 62 6c 65 20 63 6f 6e 74 61 69 6e 73 20 6e 6f 20  ble contains no 
5790: 64 61 74 61 22 2c 0d 0a 20 20 20 20 20 20 20 20  data",..        
57a0: 2f 2a 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41  /* SQLITE_SCHEMA
57b0: 20 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62 61        */ "databa
57c0: 73 65 20 73 63 68 65 6d 61 20 68 61 73 20 63 68  se schema has ch
57d0: 61 6e 67 65 64 22 2c 0d 0a 20 20 20 20 20 20 20  anged",..       
57e0: 20 2f 2a 20 53 51 4c 49 54 45 5f 54 4f 4f 42 49   /* SQLITE_TOOBI
57f0: 47 20 20 20 20 20 20 2a 2f 20 22 73 74 72 69 6e  G      */ "strin
5800: 67 20 6f 72 20 62 6c 6f 62 20 74 6f 6f 20 62 69  g or blob too bi
5810: 67 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  g",..        /* 
5820: 53 51 4c 49 54 45 5f 43 4f 4e 53 54 52 41 49 4e  SQLITE_CONSTRAIN
5830: 54 20 20 2a 2f 20 22 63 6f 6e 73 74 72 61 69 6e  T  */ "constrain
5840: 74 20 66 61 69 6c 65 64 22 2c 0d 0a 20 20 20 20  t failed",..    
5850: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4d 49      /* SQLITE_MI
5860: 53 4d 41 54 43 48 20 20 20 20 2a 2f 20 22 64 61  SMATCH    */ "da
5870: 74 61 74 79 70 65 20 6d 69 73 6d 61 74 63 68 22  tatype mismatch"
5880: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
5890: 4c 49 54 45 5f 4d 49 53 55 53 45 20 20 20 20 20  LITE_MISUSE     
58a0: 20 2a 2f 20 22 6c 69 62 72 61 72 79 20 72 6f 75   */ "library rou
58b0: 74 69 6e 65 20 63 61 6c 6c 65 64 20 6f 75 74 20  tine called out 
58c0: 6f 66 20 73 65 71 75 65 6e 63 65 22 2c 0d 0a 20  of sequence",.. 
58d0: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
58e0: 5f 4e 4f 4c 46 53 20 20 20 20 20 20 20 2a 2f 20  _NOLFS       */ 
58f0: 22 6c 61 72 67 65 20 66 69 6c 65 20 73 75 70 70  "large file supp
5900: 6f 72 74 20 69 73 20 64 69 73 61 62 6c 65 64 22  ort is disabled"
5910: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
5920: 4c 49 54 45 5f 41 55 54 48 20 20 20 20 20 20 20  LITE_AUTH       
5930: 20 2a 2f 20 22 61 75 74 68 6f 72 69 7a 61 74 69   */ "authorizati
5940: 6f 6e 20 64 65 6e 69 65 64 22 2c 0d 0a 20 20 20  on denied",..   
5950: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 46       /* SQLITE_F
5960: 4f 52 4d 41 54 20 20 20 20 20 20 2a 2f 20 22 61  ORMAT      */ "a
5970: 75 78 69 6c 69 61 72 79 20 64 61 74 61 62 61 73  uxiliary databas
5980: 65 20 66 6f 72 6d 61 74 20 65 72 72 6f 72 22 2c  e format error",
5990: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
59a0: 49 54 45 5f 52 41 4e 47 45 20 20 20 20 20 20 20  ITE_RANGE       
59b0: 2a 2f 20 22 62 69 6e 64 20 6f 72 20 63 6f 6c 75  */ "bind or colu
59c0: 6d 6e 20 69 6e 64 65 78 20 6f 75 74 20 6f 66 20  mn index out of 
59d0: 72 61 6e 67 65 22 2c 0d 0a 20 20 20 20 20 20 20  range",..       
59e0: 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 54 41 44   /* SQLITE_NOTAD
59f0: 42 20 20 20 20 20 20 2a 2f 20 22 66 69 6c 65 20  B      */ "file 
5a00: 69 73 20 65 6e 63 72 79 70 74 65 64 20 6f 72 20  is encrypted or 
5a10: 69 73 20 6e 6f 74 20 61 20 64 61 74 61 62 61 73  is not a databas
5a20: 65 22 0a 20 20 20 20 7d 3b 0a 0d 0a 20 20 20 20  e".    };...    
5a30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5a80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5a90: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
5aa0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
5ab0: 74 75 72 6e 73 20 74 68 65 20 65 72 72 6f 72 20  turns the error 
5ac0: 6d 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 20  message for the 
5ad0: 73 70 65 63 69 66 69 65 64 20 53 51 4c 69 74 65  specified SQLite
5ae0: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 75 73 69   return code usi
5af0: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  ng..    /// the 
5b00: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
5b10: 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 2e 0d 0a 20  lookup table... 
5b20: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5b30: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5b40: 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68 65 20  m name="rc">The 
5b50: 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f  SQLite return co
5b60: 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  de.</param>..   
5b70: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
5b80: 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 20  e error message 
5b90: 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74 20 63 61  or null if it ca
5ba0: 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f  nnot be found.</
5bb0: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72  returns>..    pr
5bc0: 69 76 61 74 65 20 73 74 61 74 69 63 20 73 74 72  ivate static str
5bd0: 69 6e 67 20 46 61 6c 6c 62 61 63 6b 47 65 74 45  ing FallbackGetE
5be0: 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69 74  rrorString(SQLit
5bf0: 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d 0a  eErrorCode rc)..
5c00: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
5c10: 66 20 28 5f 65 72 72 6f 72 4d 65 73 73 61 67 65  f (_errorMessage
5c20: 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s == null)..    
5c30: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
5c40: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
5c50: 69 6e 74 20 69 6e 64 65 78 20 3d 20 28 69 6e 74  int index = (int
5c60: 29 72 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  )rc;....        
5c70: 69 66 20 28 28 69 6e 64 65 78 20 3c 20 30 29 20  if ((index < 0) 
5c80: 7c 7c 20 28 69 6e 64 65 78 20 3e 3d 20 5f 65 72  || (index >= _er
5c90: 72 6f 72 4d 65 73 73 61 67 65 73 2e 4c 65 6e 67  rorMessages.Leng
5ca0: 74 68 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  th))..          
5cb0: 20 20 69 6e 64 65 78 20 3d 20 28 69 6e 74 29 53    index = (int)S
5cc0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 45  QLiteErrorCode.E
5cd0: 72 72 6f 72 3b 20 2f 2a 20 4d 61 6b 65 20 69 6e  rror; /* Make in
5ce0: 74 6f 20 67 65 6e 65 72 69 63 20 65 72 72 6f 72  to generic error
5cf0: 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20  . */....        
5d00: 72 65 74 75 72 6e 20 5f 65 72 72 6f 72 4d 65 73  return _errorMes
5d10: 73 61 67 65 73 5b 69 6e 64 65 78 5d 3b 0a 20 20  sages[index];.  
5d20: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
5d30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
5d40: 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 65 72  / Returns the er
5d50: 72 6f 72 20 6d 65 73 73 61 67 65 20 66 6f 72 20  ror message for 
5d60: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 53 51  the specified SQ
5d70: 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
5d80: 20 75 73 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20   using..    /// 
5d90: 74 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73  the sqlite3_errs
5da0: 74 72 28 29 20 66 75 6e 63 74 69 6f 6e 2c 20 66  tr() function, f
5db0: 61 6c 6c 69 6e 67 20 62 61 63 6b 20 74 6f 20 74  alling back to t
5dc0: 68 65 20 69 6e 74 65 72 6e 61 6c 20 6c 6f 6f 6b  he internal look
5dd0: 75 70 0d 0a 20 20 20 20 2f 2f 2f 20 74 61 62 6c  up..    /// tabl
5de0: 65 20 69 66 20 6e 65 63 65 73 73 61 72 79 2e 0d  e if necessary..
5df0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
5e00: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  ry>..    /// <pa
5e10: 72 61 6d 20 6e 61 6d 65 3d 22 72 63 22 3e 54 68  ram name="rc">Th
5e20: 65 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  e SQLite return 
5e30: 63 6f 64 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  code.</param>.. 
5e40: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
5e50: 54 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  The error messag
5e60: 65 20 6f 72 20 6e 75 6c 6c 20 69 66 20 69 74 20  e or null if it 
5e70: 63 61 6e 6e 6f 74 20 62 65 20 66 6f 75 6e 64 2e  cannot be found.
5e80: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5e90: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
5ea0: 73 74 72 69 6e 67 20 47 65 74 45 72 72 6f 72 53  string GetErrorS
5eb0: 74 72 69 6e 67 28 53 51 4c 69 74 65 45 72 72 6f  tring(SQLiteErro
5ec0: 72 43 6f 64 65 20 72 63 29 0d 0a 20 20 20 20 7b  rCode rc)..    {
5ed0: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
5ee0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5ef0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72        IntPtr ptr
5f00: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
5f10: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 65  ethods.sqlite3_e
5f20: 72 72 73 74 72 28 72 63 29 3b 0d 0a 0d 0a 20 20  rrstr(rc);....  
5f30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 70 74            if (pt
5f40: 72 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r != IntPtr.Zero
5f50: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
5f60: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
5f70: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
5f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5f90: 20 20 72 65 74 75 72 6e 20 4d 61 72 73 68 61 6c    return Marshal
5fa0: 2e 50 74 72 54 6f 53 74 72 69 6e 67 41 6e 73 69  .PtrToStringAnsi
5fb0: 28 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  (ptr);..#else.. 
5fc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
5fd0: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
5fe0: 6e 67 28 70 74 72 2c 20 2d 31 29 3b 0d 0a 23 65  ng(ptr, -1);..#e
5ff0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6000: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
6010: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
6020: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
6030: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
6040: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6050: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
6060: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
6070: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
6080: 46 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72  FallbackGetError
6090: 53 74 72 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20  String(rc);..   
60a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
60b0: 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67  al static string
60c0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 53 51   GetLastError(SQ
60d0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61  LiteConnectionHa
60e0: 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72  ndle hdl, IntPtr
60f0: 20 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   db)..    {..   
6100: 20 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d       if ((hdl ==
6110: 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d   null) || (db ==
6120: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a   IntPtr.Zero))..
6130: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
6140: 72 6e 20 22 6e 75 6c 6c 20 63 6f 6e 6e 65 63 74  rn "null connect
6150: 69 6f 6e 20 6f 72 20 64 61 74 61 62 61 73 65 20  ion or database 
6160: 68 61 6e 64 6c 65 22 3b 0d 0a 0d 0a 20 20 20 20  handle";....    
6170: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
6180: 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  t = null;....   
6190: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
61a0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
61b0: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
61c0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
61d0: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
61e0: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
61f0: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
6200: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
6210: 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
6220: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
6230: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
6240: 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23  hdl.syncRoot)..#
6250: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6260: 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65    lock (hdl)..#e
6270: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6280: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6290: 20 20 20 20 20 69 66 20 28 21 68 64 6c 2e 49 73       if (!hdl.Is
62a0: 49 6e 76 61 6c 69 64 20 26 26 20 21 68 64 6c 2e  Invalid && !hdl.
62b0: 49 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20  IsClosed)..     
62c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
62d0: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
62e0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
62f0: 20 20 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b          int len;
6300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
6310: 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 55        result = U
6320: 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61  TF8ToString(Unsa
6330: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
6340: 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 5f 69  sqlite3_errmsg_i
6350: 6e 74 65 72 6f 70 28 64 62 2c 20 6f 75 74 20 6c  nterop(db, out l
6360: 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73  en), len);..#els
6370: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
6380: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
6390: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
63a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
63b0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 6d 73 67 28  .sqlite3_errmsg(
63c0: 64 62 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  db), -1);..#endi
63d0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
63e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
63f0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
6400: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
6410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6420: 20 20 20 72 65 73 75 6c 74 20 3d 20 22 63 6c 6f     result = "clo
6430: 73 65 64 20 6f 72 20 69 6e 76 61 6c 69 64 20 63  sed or invalid c
6440: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
6450: 22 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ";..            
6460: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
6470: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
6480: 0a 20 20 20 20 20 20 20 20 47 43 2e 4b 65 65 70  .        GC.Keep
6490: 41 6c 69 76 65 28 68 64 6c 29 3b 0d 0a 20 20 20  Alive(hdl);..   
64a0: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
64b0: 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  lt;..    }....  
64c0: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
64d0: 63 20 76 6f 69 64 20 46 69 6e 69 73 68 42 61 63  c void FinishBac
64e0: 6b 75 70 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63  kup(SQLiteConnec
64f0: 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20  tionHandle hdl, 
6500: 49 6e 74 50 74 72 20 62 61 63 6b 75 70 29 0d 0a  IntPtr backup)..
6510: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
6520: 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29  f ((hdl == null)
6530: 20 7c 7c 20 28 62 61 63 6b 75 70 20 3d 3d 20 49   || (backup == I
6540: 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74  ntPtr.Zero)) ret
6550: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
6560: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
6570: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
6580: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
6590: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
65a0: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
65b0: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
65c0: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
65d0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c         {..#if PL
65e0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
65f0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6600: 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73       lock (hdl.s
6610: 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d  yncRoot)..#else.
6620: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63  .            loc
6630: 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d  k (hdl)..#endif.
6640: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6650: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
6660: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
6670: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
6680: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
6690: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
66a0: 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66 69 6e  lite3_backup_fin
66b0: 69 73 68 5f 69 6e 74 65 72 6f 70 28 62 61 63 6b  ish_interop(back
66c0: 75 70 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  up);..#else..   
66d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
66e0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
66f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
6700: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
6710: 6b 75 70 5f 66 69 6e 69 73 68 28 62 61 63 6b 75  kup_finish(backu
6720: 70 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  p);..#endif..   
6730: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
6740: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
6750: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
6760: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
6770: 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a 20  ion(n, null);.. 
6780: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
6790: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
67a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
67b0: 74 61 74 69 63 20 76 6f 69 64 20 46 69 6e 61 6c  tatic void Final
67c0: 69 7a 65 53 74 61 74 65 6d 65 6e 74 28 53 51 4c  izeStatement(SQL
67d0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
67e0: 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20  dle hdl, IntPtr 
67f0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
6800: 20 20 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d        if ((hdl =
6810: 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 6d 74  = null) || (stmt
6820: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
6830: 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20  ) return;....   
6840: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6850: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6860: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
6870: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6880: 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
6890: 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
68a0: 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
68b0: 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23  */..        {..#
68c0: 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  if PLATFORM_COMP
68d0: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
68e0: 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28            lock (
68f0: 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23  hdl.syncRoot)..#
6900: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
6910: 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65    lock (hdl)..#e
6920: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
6930: 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
6940: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
6950: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6960: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6970: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6980: 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ds.sqlite3_final
6990: 69 7a 65 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ize_interop(stmt
69a0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
69b0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
69c0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
69d0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
69e0: 64 73 2e 73 71 6c 69 74 65 33 5f 66 69 6e 61 6c  ds.sqlite3_final
69f0: 69 7a 65 28 73 74 6d 74 29 3b 0d 0a 23 65 6e 64  ize(stmt);..#end
6a00: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
6a10: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
6a20: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
6a30: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
6a40: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75  eException(n, nu
6a50: 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ll);..          
6a60: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
6a70: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
6a80: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
6a90: 64 20 43 6c 6f 73 65 43 6f 6e 6e 65 63 74 69 6f  d CloseConnectio
6aa0: 6e 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  n(SQLiteConnecti
6ab0: 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e  onHandle hdl, In
6ac0: 74 50 74 72 20 64 62 29 0d 0a 20 20 20 20 7b 0d  tPtr db)..    {.
6ad0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 68 64  .        if ((hd
6ae0: 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64  l == null) || (d
6af0: 62 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  b == IntPtr.Zero
6b00: 29 29 20 72 65 74 75 72 6e 3b 0d 0a 0d 0a 20 20  )) return;....  
6b10: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
6b20: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6b30: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
6b40: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
6b50: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
6b60: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
6b70: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
6b80: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
6b90: 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
6ba0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
6bb0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
6bc0: 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a  (hdl.syncRoot)..
6bd0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
6be0: 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23     lock (hdl)..#
6bf0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
6c00: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
6c10: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
6c20: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
6c30: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
6c40: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6c50: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73  ods.sqlite3_clos
6c60: 65 5f 69 6e 74 65 72 6f 70 28 64 62 29 3b 0d 0a  e_interop(db);..
6c70: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
6c80: 20 20 20 20 20 20 20 52 65 73 65 74 43 6f 6e 6e         ResetConn
6c90: 65 63 74 69 6f 6e 28 68 64 6c 2c 20 64 62 2c 20  ection(hdl, db, 
6ca0: 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  false);....     
6cb0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
6cc0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
6cd0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6ce0: 64 73 2e 73 71 6c 69 74 65 33 5f 63 6c 6f 73 65  ds.sqlite3_close
6cf0: 28 64 62 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  (db);..#endif.. 
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6d10: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
6d20: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
6d30: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
6d40: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
6d50: 45 72 72 6f 72 28 68 64 6c 2c 20 64 62 29 29 3b  Error(hdl, db));
6d60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6d70: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6d80: 7d 0d 0a 0d 0a 23 69 66 20 21 49 4e 54 45 52 4f  }....#if !INTERO
6d90: 50 5f 4c 45 47 41 43 59 5f 43 4c 4f 53 45 0d 0a  P_LEGACY_CLOSE..
6da0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
6db0: 74 69 63 20 76 6f 69 64 20 43 6c 6f 73 65 43 6f  tic void CloseCo
6dc0: 6e 6e 65 63 74 69 6f 6e 56 32 28 53 51 4c 69 74  nnectionV2(SQLit
6dd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c  eConnectionHandl
6de0: 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62  e hdl, IntPtr db
6df0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
6e00: 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75    if ((hdl == nu
6e10: 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e  ll) || (db == In
6e20: 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74 75  tPtr.Zero)) retu
6e30: 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74  rn;....        t
6e40: 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ry..        {.. 
6e50: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f             // do
6e60: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
6e70: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
6e80: 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54  nally /* NOTE: T
6e90: 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72  hread.Abort() pr
6ea0: 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20  otection. */..  
6eb0: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c 41        {..#if PLA
6ec0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
6ed0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
6ee0: 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73 79      lock (hdl.sy
6ef0: 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a  ncRoot)..#else..
6f00: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
6f10: 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a   (hdl)..#endif..
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23              {..#
6f30: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
6f40: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
6f50: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
6f60: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
6f70: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
6f80: 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74 65 72  ite3_close_inter
6f90: 6f 70 28 64 62 29 3b 0d 0a 23 65 6c 73 65 0d 0a  op(db);..#else..
6fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fb0: 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28  ResetConnection(
6fc0: 68 64 6c 2c 20 64 62 2c 20 66 61 6c 73 65 29 3b  hdl, db, false);
6fd0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
6fe0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
6ff0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
7000: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
7010: 74 65 33 5f 63 6c 6f 73 65 5f 76 32 28 64 62 29  te3_close_v2(db)
7020: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
7030: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
7040: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
7050: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
7060: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
7070: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
7080: 72 28 68 64 6c 2c 20 64 62 29 29 3b 0d 0a 20 20  r(hdl, db));..  
7090: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
70a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23       }..    }..#
70b0: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69 6e 74  endif....    int
70c0: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f  ernal static boo
70d0: 6c 20 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f  l ResetConnectio
70e0: 6e 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  n(SQLiteConnecti
70f0: 6f 6e 48 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e  onHandle hdl, In
7100: 74 50 74 72 20 64 62 2c 20 62 6f 6f 6c 20 63 61  tPtr db, bool ca
7110: 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a  nThrow)..    {..
7120: 20 20 20 20 20 20 20 20 69 66 20 28 28 68 64 6c          if ((hdl
7130: 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 64 62   == null) || (db
7140: 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
7150: 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d  ) return false;.
7160: 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  ...        bool 
7170: 72 65 73 75 6c 74 20 3d 20 66 61 6c 73 65 3b 0d  result = false;.
7180: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
7190: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
71a0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
71b0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
71c0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
71d0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
71e0: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
71f0: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
7200: 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52    {..#if PLATFOR
7210: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7220: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
7230: 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f  lock (hdl.syncRo
7240: 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ot)..#else..    
7250: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64          lock (hd
7260: 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l)..#endif..    
7270: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7280: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 63             if (c
7290: 61 6e 54 68 72 6f 77 20 26 26 20 68 64 6c 2e 49  anThrow && hdl.I
72a0: 73 49 6e 76 61 6c 69 64 29 0d 0a 20 20 20 20 20  sInvalid)..     
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
72c0: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
72d0: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
72e0: 6f 6e 28 22 54 68 65 20 63 6f 6e 6e 65 63 74 69  on("The connecti
72f0: 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 69 6e 76  on handle is inv
7300: 61 6c 69 64 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  alid.");....    
7310: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
7320: 63 61 6e 54 68 72 6f 77 20 26 26 20 68 64 6c 2e  canThrow && hdl.
7330: 49 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20  IsClosed)..     
7340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74                 t
7350: 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
7360: 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
7370: 6f 6e 28 22 54 68 65 20 63 6f 6e 6e 65 63 74 69  on("The connecti
7380: 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20 63 6c 6f  on handle is clo
7390: 73 65 64 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  sed.");....     
73a0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21             if (!
73b0: 68 64 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26  hdl.IsInvalid &&
73c0: 20 21 68 64 6c 2e 49 73 43 6c 6f 73 65 64 29 0d   !hdl.IsClosed).
73d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
73e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
73f0: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 73          IntPtr s
7400: 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tmt = IntPtr.Zer
7410: 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o;..            
7420: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7430: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20  rorCode n;....  
7440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7450: 20 20 64 6f 0d 0a 20 20 20 20 20 20 20 20 20 20    do..          
7460: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
7470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7480: 20 20 20 20 20 73 74 6d 74 20 3d 20 55 6e 73 61       stmt = Unsa
7490: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
74a0: 73 71 6c 69 74 65 33 5f 6e 65 78 74 5f 73 74 6d  sqlite3_next_stm
74b0: 74 28 64 62 2c 20 73 74 6d 74 29 3b 0d 0a 20 20  t(db, stmt);..  
74c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
74d0: 20 20 20 20 20 20 69 66 20 28 73 74 6d 74 20 21        if (stmt !
74e0: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a  = IntPtr.Zero)..
74f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7500: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
7510: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
7520: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7530: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d               n =
7540: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7550: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73  hods.sqlite3_res
7560: 65 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 29  et_interop(stmt)
7570: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
7580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7590: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
75a0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
75b0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
75c0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
75d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
75e0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20      }..         
75f0: 20 20 20 20 20 20 20 20 20 20 20 7d 20 77 68 69             } whi
7600: 6c 65 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  le (stmt != IntP
7610: 74 72 2e 5a 65 72 6f 29 3b 0d 0a 0d 0a 20 20 20  tr.Zero);....   
7620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7630: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
7640: 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45           // NOTE
7650: 3a 20 49 73 20 61 20 74 72 61 6e 73 61 63 74 69  : Is a transacti
7660: 6f 6e 20 4e 4f 54 20 70 65 6e 64 69 6e 67 20 6f  on NOT pending o
7670: 6e 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  n the connection
7680: 3f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ?..             
7690: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
76a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
76b0: 66 20 28 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28  f (IsAutocommit(
76c0: 68 64 6c 2c 20 64 62 29 29 0d 0a 20 20 20 20 20  hdl, db))..     
76d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
76e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
76f0: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
7700: 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20   = true;..      
7710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
7720: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7730: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
7740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
7750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
7760: 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e            n = Un
7770: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
7780: 73 2e 73 71 6c 69 74 65 33 5f 65 78 65 63 28 0d  s.sqlite3_exec(.
7790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
77a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 62 2c               db,
77b0: 20 54 6f 55 54 46 38 28 22 52 4f 4c 4c 42 41 43   ToUTF8("ROLLBAC
77c0: 4b 22 29 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  K"), IntPtr.Zero
77d0: 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 0d 0a  , IntPtr.Zero,..
77e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
77f0: 20 20 20 20 20 20 20 20 20 20 20 20 6f 75 74 20              out 
7800: 73 74 6d 74 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  stmt);....      
7810: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7820: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
7830: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a  eErrorCode.Ok)..
7840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7850: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
7860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7870: 20 20 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20         result = 
7880: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
7890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
78a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
78b0: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69            else i
78c0: 66 20 28 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20  f (canThrow)..  
78d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
78e0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
78f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7900: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
7910: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
7920: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 68  , GetLastError(h
7930: 64 6c 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20 20  dl, db));..     
7940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7950: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
7960: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
7970: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
7980: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
7990: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
79a0: 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65 28 68    GC.KeepAlive(h
79b0: 64 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65  dl);..        re
79c0: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
79d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
79e0: 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
79f0: 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28 53 51 4c  IsAutocommit(SQL
7a00: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
7a10: 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20  dle hdl, IntPtr 
7a20: 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  db)..    {..    
7a30: 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20      if ((hdl == 
7a40: 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20  null) || (db == 
7a50: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65  IntPtr.Zero)) re
7a60: 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  turn false;.... 
7a70: 20 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75         bool resu
7a80: 6c 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20  lt = false;.... 
7a90: 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20         try..    
7aa0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7ab0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
7ac0: 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ...        }..  
7ad0: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a        finally /*
7ae0: 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62   NOTE: Thread.Ab
7af0: 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e  ort() protection
7b00: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d  . */..        {.
7b10: 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  .#if PLATFORM_CO
7b20: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b              lock
7b40: 20 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d   (hdl.syncRoot).
7b50: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
7b60: 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a      lock (hdl)..
7b70: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
7b80: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
7b90: 20 20 20 20 20 20 20 69 66 20 28 21 68 64 6c 2e         if (!hdl.
7ba0: 49 73 49 6e 76 61 6c 69 64 20 26 26 20 21 68 64  IsInvalid && !hd
7bb0: 6c 2e 49 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20  l.IsClosed)..   
7bc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7bd0: 20 72 65 73 75 6c 74 20 3d 20 28 55 6e 73 61 66   result = (Unsaf
7be0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
7bf0: 71 6c 69 74 65 33 5f 67 65 74 5f 61 75 74 6f 63  qlite3_get_autoc
7c00: 6f 6d 6d 69 74 28 64 62 29 20 3d 3d 20 31 29 3b  ommit(db) == 1);
7c10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
7c20: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
7c30: 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65      GC.KeepAlive
7c40: 28 68 64 6c 29 3b 20 2f 2a 20 4e 4f 54 45 3a 20  (hdl); /* NOTE: 
7c50: 55 6e 72 65 61 63 68 61 62 6c 65 20 63 6f 64 65  Unreachable code
7c60: 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 72 65  . */..        re
7c70: 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a 20 20  turn result;..  
7c80: 20 20 7d 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 69 6e    }..  }....  in
7c90: 74 65 72 6e 61 6c 20 69 6e 74 65 72 66 61 63 65  ternal interface
7ca0: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
7cb0: 74 65 6e 73 69 6f 6e 73 0d 0a 20 20 7b 0d 0a 20  tensions..  {.. 
7cc0: 20 20 20 76 6f 69 64 20 42 75 69 6c 64 54 65 6d     void BuildTem
7cd0: 70 53 63 68 65 6d 61 28 53 51 4c 69 74 65 43 6f  pSchema(SQLiteCo
7ce0: 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 29 3b 0d 0a  nnection cnn);..
7cf0: 20 20 7d 0d 0a 0d 0a 20 20 5b 46 6c 61 67 73 5d    }....  [Flags]
7d00: 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75  ..  internal enu
7d10: 6d 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61 67  m SQLiteOpenFlag
7d20: 73 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20  sEnum..  {..    
7d30: 4e 6f 6e 65 20 3d 20 30 2c 0d 0a 20 20 20 20 52  None = 0,..    R
7d40: 65 61 64 4f 6e 6c 79 20 3d 20 30 78 30 31 2c 0d  eadOnly = 0x01,.
7d50: 0a 20 20 20 20 52 65 61 64 57 72 69 74 65 20 3d  .    ReadWrite =
7d60: 20 30 78 30 32 2c 0d 0a 20 20 20 20 43 72 65 61   0x02,..    Crea
7d70: 74 65 20 3d 20 30 78 30 34 2c 0d 0a 20 20 20 20  te = 0x04,..    
7d80: 55 72 69 20 3d 20 30 78 34 30 2c 0d 0a 20 20 20  Uri = 0x40,..   
7d90: 20 53 68 61 72 65 64 43 61 63 68 65 20 3d 20 30   SharedCache = 0
7da0: 78 30 31 30 30 30 30 30 30 2c 0d 0a 20 20 20 20  x01000000,..    
7db0: 44 65 66 61 75 6c 74 20 3d 20 30 78 30 36 2c 0d  Default = 0x06,.
7dc0: 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73  .  }....  /// <s
7dd0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54  ummary>..  /// T
7de0: 68 65 20 65 78 74 72 61 20 62 65 68 61 76 69 6f  he extra behavio
7df0: 72 61 6c 20 66 6c 61 67 73 20 74 68 61 74 20 63  ral flags that c
7e00: 61 6e 20 62 65 20 61 70 70 6c 69 65 64 20 74 6f  an be applied to
7e10: 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a   a connection...
7e20: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
7e30: 0d 0a 20 20 5b 46 6c 61 67 73 28 29 5d 0d 0a 20  ..  [Flags()].. 
7e40: 20 70 75 62 6c 69 63 20 65 6e 75 6d 20 53 51 4c   public enum SQL
7e50: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
7e60: 67 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 20 20 2f  gs..  {..      /
7e70: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
7e80: 20 20 20 20 2f 2f 2f 20 4e 6f 20 65 78 74 72 61      /// No extra
7e90: 20 66 6c 61 67 73 2e 0d 0a 20 20 20 20 20 20 2f   flags...      /
7ea0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7eb0: 20 20 20 20 20 4e 6f 6e 65 20 3d 20 30 78 30 2c       None = 0x0,
7ec0: 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73  ....      /// <s
7ed0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
7ee0: 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e  // Enable loggin
7ef0: 67 20 6f 66 20 61 6c 6c 20 53 51 4c 20 73 74 61  g of all SQL sta
7f00: 74 65 6d 65 6e 74 73 20 74 6f 20 62 65 20 70 72  tements to be pr
7f10: 65 70 61 72 65 64 2e 0d 0a 20 20 20 20 20 20 2f  epared...      /
7f20: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
7f30: 20 20 20 20 20 4c 6f 67 50 72 65 70 61 72 65 20       LogPrepare 
7f40: 3d 20 30 78 31 2c 0d 0a 0d 0a 20 20 20 20 20 20  = 0x1,....      
7f50: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
7f60: 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20       /// Enable 
7f70: 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c 6c 20 62  logging of all b
7f80: 6f 75 6e 64 20 70 61 72 61 6d 65 74 65 72 20 74  ound parameter t
7f90: 79 70 65 73 20 61 6e 64 20 72 61 77 20 76 61 6c  ypes and raw val
7fa0: 75 65 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ues...      /// 
7fb0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
7fc0: 20 20 4c 6f 67 50 72 65 42 69 6e 64 20 3d 20 30    LogPreBind = 0
7fd0: 78 32 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  x2,....      ///
7fe0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
7ff0: 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67    /// Enable log
8000: 67 69 6e 67 20 6f 66 20 61 6c 6c 20 62 6f 75 6e  ging of all boun
8010: 64 20 70 61 72 61 6d 65 74 65 72 20 73 74 72 6f  d parameter stro
8020: 6e 67 6c 79 20 74 79 70 65 64 20 76 61 6c 75 65  ngly typed value
8030: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
8040: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8050: 4c 6f 67 42 69 6e 64 20 3d 20 30 78 34 2c 0d 0a  LogBind = 0x4,..
8060: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
8070: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
8080: 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20   Enable logging 
8090: 6f 66 20 61 6c 6c 20 65 78 63 65 70 74 69 6f 6e  of all exception
80a0: 73 20 63 61 75 67 68 74 20 66 72 6f 6d 20 75 73  s caught from us
80b0: 65 72 2d 70 72 6f 76 69 64 65 64 0d 0a 20 20 20  er-provided..   
80c0: 20 20 20 2f 2f 2f 20 6d 61 6e 61 67 65 64 20 63     /// managed c
80d0: 6f 64 65 20 63 61 6c 6c 65 64 20 66 72 6f 6d 20  ode called from 
80e0: 6e 61 74 69 76 65 20 63 6f 64 65 20 76 69 61 20  native code via 
80f0: 64 65 6c 65 67 61 74 65 73 2e 0d 0a 20 20 20 20  delegates...    
8100: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8110: 0d 0a 20 20 20 20 20 20 4c 6f 67 43 61 6c 6c 62  ..      LogCallb
8120: 61 63 6b 45 78 63 65 70 74 69 6f 6e 20 3d 20 30  ackException = 0
8130: 78 38 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  x8,....      ///
8140: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
8150: 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67    /// Enable log
8160: 67 69 6e 67 20 6f 66 20 62 61 63 6b 75 70 20 41  ging of backup A
8170: 50 49 20 65 72 72 6f 72 73 2e 0d 0a 20 20 20 20  PI errors...    
8180: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
8190: 0d 0a 20 20 20 20 20 20 4c 6f 67 42 61 63 6b 75  ..      LogBacku
81a0: 70 20 3d 20 30 78 31 30 2c 0d 0a 0d 0a 20 20 20  p = 0x10,....   
81b0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
81c0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 53 6b 69 70  ..      /// Skip
81d0: 20 61 64 64 69 6e 67 20 74 68 65 20 65 78 74 65   adding the exte
81e0: 6e 73 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 73 20  nsion functions 
81f0: 70 72 6f 76 69 64 65 64 20 62 79 20 74 68 65 20  provided by the 
8200: 6e 61 74 69 76 65 0d 0a 20 20 20 20 20 20 2f 2f  native..      //
8210: 2f 20 69 6e 74 65 72 6f 70 20 61 73 73 65 6d 62  / interop assemb
8220: 6c 79 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ly...      /// <
8230: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  /summary>..     
8240: 20 4e 6f 45 78 74 65 6e 73 69 6f 6e 46 75 6e 63   NoExtensionFunc
8250: 74 69 6f 6e 73 20 3d 20 30 78 32 30 2c 0d 0a 0d  tions = 0x20,...
8260: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
8270: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
8280: 57 68 65 6e 20 62 69 6e 64 69 6e 67 20 70 61 72  When binding par
8290: 61 6d 65 74 65 72 20 76 61 6c 75 65 73 20 77 69  ameter values wi
82a0: 74 68 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  th the <see cref
82b0: 3d 22 55 49 6e 74 33 32 22 20 2f 3e 0d 0a 20 20  ="UInt32" />..  
82c0: 20 20 20 20 2f 2f 2f 20 74 79 70 65 2c 20 75 73      /// type, us
82d0: 65 20 74 68 65 20 69 6e 74 65 72 6f 70 20 6d 65  e the interop me
82e0: 74 68 6f 64 20 74 68 61 74 20 61 63 63 65 70 74  thod that accept
82f0: 73 20 61 6e 20 3c 73 65 65 20 63 72 65 66 3d 22  s an <see cref="
8300: 49 6e 74 36 34 22 20 2f 3e 0d 0a 20 20 20 20 20  Int64" />..     
8310: 20 2f 2f 2f 20 76 61 6c 75 65 2e 0d 0a 20 20 20   /// value...   
8320: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
8330: 3e 0d 0a 20 20 20 20 20 20 42 69 6e 64 55 49 6e  >..      BindUIn
8340: 74 33 32 41 73 49 6e 74 36 34 20 3d 20 30 78 34  t32AsInt64 = 0x4
8350: 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  0,....      /// 
8360: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
8370: 20 2f 2f 2f 20 57 68 65 6e 20 62 69 6e 64 69 6e   /// When bindin
8380: 67 20 70 61 72 61 6d 65 74 65 72 20 76 61 6c 75  g parameter valu
8390: 65 73 2c 20 61 6c 77 61 79 73 20 62 69 6e 64 20  es, always bind 
83a0: 74 68 65 6d 20 61 73 20 74 68 6f 75 67 68 20 74  them as though t
83b0: 68 65 79 20 77 65 72 65 0d 0a 20 20 20 20 20 20  hey were..      
83c0: 2f 2f 2f 20 70 6c 61 69 6e 20 74 65 78 74 20 28  /// plain text (
83d0: 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72 69 63 2c  i.e. no numeric,
83e0: 20 64 61 74 65 2f 74 69 6d 65 2c 20 6f 72 20 6f   date/time, or o
83f0: 74 68 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73  ther conversions
8400: 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 2f   should..      /
8410: 2f 2f 20 62 65 20 61 74 74 65 6d 70 74 65 64 29  // be attempted)
8420: 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73  ...      /// </s
8430: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 42  ummary>..      B
8440: 69 6e 64 41 6c 6c 41 73 54 65 78 74 20 3d 20 30  indAllAsText = 0
8450: 78 38 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  x80,....      //
8460: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8470: 20 20 20 2f 2f 2f 20 57 68 65 6e 20 72 65 74 75     /// When retu
8480: 72 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61 6c  rning column val
8490: 75 65 73 2c 20 61 6c 77 61 79 73 20 72 65 74 75  ues, always retu
84a0: 72 6e 20 74 68 65 6d 20 61 73 20 74 68 6f 75 67  rn them as thoug
84b0: 68 20 74 68 65 79 20 77 65 72 65 0d 0a 20 20 20  h they were..   
84c0: 20 20 20 2f 2f 2f 20 70 6c 61 69 6e 20 74 65 78     /// plain tex
84d0: 74 20 28 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72  t (i.e. no numer
84e0: 69 63 2c 20 64 61 74 65 2f 74 69 6d 65 2c 20 6f  ic, date/time, o
84f0: 72 20 6f 74 68 65 72 20 63 6f 6e 76 65 72 73 69  r other conversi
8500: 6f 6e 73 20 73 68 6f 75 6c 64 0d 0a 20 20 20 20  ons should..    
8510: 20 20 2f 2f 2f 20 62 65 20 61 74 74 65 6d 70 74    /// be attempt
8520: 65 64 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ed)...      /// 
8530: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
8540: 20 20 47 65 74 41 6c 6c 41 73 54 65 78 74 20 3d    GetAllAsText =
8550: 20 30 78 31 30 30 2c 0d 0a 0d 0a 20 20 20 20 20   0x100,....     
8560: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8570: 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 62        /// When b
8580: 69 6e 64 69 6e 67 20 61 6e 64 20 72 65 74 75 72  inding and retur
8590: 6e 69 6e 67 20 63 6f 6c 75 6d 6e 20 76 61 6c 75  ning column valu
85a0: 65 73 2c 20 61 6c 77 61 79 73 20 74 72 65 61 74  es, always treat
85b0: 20 74 68 65 6d 20 61 73 20 74 68 6f 75 67 68 0d   them as though.
85c0: 0a 20 20 20 20 20 20 2f 2f 2f 20 74 68 65 79 20  .      /// they 
85d0: 77 65 72 65 20 70 6c 61 69 6e 20 74 65 78 74 20  were plain text 
85e0: 28 69 2e 65 2e 20 6e 6f 20 6e 75 6d 65 72 69 63  (i.e. no numeric
85f0: 2c 20 64 61 74 65 2f 74 69 6d 65 2c 20 6f 72 20  , date/time, or 
8600: 6f 74 68 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e  other conversion
8610: 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 73 68 6f  s..      /// sho
8620: 75 6c 64 20 62 65 20 61 74 74 65 6d 70 74 65 64  uld be attempted
8630: 29 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  )...      /// </
8640: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8650: 42 69 6e 64 41 6e 64 47 65 74 41 6c 6c 41 73 54  BindAndGetAllAsT
8660: 65 78 74 20 3d 20 42 69 6e 64 41 6c 6c 41 73 54  ext = BindAllAsT
8670: 65 78 74 20 7c 20 47 65 74 41 6c 6c 41 73 54 65  ext | GetAllAsTe
8680: 78 74 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f  xt,....      ///
8690: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
86a0: 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 20 61 6c 6c    /// Enable all
86b0: 20 6c 6f 67 67 69 6e 67 2e 0d 0a 20 20 20 20 20   logging...     
86c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
86d0: 0a 20 20 20 20 20 20 4c 6f 67 41 6c 6c 20 3d 20  .      LogAll = 
86e0: 4c 6f 67 50 72 65 70 61 72 65 20 7c 20 4c 6f 67  LogPrepare | Log
86f0: 50 72 65 42 69 6e 64 20 7c 20 4c 6f 67 42 69 6e  PreBind | LogBin
8700: 64 20 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d |..           
8710: 20 20 20 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45      LogCallbackE
8720: 78 63 65 70 74 69 6f 6e 20 7c 20 4c 6f 67 42 61  xception | LogBa
8730: 63 6b 75 70 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f  ckup,....      /
8740: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
8750: 20 20 20 20 2f 2f 2f 20 54 68 65 20 64 65 66 61      /// The defa
8760: 75 6c 74 20 65 78 74 72 61 20 66 6c 61 67 73 20  ult extra flags 
8770: 66 6f 72 20 6e 65 77 20 63 6f 6e 6e 65 63 74 69  for new connecti
8780: 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ons...      /// 
8790: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
87a0: 20 20 44 65 66 61 75 6c 74 20 3d 20 4c 6f 67 43    Default = LogC
87b0: 61 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e  allbackException
87c0: 0d 0a 20 20 7d 0d 0a 0d 0a 20 20 2f 2f 20 54 68  ..  }....  // Th
87d0: 65 73 65 20 61 72 65 20 74 68 65 20 6f 70 74 69  ese are the opti
87e0: 6f 6e 73 20 74 6f 20 74 68 65 20 69 6e 74 65 72  ons to the inter
87f0: 6e 61 6c 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66  nal sqlite3_conf
8800: 69 67 20 63 61 6c 6c 2e 0d 0a 20 20 69 6e 74 65  ig call...  inte
8810: 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c 69 74 65  rnal enum SQLite
8820: 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 0d 0a 20  ConfigOpsEnum.. 
8830: 20 7b 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43   {..    SQLITE_C
8840: 4f 4e 46 49 47 5f 4e 4f 4e 45 20 3d 20 30 2c 20  ONFIG_NONE = 0, 
8850: 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c  // nil ..    SQL
8860: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 49 4e 47 4c  ITE_CONFIG_SINGL
8870: 45 54 48 52 45 41 44 20 3d 20 31 2c 20 2f 2f 20  ETHREAD = 1, // 
8880: 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  nil ..    SQLITE
8890: 5f 43 4f 4e 46 49 47 5f 4d 55 4c 54 49 54 48 52  _CONFIG_MULTITHR
88a0: 45 41 44 20 3d 20 32 2c 20 2f 2f 20 6e 69 6c 20  EAD = 2, // nil 
88b0: 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
88c0: 46 49 47 5f 53 45 52 49 41 4c 49 5a 45 44 20 3d  FIG_SERIALIZED =
88d0: 20 33 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20   3, // nil ..   
88e0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
88f0: 41 4c 4c 4f 43 20 3d 20 34 2c 20 2f 2f 20 73 71  ALLOC = 4, // sq
8900: 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68 6f 64  lite3_mem_method
8910: 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f  s* ..    SQLITE_
8920: 43 4f 4e 46 49 47 5f 47 45 54 4d 41 4c 4c 4f 43  CONFIG_GETMALLOC
8930: 20 3d 20 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33   = 5, // sqlite3
8940: 5f 6d 65 6d 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a  _mem_methods* ..
8950: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
8960: 47 5f 53 43 52 41 54 43 48 20 3d 20 36 2c 20 2f  G_SCRATCH = 6, /
8970: 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 73 7a 2c  / void*, int sz,
8980: 20 69 6e 74 20 4e 20 0d 0a 20 20 20 20 53 51 4c   int N ..    SQL
8990: 49 54 45 5f 43 4f 4e 46 49 47 5f 50 41 47 45 43  ITE_CONFIG_PAGEC
89a0: 41 43 48 45 20 3d 20 37 2c 20 2f 2f 20 76 6f 69  ACHE = 7, // voi
89b0: 64 2a 2c 20 69 6e 74 20 73 7a 2c 20 69 6e 74 20  d*, int sz, int 
89c0: 4e 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  N ..    SQLITE_C
89d0: 4f 4e 46 49 47 5f 48 45 41 50 20 3d 20 38 2c 20  ONFIG_HEAP = 8, 
89e0: 2f 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 6e 42  // void*, int nB
89f0: 79 74 65 2c 20 69 6e 74 20 6d 69 6e 20 0d 0a 20  yte, int min .. 
8a00: 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47     SQLITE_CONFIG
8a10: 5f 4d 45 4d 53 54 41 54 55 53 20 3d 20 39 2c 20  _MEMSTATUS = 9, 
8a20: 2f 2f 20 62 6f 6f 6c 65 61 6e 20 0d 0a 20 20 20  // boolean ..   
8a30: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
8a40: 55 54 45 58 20 3d 20 31 30 2c 20 2f 2f 20 73 71  UTEX = 10, // sq
8a50: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68  lite3_mutex_meth
8a60: 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54  ods* ..    SQLIT
8a70: 45 5f 43 4f 4e 46 49 47 5f 47 45 54 4d 55 54 45  E_CONFIG_GETMUTE
8a80: 58 20 3d 20 31 31 2c 20 2f 2f 20 73 71 6c 69 74  X = 11, // sqlit
8a90: 65 33 5f 6d 75 74 65 78 5f 6d 65 74 68 6f 64 73  e3_mutex_methods
8aa0: 2a 20 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69  * ..    // previ
8ab0: 6f 75 73 6c 79 20 53 51 4c 49 54 45 5f 43 4f 4e  ously SQLITE_CON
8ac0: 46 49 47 5f 43 48 55 4e 4b 41 4c 4c 4f 43 20 31  FIG_CHUNKALLOC 1
8ad0: 32 20 77 68 69 63 68 20 69 73 20 6e 6f 77 20 75  2 which is now u
8ae0: 6e 75 73 65 64 0d 0a 20 20 20 20 53 51 4c 49 54  nused..    SQLIT
8af0: 45 5f 43 4f 4e 46 49 47 5f 4c 4f 4f 4b 41 53 49  E_CONFIG_LOOKASI
8b00: 44 45 20 3d 20 31 33 2c 20 2f 2f 20 69 6e 74 20  DE = 13, // int 
8b10: 69 6e 74 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  int ..    SQLITE
8b20: 5f 43 4f 4e 46 49 47 5f 50 43 41 43 48 45 20 3d  _CONFIG_PCACHE =
8b30: 20 31 34 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f   14, // sqlite3_
8b40: 70 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20  pcache_methods* 
8b50: 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e  ..    SQLITE_CON
8b60: 46 49 47 5f 47 45 54 50 43 41 43 48 45 20 3d 20  FIG_GETPCACHE = 
8b70: 31 35 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 70  15, // sqlite3_p
8b80: 63 61 63 68 65 5f 6d 65 74 68 6f 64 73 2a 20 0d  cache_methods* .
8b90: 0a 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46  .    SQLITE_CONF
8ba0: 49 47 5f 4c 4f 47 20 3d 20 31 36 2c 20 2f 2f 20  IG_LOG = 16, // 
8bb0: 78 46 75 6e 63 2c 20 76 6f 69 64 2a 20 0d 0a 20  xFunc, void* .. 
8bc0: 20 7d 0d 0a 0d 0a 7d 0d 0a                        }....}..