System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 14fcfa6ba6a1fc50a0e6aa32d82d3a4aebfc5733:


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 23 72  ble..  {..    #r
0320: 65 67 69 6f 6e 20 50 72 69 76 61 74 65 20 43 6f  egion Private Co
0330: 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 2f 2f 2f  nstants..    ///
0340: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0350: 2f 2f 2f 20 54 68 65 20 65 72 72 6f 72 20 63 6f  /// The error co
0360: 64 65 20 75 73 65 64 20 66 6f 72 20 6c 6f 67 67  de used for logg
0370: 69 6e 67 20 65 78 63 65 70 74 69 6f 6e 73 20 63  ing exceptions c
0380: 61 75 67 68 74 20 69 6e 20 75 73 65 72 2d 70 72  aught in user-pr
0390: 6f 76 69 64 65 64 0d 0a 20 20 20 20 2f 2f 2f 20  ovided..    /// 
03a0: 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
03b0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
03c0: 6e 74 65 72 6e 61 6c 20 63 6f 6e 73 74 20 69 6e  nternal const in
03d0: 74 20 43 4f 52 5f 45 5f 45 58 43 45 50 54 49 4f  t COR_E_EXCEPTIO
03e0: 4e 20 3d 20 75 6e 63 68 65 63 6b 65 64 28 28 69  N = unchecked((i
03f0: 6e 74 29 30 78 38 30 31 33 31 35 30 30 29 3b 0d  nt)0x80131500);.
0400: 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d  .    #endregion.
0410: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
0420: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0430: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0440: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0450: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0460: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
0470: 20 53 51 4c 69 74 65 42 61 73 65 28 53 51 4c 69   SQLiteBase(SQLi
0480: 74 65 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d  teDateFormats fm
0490: 74 2c 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 20  t, DateTimeKind 
04a0: 6b 69 6e 64 2c 20 73 74 72 69 6e 67 20 66 6d 74  kind, string fmt
04b0: 53 74 72 69 6e 67 29 0d 0a 20 20 20 20 20 20 3a  String)..      :
04c0: 20 62 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64 2c   base(fmt, kind,
04d0: 20 66 6d 74 53 74 72 69 6e 67 29 20 7b 20 7d 0d   fmtString) { }.
04e0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
04f0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
0500: 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67 20 72  turns a string r
0510: 65 70 72 65 73 65 6e 74 69 6e 67 20 74 68 65 20  epresenting the 
0520: 61 63 74 69 76 65 20 76 65 72 73 69 6f 6e 20 6f  active version o
0530: 66 20 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f  f SQLite..    //
0540: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0550: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
0560: 61 63 74 20 73 74 72 69 6e 67 20 56 65 72 73 69  act string Versi
0570: 6f 6e 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20  on { get; }..   
0580: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0590: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
05a0: 61 6e 20 69 6e 74 65 67 65 72 20 72 65 70 72 65  an integer repre
05b0: 73 65 6e 74 69 6e 67 20 74 68 65 20 61 63 74 69  senting the acti
05c0: 76 65 20 76 65 72 73 69 6f 6e 20 6f 66 20 53 51  ve version of SQ
05d0: 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  Lite..    /// </
05e0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
05f0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0600: 69 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65  int VersionNumbe
0610: 72 20 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20  r { get; }..    
0620: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0630: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
0640: 68 65 20 72 6f 77 69 64 20 6f 66 20 74 68 65 20  he rowid of the 
0650: 6d 6f 73 74 20 72 65 63 65 6e 74 20 73 75 63 63  most recent succ
0660: 65 73 73 66 75 6c 20 49 4e 53 45 52 54 20 69 6e  essful INSERT in
0670: 74 6f 20 74 68 65 20 64 61 74 61 62 61 73 65 20  to the database 
0680: 66 72 6f 6d 20 74 68 69 73 20 63 6f 6e 6e 65 63  from this connec
0690: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
06a0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69  /summary>..    i
06b0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
06c0: 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74   long LastInsert
06d0: 52 6f 77 49 64 20 7b 20 67 65 74 3b 20 7d 0d 0a  RowId { get; }..
06e0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
06f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
0700: 6e 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66  ns the number of
0710: 20 63 68 61 6e 67 65 73 20 74 68 65 20 6c 61 73   changes the las
0720: 74 20 65 78 65 63 75 74 69 6e 67 20 69 6e 73 65  t executing inse
0730: 72 74 2f 75 70 64 61 74 65 20 63 61 75 73 65 64  rt/update caused
0740: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0750: 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72  mary>..    inter
0760: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
0770: 20 43 68 61 6e 67 65 73 20 7b 20 67 65 74 3b 20   Changes { get; 
0780: 7d 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  }..    /// <summ
0790: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
07a0: 74 75 72 6e 73 20 74 68 65 20 61 6d 6f 75 6e 74  turns the amount
07b0: 20 6f 66 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62   of memory (in b
07c0: 79 74 65 73 29 20 63 75 72 72 65 6e 74 6c 79 20  ytes) currently 
07d0: 69 6e 20 75 73 65 20 62 79 20 74 68 65 20 53 51  in use by the SQ
07e0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
07f0: 79 2e 20 20 54 68 69 73 20 69 73 20 6e 6f 74 20  y.  This is not 
0800: 72 65 61 6c 6c 79 20 61 20 70 65 72 2d 63 6f 6e  really a per-con
0810: 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f  nection..    ///
0820: 20 76 61 6c 75 65 2c 20 69 74 20 69 73 20 67 6c   value, it is gl
0830: 6f 62 61 6c 20 74 6f 20 74 68 65 20 70 72 6f 63  obal to the proc
0840: 65 73 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ess...    /// </
0850: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e  summary>..    in
0860: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
0870: 6c 6f 6e 67 20 4d 65 6d 6f 72 79 55 73 65 64 20  long MemoryUsed 
0880: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f  { get; }..    //
0890: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
08a0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
08b0: 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74 20   maximum amount 
08c0: 6f 66 20 6d 65 6d 6f 72 79 20 28 69 6e 20 62 79  of memory (in by
08d0: 74 65 73 29 20 75 73 65 64 20 62 79 20 74 68 65  tes) used by the
08e0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
08f0: 72 61 72 79 20 73 69 6e 63 65 20 74 68 65 20 68  rary since the h
0900: 69 67 68 2d 77 61 74 65 72 20 6d 61 72 6b 20 77  igh-water mark w
0910: 61 73 20 6c 61 73 74 20 72 65 73 65 74 2e 0d 0a  as last reset...
0920: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20      /// This is 
0930: 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20 70 65 72  not really a per
0940: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 76 61 6c 75  -connection valu
0950: 65 2c 20 69 74 20 69 73 20 67 6c 6f 62 61 6c 20  e, it is global 
0960: 74 6f 20 74 68 65 20 70 72 6f 63 65 73 73 2e 0d  to the process..
0970: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61  .    /// </summa
0980: 72 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ry>..    interna
0990: 6c 20 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20  l abstract long 
09a0: 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 20  MemoryHighwater 
09b0: 7b 20 67 65 74 3b 20 7d 0d 0a 20 20 20 20 2f 2f  { get; }..    //
09c0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
09d0: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 6e 6f 6e   /// Returns non
09e0: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 75 6e 64  -zero if the und
09f0: 65 72 6c 79 69 6e 67 20 6e 61 74 69 76 65 20 63  erlying native c
0a00: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
0a10: 20 69 73 20 6f 77 6e 65 64 20 62 79 20 74 68 69   is owned by thi
0a20: 73 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20  s instance...   
0a30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0a40: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
0a50: 73 74 72 61 63 74 20 62 6f 6f 6c 20 4f 77 6e 48  stract bool OwnH
0a60: 61 6e 64 6c 65 20 7b 20 67 65 74 3b 20 7d 0d 0a  andle { get; }..
0a70: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
0a80: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 53 65 74 73 20  >..    /// Sets 
0a90: 74 68 65 20 73 74 61 74 75 73 20 6f 66 20 74 68  the status of th
0aa0: 65 20 6d 65 6d 6f 72 79 20 75 73 61 67 65 20 74  e memory usage t
0ab0: 72 61 63 6b 69 6e 67 20 73 75 62 73 79 73 74 65  racking subsyste
0ac0: 6d 20 69 6e 20 74 68 65 20 53 51 4c 69 74 65 20  m in the SQLite 
0ad0: 63 6f 72 65 20 6c 69 62 72 61 72 79 2e 20 20 42  core library.  B
0ae0: 79 20 64 65 66 61 75 6c 74 2c 20 74 68 69 73 20  y default, this 
0af0: 69 73 20 65 6e 61 62 6c 65 64 2e 0d 0a 20 20 20  is enabled...   
0b00: 20 2f 2f 2f 20 49 66 20 74 68 69 73 20 69 73 20   /// If this is 
0b10: 64 69 73 61 62 6c 65 64 2c 20 6d 65 6d 6f 72 79  disabled, memory
0b20: 20 75 73 61 67 65 20 74 72 61 63 6b 69 6e 67 20   usage tracking 
0b30: 77 69 6c 6c 20 6e 6f 74 20 62 65 20 70 65 72 66  will not be perf
0b40: 6f 72 6d 65 64 2e 20 20 54 68 69 73 20 69 73 20  ormed.  This is 
0b50: 6e 6f 74 20 72 65 61 6c 6c 79 20 61 20 70 65 72  not really a per
0b60: 2d 63 6f 6e 6e 65 63 74 69 6f 6e 20 76 61 6c 75  -connection valu
0b70: 65 2c 20 69 74 20 69 73 0d 0a 20 20 20 20 2f 2f  e, it is..    //
0b80: 2f 20 67 6c 6f 62 61 6c 20 74 6f 20 74 68 65 20  / global to the 
0b90: 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20 2f 2f  process...    //
0ba0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0bb0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
0bc0: 65 3d 22 76 61 6c 75 65 22 3e 4e 6f 6e 2d 7a 65  e="value">Non-ze
0bd0: 72 6f 20 74 6f 20 65 6e 61 62 6c 65 20 6d 65 6d  ro to enable mem
0be0: 6f 72 79 20 75 73 61 67 65 20 74 72 61 63 6b 69  ory usage tracki
0bf0: 6e 67 2c 20 7a 65 72 6f 20 6f 74 68 65 72 77 69  ng, zero otherwi
0c00: 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  se.</param>..   
0c10: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 41 20   /// <returns>A 
0c20: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
0c30: 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65  return code (i.e
0c40: 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65  . zero for succe
0c50: 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 20  ss and non-zero 
0c60: 66 6f 72 20 66 61 69 6c 75 72 65 29 2e 3c 2f 72  for failure).</r
0c70: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
0c80: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53  ernal abstract S
0c90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
0ca0: 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28 62  etMemoryStatus(b
0cb0: 6f 6f 6c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ool value);..   
0cc0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0cd0: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
0ce0: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
0cf0: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
0d00: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
0d10: 69 74 68 20 64 69 66 66 65 72 65 6e 74 20 63 6f  ith different co
0d20: 6e 66 69 67 20 6f 70 74 69 6f 6e 73 2e 0d 0a 20  nfig options... 
0d30: 20 20 20 2f 2f 2f 20 57 65 20 64 65 70 65 6e 64     /// We depend
0d40: 20 6f 6e 20 61 75 74 6f 20 69 6e 69 74 69 61 6c   on auto initial
0d50: 69 7a 61 74 69 6f 6e 20 74 6f 20 72 65 63 6f 76  ization to recov
0d60: 65 72 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  er...    /// </s
0d70: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 69 6e 74  ummary>..    int
0d80: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53  ernal abstract S
0d90: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
0da0: 68 75 74 64 6f 77 6e 28 29 3b 0d 0a 20 20 20 20  hutdown();..    
0db0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0dc0: 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65     /// Determine
0dd0: 73 20 69 66 20 74 68 65 20 61 73 73 6f 63 69 61  s if the associa
0de0: 74 65 64 20 6e 61 74 69 76 65 20 63 6f 6e 6e 65  ted native conne
0df0: 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 69 73 20  ction handle is 
0e00: 6f 70 65 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  open...    /// <
0e10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
0e20: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
0e30: 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69    /// Non-zero i
0e40: 66 20 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e  f a database con
0e50: 6e 65 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 2e  nection is open.
0e60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
0e70: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
0e80: 61 6c 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c  al abstract bool
0e90: 20 49 73 4f 70 65 6e 28 29 3b 0d 0a 20 20 20 20   IsOpen();..    
0ea0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0eb0: 20 20 20 2f 2f 2f 20 4f 70 65 6e 73 20 61 20 64     /// Opens a d
0ec0: 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f 2f  atabase...    //
0ed0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
0ee0: 20 20 2f 2f 2f 20 3c 72 65 6d 61 72 6b 73 3e 0d    /// <remarks>.
0ef0: 0a 20 20 20 20 2f 2f 2f 20 49 6d 70 6c 65 6d 65  .    /// Impleme
0f00: 6e 74 65 72 73 20 73 68 6f 75 6c 64 20 63 61 6c  nters should cal
0f10: 6c 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  l SQLiteFunction
0f20: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29  .BindFunctions()
0f30: 20 61 6e 64 20 73 61 76 65 20 74 68 65 20 61 72   and save the ar
0f40: 72 61 79 20 61 66 74 65 72 20 6f 70 65 6e 69 6e  ray after openin
0f50: 67 20 61 20 63 6f 6e 6e 65 63 74 69 6f 6e 0d 0a  g a connection..
0f60: 20 20 20 20 2f 2f 2f 20 74 6f 20 62 69 6e 64 20      /// to bind 
0f70: 61 6c 6c 20 61 74 74 72 69 62 75 74 65 64 20 75  all attributed u
0f80: 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63  ser-defined func
0f90: 74 69 6f 6e 73 20 61 6e 64 20 63 6f 6c 6c 61 74  tions and collat
0fa0: 69 6e 67 20 73 65 71 75 65 6e 63 65 73 20 74 6f  ing sequences to
0fb0: 20 74 68 65 20 6e 65 77 20 63 6f 6e 6e 65 63 74   the new connect
0fc0: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
0fd0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
0fe0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73  / <param name="s
0ff0: 74 72 46 69 6c 65 6e 61 6d 65 22 3e 54 68 65 20  trFilename">The 
1000: 66 69 6c 65 6e 61 6d 65 20 6f 66 20 74 68 65 20  filename of the 
1010: 64 61 74 61 62 61 73 65 20 74 6f 20 6f 70 65 6e  database to open
1020: 2e 20 20 53 51 4c 69 74 65 20 61 75 74 6f 6d 61  .  SQLite automa
1030: 74 69 63 61 6c 6c 79 20 63 72 65 61 74 65 73 20  tically creates 
1040: 69 74 20 69 66 20 69 74 20 64 6f 65 73 6e 27 74  it if it doesn't
1050: 20 65 78 69 73 74 2e 3c 2f 70 61 72 61 6d 3e 0d   exist.</param>.
1060: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
1070: 6e 61 6d 65 3d 22 63 6f 6e 6e 65 63 74 69 6f 6e  name="connection
1080: 46 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67 73  Flags">The flags
1090: 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
10a0: 20 74 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e   the parent conn
10b0: 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 3c 2f 70  ection object</p
10c0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10d0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6f 70 65 6e  param name="open
10e0: 46 6c 61 67 73 22 3e 54 68 65 20 6f 70 65 6e 20  Flags">The open 
10f0: 66 6c 61 67 73 20 74 6f 20 75 73 65 20 77 68 65  flags to use whe
1100: 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 63  n creating the c
1110: 6f 6e 6e 65 63 74 69 6f 6e 3c 2f 70 61 72 61 6d  onnection</param
1120: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1130: 6d 20 6e 61 6d 65 3d 22 6d 61 78 50 6f 6f 6c 53  m name="maxPoolS
1140: 69 7a 65 22 3e 54 68 65 20 6d 61 78 69 6d 75 6d  ize">The maximum
1150: 20 73 69 7a 65 20 6f 66 20 74 68 65 20 70 6f 6f   size of the poo
1160: 6c 20 66 6f 72 20 74 68 65 20 67 69 76 65 6e 20  l for the given 
1170: 66 69 6c 65 6e 61 6d 65 3c 2f 70 61 72 61 6d 3e  filename</param>
1180: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1190: 20 6e 61 6d 65 3d 22 75 73 65 50 6f 6f 6c 22 3e   name="usePool">
11a0: 49 66 20 74 72 75 65 2c 20 74 68 65 20 63 6f 6e  If true, the con
11b0: 6e 65 63 74 69 6f 6e 20 63 61 6e 20 62 65 20 70  nection can be p
11c0: 75 6c 6c 65 64 20 66 72 6f 6d 20 74 68 65 20 63  ulled from the c
11d0: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 6f 6c 3c 2f  onnection pool</
11e0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65  param>..    inte
11f0: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
1200: 69 64 20 4f 70 65 6e 28 73 74 72 69 6e 67 20 73  id Open(string s
1210: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 53 51 4c 69  trFilename, SQLi
1220: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1230: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  s connectionFlag
1240: 73 2c 20 53 51 4c 69 74 65 4f 70 65 6e 46 6c 61  s, SQLiteOpenFla
1250: 67 73 45 6e 75 6d 20 6f 70 65 6e 46 6c 61 67 73  gsEnum openFlags
1260: 2c 20 69 6e 74 20 6d 61 78 50 6f 6f 6c 53 69 7a  , int maxPoolSiz
1270: 65 2c 20 62 6f 6f 6c 20 75 73 65 50 6f 6f 6c 29  e, bool usePool)
1280: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
1290: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6c  ary>..    /// Cl
12a0: 6f 73 65 73 20 74 68 65 20 63 75 72 72 65 6e 74  oses the current
12b0: 6c 79 2d 6f 70 65 6e 20 64 61 74 61 62 61 73 65  ly-open database
12c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
12d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
12e0: 72 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f  remarks>..    //
12f0: 2f 20 41 66 74 65 72 20 74 68 65 20 64 61 74 61  / After the data
1300: 62 61 73 65 20 68 61 73 20 62 65 65 6e 20 63 6c  base has been cl
1310: 6f 73 65 64 20 69 6d 70 6c 65 6d 65 74 65 72 73  osed implemeters
1320: 20 73 68 6f 75 6c 64 20 63 61 6c 6c 20 53 51 4c   should call SQL
1330: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55 6e 62 69  iteFunction.Unbi
1340: 6e 64 46 75 6e 63 74 69 6f 6e 73 28 29 20 74 6f  ndFunctions() to
1350: 20 64 65 61 6c 6c 6f 63 61 74 65 20 61 6c 6c 20   deallocate all 
1360: 69 6e 74 65 72 6f 70 20 61 6c 6c 6f 63 61 74 65  interop allocate
1370: 64 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 6d 6f 72  d..    /// memor
1380: 79 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  y associated wit
1390: 68 20 74 68 65 20 75 73 65 72 2d 64 65 66 69 6e  h the user-defin
13a0: 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 6e 64  ed functions and
13b0: 20 63 6f 6c 6c 61 74 69 6e 67 20 73 65 71 75 65   collating seque
13c0: 6e 63 65 73 20 74 69 65 64 20 74 6f 20 74 68 65  nces tied to the
13d0: 20 63 6c 6f 73 65 64 20 63 6f 6e 6e 65 63 74 69   closed connecti
13e0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72  on...    /// </r
13f0: 65 6d 61 72 6b 73 3e 0d 0a 20 20 20 20 2f 2f 2f  emarks>..    ///
1400: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 63 61   <param name="ca
1410: 6e 54 68 72 6f 77 22 3e 4e 6f 6e 2d 7a 65 72 6f  nThrow">Non-zero
1420: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
1430: 6e 20 69 73 20 61 6c 6c 6f 77 65 64 20 74 6f 20  n is allowed to 
1440: 74 68 72 6f 77 20 65 78 63 65 70 74 69 6f 6e 73  throw exceptions
1450: 2c 20 7a 65 72 6f 20 6f 74 68 65 72 77 69 73 65  , zero otherwise
1460: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69  .</param>..    i
1470: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1480: 20 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c   void Close(bool
1490: 20 63 61 6e 54 68 72 6f 77 29 3b 0d 0a 20 20 20   canThrow);..   
14a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
14b0: 20 20 20 20 2f 2f 2f 20 53 65 74 73 20 74 68 65      /// Sets the
14c0: 20 62 75 73 79 20 74 69 6d 65 6f 75 74 20 6f 6e   busy timeout on
14d0: 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e   the connection.
14e0: 20 20 53 51 4c 69 74 65 43 6f 6d 6d 61 6e 64 20    SQLiteCommand 
14f0: 77 69 6c 6c 20 63 61 6c 6c 20 74 68 69 73 20 62  will call this b
1500: 65 66 6f 72 65 20 65 78 65 63 75 74 69 6e 67 20  efore executing 
1510: 61 6e 79 20 63 6f 6d 6d 61 6e 64 2e 0d 0a 20 20  any command...  
1520: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
1530: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1540: 20 6e 61 6d 65 3d 22 6e 54 69 6d 65 6f 75 74 4d   name="nTimeoutM
1550: 53 22 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66  S">The number of
1560: 20 6d 69 6c 6c 69 73 65 63 6f 6e 64 73 20 74 6f   milliseconds to
1570: 20 77 61 69 74 20 62 65 66 6f 72 65 20 72 65 74   wait before ret
1580: 75 72 6e 69 6e 67 20 53 51 4c 49 54 45 5f 42 55  urning SQLITE_BU
1590: 53 59 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  SY</param>..    
15a0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
15b0: 74 20 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75  t void SetTimeou
15c0: 74 28 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53  t(int nTimeoutMS
15d0: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
15e0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
15f0: 65 74 75 72 6e 73 20 74 68 65 20 74 65 78 74 20  eturns the text 
1600: 6f 66 20 74 68 65 20 6c 61 73 74 20 65 72 72 6f  of the last erro
1610: 72 20 69 73 73 75 65 64 20 62 79 20 53 51 4c 69  r issued by SQLi
1620: 74 65 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  te..    /// </su
1630: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
1640: 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74 75 72  <returns></retur
1650: 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ns>..    interna
1660: 6c 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e  l abstract strin
1670: 67 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  g GetLastError()
1680: 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  ;....    /// <su
1690: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
16a0: 57 68 65 6e 20 70 6f 6f 6c 69 6e 67 20 69 73 20  When pooling is 
16b0: 65 6e 61 62 6c 65 64 2c 20 66 6f 72 63 65 20 74  enabled, force t
16c0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  his connection t
16d0: 6f 20 62 65 20 64 69 73 70 6f 73 65 64 20 72 61  o be disposed ra
16e0: 74 68 65 72 20 74 68 61 6e 20 72 65 74 75 72 6e  ther than return
16f0: 65 64 20 74 6f 20 74 68 65 20 70 6f 6f 6c 0d 0a  ed to the pool..
1700: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1710: 79 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  y>..    internal
1720: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43   abstract void C
1730: 6c 65 61 72 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20  learPool();.... 
1740: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
1750: 0d 0a 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20 70  ..    /// When p
1760: 6f 6f 6c 69 6e 67 20 69 73 20 65 6e 61 62 6c 65  ooling is enable
1770: 64 2c 20 72 65 74 75 72 6e 73 20 74 68 65 20 6e  d, returns the n
1780: 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c 20 65 6e  umber of pool en
1790: 74 72 69 65 73 20 6d 61 74 63 68 69 6e 67 20 74  tries matching t
17a0: 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65 20  he current file 
17b0: 6e 61 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  name...    /// <
17c0: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
17d0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
17e0: 6e 75 6d 62 65 72 20 6f 66 20 70 6f 6f 6c 20 65  number of pool e
17f0: 6e 74 72 69 65 73 20 6d 61 74 63 68 69 6e 67 20  ntries matching 
1800: 74 68 65 20 63 75 72 72 65 6e 74 20 66 69 6c 65  the current file
1810: 20 6e 61 6d 65 2e 3c 2f 72 65 74 75 72 6e 73 3e   name.</returns>
1820: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
1830: 62 73 74 72 61 63 74 20 69 6e 74 20 43 6f 75 6e  bstract int Coun
1840: 74 50 6f 6f 6c 28 29 3b 0d 0a 0d 0a 20 20 20 20  tPool();....    
1850: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1860: 20 20 20 2f 2f 2f 20 50 72 65 70 61 72 65 73 20     /// Prepares 
1870: 61 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 20  a SQL statement 
1880: 66 6f 72 20 65 78 65 63 75 74 69 6f 6e 2e 0d 0a  for execution...
1890: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
18a0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
18b0: 61 6d 20 6e 61 6d 65 3d 22 63 6e 6e 22 3e 54 68  am name="cnn">Th
18c0: 65 20 73 6f 75 72 63 65 20 63 6f 6e 6e 65 63 74  e source connect
18d0: 69 6f 6e 20 70 72 65 70 61 72 69 6e 67 20 74 68  ion preparing th
18e0: 65 20 63 6f 6d 6d 61 6e 64 2e 20 20 43 61 6e 20  e command.  Can 
18f0: 62 65 20 6e 75 6c 6c 20 66 6f 72 20 61 6e 79 20  be null for any 
1900: 63 61 6c 6c 65 72 20 65 78 63 65 70 74 20 4c 49  caller except LI
1910: 4e 51 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  NQ</param>..    
1920: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1930: 22 73 74 72 53 71 6c 22 3e 54 68 65 20 53 51 4c  "strSql">The SQL
1940: 20 63 6f 6d 6d 61 6e 64 20 74 65 78 74 20 74 6f   command text to
1950: 20 70 72 65 70 61 72 65 3c 2f 70 61 72 61 6d 3e   prepare</param>
1960: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1970: 20 6e 61 6d 65 3d 22 70 72 65 76 69 6f 75 73 22   name="previous"
1980: 3e 54 68 65 20 70 72 65 76 69 6f 75 73 20 73 74  >The previous st
1990: 61 74 65 6d 65 6e 74 20 69 6e 20 61 20 6d 75 6c  atement in a mul
19a0: 74 69 2d 73 74 61 74 65 6d 65 6e 74 20 63 6f 6d  ti-statement com
19b0: 6d 61 6e 64 2c 20 6f 72 20 6e 75 6c 6c 20 69 66  mand, or null if
19c0: 20 6e 6f 20 70 72 65 76 69 6f 75 73 20 73 74 61   no previous sta
19d0: 74 65 6d 65 6e 74 20 65 78 69 73 74 73 3c 2f 70  tement exists</p
19e0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
19f0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 74 69 6d 65  param name="time
1a00: 6f 75 74 4d 53 22 3e 54 68 65 20 74 69 6d 65 6f  outMS">The timeo
1a10: 75 74 20 74 6f 20 77 61 69 74 20 62 65 66 6f 72  ut to wait befor
1a20: 65 20 61 62 6f 72 74 69 6e 67 20 74 68 65 20 70  e aborting the p
1a30: 72 65 70 61 72 65 3c 2f 70 61 72 61 6d 3e 0d 0a  repare</param>..
1a40: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1a50: 61 6d 65 3d 22 73 74 72 52 65 6d 61 69 6e 22 3e  ame="strRemain">
1a60: 54 68 65 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  The remainder of
1a70: 20 74 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74   the statement t
1a80: 68 61 74 20 77 61 73 20 6e 6f 74 20 70 72 6f 63  hat was not proc
1a90: 65 73 73 65 64 2e 20 20 45 61 63 68 20 63 61 6c  essed.  Each cal
1aa0: 6c 20 74 6f 20 70 72 65 70 61 72 65 20 70 61 72  l to prepare par
1ab0: 73 65 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  ses the..    ///
1ac0: 20 53 51 4c 20 75 70 20 74 6f 20 74 6f 20 65 69   SQL up to to ei
1ad0: 74 68 65 72 20 74 68 65 20 65 6e 64 20 6f 66 20  ther the end of 
1ae0: 74 68 65 20 74 65 78 74 20 6f 72 20 74 6f 20 74  the text or to t
1af0: 68 65 20 66 69 72 73 74 20 73 65 6d 69 2d 63 6f  he first semi-co
1b00: 6c 6f 6e 20 64 65 6c 69 6d 69 74 65 72 2e 20 20  lon delimiter.  
1b10: 54 68 65 20 72 65 6d 61 69 6e 69 6e 67 20 74 65  The remaining te
1b20: 78 74 20 69 73 20 72 65 74 75 72 6e 65 64 0d 0a  xt is returned..
1b30: 20 20 20 20 2f 2f 2f 20 68 65 72 65 20 66 6f 72      /// here for
1b40: 20 61 20 73 75 62 73 65 71 75 65 6e 74 20 63 61   a subsequent ca
1b50: 6c 6c 20 74 6f 20 50 72 65 70 61 72 65 28 29 20  ll to Prepare() 
1b60: 75 6e 74 69 6c 20 61 6c 6c 20 74 68 65 20 74 65  until all the te
1b70: 78 74 20 68 61 73 20 62 65 65 6e 20 70 72 6f 63  xt has been proc
1b80: 65 73 73 65 64 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  essed.</param>..
1b90: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
1ba0: 3e 52 65 74 75 72 6e 73 20 61 6e 20 69 6e 69 74  >Returns an init
1bb0: 69 61 6c 69 7a 65 64 20 53 51 4c 69 74 65 53 74  ialized SQLiteSt
1bc0: 61 74 65 6d 65 6e 74 2e 3c 2f 72 65 74 75 72 6e  atement.</return
1bd0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1be0: 20 61 62 73 74 72 61 63 74 20 53 51 4c 69 74 65   abstract SQLite
1bf0: 53 74 61 74 65 6d 65 6e 74 20 50 72 65 70 61 72  Statement Prepar
1c00: 65 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  e(SQLiteConnecti
1c10: 6f 6e 20 63 6e 6e 2c 20 73 74 72 69 6e 67 20 73  on cnn, string s
1c20: 74 72 53 71 6c 2c 20 53 51 4c 69 74 65 53 74 61  trSql, SQLiteSta
1c30: 74 65 6d 65 6e 74 20 70 72 65 76 69 6f 75 73 2c  tement previous,
1c40: 20 75 69 6e 74 20 74 69 6d 65 6f 75 74 4d 53 2c   uint timeoutMS,
1c50: 20 6f 75 74 20 73 74 72 69 6e 67 20 73 74 72 52   out string strR
1c60: 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 2f 2f 2f  emain);..    ///
1c70: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
1c80: 2f 2f 2f 20 53 74 65 70 73 20 74 68 72 6f 75 67  /// Steps throug
1c90: 68 20 61 20 70 72 65 70 61 72 65 64 20 73 74 61  h a prepared sta
1ca0: 74 65 6d 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f  tement...    ///
1cb0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
1cc0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1cd0: 3d 22 73 74 6d 74 22 3e 54 68 65 20 53 51 4c 69  ="stmt">The SQLi
1ce0: 74 65 53 74 61 74 65 6d 65 6e 74 20 74 6f 20 73  teStatement to s
1cf0: 74 65 70 20 74 68 72 6f 75 67 68 3c 2f 70 61 72  tep through</par
1d00: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
1d10: 74 75 72 6e 73 3e 54 72 75 65 20 69 66 20 61 20  turns>True if a 
1d20: 72 6f 77 20 77 61 73 20 72 65 74 75 72 6e 65 64  row was returned
1d30: 2c 20 46 61 6c 73 65 20 69 66 20 6e 6f 74 2e 3c  , False if not.<
1d40: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
1d50: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
1d60: 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74   bool Step(SQLit
1d70: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29  eStatement stmt)
1d80: 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;..    /// <summ
1d90: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65  ary>..    /// Re
1da0: 73 65 74 73 20 61 20 70 72 65 70 61 72 65 64 20  sets a prepared 
1db0: 73 74 61 74 65 6d 65 6e 74 20 73 6f 20 69 74 20  statement so it 
1dc0: 63 61 6e 20 62 65 20 65 78 65 63 75 74 65 64 20  can be executed 
1dd0: 61 67 61 69 6e 2e 20 20 49 66 20 74 68 65 20 65  again.  If the e
1de0: 72 72 6f 72 20 72 65 74 75 72 6e 65 64 20 69 73  rror returned is
1df0: 20 53 51 4c 49 54 45 5f 53 43 48 45 4d 41 2c 20   SQLITE_SCHEMA, 
1e00: 0d 0a 20 20 20 20 2f 2f 2f 20 74 72 61 6e 73 70  ..    /// transp
1e10: 61 72 65 6e 74 6c 79 20 61 74 74 65 6d 70 74 20  arently attempt 
1e20: 74 6f 20 72 65 62 75 69 6c 64 20 74 68 65 20 53  to rebuild the S
1e30: 51 4c 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  QL statement and
1e40: 20 74 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 20   throw an error 
1e50: 69 66 20 74 68 61 74 20 77 61 73 20 6e 6f 74 20  if that was not 
1e60: 70 6f 73 73 69 62 6c 65 2e 0d 0a 20 20 20 20 2f  possible...    /
1e70: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
1e80: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
1e90: 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65 20 73 74  me="stmt">The st
1ea0: 61 74 65 6d 65 6e 74 20 74 6f 20 72 65 73 65 74  atement to reset
1eb0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
1ec0: 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75 72  / <returns>Retur
1ed0: 6e 73 20 2d 31 20 69 66 20 74 68 65 20 73 63 68  ns -1 if the sch
1ee0: 65 6d 61 20 63 68 61 6e 67 65 64 20 77 68 69 6c  ema changed whil
1ef0: 65 20 72 65 73 65 74 74 69 6e 67 2c 20 30 20 69  e resetting, 0 i
1f00: 66 20 74 68 65 20 72 65 73 65 74 20 77 61 73 20  f the reset was 
1f10: 73 75 63 65 73 73 66 75 6c 20 6f 72 20 36 20 28  sucessful or 6 (
1f20: 53 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 29 20 69  SQLITE_LOCKED) i
1f30: 66 20 74 68 65 20 72 65 73 65 74 20 66 61 69 6c  f the reset fail
1f40: 65 64 20 64 75 65 20 74 6f 20 61 20 6c 6f 63 6b  ed due to a lock
1f50: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
1f60: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
1f70: 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  t SQLiteErrorCod
1f80: 65 20 52 65 73 65 74 28 53 51 4c 69 74 65 53 74  e Reset(SQLiteSt
1f90: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 3b 0d 0a  atement stmt);..
1fa0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
1fb0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
1fc0: 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72 75  empts to interru
1fd0: 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75 72  pt the query cur
1fe0: 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e 67  rently executing
1ff0: 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61 74   on the associat
2000: 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74 69  ed..    /// nati
2010: 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  ve database conn
2020: 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f  ection...    ///
2030: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
2040: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2050: 63 74 20 76 6f 69 64 20 43 61 6e 63 65 6c 28 29  ct void Cancel()
2060: 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ;....    interna
2070: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2080: 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51 4c 69  Bind_Double(SQLi
2090: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
20a0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
20b0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
20c0: 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62 6c 65  nt index, double
20d0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e   value);..    in
20e0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
20f0: 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74 33 32 28  void Bind_Int32(
2100: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2110: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
2120: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
2130: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 49 6e  s, int index, In
2140: 74 33 32 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  t32 value);..   
2150: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2160: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e  ct void Bind_UIn
2170: 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
2180: 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
2190: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
21a0: 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
21b0: 2c 20 55 49 6e 74 33 32 20 76 61 6c 75 65 29 3b  , UInt32 value);
21c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
21d0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69 6e  bstract void Bin
21e0: 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  d_Int64(SQLiteSt
21f0: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
2200: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
2210: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
2220: 6e 64 65 78 2c 20 49 6e 74 36 34 20 76 61 6c 75  ndex, Int64 valu
2230: 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  e);..    interna
2240: 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20  l abstract void 
2250: 42 69 6e 64 5f 55 49 6e 74 36 34 28 53 51 4c 69  Bind_UInt64(SQLi
2260: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2270: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
2280: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
2290: 6e 74 20 69 6e 64 65 78 2c 20 55 49 6e 74 36 34  nt index, UInt64
22a0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e   value);..    in
22b0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
22c0: 76 6f 69 64 20 42 69 6e 64 5f 54 65 78 74 28 53  void Bind_Text(S
22d0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
22e0: 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  tmt, SQLiteConne
22f0: 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
2300: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72  , int index, str
2310: 69 6e 67 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ing value);..   
2320: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2330: 63 74 20 76 6f 69 64 20 42 69 6e 64 5f 42 6c 6f  ct void Bind_Blo
2340: 62 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  b(SQLiteStatemen
2350: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
2360: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
2370: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
2380: 62 79 74 65 5b 5d 20 62 6c 6f 62 44 61 74 61 29  byte[] blobData)
2390: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
23a0: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 42 69  abstract void Bi
23b0: 6e 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69  nd_DateTime(SQLi
23c0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
23d0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
23e0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69  onFlags flags, i
23f0: 6e 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69  nt index, DateTi
2400: 6d 65 20 64 74 29 3b 0d 0a 20 20 20 20 69 6e 74  me dt);..    int
2410: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76  ernal abstract v
2420: 6f 69 64 20 42 69 6e 64 5f 4e 75 6c 6c 28 53 51  oid Bind_Null(SQ
2430: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2440: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
2450: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
2460: 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a   int index);....
2470: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2480: 74 72 61 63 74 20 69 6e 74 20 42 69 6e 64 5f 50  tract int Bind_P
2490: 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74 65  aramCount(SQLite
24a0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
24b0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
24c0: 46 6c 61 67 73 20 66 6c 61 67 73 29 3b 0d 0a 20  Flags flags);.. 
24d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
24e0: 72 61 63 74 20 73 74 72 69 6e 67 20 42 69 6e 64  ract string Bind
24f0: 5f 50 61 72 61 6d 4e 61 6d 65 28 53 51 4c 69 74  _ParamName(SQLit
2500: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
2510: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
2520: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
2530: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
2540: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2550: 20 69 6e 74 20 42 69 6e 64 5f 50 61 72 61 6d 49   int Bind_ParamI
2560: 6e 64 65 78 28 53 51 4c 69 74 65 53 74 61 74 65  ndex(SQLiteState
2570: 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
2580: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
2590: 20 66 6c 61 67 73 2c 20 73 74 72 69 6e 67 20 70   flags, string p
25a0: 61 72 61 6d 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  aramName);....  
25b0: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
25c0: 61 63 74 20 69 6e 74 20 43 6f 6c 75 6d 6e 43 6f  act int ColumnCo
25d0: 75 6e 74 28 53 51 4c 69 74 65 53 74 61 74 65 6d  unt(SQLiteStatem
25e0: 65 6e 74 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20  ent stmt);..    
25f0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
2600: 74 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e  t string ColumnN
2610: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
2620: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
2630: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
2640: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 54 79 70  nal abstract Typ
2650: 65 41 66 66 69 6e 69 74 79 20 43 6f 6c 75 6d 6e  eAffinity Column
2660: 41 66 66 69 6e 69 74 79 28 53 51 4c 69 74 65 53  Affinity(SQLiteS
2670: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
2680: 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  nt index);..    
2690: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
26a0: 74 20 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54  t string ColumnT
26b0: 79 70 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ype(SQLiteStatem
26c0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
26d0: 64 65 78 2c 20 6f 75 74 20 54 79 70 65 41 66 66  dex, out TypeAff
26e0: 69 6e 69 74 79 20 6e 41 66 66 69 6e 69 74 79 29  inity nAffinity)
26f0: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2700: 61 62 73 74 72 61 63 74 20 69 6e 74 20 43 6f 6c  abstract int Col
2710: 75 6d 6e 49 6e 64 65 78 28 53 51 4c 69 74 65 53  umnIndex(SQLiteS
2720: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 73  tatement stmt, s
2730: 74 72 69 6e 67 20 63 6f 6c 75 6d 6e 4e 61 6d 65  tring columnName
2740: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2750: 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67   abstract string
2760: 20 43 6f 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e   ColumnOriginalN
2770: 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
2780: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
2790: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
27a0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 73 74 72  nal abstract str
27b0: 69 6e 67 20 43 6f 6c 75 6d 6e 44 61 74 61 62 61  ing ColumnDataba
27c0: 73 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  seName(SQLiteSta
27d0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
27e0: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
27f0: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2800: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62  string ColumnTab
2810: 6c 65 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  leName(SQLiteSta
2820: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2830: 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e   index);..    in
2840: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
2850: 76 6f 69 64 20 43 6f 6c 75 6d 6e 4d 65 74 61 44  void ColumnMetaD
2860: 61 74 61 28 73 74 72 69 6e 67 20 64 61 74 61 42  ata(string dataB
2870: 61 73 65 2c 20 73 74 72 69 6e 67 20 74 61 62 6c  ase, string tabl
2880: 65 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75 6d 6e  e, string column
2890: 2c 20 6f 75 74 20 73 74 72 69 6e 67 20 64 61 74  , out string dat
28a0: 61 54 79 70 65 2c 20 6f 75 74 20 73 74 72 69 6e  aType, out strin
28b0: 67 20 63 6f 6c 6c 61 74 65 53 65 71 75 65 6e 63  g collateSequenc
28c0: 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 6e 6f 74 4e  e, out bool notN
28d0: 75 6c 6c 2c 20 6f 75 74 20 62 6f 6f 6c 20 70 72  ull, out bool pr
28e0: 69 6d 61 72 79 4b 65 79 2c 20 6f 75 74 20 62 6f  imaryKey, out bo
28f0: 6f 6c 20 61 75 74 6f 49 6e 63 72 65 6d 65 6e 74  ol autoIncrement
2900: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2910: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 47   abstract void G
2920: 65 74 49 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74  etIndexColumnExt
2930: 65 6e 64 65 64 49 6e 66 6f 28 73 74 72 69 6e 67  endedInfo(string
2940: 20 64 61 74 61 62 61 73 65 2c 20 73 74 72 69 6e   database, strin
2950: 67 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  g index, string 
2960: 63 6f 6c 75 6d 6e 2c 20 6f 75 74 20 69 6e 74 20  column, out int 
2970: 73 6f 72 74 4d 6f 64 65 2c 20 6f 75 74 20 69 6e  sortMode, out in
2980: 74 20 6f 6e 45 72 72 6f 72 2c 20 6f 75 74 20 73  t onError, out s
2990: 74 72 69 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53  tring collationS
29a0: 65 71 75 65 6e 63 65 29 3b 0d 0a 0d 0a 20 20 20  equence);....   
29b0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
29c0: 63 74 20 64 6f 75 62 6c 65 20 47 65 74 44 6f 75  ct double GetDou
29d0: 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ble(SQLiteStatem
29e0: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
29f0: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
2a00: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 42 79  nal abstract SBy
2a10: 74 65 20 47 65 74 53 42 79 74 65 28 53 51 4c 69  te GetSByte(SQLi
2a20: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2a30: 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20  , int index);.. 
2a40: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2a50: 72 61 63 74 20 42 79 74 65 20 47 65 74 42 79 74  ract Byte GetByt
2a60: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
2a70: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
2a80: 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  x);..    interna
2a90: 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74 31 36  l abstract Int16
2aa0: 20 47 65 74 49 6e 74 31 36 28 53 51 4c 69 74 65   GetInt16(SQLite
2ab0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
2ac0: 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  int index);..   
2ad0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
2ae0: 63 74 20 55 49 6e 74 31 36 20 47 65 74 55 49 6e  ct UInt16 GetUIn
2af0: 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t16(SQLiteStatem
2b00: 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
2b10: 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  dex);..    inter
2b20: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74  nal abstract Int
2b30: 33 32 20 47 65 74 49 6e 74 33 32 28 53 51 4c 69  32 GetInt32(SQLi
2b40: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2b50: 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20  , int index);.. 
2b60: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2b70: 72 61 63 74 20 55 49 6e 74 33 32 20 47 65 74 55  ract UInt32 GetU
2b80: 49 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74  Int32(SQLiteStat
2b90: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
2ba0: 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69 6e 74  index);..    int
2bb0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49  ernal abstract I
2bc0: 6e 74 36 34 20 47 65 74 49 6e 74 36 34 28 53 51  nt64 GetInt64(SQ
2bd0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
2be0: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d  mt, int index);.
2bf0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2c00: 73 74 72 61 63 74 20 55 49 6e 74 36 34 20 47 65  stract UInt64 Ge
2c10: 74 55 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  tUInt64(SQLiteSt
2c20: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
2c30: 74 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 69  t index);..    i
2c40: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
2c50: 20 73 74 72 69 6e 67 20 47 65 74 54 65 78 74 28   string GetText(
2c60: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
2c70: 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
2c80: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
2c90: 61 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65  abstract long Ge
2ca0: 74 42 79 74 65 73 28 53 51 4c 69 74 65 53 74 61  tBytes(SQLiteSta
2cb0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
2cc0: 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74   index, int nDat
2cd0: 61 6f 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20  aoffset, byte[] 
2ce0: 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72  bDest, int nStar
2cf0: 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 3b  t, int nLength);
2d00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
2d10: 62 73 74 72 61 63 74 20 6c 6f 6e 67 20 47 65 74  bstract long Get
2d20: 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61 74  Chars(SQLiteStat
2d30: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
2d40: 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74 61  index, int nData
2d50: 6f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20 62  offset, char[] b
2d60: 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74  Dest, int nStart
2d70: 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 3b 0d  , int nLength);.
2d80: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
2d90: 73 74 72 61 63 74 20 44 61 74 65 54 69 6d 65 20  stract DateTime 
2da0: 47 65 74 44 61 74 65 54 69 6d 65 28 53 51 4c 69  GetDateTime(SQLi
2db0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
2dc0: 2c 20 69 6e 74 20 69 6e 64 65 78 29 3b 0d 0a 20  , int index);.. 
2dd0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
2de0: 72 61 63 74 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c  ract bool IsNull
2df0: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
2e00: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
2e10: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
2e20: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2e30: 20 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e   CreateCollation
2e40: 28 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61  (string strColla
2e50: 74 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c  tion, SQLiteColl
2e60: 61 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69  ation func, SQLi
2e70: 74 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63  teCollation func
2e80: 31 36 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  16);..    intern
2e90: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
2ea0: 20 43 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28   CreateFunction(
2eb0: 73 74 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69  string strFuncti
2ec0: 6f 6e 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62  on, int nArgs, b
2ed0: 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c  ool needCollSeq,
2ee0: 20 53 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20   SQLiteCallback 
2ef0: 66 75 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c  func, SQLiteCall
2f00: 62 61 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53  back funcstep, S
2f10: 51 4c 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61  QLiteFinalCallba
2f20: 63 6b 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a  ck funcfinal);..
2f30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
2f40: 74 72 61 63 74 20 43 6f 6c 6c 61 74 69 6f 6e 53  tract CollationS
2f50: 65 71 75 65 6e 63 65 20 47 65 74 43 6f 6c 6c 61  equence GetColla
2f60: 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 53 51 4c  tionSequence(SQL
2f70: 69 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63  iteFunction func
2f80: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
2f90: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
2fa0: 20 61 62 73 74 72 61 63 74 20 69 6e 74 20 43 6f   abstract int Co
2fb0: 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d 70  ntextCollateComp
2fc0: 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  are(CollationEnc
2fd0: 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20 49  odingEnum enc, I
2fe0: 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73  ntPtr context, s
2ff0: 74 72 69 6e 67 20 73 31 2c 20 73 74 72 69 6e 67  tring s1, string
3000: 20 73 32 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72   s2);..    inter
3010: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69 6e 74  nal abstract int
3020: 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43   ContextCollateC
3030: 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e  ompare(Collation
3040: 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63  EncodingEnum enc
3050: 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  , IntPtr context
3060: 2c 20 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61  , char[] c1, cha
3070: 72 5b 5d 20 63 32 29 3b 0d 0a 0d 0a 20 20 20 20  r[] c2);....    
3080: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3090: 74 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43  t int AggregateC
30a0: 6f 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  ount(IntPtr cont
30b0: 65 78 74 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ext);..    inter
30c0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74  nal abstract Int
30d0: 50 74 72 20 41 67 67 72 65 67 61 74 65 43 6f 6e  Ptr AggregateCon
30e0: 74 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  text(IntPtr cont
30f0: 65 78 74 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  ext);....    int
3100: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6c  ernal abstract l
3110: 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ong GetParamValu
3120: 65 42 79 74 65 73 28 49 6e 74 50 74 72 20 70 74  eBytes(IntPtr pt
3130: 72 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73  r, int nDataOffs
3140: 65 74 2c 20 62 79 74 65 5b 5d 20 62 44 65 73 74  et, byte[] bDest
3150: 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e  , int nStart, in
3160: 74 20 6e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  t nLength);..   
3170: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
3180: 63 74 20 64 6f 75 62 6c 65 20 47 65 74 50 61 72  ct double GetPar
3190: 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e  amValueDouble(In
31a0: 74 50 74 72 20 70 74 72 29 3b 0d 0a 20 20 20 20  tPtr ptr);..    
31b0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
31c0: 74 20 69 6e 74 20 47 65 74 50 61 72 61 6d 56 61  t int GetParamVa
31d0: 6c 75 65 49 6e 74 33 32 28 49 6e 74 50 74 72 20  lueInt32(IntPtr 
31e0: 70 74 72 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  ptr);..    inter
31f0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 49 6e 74  nal abstract Int
3200: 36 34 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65  64 GetParamValue
3210: 49 6e 74 36 34 28 49 6e 74 50 74 72 20 70 74 72  Int64(IntPtr ptr
3220: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
3230: 20 61 62 73 74 72 61 63 74 20 73 74 72 69 6e 67   abstract string
3240: 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65   GetParamValueTe
3250: 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 3b 0d  xt(IntPtr ptr);.
3260: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
3270: 73 74 72 61 63 74 20 54 79 70 65 41 66 66 69 6e  stract TypeAffin
3280: 69 74 79 20 47 65 74 50 61 72 61 6d 56 61 6c 75  ity GetParamValu
3290: 65 54 79 70 65 28 49 6e 74 50 74 72 20 70 74 72  eType(IntPtr ptr
32a0: 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e  );....    intern
32b0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
32c0: 20 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50   ReturnBlob(IntP
32d0: 74 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65  tr context, byte
32e0: 5b 5d 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  [] value);..    
32f0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
3300: 74 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75  t void ReturnDou
3310: 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ble(IntPtr conte
3320: 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  xt, double value
3330: 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  );..    internal
3340: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 52   abstract void R
3350: 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74 50 74  eturnError(IntPt
3360: 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e  r context, strin
3370: 67 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 69  g value);..    i
3380: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
3390: 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e 74 33   void ReturnInt3
33a0: 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74  2(IntPtr context
33b0: 2c 20 49 6e 74 33 32 20 76 61 6c 75 65 29 3b 0d  , Int32 value);.
33c0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62  .    internal ab
33d0: 73 74 72 61 63 74 20 76 6f 69 64 20 52 65 74 75  stract void Retu
33e0: 72 6e 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63  rnInt64(IntPtr c
33f0: 6f 6e 74 65 78 74 2c 20 49 6e 74 36 34 20 76 61  ontext, Int64 va
3400: 6c 75 65 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72  lue);..    inter
3410: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
3420: 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74  d ReturnNull(Int
3430: 50 74 72 20 63 6f 6e 74 65 78 74 29 3b 0d 0a 20  Ptr context);.. 
3440: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
3450: 72 61 63 74 20 76 6f 69 64 20 52 65 74 75 72 6e  ract void Return
3460: 54 65 78 74 28 49 6e 74 50 74 72 20 63 6f 6e 74  Text(IntPtr cont
3470: 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61 6c 75  ext, string valu
3480: 65 29 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  e);....#if INTER
3490: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
34a0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
34b0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c  ry>..    /// Cal
34c0: 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53 51  ls the native SQ
34d0: 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72  Lite core librar
34e0: 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72  y in order to cr
34f0: 65 61 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c  eate a disposabl
3500: 65 0d 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c  e..    /// modul
3510: 65 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65  e containing the
3520: 20 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20   implementation 
3530: 6f 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62  of a virtual tab
3540: 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
3550: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
3560: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f   <param name="mo
3570: 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  dule">..    /// 
3580: 54 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63  The module objec
3590: 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65  t to be used whe
35a0: 6e 20 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e  n creating the n
35b0: 61 74 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65  ative disposable
35c0: 20 6d 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f   module...    //
35d0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
35e0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
35f0: 74 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64  t void CreateMod
3600: 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65  ule(SQLiteModule
3610: 20 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20   module);....   
3620: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3630: 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68      /// Calls th
3640: 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20  e native SQLite 
3650: 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20  core library in 
3660: 6f 72 64 65 72 20 74 6f 20 63 6c 65 61 6e 75 70  order to cleanup
3670: 20 74 68 65 20 72 65 73 6f 75 72 63 65 73 0d 0a   the resources..
3680: 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
3690: 65 64 20 77 69 74 68 20 61 20 6d 6f 64 75 6c 65  ed with a module
36a0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
36b0: 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f  implementation o
36c0: 66 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  f a virtual tabl
36d0: 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
36e0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
36f0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
3700: 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
3710: 68 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74  he module object
3720: 20 70 72 65 76 69 6f 75 73 6c 79 20 70 61 73 73   previously pass
3730: 65 64 20 74 6f 20 74 68 65 20 3c 73 65 65 20 63  ed to the <see c
3740: 72 65 66 3d 22 43 72 65 61 74 65 4d 6f 64 75 6c  ref="CreateModul
3750: 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d  e" />..    /// m
3760: 65 74 68 6f 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ethod...    /// 
3770: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e  </param>..    in
3780: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
3790: 76 6f 69 64 20 44 69 73 70 6f 73 65 4d 6f 64 75  void DisposeModu
37a0: 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  le(SQLiteModule 
37b0: 6d 6f 64 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20  module);....    
37c0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
37d0: 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65     /// Calls the
37e0: 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63   native SQLite c
37f0: 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f  ore library in o
3800: 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20  rder to declare 
3810: 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d  a virtual table.
3820: 0a 20 20 20 20 2f 2f 2f 20 69 6e 20 72 65 73 70  .    /// in resp
3830: 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20 69  onse to a call i
3840: 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65  nto the <see cre
3850: 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65  f="ISQLiteNative
3860: 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22 20  Module.xCreate" 
3870: 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20 3c  />..    /// or <
3880: 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69 74  see cref="ISQLit
3890: 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43  eNativeModule.xC
38a0: 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74 75  onnect" /> virtu
38b0: 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64 73  al table methods
38c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
38d0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
38e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
38f0: 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
3900: 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20  e virtual table 
3910: 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20 74  module that is t
3920: 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c 65  o be responsible
3930: 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61 6c   for the virtual
3940: 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20   table..    /// 
3950: 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d  being declared..
3960: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
3970: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
3980: 6d 20 6e 61 6d 65 3d 22 73 74 72 53 71 6c 22 3e  m name="strSql">
3990: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 74  ..    /// The st
39a0: 72 69 6e 67 20 63 6f 6e 74 61 69 6e 69 6e 67 20  ring containing 
39b0: 74 68 65 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  the SQL statemen
39c0: 74 20 64 65 73 63 72 69 62 69 6e 67 20 74 68 65  t describing the
39d0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 20 74   virtual table t
39e0: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 20 64 65  o..    /// be de
39f0: 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  clared...    ///
3a00: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
3a10: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
3a20: 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f  error">..    ///
3a30: 20 55 70 6f 6e 20 73 75 63 63 65 73 73 2c 20 74   Upon success, t
3a40: 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f 66 20 74  he contents of t
3a50: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 61 72  his parameter ar
3a60: 65 20 75 6e 64 65 66 69 6e 65 64 2e 20 20 55 70  e undefined.  Up
3a70: 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a 20 20 20  on failure,..   
3a80: 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c 64 20 63   /// it should c
3a90: 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70 72 6f 70  ontain an approp
3aa0: 72 69 61 74 65 20 65 72 72 6f 72 20 6d 65 73 73  riate error mess
3ab0: 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  age...    /// </
3ac0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
3ad0: 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
3ae0: 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
3af0: 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
3b00: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3b10: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
3b20: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c  nal abstract SQL
3b30: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 44 65 63  iteErrorCode Dec
3b40: 6c 61 72 65 56 69 72 74 75 61 6c 54 61 62 6c 65  lareVirtualTable
3b50: 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f  (SQLiteModule mo
3b60: 64 75 6c 65 2c 20 73 74 72 69 6e 67 20 73 74 72  dule, string str
3b70: 53 71 6c 2c 20 72 65 66 20 73 74 72 69 6e 67 20  Sql, ref string 
3b80: 65 72 72 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 2f  error);....    /
3b90: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3ba0: 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20    /// Calls the 
3bb0: 6e 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f  native SQLite co
3bc0: 72 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72  re library in or
3bd0: 64 65 72 20 74 6f 20 64 65 63 6c 61 72 65 20 61  der to declare a
3be0: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
3bf0: 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
3c00: 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74 6f 20   in response to 
3c10: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
3c20: 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
3c30: 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
3c40: 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20 20 20  Create" />..    
3c50: 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72 65 66  /// or <see cref
3c60: 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76 65 4d  ="ISQLiteNativeM
3c70: 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74 22 20  odule.xConnect" 
3c80: 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  /> virtual table
3c90: 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20 20 2f   methods...    /
3ca0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3cb0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3cc0: 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20  me="module">..  
3cd0: 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74 75 61    /// The virtua
3ce0: 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65 20 74  l table module t
3cf0: 68 61 74 20 69 73 20 74 6f 20 62 65 20 72 65 73  hat is to be res
3d00: 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74 68 65  ponsible for the
3d10: 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65 0d 0a   virtual table..
3d20: 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e      /// function
3d30: 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65 64 2e   being declared.
3d40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
3d50: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
3d60: 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75 6d 65 6e  am name="argumen
3d70: 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20 20 2f 2f  tCount">..    //
3d80: 2f 20 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  / The number of 
3d90: 61 72 67 75 6d 65 6e 74 73 20 74 6f 20 74 68 65  arguments to the
3da0: 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
3db0: 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
3dc0: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
3dd0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
3de0: 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ="name">..    //
3df0: 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
3e00: 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67  e function being
3e10: 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20   declared...    
3e20: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
3e30: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
3e40: 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20 20  e="error">..    
3e50: 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73 73  /// Upon success
3e60: 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20 6f  , the contents o
3e70: 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72  f this parameter
3e80: 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e 20   are undefined. 
3e90: 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d 0a   Upon failure,..
3ea0: 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75 6c      /// it shoul
3eb0: 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70 70  d contain an app
3ec0: 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20 6d  ropriate error m
3ed0: 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f 2f  essage...    ///
3ee0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
3ef0: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
3f00: 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72 64    /// A standard
3f10: 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20 63   SQLite return c
3f20: 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ode...    /// </
3f30: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
3f40: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
3f50: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
3f60: 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 46 75  DeclareVirtualFu
3f70: 6e 63 74 69 6f 6e 28 53 51 4c 69 74 65 4d 6f 64  nction(SQLiteMod
3f80: 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 69 6e 74 20  ule module, int 
3f90: 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 2c 20 73  argumentCount, s
3fa0: 74 72 69 6e 67 20 6e 61 6d 65 2c 20 72 65 66 20  tring name, ref 
3fb0: 73 74 72 69 6e 67 20 65 72 72 6f 72 29 3b 0d 0a  string error);..
3fc0: 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f  #endif....    //
3fd0: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3fe0: 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20   /// Enables or 
3ff0: 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 73 69  disabled extensi
4000: 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51  on loading by SQ
4010: 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  Lite...    /// <
4020: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
4030: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
4040: 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f  bOnOff">..    //
4050: 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65  / True to enable
4060: 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65   loading of exte
4070: 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f  nsions, false to
4080: 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f   disable...    /
4090: 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
40a0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
40b0: 63 74 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45  ct void SetLoadE
40c0: 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f  xtension(bool bO
40d0: 6e 4f 66 66 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  nOff);..    /// 
40e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
40f0: 2f 2f 20 4c 6f 61 64 73 20 61 20 53 51 4c 69 74  // Loads a SQLit
4100: 65 20 65 78 74 65 6e 73 69 6f 6e 20 6c 69 62 72  e extension libr
4110: 61 72 79 20 66 72 6f 6d 20 74 68 65 20 6e 61 6d  ary from the nam
4120: 65 64 20 66 69 6c 65 2e 0d 0a 20 20 20 20 2f 2f  ed file...    //
4130: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
4140: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
4150: 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20  e="fileName">.. 
4160: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
4170: 6f 66 20 74 68 65 20 64 79 6e 61 6d 69 63 20 6c  of the dynamic l
4180: 69 6e 6b 20 6c 69 62 72 61 72 79 20 66 69 6c 65  ink library file
4190: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
41a0: 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20  extension...    
41b0: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
41c0: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
41d0: 65 3d 22 70 72 6f 63 4e 61 6d 65 22 3e 0d 0a 20  e="procName">.. 
41e0: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20     /// The name 
41f0: 6f 66 20 74 68 65 20 65 78 70 6f 72 74 65 64 20  of the exported 
4200: 66 75 6e 63 74 69 6f 6e 20 75 73 65 64 20 74 6f  function used to
4210: 20 69 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   initialize the 
4220: 65 78 74 65 6e 73 69 6f 6e 2e 0d 0a 20 20 20 20  extension...    
4230: 2f 2f 2f 20 49 66 20 6e 75 6c 6c 2c 20 74 68 65  /// If null, the
4240: 20 64 65 66 61 75 6c 74 20 22 73 71 6c 69 74 65   default "sqlite
4250: 33 5f 65 78 74 65 6e 73 69 6f 6e 5f 69 6e 69 74  3_extension_init
4260: 22 20 77 69 6c 6c 20 62 65 20 75 73 65 64 2e 0d  " will be used..
4270: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
4280: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
4290: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 4c 6f  abstract void Lo
42a0: 61 64 45 78 74 65 6e 73 69 6f 6e 28 73 74 72 69  adExtension(stri
42b0: 6e 67 20 66 69 6c 65 4e 61 6d 65 2c 20 73 74 72  ng fileName, str
42c0: 69 6e 67 20 70 72 6f 63 4e 61 6d 65 29 3b 0d 0a  ing procName);..
42d0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
42e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61 62 6c  >..    /// Enabl
42f0: 65 73 20 6f 72 20 64 69 73 61 62 6c 65 64 20 65  es or disabled e
4300: 78 74 65 6e 65 64 20 72 65 73 75 6c 74 20 63 6f  xtened result co
4310: 64 65 73 20 72 65 74 75 72 6e 65 64 20 62 79 20  des returned by 
4320: 53 51 4c 69 74 65 0d 0a 20 20 20 20 2f 2f 2f 20  SQLite..    /// 
4330: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
4340: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
4350: 22 62 4f 6e 4f 66 66 22 3e 74 72 75 65 20 74 6f  "bOnOff">true to
4360: 20 65 6e 61 62 6c 65 20 65 78 74 65 6e 64 65 64   enable extended
4370: 20 72 65 73 75 6c 74 20 63 6f 64 65 73 2c 20 66   result codes, f
4380: 61 6c 73 65 20 74 6f 20 64 69 73 61 62 6c 65 2e  alse to disable.
4390: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
43a0: 2f 20 3c 72 65 74 75 72 6e 73 3e 3c 2f 72 65 74  / <returns></ret
43b0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
43c0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
43d0: 64 20 53 65 74 45 78 74 65 6e 64 65 64 52 65 73  d SetExtendedRes
43e0: 75 6c 74 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f  ultCodes(bool bO
43f0: 6e 4f 66 66 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20  nOff);..    /// 
4400: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
4410: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
4420: 75 6d 65 72 69 63 20 72 65 73 75 6c 74 20 63 6f  umeric result co
4430: 64 65 20 66 6f 72 20 74 68 65 20 6d 6f 73 74 20  de for the most 
4440: 72 65 63 65 6e 74 20 66 61 69 6c 65 64 20 53 51  recent failed SQ
4450: 4c 69 74 65 20 41 50 49 20 63 61 6c 6c 20 0d 0a  Lite API call ..
4460: 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
4470: 65 64 20 77 69 74 68 20 74 68 65 20 64 61 74 61  ed with the data
4480: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
4490: 20 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d   ..    /// </sum
44a0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
44b0: 72 65 74 75 72 6e 73 3e 52 65 73 75 6c 74 20 63  returns>Result c
44c0: 6f 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  ode</returns>.. 
44d0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74     internal abst
44e0: 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72  ract SQLiteError
44f0: 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64 65 28  Code ResultCode(
4500: 29 3b 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  );..    /// <sum
4510: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52  mary>..    /// R
4520: 65 74 75 72 6e 73 20 74 68 65 20 65 78 74 65 6e  eturns the exten
4530: 64 65 64 20 6e 75 6d 65 72 69 63 20 72 65 73 75  ded numeric resu
4540: 6c 74 20 63 6f 64 65 20 66 6f 72 20 74 68 65 20  lt code for the 
4550: 6d 6f 73 74 20 72 65 63 65 6e 74 20 66 61 69 6c  most recent fail
4560: 65 64 20 53 51 4c 69 74 65 20 41 50 49 20 63 61  ed SQLite API ca
4570: 6c 6c 20 0d 0a 20 20 20 20 2f 2f 2f 20 61 73 73  ll ..    /// ass
4580: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
4590: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
45a0: 74 69 6f 6e 2e 20 0d 0a 20 20 20 20 2f 2f 2f 20  tion. ..    /// 
45b0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
45c0: 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 45 78 74  /// <returns>Ext
45d0: 65 6e 64 65 64 20 72 65 73 75 6c 74 20 63 6f 64  ended result cod
45e0: 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
45f0: 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61   internal abstra
4600: 63 74 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ct SQLiteErrorCo
4610: 64 65 20 45 78 74 65 6e 64 65 64 52 65 73 75 6c  de ExtendedResul
4620: 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a 20 20 20 20  tCode();....    
4630: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
4640: 20 20 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67     /// Add a log
4650: 20 6d 65 73 73 61 67 65 20 76 69 61 20 74 68 65   message via the
4660: 20 53 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f   SQLite sqlite3_
4670: 6c 6f 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a  log interface...
4680: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4690: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
46a0: 61 6d 20 6e 61 6d 65 3d 22 69 45 72 72 43 6f 64  am name="iErrCod
46b0: 65 22 3e 45 72 72 6f 72 20 63 6f 64 65 20 74 6f  e">Error code to
46c0: 20 62 65 20 6c 6f 67 67 65 64 20 77 69 74 68 20   be logged with 
46d0: 74 68 65 20 6d 65 73 73 61 67 65 2e 3c 2f 70 61  the message.</pa
46e0: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
46f0: 61 72 61 6d 20 6e 61 6d 65 3d 22 7a 4d 65 73 73  aram name="zMess
4700: 61 67 65 22 3e 53 74 72 69 6e 67 20 74 6f 20 62  age">String to b
4710: 65 20 6c 6f 67 67 65 64 2e 20 20 55 6e 6c 69 6b  e logged.  Unlik
4720: 65 20 74 68 65 20 53 51 4c 69 74 65 20 73 71 6c  e the SQLite sql
4730: 69 74 65 33 5f 6c 6f 67 28 29 20 0d 0a 20 20 20  ite3_log() ..   
4740: 20 2f 2f 2f 20 69 6e 74 65 72 66 61 63 65 2c 20   /// interface, 
4750: 74 68 69 73 20 73 68 6f 75 6c 64 20 62 65 20 70  this should be p
4760: 72 65 2d 66 6f 72 6d 61 74 74 65 64 2e 20 20 43  re-formatted.  C
4770: 6f 6e 73 69 64 65 72 20 75 73 69 6e 67 20 74 68  onsider using th
4780: 65 20 0d 0a 20 20 20 20 2f 2f 2f 20 53 74 72 69  e ..    /// Stri
4790: 6e 67 2e 46 6f 72 6d 61 74 28 29 20 66 75 6e 63  ng.Format() func
47a0: 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  tion.</param>.. 
47b0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
47c0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
47d0: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
47e0: 74 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61 67  t void LogMessag
47f0: 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e(SQLiteErrorCod
4800: 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72 69  e iErrCode, stri
4810: 6e 67 20 7a 4d 65 73 73 61 67 65 29 3b 0d 0a 0d  ng zMessage);...
4820: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 43 4f 44  .#if INTEROP_COD
4830: 45 43 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  EC..    internal
4840: 20 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 53   abstract void S
4850: 65 74 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b  etPassword(byte[
4860: 5d 20 70 61 73 73 77 6f 72 64 42 79 74 65 73 29  ] passwordBytes)
4870: 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ;..    internal 
4880: 61 62 73 74 72 61 63 74 20 76 6f 69 64 20 43 68  abstract void Ch
4890: 61 6e 67 65 50 61 73 73 77 6f 72 64 28 62 79 74  angePassword(byt
48a0: 65 5b 5d 20 6e 65 77 50 61 73 73 77 6f 72 64 42  e[] newPasswordB
48b0: 79 74 65 73 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ytes);..#endif..
48c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61  ..    internal a
48d0: 62 73 74 72 61 63 74 20 76 6f 69 64 20 53 65 74  bstract void Set
48e0: 55 70 64 61 74 65 48 6f 6f 6b 28 53 51 4c 69 74  UpdateHook(SQLit
48f0: 65 55 70 64 61 74 65 43 61 6c 6c 62 61 63 6b 20  eUpdateCallback 
4900: 66 75 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65  func);..    inte
4910: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f  rnal abstract vo
4920: 69 64 20 53 65 74 43 6f 6d 6d 69 74 48 6f 6f 6b  id SetCommitHook
4930: 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74 43 61 6c  (SQLiteCommitCal
4940: 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 20 20  lback func);..  
4950: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
4960: 61 63 74 20 76 6f 69 64 20 53 65 74 54 72 61 63  act void SetTrac
4970: 65 43 61 6c 6c 62 61 63 6b 28 53 51 4c 69 74 65  eCallback(SQLite
4980: 54 72 61 63 65 43 61 6c 6c 62 61 63 6b 20 66 75  TraceCallback fu
4990: 6e 63 29 3b 0d 0a 20 20 20 20 69 6e 74 65 72 6e  nc);..    intern
49a0: 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69 64  al abstract void
49b0: 20 53 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b   SetRollbackHook
49c0: 28 53 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43  (SQLiteRollbackC
49d0: 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a  allback func);..
49e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73      internal abs
49f0: 74 72 61 63 74 20 53 51 4c 69 74 65 45 72 72 6f  tract SQLiteErro
4a00: 72 43 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c  rCode SetLogCall
4a10: 62 61 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61  back(SQLiteLogCa
4a20: 6c 6c 62 61 63 6b 20 66 75 6e 63 29 3b 0d 0a 0d  llback func);...
4a30: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
4a40: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 68 65 63  y>..    /// Chec
4a50: 6b 73 20 69 66 20 74 68 65 20 53 51 4c 69 74 65  ks if the SQLite
4a60: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68 61   core library ha
4a70: 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  s been initializ
4a80: 65 64 20 69 6e 20 74 68 65 20 63 75 72 72 65 6e  ed in the curren
4a90: 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
4aa0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
4ab0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
4ac0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
4ad0: 65 72 6f 20 69 66 20 74 68 65 20 53 51 4c 69 74  ero if the SQLit
4ae0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 68  e core library h
4af0: 61 73 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  as been initiali
4b00: 7a 65 64 20 69 6e 20 74 68 65 20 63 75 72 72 65  zed in the curre
4b10: 6e 74 20 70 72 6f 63 65 73 73 2c 0d 0a 20 20 20  nt process,..   
4b20: 20 2f 2f 2f 20 7a 65 72 6f 20 6f 74 68 65 72 77   /// zero otherw
4b30: 69 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ise...    /// </
4b40: 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
4b50: 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20  ternal abstract 
4b60: 62 6f 6f 6c 20 49 73 49 6e 69 74 69 61 6c 69 7a  bool IsInitializ
4b70: 65 64 28 29 3b 0d 0a 0d 0a 20 20 20 20 69 6e 74  ed();....    int
4b80: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
4b90: 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
4ba0: 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
4bb0: 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
4bc0: 61 74 61 62 61 73 65 2c 20 69 6e 74 20 72 6f 6f  atabase, int roo
4bd0: 74 50 61 67 65 29 3b 0d 0a 20 20 20 20 69 6e 74  tPage);..    int
4be0: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 6c  ernal abstract l
4bf0: 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72 43  ong GetRowIdForC
4c00: 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61 74  ursor(SQLiteStat
4c10: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
4c20: 63 75 72 73 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20  cursor);....    
4c30: 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63  internal abstrac
4c40: 74 20 6f 62 6a 65 63 74 20 47 65 74 56 61 6c 75  t object GetValu
4c50: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
4c60: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
4c70: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
4c80: 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  ags, int index, 
4c90: 53 51 4c 69 74 65 54 79 70 65 20 74 79 70 29 3b  SQLiteType typ);
4ca0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4cb0: 20 61 62 73 74 72 61 63 74 20 62 6f 6f 6c 20 41   abstract bool A
4cc0: 75 74 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b  utoCommit..    {
4cd0: 0d 0a 20 20 20 20 20 20 67 65 74 3b 0d 0a 20 20  ..      get;..  
4ce0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4cf0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51 4c  nal abstract SQL
4d00: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46 69 6c  iteErrorCode Fil
4d10: 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e 67 20  eControl(string 
4d20: 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f 70 2c  zDbName, int op,
4d30: 20 49 6e 74 50 74 72 20 70 41 72 67 29 3b 0d 0a   IntPtr pArg);..
4d40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
4d50: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 72 65  ry>..    /// Cre
4d60: 61 74 65 73 20 61 20 6e 65 77 20 53 51 4c 69 74  ates a new SQLit
4d70: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
4d80: 62 61 73 65 64 20 6f 6e 20 74 68 65 20 70 72 6f  based on the pro
4d90: 76 69 64 65 64 20 64 65 73 74 69 6e 61 74 69 6f  vided destinatio
4da0: 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64 61 74 61 62  n..    /// datab
4db0: 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20  ase connection. 
4dc0: 20 54 68 65 20 73 6f 75 72 63 65 20 64 61 74 61   The source data
4dd0: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
4de0: 69 73 20 74 68 65 20 6f 6e 65 0d 0a 20 20 20 20  is the one..    
4df0: 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
4e00: 69 74 68 20 74 68 69 73 20 6f 62 6a 65 63 74 2e  ith this object.
4e10: 20 20 54 68 65 20 73 6f 75 72 63 65 20 61 6e 64    The source and
4e20: 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
4e30: 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 63  abase..    /// c
4e40: 6f 6e 6e 65 63 74 69 6f 6e 73 20 63 61 6e 6e 6f  onnections canno
4e50: 74 20 62 65 20 74 68 65 20 73 61 6d 65 2e 0d 0a  t be the same...
4e60: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
4e70: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
4e80: 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 43 6e 6e  am name="destCnn
4e90: 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69 6f  ">The destinatio
4ea0: 6e 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  n database conne
4eb0: 63 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  ction.</param>..
4ec0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
4ed0: 61 6d 65 3d 22 64 65 73 74 4e 61 6d 65 22 3e 54  ame="destName">T
4ee0: 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64  he destination d
4ef0: 61 74 61 62 61 73 65 20 6e 61 6d 65 2e 3c 2f 70  atabase name.</p
4f00: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
4f10: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 6f 75 72  param name="sour
4f20: 63 65 4e 61 6d 65 22 3e 54 68 65 20 73 6f 75 72  ceName">The sour
4f30: 63 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  ce database name
4f40: 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
4f50: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20  // <returns>The 
4f60: 6e 65 77 6c 79 20 63 72 65 61 74 65 64 20 62 61  newly created ba
4f70: 63 6b 75 70 20 6f 62 6a 65 63 74 2e 3c 2f 72 65  ckup object.</re
4f80: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
4f90: 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 53 51  rnal abstract SQ
4fa0: 4c 69 74 65 42 61 63 6b 75 70 20 49 6e 69 74 69  LiteBackup Initi
4fb0: 61 6c 69 7a 65 42 61 63 6b 75 70 28 0d 0a 20 20  alizeBackup(..  
4fc0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
4fd0: 65 63 74 69 6f 6e 20 64 65 73 74 43 6e 6e 2c 20  ection destCnn, 
4fe0: 73 74 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c  string destName,
4ff0: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
5000: 20 73 6f 75 72 63 65 4e 61 6d 65 29 3b 0d 0a 0d   sourceName);...
5010: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
5020: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70 69  y>..    /// Copi
5030: 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65 73  es up to N pages
5040: 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63 65   from the source
5050: 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
5060: 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20 20   destination..  
5070: 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20 61    /// database a
5080: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
5090: 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61 63  he specified bac
50a0: 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
50b0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
50c0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
50d0: 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
50e0: 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
50f0: 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e 0d  to use.</param>.
5100: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
5110: 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a 20  name="nPage">.. 
5120: 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65     /// The numbe
5130: 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63 6f  r of pages to co
5140: 70 79 20 6f 72 20 6e 65 67 61 74 69 76 65 20 74  py or negative t
5150: 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69  o copy all remai
5160: 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20  ning pages...   
5170: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
5180: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5190: 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20  me="retry">..   
51a0: 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65   /// Set to true
51b0: 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
51c0: 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  n needs to be re
51d0: 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74  tried due to dat
51e0: 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c  abase..    /// l
51f0: 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 2e 0d 0a  ocking issues...
5200: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
5210: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
5220: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  ns>..    /// Tru
5230: 65 20 69 66 20 74 68 65 72 65 20 61 72 65 20 6d  e if there are m
5240: 6f 72 65 20 70 61 67 65 73 20 74 6f 20 62 65 20  ore pages to be 
5250: 63 6f 70 69 65 64 2c 20 66 61 6c 73 65 20 6f 74  copied, false ot
5260: 68 65 72 77 69 73 65 2e 0d 0a 20 20 20 20 2f 2f  herwise...    //
5270: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
5280: 20 20 69 6e 74 65 72 6e 61 6c 20 61 62 73 74 72    internal abstr
5290: 61 63 74 20 62 6f 6f 6c 20 53 74 65 70 42 61 63  act bool StepBac
52a0: 6b 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75 70  kup(SQLiteBackup
52b0: 20 62 61 63 6b 75 70 2c 20 69 6e 74 20 6e 50 61   backup, int nPa
52c0: 67 65 2c 20 6f 75 74 20 62 6f 6f 6c 20 72 65 74  ge, out bool ret
52d0: 72 79 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ry);....    /// 
52e0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
52f0: 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20 6e  // Returns the n
5300: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 72  umber of pages r
5310: 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65 20 63  emaining to be c
5320: 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65 20 73  opied from the s
5330: 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f 20 64  ource..    /// d
5340: 61 74 61 62 61 73 65 20 74 6f 20 74 68 65 20 64  atabase to the d
5350: 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74 61 62  estination datab
5360: 61 73 65 20 61 73 73 6f 63 69 61 74 65 64 20 77  ase associated w
5370: 69 74 68 20 74 68 65 20 73 70 65 63 69 66 69 65  ith the specifie
5380: 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63 6b 75  d..    /// backu
5390: 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f  p object...    /
53a0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
53b0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
53c0: 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
53d0: 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
53e0: 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d   check.</param>.
53f0: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
5400: 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s>The number of 
5410: 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e 67 20  pages remaining 
5420: 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c 2f 72  to be copied.</r
5430: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
5440: 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74 20 69  ernal abstract i
5450: 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61 63 6b  nt RemainingBack
5460: 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75 70 20  up(SQLiteBackup 
5470: 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20 20 20  backup);....    
5480: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
5490: 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
54a0: 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
54b0: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
54c0: 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
54d0: 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
54e0: 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65  /// with the spe
54f0: 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
5500: 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
5510: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
5520: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
5530: 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
5540: 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
5550: 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
5560: 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
5570: 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
5580: 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
5590: 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c  ource database.<
55a0: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
55b0: 6e 74 65 72 6e 61 6c 20 61 62 73 74 72 61 63 74  nternal abstract
55c0: 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61   int PageCountBa
55d0: 63 6b 75 70 28 53 51 4c 69 74 65 42 61 63 6b 75  ckup(SQLiteBacku
55e0: 70 20 62 61 63 6b 75 70 29 3b 0d 0a 0d 0a 20 20  p backup);....  
55f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
5600: 0a 20 20 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79  .    /// Destroy
5610: 73 20 74 68 65 20 62 61 63 6b 75 70 20 6f 62 6a  s the backup obj
5620: 65 63 74 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63  ect, rolling bac
5630: 6b 20 61 6e 79 20 62 61 63 6b 75 70 20 74 68 61  k any backup tha
5640: 74 20 6d 61 79 20 62 65 20 69 6e 0d 0a 20 20 20  t may be in..   
5650: 20 2f 2f 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20   /// progess... 
5660: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
5670: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
5680: 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
5690: 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
56a0: 74 20 74 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70  t to destroy.</p
56b0: 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
56c0: 6e 61 6c 20 61 62 73 74 72 61 63 74 20 76 6f 69  nal abstract voi
56d0: 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 53  d FinishBackup(S
56e0: 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
56f0: 75 70 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  up);....    ////
5700: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5710: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5720: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5730: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5740: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5750: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5760: 20 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70     #region IDisp
5770: 6f 73 61 62 6c 65 20 4d 65 6d 62 65 72 73 0d 0a  osable Members..
5780: 20 20 20 20 70 75 62 6c 69 63 20 76 6f 69 64 20      public void 
5790: 44 69 73 70 6f 73 65 28 29 0d 0a 20 20 20 20 7b  Dispose()..    {
57a0: 0d 0a 20 20 20 20 20 20 20 20 44 69 73 70 6f 73  ..        Dispos
57b0: 65 28 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  e(true);..      
57c0: 20 20 47 43 2e 53 75 70 70 72 65 73 73 46 69 6e    GC.SuppressFin
57d0: 61 6c 69 7a 65 28 74 68 69 73 29 3b 0d 0a 20 20  alize(this);..  
57e0: 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72 65 67    }..    #endreg
57f0: 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f  ion....    /////
5800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5830: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5850: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
5860: 20 20 23 72 65 67 69 6f 6e 20 49 44 69 73 70 6f    #region IDispo
5870: 73 61 62 6c 65 20 22 50 61 74 74 65 72 6e 22 20  sable "Pattern" 
5880: 4d 65 6d 62 65 72 73 0d 0a 20 20 20 20 70 72 69  Members..    pri
5890: 76 61 74 65 20 62 6f 6f 6c 20 64 69 73 70 6f 73  vate bool dispos
58a0: 65 64 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ed;..    private
58b0: 20 76 6f 69 64 20 43 68 65 63 6b 44 69 73 70 6f   void CheckDispo
58c0: 73 65 64 28 29 20 2f 2a 20 74 68 72 6f 77 20 2a  sed() /* throw *
58d0: 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 54 48  /..    {..#if TH
58e0: 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f 53 45 44 0d  ROW_ON_DISPOSED.
58f0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 69 73  .        if (dis
5900: 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  posed)..        
5910: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4f 62      throw new Ob
5920: 6a 65 63 74 44 69 73 70 6f 73 65 64 45 78 63 65  jectDisposedExce
5930: 70 74 69 6f 6e 28 74 79 70 65 6f 66 28 53 51 4c  ption(typeof(SQL
5940: 69 74 65 42 61 73 65 29 2e 4e 61 6d 65 29 3b 0d  iteBase).Name);.
5950: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
5960: 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ..    //////////
5970: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
59c0: 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 6f  /////....    pro
59d0: 74 65 63 74 65 64 20 76 69 72 74 75 61 6c 20 76  tected virtual v
59e0: 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f 6f 6c  oid Dispose(bool
59f0: 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20   disposing)..   
5a00: 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
5a10: 21 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  !disposed)..    
5a20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
5a30: 20 20 20 2f 2f 69 66 20 28 64 69 73 70 6f 73 69     //if (disposi
5a40: 6e 67 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ng)..           
5a50: 20 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20   //{..          
5a60: 20 20 2f 2f 20 20 20 20 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 0d 0a 20 20  ////////////..  
5a90: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20            //    
5aa0: 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e 61 67  // dispose manag
5ab0: 65 64 20 72 65 73 6f 75 72 63 65 73 20 68 65 72  ed resources her
5ac0: 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  e.....          
5ad0: 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f    //    ////////
5ae0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5af0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20  ////////////..  
5b00: 20 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d            //}...
5b10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f  .            ///
5b20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5b40: 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ///..           
5b50: 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e 6d 61   // release unma
5b60: 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20  naged resources 
5b70: 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20  here.....       
5b80: 20 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f       ///////////
5b90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
5bb0: 20 20 20 20 20 20 20 20 20 20 20 64 69 73 70 6f             dispo
5bc0: 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20  sed = true;..   
5bd0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 20       }..    }.. 
5be0: 20 20 20 23 65 6e 64 72 65 67 69 6f 6e 0d 0a 0d     #endregion...
5bf0: 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  .    ///////////
5c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5c50: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67  ////....    #reg
5c60: 69 6f 6e 20 44 65 73 74 72 75 63 74 6f 72 0d 0a  ion Destructor..
5c70: 20 20 20 20 7e 53 51 4c 69 74 65 42 61 73 65 28      ~SQLiteBase(
5c80: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
5c90: 20 20 44 69 73 70 6f 73 65 28 66 61 6c 73 65 29    Dispose(false)
5ca0: 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 23 65  ;..    }..    #e
5cb0: 6e 64 72 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20  ndregion....    
5cc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ce0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5cf0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5d10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
5d20: 0a 0d 0a 20 20 20 20 2f 2f 20 54 68 65 73 65 20  ...    // These 
5d30: 73 74 61 74 69 63 73 20 61 72 65 20 68 65 72 65  statics are here
5d40: 20 66 6f 72 20 6c 61 63 6b 20 6f 66 20 61 20 62   for lack of a b
5d50: 65 74 74 65 72 20 70 6c 61 63 65 20 74 6f 20 70  etter place to p
5d60: 75 74 20 74 68 65 6d 2e 0d 0a 20 20 20 20 2f 2f  ut them...    //
5d70: 20 54 68 65 79 20 65 78 69 73 74 20 68 65 72 65   They exist here
5d80: 20 62 65 63 61 75 73 65 20 74 68 65 79 20 61 72   because they ar
5d90: 65 20 63 61 6c 6c 65 64 20 64 75 72 69 6e 67 20  e called during 
5da0: 74 68 65 20 66 69 6e 61 6c 69 7a 61 74 69 6f 6e  the finalization
5db0: 20 6f 66 0d 0a 20 20 20 20 2f 2f 20 61 20 53 51   of..    // a SQ
5dc0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
5dd0: 64 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  dle, SQLiteConne
5de0: 63 74 69 6f 6e 48 61 6e 64 6c 65 2c 20 61 6e 64  ctionHandle, and
5df0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 43   SQLiteFunctionC
5e00: 6f 6f 6b 69 65 48 61 6e 64 6c 65 2e 0d 0a 20 20  ookieHandle...  
5e10: 20 20 2f 2f 20 54 68 65 72 65 66 6f 72 65 20 74    // Therefore t
5e20: 68 65 73 65 20 66 75 6e 63 74 69 6f 6e 73 20 68  hese functions h
5e30: 61 76 65 20 74 6f 20 62 65 20 73 74 61 74 69 63  ave to be static
5e40: 2c 20 61 6e 64 20 68 61 76 65 20 74 6f 20 62 65  , and have to be
5e50: 20 6c 6f 77 2d 6c 65 76 65 6c 2e 0d 0a 0d 0a 20   low-level..... 
5e60: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
5e70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5e90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ea0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5eb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
5ec0: 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74  //....    privat
5ed0: 65 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 5b  e static string[
5ee0: 5d 20 5f 65 72 72 6f 72 4d 65 73 73 61 67 65 73  ] _errorMessages
5ef0: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20   = {.        /* 
5f00: 53 51 4c 49 54 45 5f 4f 4b 20 20 20 20 20 20 20  SQLITE_OK       
5f10: 20 20 20 2a 2f 20 22 6e 6f 74 20 61 6e 20 65 72     */ "not an er
5f20: 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  ror",..        /
5f30: 2a 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 20 20  * SQLITE_ERROR  
5f40: 20 20 20 20 20 2a 2f 20 22 53 51 4c 20 6c 6f 67       */ "SQL log
5f50: 69 63 20 65 72 72 6f 72 20 6f 72 20 6d 69 73 73  ic error or miss
5f60: 69 6e 67 20 64 61 74 61 62 61 73 65 22 2c 0d 0a  ing database",..
5f70: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
5f80: 45 5f 49 4e 54 45 52 4e 41 4c 20 20 20 20 2a 2f  E_INTERNAL    */
5f90: 20 22 69 6e 74 65 72 6e 61 6c 20 6c 6f 67 69 63   "internal logic
5fa0: 20 65 72 72 6f 72 22 2c 0d 0a 20 20 20 20 20 20   error",..      
5fb0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 50 45 52 4d    /* SQLITE_PERM
5fc0: 20 20 20 20 20 20 20 20 2a 2f 20 22 61 63 63 65          */ "acce
5fd0: 73 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 64 65  ss permission de
5fe0: 6e 69 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20  nied",..        
5ff0: 2f 2a 20 53 51 4c 49 54 45 5f 41 42 4f 52 54 20  /* SQLITE_ABORT 
6000: 20 20 20 20 20 20 2a 2f 20 22 63 61 6c 6c 62 61        */ "callba
6010: 63 6b 20 72 65 71 75 65 73 74 65 64 20 71 75 65  ck requested que
6020: 72 79 20 61 62 6f 72 74 22 2c 0d 0a 20 20 20 20  ry abort",..    
6030: 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 42 55      /* SQLITE_BU
6040: 53 59 20 20 20 20 20 20 20 20 2a 2f 20 22 64 61  SY        */ "da
6050: 74 61 62 61 73 65 20 69 73 20 6c 6f 63 6b 65 64  tabase is locked
6060: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
6070: 51 4c 49 54 45 5f 4c 4f 43 4b 45 44 20 20 20 20  QLITE_LOCKED    
6080: 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20 74    */ "database t
6090: 61 62 6c 65 20 69 73 20 6c 6f 63 6b 65 64 22 2c  able is locked",
60a0: 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c  ..        /* SQL
60b0: 49 54 45 5f 4e 4f 4d 45 4d 20 20 20 20 20 20 20  ITE_NOMEM       
60c0: 2a 2f 20 22 6f 75 74 20 6f 66 20 6d 65 6d 6f 72  */ "out of memor
60d0: 79 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20  y",..        /* 
60e0: 53 51 4c 49 54 45 5f 52 45 41 44 4f 4e 4c 59 20  SQLITE_READONLY 
60f0: 20 20 20 2a 2f 20 22 61 74 74 65 6d 70 74 20 74     */ "attempt t
6100: 6f 20 77 72 69 74 65 20 61 20 72 65 61 64 6f 6e  o write a readon
6110: 6c 79 20 64 61 74 61 62 61 73 65 22 2c 0d 0a 20  ly database",.. 
6120: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
6130: 5f 49 4e 54 45 52 52 55 50 54 20 20 20 2a 2f 20  _INTERRUPT   */ 
6140: 22 69 6e 74 65 72 72 75 70 74 65 64 22 2c 0d 0a  "interrupted",..
6150: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
6160: 45 5f 49 4f 45 52 52 20 20 20 20 20 20 20 2a 2f  E_IOERR       */
6170: 20 22 64 69 73 6b 20 49 2f 4f 20 65 72 72 6f 72   "disk I/O error
6180: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
6190: 51 4c 49 54 45 5f 43 4f 52 52 55 50 54 20 20 20  QLITE_CORRUPT   
61a0: 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20 64    */ "database d
61b0: 69 73 6b 20 69 6d 61 67 65 20 69 73 20 6d 61 6c  isk image is mal
61c0: 66 6f 72 6d 65 64 22 2c 0d 0a 20 20 20 20 20 20  formed",..      
61d0: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 54 46    /* SQLITE_NOTF
61e0: 4f 55 4e 44 20 20 20 20 2a 2f 20 22 75 6e 6b 6e  OUND    */ "unkn
61f0: 6f 77 6e 20 6f 70 65 72 61 74 69 6f 6e 22 2c 0d  own operation",.
6200: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
6210: 54 45 5f 46 55 4c 4c 20 20 20 20 20 20 20 20 2a  TE_FULL        *
6220: 2f 20 22 64 61 74 61 62 61 73 65 20 6f 72 20 64  / "database or d
6230: 69 73 6b 20 69 73 20 66 75 6c 6c 22 2c 0d 0a 20  isk is full",.. 
6240: 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45         /* SQLITE
6250: 5f 43 41 4e 54 4f 50 45 4e 20 20 20 20 2a 2f 20  _CANTOPEN    */ 
6260: 22 75 6e 61 62 6c 65 20 74 6f 20 6f 70 65 6e 20  "unable to open 
6270: 64 61 74 61 62 61 73 65 20 66 69 6c 65 22 2c 0d  database file",.
6280: 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49  .        /* SQLI
6290: 54 45 5f 50 52 4f 54 4f 43 4f 4c 20 20 20 20 2a  TE_PROTOCOL    *
62a0: 2f 20 22 6c 6f 63 6b 69 6e 67 20 70 72 6f 74 6f  / "locking proto
62b0: 63 6f 6c 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  col",..        /
62c0: 2a 20 53 51 4c 49 54 45 5f 45 4d 50 54 59 20 20  * SQLITE_EMPTY  
62d0: 20 20 20 20 20 2a 2f 20 22 74 61 62 6c 65 20 63       */ "table c
62e0: 6f 6e 74 61 69 6e 73 20 6e 6f 20 64 61 74 61 22  ontains no data"
62f0: 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53 51  ,..        /* SQ
6300: 4c 49 54 45 5f 53 43 48 45 4d 41 20 20 20 20 20  LITE_SCHEMA     
6310: 20 2a 2f 20 22 64 61 74 61 62 61 73 65 20 73 63   */ "database sc
6320: 68 65 6d 61 20 68 61 73 20 63 68 61 6e 67 65 64  hema has changed
6330: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
6340: 51 4c 49 54 45 5f 54 4f 4f 42 49 47 20 20 20 20  QLITE_TOOBIG    
6350: 20 20 2a 2f 20 22 73 74 72 69 6e 67 20 6f 72 20    */ "string or 
6360: 62 6c 6f 62 20 74 6f 6f 20 62 69 67 22 2c 0d 0a  blob too big",..
6370: 20 20 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54          /* SQLIT
6380: 45 5f 43 4f 4e 53 54 52 41 49 4e 54 20 20 2a 2f  E_CONSTRAINT  */
6390: 20 22 63 6f 6e 73 74 72 61 69 6e 74 20 66 61 69   "constraint fai
63a0: 6c 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f  led",..        /
63b0: 2a 20 53 51 4c 49 54 45 5f 4d 49 53 4d 41 54 43  * SQLITE_MISMATC
63c0: 48 20 20 20 20 2a 2f 20 22 64 61 74 61 74 79 70  H    */ "datatyp
63d0: 65 20 6d 69 73 6d 61 74 63 68 22 2c 0d 0a 20 20  e mismatch",..  
63e0: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
63f0: 4d 49 53 55 53 45 20 20 20 20 20 20 2a 2f 20 22  MISUSE      */ "
6400: 6c 69 62 72 61 72 79 20 72 6f 75 74 69 6e 65 20  library routine 
6410: 63 61 6c 6c 65 64 20 6f 75 74 20 6f 66 20 73 65  called out of se
6420: 71 75 65 6e 63 65 22 2c 0d 0a 20 20 20 20 20 20  quence",..      
6430: 20 20 2f 2a 20 53 51 4c 49 54 45 5f 4e 4f 4c 46    /* SQLITE_NOLF
6440: 53 20 20 20 20 20 20 20 2a 2f 20 22 6c 61 72 67  S       */ "larg
6450: 65 20 66 69 6c 65 20 73 75 70 70 6f 72 74 20 69  e file support i
6460: 73 20 64 69 73 61 62 6c 65 64 22 2c 0d 0a 20 20  s disabled",..  
6470: 20 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f        /* SQLITE_
6480: 41 55 54 48 20 20 20 20 20 20 20 20 2a 2f 20 22  AUTH        */ "
6490: 61 75 74 68 6f 72 69 7a 61 74 69 6f 6e 20 64 65  authorization de
64a0: 6e 69 65 64 22 2c 0d 0a 20 20 20 20 20 20 20 20  nied",..        
64b0: 2f 2a 20 53 51 4c 49 54 45 5f 46 4f 52 4d 41 54  /* SQLITE_FORMAT
64c0: 20 20 20 20 20 20 2a 2f 20 22 61 75 78 69 6c 69        */ "auxili
64d0: 61 72 79 20 64 61 74 61 62 61 73 65 20 66 6f 72  ary database for
64e0: 6d 61 74 20 65 72 72 6f 72 22 2c 0d 0a 20 20 20  mat error",..   
64f0: 20 20 20 20 20 2f 2a 20 53 51 4c 49 54 45 5f 52       /* SQLITE_R
6500: 41 4e 47 45 20 20 20 20 20 20 20 2a 2f 20 22 62  ANGE       */ "b
6510: 69 6e 64 20 6f 72 20 63 6f 6c 75 6d 6e 20 69 6e  ind or column in
6520: 64 65 78 20 6f 75 74 20 6f 66 20 72 61 6e 67 65  dex out of range
6530: 22 2c 0d 0a 20 20 20 20 20 20 20 20 2f 2a 20 53  ",..        /* S
6540: 51 4c 49 54 45 5f 4e 4f 54 41 44 42 20 20 20 20  QLITE_NOTADB    
6550: 20 20 2a 2f 20 22 66 69 6c 65 20 69 73 20 65 6e    */ "file is en
6560: 63 72 79 70 74 65 64 20 6f 72 20 69 73 20 6e 6f  crypted or is no
6570: 74 20 61 20 64 61 74 61 62 61 73 65 22 0a 20 20  t a database".  
6580: 20 20 7d 3b 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f    };...    /////
6590: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
65e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20  //////////....  
65f0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
6600: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
6610: 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61   the error messa
6620: 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69  ge for the speci
6630: 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74 75  fied SQLite retu
6640: 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20  rn code using.. 
6650: 20 20 20 2f 2f 2f 20 74 68 65 20 69 6e 74 65 72     /// the inter
6660: 6e 61 6c 20 73 74 61 74 69 63 20 6c 6f 6f 6b 75  nal static looku
6670: 70 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  p table...    //
6680: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
6690: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
66a0: 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74  e="rc">The SQLit
66b0: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f  e return code.</
66c0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
66d0: 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72  <returns>The err
66e0: 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75  or message or nu
66f0: 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20  ll if it cannot 
6700: 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72  be found.</retur
6710: 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ns>..    private
6720: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46   static string F
6730: 61 6c 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53  allbackGetErrorS
6740: 74 72 69 6e 67 28 53 51 4c 69 74 65 45 72 72 6f  tring(SQLiteErro
6750: 72 43 6f 64 65 20 72 63 29 0d 0a 20 20 20 20 7b  rCode rc)..    {
6760: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 65  ..        if (_e
6770: 72 72 6f 72 4d 65 73 73 61 67 65 73 20 3d 3d 20  rrorMessages == 
6780: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
6790: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
67a0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ...        int i
67b0: 6e 64 65 78 20 3d 20 28 69 6e 74 29 72 63 3b 0d  ndex = (int)rc;.
67c0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
67d0: 69 6e 64 65 78 20 3c 20 30 29 20 7c 7c 20 28 69  index < 0) || (i
67e0: 6e 64 65 78 20 3e 3d 20 5f 65 72 72 6f 72 4d 65  ndex >= _errorMe
67f0: 73 73 61 67 65 73 2e 4c 65 6e 67 74 68 29 29 0d  ssages.Length)).
6800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 64  .            ind
6810: 65 78 20 3d 20 28 69 6e 74 29 53 51 4c 69 74 65  ex = (int)SQLite
6820: 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
6830: 20 2f 2a 20 4d 61 6b 65 20 69 6e 74 6f 20 67 65   /* Make into ge
6840: 6e 65 72 69 63 20 65 72 72 6f 72 2e 20 2a 2f 0d  neric error. */.
6850: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
6860: 6e 20 5f 65 72 72 6f 72 4d 65 73 73 61 67 65 73  n _errorMessages
6870: 5b 69 6e 64 65 78 5d 3b 0a 20 20 20 20 7d 0d 0a  [index];.    }..
6880: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
6890: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74  ry>..    /// Ret
68a0: 75 72 6e 73 20 74 68 65 20 65 72 72 6f 72 20 6d  urns the error m
68b0: 65 73 73 61 67 65 20 66 6f 72 20 74 68 65 20 73  essage for the s
68c0: 70 65 63 69 66 69 65 64 20 53 51 4c 69 74 65 20  pecified SQLite 
68d0: 72 65 74 75 72 6e 20 63 6f 64 65 20 75 73 69 6e  return code usin
68e0: 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73  g..    /// the s
68f0: 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 29 20  qlite3_errstr() 
6900: 66 75 6e 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e  function, fallin
6910: 67 20 62 61 63 6b 20 74 6f 20 74 68 65 20 69 6e  g back to the in
6920: 74 65 72 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20  ternal lookup.. 
6930: 20 20 20 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20     /// table if 
6940: 6e 65 63 65 73 73 61 72 79 2e 0d 0a 20 20 20 20  necessary...    
6950: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
6960: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
6970: 61 6d 65 3d 22 72 63 22 3e 54 68 65 20 53 51 4c  ame="rc">The SQL
6980: 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65 2e  ite return code.
6990: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
69a0: 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65 20 65  / <returns>The e
69b0: 72 72 6f 72 20 6d 65 73 73 61 67 65 20 6f 72 20  rror message or 
69c0: 6e 75 6c 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f  null if it canno
69d0: 74 20 62 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74  t be found.</ret
69e0: 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
69f0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
6a00: 67 20 47 65 74 45 72 72 6f 72 53 74 72 69 6e 67  g GetErrorString
6a10: 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65  (SQLiteErrorCode
6a20: 20 72 63 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   rc)..    {..   
6a30: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
6a40: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
6a50: 20 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e   IntPtr ptr = Un
6a60: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6a70: 73 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72  s.sqlite3_errstr
6a80: 28 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  (rc);....       
6a90: 20 20 20 20 20 69 66 20 28 70 74 72 20 21 3d 20       if (ptr != 
6aa0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
6ab0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66            {..#if
6ac0: 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
6ad0: 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
6ae0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
6af0: 75 72 6e 20 4d 61 72 73 68 61 6c 2e 50 74 72 54  urn Marshal.PtrT
6b00: 6f 53 74 72 69 6e 67 41 6e 73 69 28 70 74 72 29  oStringAnsi(ptr)
6b10: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
6b20: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
6b30: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74   UTF8ToString(pt
6b40: 72 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  r, -1);..#endif.
6b50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
6b60: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
6b70: 20 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50     catch (EntryP
6b80: 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65  ointNotFoundExce
6b90: 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ption)..        
6ba0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
6bb0: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
6bc0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
6bd0: 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 6c 62      return Fallb
6be0: 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e  ackGetErrorStrin
6bf0: 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  g(rc);..    }...
6c00: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
6c10: 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74 4c  atic string GetL
6c20: 61 73 74 45 72 72 6f 72 28 53 51 4c 69 74 65 43  astError(SQLiteC
6c30: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
6c40: 68 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 29 0d  hdl, IntPtr db).
6c50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
6c60: 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c  if ((hdl == null
6c70: 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50  ) || (db == IntP
6c80: 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20  tr.Zero))..     
6c90: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 22 6e         return "n
6ca0: 75 6c 6c 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f  ull connection o
6cb0: 72 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  r database handl
6cc0: 65 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73  e";....        s
6cd0: 74 72 69 6e 67 20 72 65 73 75 6c 74 20 3d 20 6e  tring result = n
6ce0: 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ull;....        
6cf0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
6d00: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
6d10: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
6d20: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
6d30: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
6d40: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
6d50: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
6d60: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c         {..#if PL
6d70: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
6d80: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
6d90: 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73       lock (hdl.s
6da0: 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d  yncRoot)..#else.
6db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63  .            loc
6dc0: 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d  k (hdl)..#endif.
6dd0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6df0: 69 66 20 28 21 68 64 6c 2e 49 73 49 6e 76 61 6c  if (!hdl.IsInval
6e00: 69 64 20 26 26 20 21 68 64 6c 2e 49 73 43 6c 6f  id && !hdl.IsClo
6e10: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
6e20: 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51        {..#if !SQ
6e30: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
6e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e50: 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 20 20 20     int len;..   
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e70: 20 72 65 73 75 6c 74 20 3d 20 55 54 46 38 54 6f   result = UTF8To
6e80: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
6e90: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6ea0: 65 33 5f 65 72 72 6d 73 67 5f 69 6e 74 65 72 6f  e3_errmsg_intero
6eb0: 70 28 64 62 2c 20 6f 75 74 20 6c 65 6e 29 2c 20  p(db, out len), 
6ec0: 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
6ed0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6ee0: 20 20 72 65 73 75 6c 74 20 3d 20 55 54 46 38 54    result = UTF8T
6ef0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
6f00: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
6f10: 74 65 33 5f 65 72 72 6d 73 67 28 64 62 29 2c 20  te3_errmsg(db), 
6f20: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
6f30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
6f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6f50: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
6f60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
6f80: 73 75 6c 74 20 3d 20 22 63 6c 6f 73 65 64 20 6f  sult = "closed o
6f90: 72 20 69 6e 76 61 6c 69 64 20 63 6f 6e 6e 65 63  r invalid connec
6fa0: 74 69 6f 6e 20 68 61 6e 64 6c 65 22 3b 0d 0a 20  tion handle";.. 
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
6fc0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6fd0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
6fe0: 20 20 20 20 47 43 2e 4b 65 65 70 41 6c 69 76 65      GC.KeepAlive
6ff0: 28 68 64 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20  (hdl);..        
7000: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
7010: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
7020: 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76 6f 69  ernal static voi
7030: 64 20 46 69 6e 69 73 68 42 61 63 6b 75 70 28 53  d FinishBackup(S
7040: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48  QLiteConnectionH
7050: 61 6e 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74  andle hdl, IntPt
7060: 72 20 62 61 63 6b 75 70 29 0d 0a 20 20 20 20 7b  r backup)..    {
7070: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 68  ..        if ((h
7080: 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28  dl == null) || (
7090: 62 61 63 6b 75 70 20 3d 3d 20 49 6e 74 50 74 72  backup == IntPtr
70a0: 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 3b 0d  .Zero)) return;.
70b0: 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
70c0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
70d0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
70e0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
70f0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
7100: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
7110: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
7120: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
7130: 20 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52    {..#if PLATFOR
7140: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
7150: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
7160: 6c 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f  lock (hdl.syncRo
7170: 6f 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ot)..#else..    
7180: 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64          lock (hd
7190: 6c 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l)..#endif..    
71a0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
71b0: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
71c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
71d0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
71e0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
71f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
7200: 5f 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69  _backup_finish_i
7210: 6e 74 65 72 6f 70 28 62 61 63 6b 75 70 29 3b 0d  nterop(backup);.
7220: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
7230: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7240: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
7250: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
7260: 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 66  sqlite3_backup_f
7270: 69 6e 69 73 68 28 62 61 63 6b 75 70 29 3b 0d 0a  inish(backup);..
7280: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
7290: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
72a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
72b0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
72c0: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
72d0: 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20  , null);..      
72e0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
72f0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
7300: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
7310: 20 76 6f 69 64 20 46 69 6e 61 6c 69 7a 65 53 74   void FinalizeSt
7320: 61 74 65 6d 65 6e 74 28 53 51 4c 69 74 65 43 6f  atement(SQLiteCo
7330: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68  nnectionHandle h
7340: 64 6c 2c 20 49 6e 74 50 74 72 20 73 74 6d 74 29  dl, IntPtr stmt)
7350: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
7360: 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c   if ((hdl == nul
7370: 6c 29 20 7c 7c 20 28 73 74 6d 74 20 3d 3d 20 49  l) || (stmt == I
7380: 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74  ntPtr.Zero)) ret
7390: 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  urn;....        
73a0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
73b0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
73c0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
73d0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
73e0: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
73f0: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
7400: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
7410: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 50 4c         {..#if PL
7420: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
7430: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20  AMEWORK..       
7440: 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e 73       lock (hdl.s
7450: 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65 0d  yncRoot)..#else.
7460: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63  .            loc
7470: 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66 0d  k (hdl)..#endif.
7480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
7490: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
74a0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
74b0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
74c0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
74d0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
74e0: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 5f 69  lite3_finalize_i
74f0: 6e 74 65 72 6f 70 28 73 74 6d 74 29 3b 0d 0a 23  nterop(stmt);..#
7500: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
7510: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7520: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7530: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7540: 6c 69 74 65 33 5f 66 69 6e 61 6c 69 7a 65 28 73  lite3_finalize(s
7550: 74 6d 74 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  tmt);..#endif.. 
7560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
7570: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
7580: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
7590: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
75a0: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
75b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
75c0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
75d0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
75e0: 20 73 74 61 74 69 63 20 76 6f 69 64 20 43 6c 6f   static void Clo
75f0: 73 65 43 6f 6e 6e 65 63 74 69 6f 6e 28 53 51 4c  seConnection(SQL
7600: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
7610: 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20  dle hdl, IntPtr 
7620: 64 62 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  db)..    {..    
7630: 20 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20      if ((hdl == 
7640: 6e 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20  null) || (db == 
7650: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65  IntPtr.Zero)) re
7660: 74 75 72 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  turn;....       
7670: 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d   try..        {.
7680: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
7690: 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20  do nothing...   
76a0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
76b0: 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a  finally /* NOTE:
76c0: 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20   Thread.Abort() 
76d0: 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a  protection. */..
76e0: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 50          {..#if P
76f0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
7700: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
7710: 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c 2e        lock (hdl.
7720: 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73 65  syncRoot)..#else
7730: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f  ..            lo
7740: 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69 66  ck (hdl)..#endif
7750: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
7760: 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
7770: 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20  NDARD..         
7780: 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
7790: 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66  orCode n = Unsaf
77a0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
77b0: 71 6c 69 74 65 33 5f 63 6c 6f 73 65 5f 69 6e 74  qlite3_close_int
77c0: 65 72 6f 70 28 64 62 29 3b 0d 0a 23 65 6c 73 65  erop(db);..#else
77d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
77e0: 20 20 52 65 73 65 74 43 6f 6e 6e 65 63 74 69 6f    ResetConnectio
77f0: 6e 28 68 64 6c 2c 20 64 62 2c 20 66 61 6c 73 65  n(hdl, db, false
7800: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7810: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7820: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
7830: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
7840: 6c 69 74 65 33 5f 63 6c 6f 73 65 28 64 62 29 3b  lite3_close(db);
7850: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
7860: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
7870: 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
7880: 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
7890: 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
78a0: 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
78b0: 28 68 64 6c 2c 20 64 62 29 29 3b 0d 0a 20 20 20  (hdl, db));..   
78c0: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
78d0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
78e0: 23 69 66 20 21 49 4e 54 45 52 4f 50 5f 4c 45 47  #if !INTEROP_LEG
78f0: 41 43 59 5f 43 4c 4f 53 45 0d 0a 20 20 20 20 69  ACY_CLOSE..    i
7900: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 76  nternal static v
7910: 6f 69 64 20 43 6c 6f 73 65 43 6f 6e 6e 65 63 74  oid CloseConnect
7920: 69 6f 6e 56 32 28 53 51 4c 69 74 65 43 6f 6e 6e  ionV2(SQLiteConn
7930: 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68 64 6c  ectionHandle hdl
7940: 2c 20 49 6e 74 50 74 72 20 64 62 29 0d 0a 20 20  , IntPtr db)..  
7950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
7960: 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29 20 7c  ((hdl == null) |
7970: 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50 74 72 2e  | (db == IntPtr.
7980: 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 3b 0d 0a  Zero)) return;..
7990: 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20  ..        try.. 
79a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
79b0: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
79c0: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ing...        }.
79d0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
79e0: 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64   /* NOTE: Thread
79f0: 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74  .Abort() protect
7a00: 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20  ion. */..       
7a10: 20 7b 0d 0a 23 69 66 20 50 4c 41 54 46 4f 52 4d   {..#if PLATFORM
7a20: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
7a30: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  K..            l
7a40: 6f 63 6b 20 28 68 64 6c 2e 73 79 6e 63 52 6f 6f  ock (hdl.syncRoo
7a50: 74 29 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  t)..#else..     
7a60: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c         lock (hdl
7a70: 29 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  )..#endif..     
7a80: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 53         {..#if !S
7a90: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
7ac0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
7ad0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
7ae0: 63 6c 6f 73 65 5f 69 6e 74 65 72 6f 70 28 64 62  close_interop(db
7af0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
7b00: 20 20 20 20 20 20 20 20 20 20 20 52 65 73 65 74             Reset
7b10: 43 6f 6e 6e 65 63 74 69 6f 6e 28 68 64 6c 2c 20  Connection(hdl, 
7b20: 64 62 2c 20 66 61 6c 73 65 29 3b 0d 0a 0d 0a 20  db, false);.... 
7b30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
7b40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
7b50: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7b60: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
7b70: 6c 6f 73 65 5f 76 32 28 64 62 29 3b 0d 0a 23 65  lose_v2(db);..#e
7b80: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7b90: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
7ba0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
7bb0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
7bc0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
7bd0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 68 64 6c  GetLastError(hdl
7be0: 2c 20 64 62 29 29 3b 0d 0a 20 20 20 20 20 20 20  , db));..       
7bf0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
7c00: 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66  }..    }..#endif
7c10: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
7c20: 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 52 65 73   static bool Res
7c30: 65 74 43 6f 6e 6e 65 63 74 69 6f 6e 28 53 51 4c  etConnection(SQL
7c40: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e  iteConnectionHan
7c50: 64 6c 65 20 68 64 6c 2c 20 49 6e 74 50 74 72 20  dle hdl, IntPtr 
7c60: 64 62 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f  db, bool canThro
7c70: 77 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  w)..    {..     
7c80: 20 20 20 69 66 20 28 28 68 64 6c 20 3d 3d 20 6e     if ((hdl == n
7c90: 75 6c 6c 29 20 7c 7c 20 28 64 62 20 3d 3d 20 49  ull) || (db == I
7ca0: 6e 74 50 74 72 2e 5a 65 72 6f 29 29 20 72 65 74  ntPtr.Zero)) ret
7cb0: 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  urn false;....  
7cc0: 20 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 75 6c        bool resul
7cd0: 74 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20  t = false;....  
7ce0: 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
7cf0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7d00: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
7d10: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
7d20: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
7d30: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
7d40: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
7d50: 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
7d60: 23 69 66 20 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  #if PLATFORM_COM
7d70: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
7d80: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 63 6b 20             lock 
7d90: 28 68 64 6c 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a  (hdl.syncRoot)..
7da0: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
7db0: 20 20 20 6c 6f 63 6b 20 28 68 64 6c 29 0d 0a 23     lock (hdl)..#
7dc0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
7dd0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
7de0: 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72        if (canThr
7df0: 6f 77 20 26 26 20 68 64 6c 2e 49 73 49 6e 76 61  ow && hdl.IsInva
7e00: 6c 69 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  lid)..          
7e10: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7e20: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
7e30: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 54  tionException("T
7e40: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
7e50: 6e 64 6c 65 20 69 73 20 69 6e 76 61 6c 69 64 2e  ndle is invalid.
7e60: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
7e70: 20 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68         if (canTh
7e80: 72 6f 77 20 26 26 20 68 64 6c 2e 49 73 43 6c 6f  row && hdl.IsClo
7e90: 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20 20 20  sed)..          
7ea0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
7eb0: 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
7ec0: 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 22 54  tionException("T
7ed0: 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  he connection ha
7ee0: 6e 64 6c 65 20 69 73 20 63 6c 6f 73 65 64 2e 22  ndle is closed."
7ef0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
7f00: 20 20 20 20 20 20 69 66 20 28 21 68 64 6c 2e 49        if (!hdl.I
7f10: 73 49 6e 76 61 6c 69 64 20 26 26 20 21 68 64 6c  sInvalid && !hdl
7f20: 2e 49 73 43 6c 6f 73 65 64 29 0d 0a 20 20 20 20  .IsClosed)..    
7f30: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
7f40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f50: 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d     IntPtr stmt =
7f60: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
7f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7f80: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
7f90: 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de n;....       
7fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 0d               do.
7fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
7fc0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
7fd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7fe0: 73 74 6d 74 20 3d 20 55 6e 73 61 66 65 4e 61 74  stmt = UnsafeNat
7ff0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
8000: 65 33 5f 6e 65 78 74 5f 73 74 6d 74 28 64 62 2c  e3_next_stmt(db,
8010: 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20   stmt);..       
8020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8030: 20 69 66 20 28 73 74 6d 74 20 21 3d 20 49 6e 74   if (stmt != Int
8040: 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
8070: 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
8080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8090: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
80a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
80b0: 73 71 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e  sqlite3_reset_in
80c0: 74 65 72 6f 70 28 73 74 6d 74 29 3b 0d 0a 23 65  terop(stmt);..#e
80d0: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
80e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
80f0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
8100: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
8110: 5f 72 65 73 65 74 28 73 74 6d 74 29 3b 0d 0a 23  _reset(stmt);..#
8120: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
8130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
8140: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8150: 20 20 20 20 20 20 7d 20 77 68 69 6c 65 20 28 73        } while (s
8160: 74 6d 74 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  tmt != IntPtr.Ze
8170: 72 6f 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ro);....        
8180: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a              //..
8190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81a0: 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 73 20      // NOTE: Is 
81b0: 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 4e 4f  a transaction NO
81c0: 54 20 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65  T pending on the
81d0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 3f 0d 0a 20 20   connection?..  
81e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
81f0: 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
8200: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 49 73            if (Is
8210: 41 75 74 6f 63 6f 6d 6d 69 74 28 68 64 6c 2c 20  Autocommit(hdl, 
8220: 64 62 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20  db))..          
8230: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8240: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8250: 20 20 20 20 20 72 65 73 75 6c 74 20 3d 20 74 72       result = tr
8260: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
8270: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8280: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8290: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
82a0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
82b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82c0: 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e       n = UnsafeN
82d0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
82e0: 69 74 65 33 5f 65 78 65 63 28 0d 0a 20 20 20 20  ite3_exec(..    
82f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8300: 20 20 20 20 20 20 20 20 64 62 2c 20 54 6f 55 54          db, ToUT
8310: 46 38 28 22 52 4f 4c 4c 42 41 43 4b 22 29 2c 20  F8("ROLLBACK"), 
8320: 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 49 6e 74  IntPtr.Zero, Int
8330: 50 74 72 2e 5a 65 72 6f 2c 0d 0a 20 20 20 20 20  Ptr.Zero,..     
8340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8350: 20 20 20 20 20 20 20 6f 75 74 20 73 74 6d 74 29         out stmt)
8360: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
8380: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
8390: 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20  rCode.Ok)..     
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83b0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
83c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
83d0: 20 20 72 65 73 75 6c 74 20 3d 20 74 72 75 65 3b    result = true;
83e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
83f0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8410: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 63 61       else if (ca
8420: 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 20 20 20  nThrow)..       
8430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8440: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8460: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
8470: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
8480: 4c 61 73 74 45 72 72 6f 72 28 68 64 6c 2c 20 64  LastError(hdl, d
8490: 62 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  b));..          
84a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
84b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
84c0: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
84d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
84e0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
84f0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 47 43 2e    }..        GC.
8500: 4b 65 65 70 41 6c 69 76 65 28 68 64 6c 29 3b 0d  KeepAlive(hdl);.
8510: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
8520: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a  result;..    }..
8530: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
8540: 74 61 74 69 63 20 62 6f 6f 6c 20 49 73 41 75 74  tatic bool IsAut
8550: 6f 63 6f 6d 6d 69 74 28 53 51 4c 69 74 65 43 6f  ocommit(SQLiteCo
8560: 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 68  nnectionHandle h
8570: 64 6c 2c 20 49 6e 74 50 74 72 20 64 62 29 0d 0a  dl, IntPtr db)..
8580: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
8590: 66 20 28 28 68 64 6c 20 3d 3d 20 6e 75 6c 6c 29  f ((hdl == null)
85a0: 20 7c 7c 20 28 64 62 20 3d 3d 20 49 6e 74 50 74   || (db == IntPt
85b0: 72 2e 5a 65 72 6f 29 29 20 72 65 74 75 72 6e 20  r.Zero)) return 
85c0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
85d0: 20 20 62 6f 6f 6c 20 72 65 73 75 6c 74 20 3d 20    bool result = 
85e0: 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  false;....      
85f0: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8600: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
8610: 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20   do nothing...  
8620: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
8630: 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45   finally /* NOTE
8640: 3a 20 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29  : Thread.Abort()
8650: 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d   protection. */.
8660: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
8670: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
8680: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
8690: 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 68 64 6c         lock (hdl
86a0: 2e 73 79 6e 63 52 6f 6f 74 29 0d 0a 23 65 6c 73  .syncRoot)..#els
86b0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  e..            l
86c0: 6f 63 6b 20 28 68 64 6c 29 0d 0a 23 65 6e 64 69  ock (hdl)..#endi
86d0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  f..            {
86e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
86f0: 20 20 69 66 20 28 21 68 64 6c 2e 49 73 49 6e 76    if (!hdl.IsInv
8700: 61 6c 69 64 20 26 26 20 21 68 64 6c 2e 49 73 43  alid && !hdl.IsC
8710: 6c 6f 73 65 64 29 0d 0a 20 20 20 20 20 20 20 20  losed)..        
8720: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
8730: 6c 74 20 3d 20 28 55 6e 73 61 66 65 4e 61 74 69  lt = (UnsafeNati
8740: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
8750: 33 5f 67 65 74 5f 61 75 74 6f 63 6f 6d 6d 69 74  3_get_autocommit
8760: 28 64 62 29 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  (db) == 1);..   
8770: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8780: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 47      }..        G
8790: 43 2e 4b 65 65 70 41 6c 69 76 65 28 68 64 6c 29  C.KeepAlive(hdl)
87a0: 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e 72 65 61  ; /* NOTE: Unrea
87b0: 63 68 61 62 6c 65 20 63 6f 64 65 2e 20 2a 2f 0d  chable code. */.
87c0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
87d0: 72 65 73 75 6c 74 3b 0d 0a 20 20 20 20 7d 0d 0a  result;..    }..
87e0: 20 20 7d 0d 0a 0d 0a 20 20 69 6e 74 65 72 6e 61    }....  interna
87f0: 6c 20 69 6e 74 65 72 66 61 63 65 20 49 53 51 4c  l interface ISQL
8800: 69 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69  iteSchemaExtensi
8810: 6f 6e 73 0d 0a 20 20 7b 0d 0a 20 20 20 20 76 6f  ons..  {..    vo
8820: 69 64 20 42 75 69 6c 64 54 65 6d 70 53 63 68 65  id BuildTempSche
8830: 6d 61 28 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  ma(SQLiteConnect
8840: 69 6f 6e 20 63 6e 6e 29 3b 0d 0a 20 20 7d 0d 0a  ion cnn);..  }..
8850: 0d 0a 20 20 5b 46 6c 61 67 73 5d 0d 0a 20 20 69  ..  [Flags]..  i
8860: 6e 74 65 72 6e 61 6c 20 65 6e 75 6d 20 53 51 4c  nternal enum SQL
8870: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
8880: 0d 0a 20 20 7b 0d 0a 20 20 20 20 4e 6f 6e 65 20  ..  {..    None 
8890: 3d 20 30 2c 0d 0a 20 20 20 20 52 65 61 64 4f 6e  = 0,..    ReadOn
88a0: 6c 79 20 3d 20 30 78 30 31 2c 0d 0a 20 20 20 20  ly = 0x01,..    
88b0: 52 65 61 64 57 72 69 74 65 20 3d 20 30 78 30 32  ReadWrite = 0x02
88c0: 2c 0d 0a 20 20 20 20 43 72 65 61 74 65 20 3d 20  ,..    Create = 
88d0: 30 78 30 34 2c 0d 0a 20 20 20 20 55 72 69 20 3d  0x04,..    Uri =
88e0: 20 30 78 34 30 2c 0d 0a 20 20 20 20 53 68 61 72   0x40,..    Shar
88f0: 65 64 43 61 63 68 65 20 3d 20 30 78 30 31 30 30  edCache = 0x0100
8900: 30 30 30 30 2c 0d 0a 20 20 20 20 44 65 66 61 75  0000,..    Defau
8910: 6c 74 20 3d 20 30 78 30 36 2c 0d 0a 20 20 7d 0d  lt = 0x06,..  }.
8920: 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  ...  /// <summar
8930: 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 65 20 65 78  y>..  /// The ex
8940: 74 72 61 20 62 65 68 61 76 69 6f 72 61 6c 20 66  tra behavioral f
8950: 6c 61 67 73 20 74 68 61 74 20 63 61 6e 20 62 65  lags that can be
8960: 20 61 70 70 6c 69 65 64 20 74 6f 20 61 20 63 6f   applied to a co
8970: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 2f 2f 2f  nnection...  ///
8980: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 5b   </summary>..  [
8990: 46 6c 61 67 73 28 29 5d 0d 0a 20 20 70 75 62 6c  Flags()]..  publ
89a0: 69 63 20 65 6e 75 6d 20 53 51 4c 69 74 65 43 6f  ic enum SQLiteCo
89b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 0d 0a 20  nnectionFlags.. 
89c0: 20 7b 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73   {..      /// <s
89d0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f  ummary>..      /
89e0: 2f 2f 20 4e 6f 20 65 78 74 72 61 20 66 6c 61 67  // No extra flag
89f0: 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  s...      /// </
8a00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8a10: 4e 6f 6e 65 20 3d 20 30 78 30 2c 0d 0a 0d 0a 20  None = 0x0,.... 
8a20: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
8a30: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e  y>..      /// En
8a40: 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20  able logging of 
8a50: 61 6c 6c 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  all SQL statemen
8a60: 74 73 20 74 6f 20 62 65 20 70 72 65 70 61 72 65  ts to be prepare
8a70: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f  d...      /// </
8a80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8a90: 4c 6f 67 50 72 65 70 61 72 65 20 3d 20 30 78 31  LogPrepare = 0x1
8aa0: 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c  ,....      /// <
8ab0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20  summary>..      
8ac0: 2f 2f 2f 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69  /// Enable loggi
8ad0: 6e 67 20 6f 66 20 61 6c 6c 20 62 6f 75 6e 64 20  ng of all bound 
8ae0: 70 61 72 61 6d 65 74 65 72 20 74 79 70 65 73 20  parameter types 
8af0: 61 6e 64 20 72 61 77 20 76 61 6c 75 65 73 2e 0d  and raw values..
8b00: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
8b10: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67  mary>..      Log
8b20: 50 72 65 42 69 6e 64 20 3d 20 30 78 32 2c 0d 0a  PreBind = 0x2,..
8b30: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
8b40: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
8b50: 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20   Enable logging 
8b60: 6f 66 20 61 6c 6c 20 62 6f 75 6e 64 20 70 61 72  of all bound par
8b70: 61 6d 65 74 65 72 20 73 74 72 6f 6e 67 6c 79 20  ameter strongly 
8b80: 74 79 70 65 64 20 76 61 6c 75 65 73 2e 0d 0a 20  typed values... 
8b90: 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61       /// </summa
8ba0: 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f 67 42 69  ry>..      LogBi
8bb0: 6e 64 20 3d 20 30 78 34 2c 0d 0a 0d 0a 20 20 20  nd = 0x4,....   
8bc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8bd0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61 62  ..      /// Enab
8be0: 6c 65 20 6c 6f 67 67 69 6e 67 20 6f 66 20 61 6c  le logging of al
8bf0: 6c 20 65 78 63 65 70 74 69 6f 6e 73 20 63 61 75  l exceptions cau
8c00: 67 68 74 20 66 72 6f 6d 20 75 73 65 72 2d 70 72  ght from user-pr
8c10: 6f 76 69 64 65 64 0d 0a 20 20 20 20 20 20 2f 2f  ovided..      //
8c20: 2f 20 6d 61 6e 61 67 65 64 20 63 6f 64 65 20 63  / managed code c
8c30: 61 6c 6c 65 64 20 66 72 6f 6d 20 6e 61 74 69 76  alled from nativ
8c40: 65 20 63 6f 64 65 20 76 69 61 20 64 65 6c 65 67  e code via deleg
8c50: 61 74 65 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ates...      ///
8c60: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8c70: 20 20 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78     LogCallbackEx
8c80: 63 65 70 74 69 6f 6e 20 3d 20 30 78 38 2c 0d 0a  ception = 0x8,..
8c90: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
8ca0: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
8cb0: 20 45 6e 61 62 6c 65 20 6c 6f 67 67 69 6e 67 20   Enable logging 
8cc0: 6f 66 20 62 61 63 6b 75 70 20 41 50 49 20 65 72  of backup API er
8cd0: 72 6f 72 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  rors...      ///
8ce0: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8cf0: 20 20 20 4c 6f 67 42 61 63 6b 75 70 20 3d 20 30     LogBackup = 0
8d00: 78 31 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  x10,....      //
8d10: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
8d20: 20 20 20 2f 2f 2f 20 53 6b 69 70 20 61 64 64 69     /// Skip addi
8d30: 6e 67 20 74 68 65 20 65 78 74 65 6e 73 69 6f 6e  ng the extension
8d40: 20 66 75 6e 63 74 69 6f 6e 73 20 70 72 6f 76 69   functions provi
8d50: 64 65 64 20 62 79 20 74 68 65 20 6e 61 74 69 76  ded by the nativ
8d60: 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 69 6e 74  e..      /// int
8d70: 65 72 6f 70 20 61 73 73 65 6d 62 6c 79 2e 0d 0a  erop assembly...
8d80: 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d        /// </summ
8d90: 61 72 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 45 78  ary>..      NoEx
8da0: 74 65 6e 73 69 6f 6e 46 75 6e 63 74 69 6f 6e 73  tensionFunctions
8db0: 20 3d 20 30 78 32 30 2c 0d 0a 0d 0a 20 20 20 20   = 0x20,....    
8dc0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8dd0: 0a 20 20 20 20 20 20 2f 2f 2f 20 57 68 65 6e 20  .      /// When 
8de0: 62 69 6e 64 69 6e 67 20 70 61 72 61 6d 65 74 65  binding paramete
8df0: 72 20 76 61 6c 75 65 73 20 77 69 74 68 20 74 68  r values with th
8e00: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 55 49 6e  e <see cref="UIn
8e10: 74 33 32 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f  t32" />..      /
8e20: 2f 2f 20 74 79 70 65 2c 20 75 73 65 20 74 68 65  // type, use the
8e30: 20 69 6e 74 65 72 6f 70 20 6d 65 74 68 6f 64 20   interop method 
8e40: 74 68 61 74 20 61 63 63 65 70 74 73 20 61 6e 20  that accepts an 
8e50: 3c 73 65 65 20 63 72 65 66 3d 22 49 6e 74 36 34  <see cref="Int64
8e60: 22 20 2f 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  " />..      /// 
8e70: 76 61 6c 75 65 2e 0d 0a 20 20 20 20 20 20 2f 2f  value...      //
8e80: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
8e90: 20 20 20 20 42 69 6e 64 55 49 6e 74 33 32 41 73      BindUInt32As
8ea0: 49 6e 74 36 34 20 3d 20 30 78 34 30 2c 0d 0a 0d  Int64 = 0x40,...
8eb0: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  .      /// <summ
8ec0: 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  ary>..      /// 
8ed0: 57 68 65 6e 20 62 69 6e 64 69 6e 67 20 70 61 72  When binding par
8ee0: 61 6d 65 74 65 72 20 76 61 6c 75 65 73 2c 20 61  ameter values, a
8ef0: 6c 77 61 79 73 20 62 69 6e 64 20 74 68 65 6d 20  lways bind them 
8f00: 61 73 20 74 68 6f 75 67 68 20 74 68 65 79 20 77  as though they w
8f10: 65 72 65 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 70  ere..      /// p
8f20: 6c 61 69 6e 20 74 65 78 74 20 28 69 2e 65 2e 20  lain text (i.e. 
8f30: 6e 6f 20 6e 75 6d 65 72 69 63 2c 20 64 61 74 65  no numeric, date
8f40: 2f 74 69 6d 65 2c 20 6f 72 20 6f 74 68 65 72 20  /time, or other 
8f50: 63 6f 6e 76 65 72 73 69 6f 6e 73 20 73 68 6f 75  conversions shou
8f60: 6c 64 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 62 65  ld..      /// be
8f70: 20 61 74 74 65 6d 70 74 65 64 29 2e 0d 0a 20 20   attempted)...  
8f80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
8f90: 79 3e 0d 0a 20 20 20 20 20 20 42 69 6e 64 41 6c  y>..      BindAl
8fa0: 6c 41 73 54 65 78 74 20 3d 20 30 78 38 30 2c 0d  lAsText = 0x80,.
8fb0: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
8fc0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
8fd0: 2f 20 57 68 65 6e 20 72 65 74 75 72 6e 69 6e 67  / When returning
8fe0: 20 63 6f 6c 75 6d 6e 20 76 61 6c 75 65 73 2c 20   column values, 
8ff0: 61 6c 77 61 79 73 20 72 65 74 75 72 6e 20 74 68  always return th
9000: 65 6d 20 61 73 20 74 68 6f 75 67 68 20 74 68 65  em as though the
9010: 79 20 77 65 72 65 0d 0a 20 20 20 20 20 20 2f 2f  y were..      //
9020: 2f 20 70 6c 61 69 6e 20 74 65 78 74 20 28 69 2e  / plain text (i.
9030: 65 2e 20 6e 6f 20 6e 75 6d 65 72 69 63 2c 20 64  e. no numeric, d
9040: 61 74 65 2f 74 69 6d 65 2c 20 6f 72 20 6f 74 68  ate/time, or oth
9050: 65 72 20 63 6f 6e 76 65 72 73 69 6f 6e 73 20 73  er conversions s
9060: 68 6f 75 6c 64 0d 0a 20 20 20 20 20 20 2f 2f 2f  hould..      ///
9070: 20 62 65 20 61 74 74 65 6d 70 74 65 64 29 2e 0d   be attempted)..
9080: 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  .      /// </sum
9090: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 47 65 74  mary>..      Get
90a0: 41 6c 6c 41 73 54 65 78 74 20 3d 20 30 78 31 30  AllAsText = 0x10
90b0: 30 2c 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  0,....      /// 
90c0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20  <summary>..     
90d0: 20 2f 2f 2f 20 50 72 65 76 65 6e 74 20 74 68 69   /// Prevent thi
90e0: 73 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  s <see cref="SQL
90f0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20 2f  iteConnection" /
9100: 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e 63  > object instanc
9110: 65 20 66 72 6f 6d 0d 0a 20 20 20 20 20 20 2f 2f  e from..      //
9120: 2f 20 6c 6f 61 64 69 6e 67 20 65 78 74 65 6e 73  / loading extens
9130: 69 6f 6e 73 2e 0d 0a 20 20 20 20 20 20 2f 2f 2f  ions...      ///
9140: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
9150: 20 20 20 4e 6f 4c 6f 61 64 45 78 74 65 6e 73 69     NoLoadExtensi
9160: 6f 6e 20 3d 20 30 78 32 30 30 2c 0d 0a 0d 0a 20  on = 0x200,.... 
9170: 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72       /// <summar
9180: 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 50 72  y>..      /// Pr
9190: 65 76 65 6e 74 20 74 68 69 73 20 3c 73 65 65 20  event this <see 
91a0: 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e  cref="SQLiteConn
91b0: 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63  ection" /> objec
91c0: 74 20 69 6e 73 74 61 6e 63 65 20 66 72 6f 6d 0d  t instance from.
91d0: 0a 20 20 20 20 20 20 2f 2f 2f 20 63 72 65 61 74  .      /// creat
91e0: 69 6e 67 20 76 69 72 74 75 61 6c 20 74 61 62 6c  ing virtual tabl
91f0: 65 20 6d 6f 64 75 6c 65 73 2e 0d 0a 20 20 20 20  e modules...    
9200: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9210: 0d 0a 20 20 20 20 20 20 4e 6f 43 72 65 61 74 65  ..      NoCreate
9220: 4d 6f 64 75 6c 65 20 3d 20 30 78 34 30 30 2c 0d  Module = 0x400,.
9230: 0a 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75  ...      /// <su
9240: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f  mmary>..      //
9250: 2f 20 53 6b 69 70 20 61 64 64 69 6e 67 20 74 68  / Skip adding th
9260: 65 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e 73 20  e any functions 
9270: 70 72 6f 76 69 64 65 64 20 62 79 20 6f 74 68 65  provided by othe
9280: 72 20 6d 61 6e 61 67 65 64 20 61 73 73 65 6d 62  r managed assemb
9290: 6c 69 65 73 0d 0a 20 20 20 20 20 20 2f 2f 2f 20  lies..      /// 
92a0: 77 68 65 6e 20 6f 70 65 6e 69 6e 67 20 74 68 65  when opening the
92b0: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
92c0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
92d0: 79 3e 0d 0a 20 20 20 20 20 20 4e 6f 46 75 6e 63  y>..      NoFunc
92e0: 74 69 6f 6e 73 20 3d 20 30 78 38 30 30 2c 0d 0a  tions = 0x800,..
92f0: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ..      /// <sum
9300: 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f  mary>..      ///
9310: 20 57 68 65 6e 20 62 69 6e 64 69 6e 67 20 61 6e   When binding an
9320: 64 20 72 65 74 75 72 6e 69 6e 67 20 63 6f 6c 75  d returning colu
9330: 6d 6e 20 76 61 6c 75 65 73 2c 20 61 6c 77 61 79  mn values, alway
9340: 73 20 74 72 65 61 74 20 74 68 65 6d 20 61 73 20  s treat them as 
9350: 74 68 6f 75 67 68 0d 0a 20 20 20 20 20 20 2f 2f  though..      //
9360: 2f 20 74 68 65 79 20 77 65 72 65 20 70 6c 61 69  / they were plai
9370: 6e 20 74 65 78 74 20 28 69 2e 65 2e 20 6e 6f 20  n text (i.e. no 
9380: 6e 75 6d 65 72 69 63 2c 20 64 61 74 65 2f 74 69  numeric, date/ti
9390: 6d 65 2c 20 6f 72 20 6f 74 68 65 72 20 63 6f 6e  me, or other con
93a0: 76 65 72 73 69 6f 6e 73 0d 0a 20 20 20 20 20 20  versions..      
93b0: 2f 2f 2f 20 73 68 6f 75 6c 64 20 62 65 20 61 74  /// should be at
93c0: 74 65 6d 70 74 65 64 29 2e 0d 0a 20 20 20 20 20  tempted)...     
93d0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
93e0: 0a 20 20 20 20 20 20 42 69 6e 64 41 6e 64 47 65  .      BindAndGe
93f0: 74 41 6c 6c 41 73 54 65 78 74 20 3d 20 42 69 6e  tAllAsText = Bin
9400: 64 41 6c 6c 41 73 54 65 78 74 20 7c 20 47 65 74  dAllAsText | Get
9410: 41 6c 6c 41 73 54 65 78 74 2c 0d 0a 0d 0a 20 20  AllAsText,....  
9420: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9430: 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 45 6e 61  >..      /// Ena
9440: 62 6c 65 20 61 6c 6c 20 6c 6f 67 67 69 6e 67 2e  ble all logging.
9450: 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  ..      /// </su
9460: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 20 20 4c 6f  mmary>..      Lo
9470: 67 41 6c 6c 20 3d 20 4c 6f 67 50 72 65 70 61 72  gAll = LogPrepar
9480: 65 20 7c 20 4c 6f 67 50 72 65 42 69 6e 64 20 7c  e | LogPreBind |
9490: 20 4c 6f 67 42 69 6e 64 20 7c 0d 0a 20 20 20 20   LogBind |..    
94a0: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 43 61             LogCa
94b0: 6c 6c 62 61 63 6b 45 78 63 65 70 74 69 6f 6e 20  llbackException 
94c0: 7c 20 4c 6f 67 42 61 63 6b 75 70 2c 0d 0a 0d 0a  | LogBackup,....
94d0: 20 20 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61        /// <summa
94e0: 72 79 3e 0d 0a 20 20 20 20 20 20 2f 2f 2f 20 54  ry>..      /// T
94f0: 68 65 20 64 65 66 61 75 6c 74 20 65 78 74 72 61  he default extra
9500: 20 66 6c 61 67 73 20 66 6f 72 20 6e 65 77 20 63   flags for new c
9510: 6f 6e 6e 65 63 74 69 6f 6e 73 2e 0d 0a 20 20 20  onnections...   
9520: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
9530: 3e 0d 0a 20 20 20 20 20 20 44 65 66 61 75 6c 74  >..      Default
9540: 20 3d 20 4c 6f 67 43 61 6c 6c 62 61 63 6b 45 78   = LogCallbackEx
9550: 63 65 70 74 69 6f 6e 0d 0a 20 20 7d 0d 0a 0d 0a  ception..  }....
9560: 20 20 2f 2f 20 54 68 65 73 65 20 61 72 65 20 74    // These are t
9570: 68 65 20 6f 70 74 69 6f 6e 73 20 74 6f 20 74 68  he options to th
9580: 65 20 69 6e 74 65 72 6e 61 6c 20 73 71 6c 69 74  e internal sqlit
9590: 65 33 5f 63 6f 6e 66 69 67 20 63 61 6c 6c 2e 0d  e3_config call..
95a0: 0a 20 20 69 6e 74 65 72 6e 61 6c 20 65 6e 75 6d  .  internal enum
95b0: 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73   SQLiteConfigOps
95c0: 45 6e 75 6d 0d 0a 20 20 7b 0d 0a 20 20 20 20 53  Enum..  {..    S
95d0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4e 4f 4e  QLITE_CONFIG_NON
95e0: 45 20 3d 20 30 2c 20 2f 2f 20 6e 69 6c 20 0d 0a  E = 0, // nil ..
95f0: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
9600: 47 5f 53 49 4e 47 4c 45 54 48 52 45 41 44 20 3d  G_SINGLETHREAD =
9610: 20 31 2c 20 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20   1, // nil ..   
9620: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d   SQLITE_CONFIG_M
9630: 55 4c 54 49 54 48 52 45 41 44 20 3d 20 32 2c 20  ULTITHREAD = 2, 
9640: 2f 2f 20 6e 69 6c 20 0d 0a 20 20 20 20 53 51 4c  // nil ..    SQL
9650: 49 54 45 5f 43 4f 4e 46 49 47 5f 53 45 52 49 41  ITE_CONFIG_SERIA
9660: 4c 49 5a 45 44 20 3d 20 33 2c 20 2f 2f 20 6e 69  LIZED = 3, // ni
9670: 6c 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  l ..    SQLITE_C
9680: 4f 4e 46 49 47 5f 4d 41 4c 4c 4f 43 20 3d 20 34  ONFIG_MALLOC = 4
9690: 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 65 6d  , // sqlite3_mem
96a0: 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20  _methods* ..    
96b0: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45  SQLITE_CONFIG_GE
96c0: 54 4d 41 4c 4c 4f 43 20 3d 20 35 2c 20 2f 2f 20  TMALLOC = 5, // 
96d0: 73 71 6c 69 74 65 33 5f 6d 65 6d 5f 6d 65 74 68  sqlite3_mem_meth
96e0: 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49 54  ods* ..    SQLIT
96f0: 45 5f 43 4f 4e 46 49 47 5f 53 43 52 41 54 43 48  E_CONFIG_SCRATCH
9700: 20 3d 20 36 2c 20 2f 2f 20 76 6f 69 64 2a 2c 20   = 6, // void*, 
9710: 69 6e 74 20 73 7a 2c 20 69 6e 74 20 4e 20 0d 0a  int sz, int N ..
9720: 20 20 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49      SQLITE_CONFI
9730: 47 5f 50 41 47 45 43 41 43 48 45 20 3d 20 37 2c  G_PAGECACHE = 7,
9740: 20 2f 2f 20 76 6f 69 64 2a 2c 20 69 6e 74 20 73   // void*, int s
9750: 7a 2c 20 69 6e 74 20 4e 20 0d 0a 20 20 20 20 53  z, int N ..    S
9760: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 48 45 41  QLITE_CONFIG_HEA
9770: 50 20 3d 20 38 2c 20 2f 2f 20 76 6f 69 64 2a 2c  P = 8, // void*,
9780: 20 69 6e 74 20 6e 42 79 74 65 2c 20 69 6e 74 20   int nByte, int 
9790: 6d 69 6e 20 0d 0a 20 20 20 20 53 51 4c 49 54 45  min ..    SQLITE
97a0: 5f 43 4f 4e 46 49 47 5f 4d 45 4d 53 54 41 54 55  _CONFIG_MEMSTATU
97b0: 53 20 3d 20 39 2c 20 2f 2f 20 62 6f 6f 6c 65 61  S = 9, // boolea
97c0: 6e 20 0d 0a 20 20 20 20 53 51 4c 49 54 45 5f 43  n ..    SQLITE_C
97d0: 4f 4e 46 49 47 5f 4d 55 54 45 58 20 3d 20 31 30  ONFIG_MUTEX = 10
97e0: 2c 20 2f 2f 20 73 71 6c 69 74 65 33 5f 6d 75 74  , // sqlite3_mut
97f0: 65 78 5f 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20  ex_methods* ..  
9800: 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
9810: 47 45 54 4d 55 54 45 58 20 3d 20 31 31 2c 20 2f  GETMUTEX = 11, /
9820: 2f 20 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f  / sqlite3_mutex_
9830: 6d 65 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20 2f  methods* ..    /
9840: 2f 20 70 72 65 76 69 6f 75 73 6c 79 20 53 51 4c  / previously SQL
9850: 49 54 45 5f 43 4f 4e 46 49 47 5f 43 48 55 4e 4b  ITE_CONFIG_CHUNK
9860: 41 4c 4c 4f 43 20 31 32 20 77 68 69 63 68 20 69  ALLOC 12 which i
9870: 73 20 6e 6f 77 20 75 6e 75 73 65 64 0d 0a 20 20  s now unused..  
9880: 20 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f    SQLITE_CONFIG_
9890: 4c 4f 4f 4b 41 53 49 44 45 20 3d 20 31 33 2c 20  LOOKASIDE = 13, 
98a0: 2f 2f 20 69 6e 74 20 69 6e 74 20 0d 0a 20 20 20  // int int ..   
98b0: 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 50   SQLITE_CONFIG_P
98c0: 43 41 43 48 45 20 3d 20 31 34 2c 20 2f 2f 20 73  CACHE = 14, // s
98d0: 71 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65  qlite3_pcache_me
98e0: 74 68 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c  thods* ..    SQL
98f0: 49 54 45 5f 43 4f 4e 46 49 47 5f 47 45 54 50 43  ITE_CONFIG_GETPC
9900: 41 43 48 45 20 3d 20 31 35 2c 20 2f 2f 20 73 71  ACHE = 15, // sq
9910: 6c 69 74 65 33 5f 70 63 61 63 68 65 5f 6d 65 74  lite3_pcache_met
9920: 68 6f 64 73 2a 20 0d 0a 20 20 20 20 53 51 4c 49  hods* ..    SQLI
9930: 54 45 5f 43 4f 4e 46 49 47 5f 4c 4f 47 20 3d 20  TE_CONFIG_LOG = 
9940: 31 36 2c 20 2f 2f 20 78 46 75 6e 63 2c 20 76 6f  16, // xFunc, vo
9950: 69 64 2a 20 0d 0a 20 20 7d 0d 0a 0d 0a 7d 0d 0a  id* ..  }....}..