System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 53ded52ae6561e1394b569660762ada50ca387b3:


0000: 2f 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  /***************
0010: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 0d 0a 20 2a 20 41 44  *********.. * AD
0040: 4f 2e 4e 45 54 20 32 2e 30 20 44 61 74 61 20 50  O.NET 2.0 Data P
0050: 72 6f 76 69 64 65 72 20 66 6f 72 20 53 51 4c 69  rovider for SQLi
0060: 74 65 20 56 65 72 73 69 6f 6e 20 33 2e 58 0d 0a  te Version 3.X..
0070: 20 2a 20 57 72 69 74 74 65 6e 20 62 79 20 52 6f   * Written by Ro
0080: 62 65 72 74 20 53 69 6d 70 73 6f 6e 20 28 72 6f  bert Simpson (ro
0090: 62 65 72 74 40 62 6c 61 63 6b 63 61 73 74 6c 65  bert@blackcastle
00a0: 73 6f 66 74 2e 63 6f 6d 29 0d 0a 20 2a 0d 0a 20  soft.com).. *.. 
00b0: 2a 20 52 65 6c 65 61 73 65 64 20 74 6f 20 74 68  * Released to th
00c0: 65 20 70 75 62 6c 69 63 20 64 6f 6d 61 69 6e 2c  e public domain,
00d0: 20 75 73 65 20 61 74 20 79 6f 75 72 20 6f 77 6e   use at your own
00e0: 20 72 69 73 6b 21 0d 0a 20 2a 2a 2a 2a 2a 2a 2a   risk!.. *******
00f0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0100: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0110: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0120: 2a 2f 0d 0a 0d 0a 6e 61 6d 65 73 70 61 63 65 20  */....namespace 
0130: 53 79 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69  System.Data.SQLi
0140: 74 65 0d 0a 7b 0d 0a 20 20 75 73 69 6e 67 20 53  te..{..  using S
0150: 79 73 74 65 6d 3b 0d 0a 20 20 75 73 69 6e 67 20  ystem;..  using 
0160: 53 79 73 74 65 6d 2e 43 6f 6c 6c 65 63 74 69 6f  System.Collectio
0170: 6e 73 2e 47 65 6e 65 72 69 63 3b 0d 0a 0d 0a 23  ns.Generic;....#
0180: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
0190: 32 30 20 26 26 20 28 54 52 41 43 45 5f 43 4f 4e  20 && (TRACE_CON
01a0: 4e 45 43 54 49 4f 4e 20 7c 7c 20 54 52 41 43 45  NECTION || TRACE
01b0: 5f 53 54 41 54 45 4d 45 4e 54 29 0d 0a 20 20 75  _STATEMENT)..  u
01c0: 73 69 6e 67 20 53 79 73 74 65 6d 2e 44 69 61 67  sing System.Diag
01d0: 6e 6f 73 74 69 63 73 3b 0d 0a 23 65 6e 64 69 66  nostics;..#endif
01e0: 0d 0a 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74  ....  using Syst
01f0: 65 6d 2e 47 6c 6f 62 61 6c 69 7a 61 74 69 6f 6e  em.Globalization
0200: 3b 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65  ;..  using Syste
0210: 6d 2e 52 75 6e 74 69 6d 65 2e 49 6e 74 65 72 6f  m.Runtime.Intero
0220: 70 53 65 72 76 69 63 65 73 3b 0d 0a 20 20 75 73  pServices;..  us
0230: 69 6e 67 20 53 79 73 74 65 6d 2e 54 65 78 74 3b  ing System.Text;
0240: 0d 0a 20 20 75 73 69 6e 67 20 53 79 73 74 65 6d  ..  using System
0250: 2e 54 68 72 65 61 64 69 6e 67 3b 0d 0a 0d 0a 20  .Threading;.... 
0260: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0270: 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74 68    /// This is th
0280: 65 20 6d 65 74 68 6f 64 20 73 69 67 6e 61 74 75  e method signatu
0290: 72 65 20 66 6f 72 20 74 68 65 20 53 51 4c 69 74  re for the SQLit
02a0: 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 6c  e core library l
02b0: 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 0d  ogging callback.
02c0: 0a 20 20 2f 2f 2f 20 66 75 6e 63 74 69 6f 6e 20  .  /// function 
02d0: 66 6f 72 20 75 73 65 20 77 69 74 68 20 73 71 6c  for use with sql
02e0: 69 74 65 33 5f 6c 6f 67 28 29 20 61 6e 64 20 74  ite3_log() and t
02f0: 68 65 20 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  he SQLITE_CONFIG
0300: 5f 4c 4f 47 2e 0d 0a 20 20 2f 2f 2f 0d 0a 20 20  _LOG...  ///..  
0310: 2f 2f 2f 20 57 41 52 4e 49 4e 47 3a 20 54 68 69  /// WARNING: Thi
0320: 73 20 64 65 6c 65 67 61 74 65 20 69 73 20 75 73  s delegate is us
0330: 65 64 20 6d 6f 72 65 2d 6f 72 2d 6c 65 73 73 20  ed more-or-less 
0340: 64 69 72 65 63 74 6c 79 20 62 79 20 6e 61 74 69  directly by nati
0350: 76 65 20 63 6f 64 65 2c 20 64 6f 0d 0a 20 20 2f  ve code, do..  /
0360: 2f 2f 20 20 20 20 20 20 20 20 20 20 6e 6f 74 20  //          not 
0370: 6d 6f 64 69 66 79 20 69 74 73 20 74 79 70 65 20  modify its type 
0380: 73 69 67 6e 61 74 75 72 65 2e 0d 0a 20 20 2f 2f  signature...  //
0390: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
03a0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
03b0: 22 70 55 73 65 72 44 61 74 61 22 3e 0d 0a 20 20  "pUserData">..  
03c0: 2f 2f 2f 20 54 68 65 20 65 78 74 72 61 20 64 61  /// The extra da
03d0: 74 61 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  ta associated wi
03e0: 74 68 20 74 68 69 73 20 6d 65 73 73 61 67 65 2c  th this message,
03f0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 2f 2f 2f 20   if any...  /// 
0400: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 2f 2f 2f 20  </param>..  /// 
0410: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72  <param name="err
0420: 6f 72 43 6f 64 65 22 3e 0d 0a 20 20 2f 2f 2f 20  orCode">..  /// 
0430: 54 68 65 20 65 72 72 6f 72 20 63 6f 64 65 20 61  The error code a
0440: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
0450: 68 69 73 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20  his message...  
0460: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
0470: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
0480: 22 70 4d 65 73 73 61 67 65 22 3e 0d 0a 20 20 2f  "pMessage">..  /
0490: 2f 2f 20 54 68 65 20 6d 65 73 73 61 67 65 20 73  // The message s
04a0: 74 72 69 6e 67 20 74 6f 20 62 65 20 6c 6f 67 67  tring to be logg
04b0: 65 64 2e 0d 0a 20 20 2f 2f 2f 20 3c 2f 70 61 72  ed...  /// </par
04c0: 61 6d 3e 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  am>..#if !PLATFO
04d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
04e0: 4f 52 4b 0d 0a 20 20 5b 55 6e 6d 61 6e 61 67 65  ORK..  [Unmanage
04f0: 64 46 75 6e 63 74 69 6f 6e 50 6f 69 6e 74 65 72  dFunctionPointer
0500: 28 43 61 6c 6c 69 6e 67 43 6f 6e 76 65 6e 74 69  (CallingConventi
0510: 6f 6e 2e 43 64 65 63 6c 29 5d 0d 0a 23 65 6e 64  on.Cdecl)]..#end
0520: 69 66 0d 0a 20 20 69 6e 74 65 72 6e 61 6c 20 64  if..  internal d
0530: 65 6c 65 67 61 74 65 20 76 6f 69 64 20 53 51 4c  elegate void SQL
0540: 69 74 65 4c 6f 67 43 61 6c 6c 62 61 63 6b 28 49  iteLogCallback(I
0550: 6e 74 50 74 72 20 70 55 73 65 72 44 61 74 61 2c  ntPtr pUserData,
0560: 20 69 6e 74 20 65 72 72 6f 72 43 6f 64 65 2c 20   int errorCode, 
0570: 49 6e 74 50 74 72 20 70 4d 65 73 73 61 67 65 29  IntPtr pMessage)
0580: 3b 0d 0a 0d 0a 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ;....  /// <summ
0590: 61 72 79 3e 0d 0a 20 20 2f 2f 2f 20 54 68 69 73  ary>..  /// This
05a0: 20 63 6c 61 73 73 20 69 6d 70 6c 65 6d 65 6e 74   class implement
05b0: 73 20 53 51 4c 69 74 65 42 61 73 65 20 63 6f 6d  s SQLiteBase com
05c0: 70 6c 65 74 65 6c 79 2c 20 61 6e 64 20 69 73 20  pletely, and is 
05d0: 74 68 65 20 67 75 74 73 20 6f 66 20 74 68 65 20  the guts of the 
05e0: 63 6f 64 65 20 74 68 61 74 20 69 6e 74 65 72 6f  code that intero
05f0: 70 27 73 20 53 51 4c 69 74 65 20 77 69 74 68 20  p's SQLite with 
0600: 2e 4e 45 54 0d 0a 20 20 2f 2f 2f 20 3c 2f 73 75  .NET..  /// </su
0610: 6d 6d 61 72 79 3e 0d 0a 20 20 69 6e 74 65 72 6e  mmary>..  intern
0620: 61 6c 20 63 6c 61 73 73 20 53 51 4c 69 74 65 33  al class SQLite3
0630: 20 3a 20 53 51 4c 69 74 65 42 61 73 65 0d 0a 20   : SQLiteBase.. 
0640: 20 7b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20   {..    private 
0650: 73 74 61 74 69 63 20 6f 62 6a 65 63 74 20 73 79  static object sy
0660: 6e 63 52 6f 6f 74 20 3d 20 6e 65 77 20 6f 62 6a  ncRoot = new obj
0670: 65 63 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 2f 2f  ect();....    //
0680: 0d 0a 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54  ..    // NOTE: T
0690: 68 69 73 20 69 73 20 74 68 65 20 70 75 62 6c 69  his is the publi
06a0: 63 20 6b 65 79 20 66 6f 72 20 74 68 65 20 53 79  c key for the Sy
06b0: 73 74 65 6d 2e 44 61 74 61 2e 53 51 4c 69 74 65  stem.Data.SQLite
06c0: 20 61 73 73 65 6d 62 6c 79 2e 20 20 49 66 20 79   assembly.  If y
06d0: 6f 75 20 63 68 61 6e 67 65 20 74 68 65 0d 0a 20  ou change the.. 
06e0: 20 20 20 2f 2f 20 20 20 20 20 20 20 53 4e 4b 20     //       SNK 
06f0: 66 69 6c 65 2c 20 79 6f 75 20 77 69 6c 6c 20 6e  file, you will n
0700: 65 65 64 20 74 6f 20 63 68 61 6e 67 65 20 74 68  eed to change th
0710: 69 73 20 61 73 20 77 65 6c 6c 2e 0d 0a 20 20 20  is as well...   
0720: 20 2f 2f 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61   //..    interna
0730: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 50  l const string P
0740: 75 62 6c 69 63 4b 65 79 20 3d 0d 0a 20 20 20 20  ublicKey =..    
0750: 20 20 20 20 22 30 30 32 34 30 30 30 30 30 34 38      "00240000048
0760: 30 30 30 30 30 39 34 30 30 30 30 30 30 30 36 30  0000094000000060
0770: 32 30 30 30 30 30 30 32 34 30 30 30 30 35 32 35  2000000240000525
0780: 33 34 31 33 31 30 30 30 34 30 30 30 30 30 31 30  3413100040000010
0790: 30 30 31 30 30 30 35 61 32 38 38 64 65 35 36 38  0010005a288de568
07a0: 37 63 34 65 31 22 20 2b 0d 0a 20 20 20 20 20 20  7c4e1" +..      
07b0: 20 20 22 62 36 32 31 64 64 66 66 35 64 38 34 34    "b621ddff5d844
07c0: 37 32 37 34 31 38 39 35 36 39 39 37 66 34 37 35  727418956997f475
07d0: 65 62 38 32 39 34 32 39 65 34 31 31 61 66 66 33  eb829429e411aff3
07e0: 65 39 33 66 39 37 62 37 30 64 65 36 39 38 62 39  e93f97b70de698b9
07f0: 37 32 36 34 30 39 32 35 62 64 64 34 34 32 38 30  72640925bdd44280
0800: 64 66 30 22 20 2b 0d 0a 20 20 20 20 20 20 20 20  df0" +..        
0810: 22 61 32 35 61 38 34 33 32 36 36 39 37 33 37 30  "a25a84326697370
0820: 34 31 33 37 63 62 62 30 65 37 34 34 31 63 31 66  4137cbb0e7441c1f
0830: 65 37 63 61 65 34 65 32 34 34 30 61 65 39 31 61  e7cae4e2440ae91a
0840: 62 38 63 64 65 33 39 33 33 66 65 62 63 62 31 61  b8cde3933febcb1a
0850: 63 34 38 64 64 33 33 62 34 30 65 31 33 63 34 32  c48dd33b40e13c42
0860: 31 22 20 2b 0d 0a 20 20 20 20 20 20 20 20 22 64  1" +..        "d
0870: 38 32 31 35 63 31 38 61 34 33 34 39 61 34 33 36  8215c18a4349a436
0880: 64 64 34 39 39 65 33 63 33 38 35 63 63 36 38 33  dd499e3c385cc683
0890: 30 31 35 66 38 38 36 66 36 63 31 30 62 64 39 30  015f886f6c10bd90
08a0: 31 31 35 65 62 32 62 64 36 31 62 36 37 37 35 30  115eb2bd61b67750
08b0: 38 33 39 65 33 61 31 39 39 34 31 64 63 39 63 22  839e3a19941dc9c"
08c0: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
08d0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
08e0: 4f 52 4b 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  ORK..    interna
08f0: 6c 20 63 6f 6e 73 74 20 73 74 72 69 6e 67 20 44  l const string D
0900: 65 73 69 67 6e 65 72 56 65 72 73 69 6f 6e 20 3d  esignerVersion =
0910: 20 22 31 2e 30 2e 31 30 30 2e 30 22 3b 0d 0a 23   "1.0.100.0";..#
0920: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  endif....    ///
0930: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0940: 2f 2f 2f 20 54 68 65 20 6f 70 61 71 75 65 20 70  /// The opaque p
0950: 6f 69 6e 74 65 72 20 72 65 74 75 72 6e 65 64 20  ointer returned 
0960: 74 6f 20 75 73 20 62 79 20 74 68 65 20 73 71 6c  to us by the sql
0970: 69 74 65 20 70 72 6f 76 69 64 65 72 0d 0a 20 20  ite provider..  
0980: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
0990: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
09a0: 69 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 43  internal SQLiteC
09b0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20  onnectionHandle 
09c0: 5f 73 71 6c 3b 0d 0a 20 20 20 20 70 72 6f 74 65  _sql;..    prote
09d0: 63 74 65 64 20 73 74 72 69 6e 67 20 5f 66 69 6c  cted string _fil
09e0: 65 4e 61 6d 65 3b 0d 0a 20 20 20 20 70 72 6f 74  eName;..    prot
09f0: 65 63 74 65 64 20 53 51 4c 69 74 65 43 6f 6e 6e  ected SQLiteConn
0a00: 65 63 74 69 6f 6e 46 6c 61 67 73 20 5f 66 6c 61  ectionFlags _fla
0a10: 67 73 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  gs;..    protect
0a20: 65 64 20 62 6f 6f 6c 20 5f 75 73 65 50 6f 6f 6c  ed bool _usePool
0a30: 3b 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64  ;..    protected
0a40: 20 69 6e 74 20 5f 70 6f 6f 6c 56 65 72 73 69 6f   int _poolVersio
0a50: 6e 3b 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  n;..    private 
0a60: 69 6e 74 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74  int _cancelCount
0a70: 3b 0d 0a 0d 0a 23 69 66 20 28 4e 45 54 5f 33 35  ;....#if (NET_35
0a80: 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c 20 4e 45   || NET_40 || NE
0a90: 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34 35 31 20  T_45 || NET_451 
0aa0: 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c 20 4e 45  || NET_452 || NE
0ab0: 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34 36 31 29  T_46 || NET_461)
0ac0: 20 26 26 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f   && !PLATFORM_CO
0ad0: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
0ae0: 20 20 20 20 70 72 69 76 61 74 65 20 62 6f 6f 6c      private bool
0af0: 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61   _buildingSchema
0b00: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
0b10: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
0b20: 20 20 20 20 2f 2f 2f 20 54 68 65 20 75 73 65 72      /// The user
0b30: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
0b40: 6e 73 20 72 65 67 69 73 74 65 72 65 64 20 6f 6e  ns registered on
0b50: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
0b60: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0b70: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0b80: 74 65 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 53  ted Dictionary<S
0b90: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
0ba0: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
0bb0: 6e 63 74 69 6f 6e 3e 20 5f 66 75 6e 63 74 69 6f  nction> _functio
0bc0: 6e 73 3b 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52  ns;....#if INTER
0bd0: 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45  OP_VIRTUAL_TABLE
0be0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0bf0: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  ry>..    /// Thi
0c00: 73 20 69 73 20 74 68 65 20 6e 61 6d 65 20 6f 66  s is the name of
0c10: 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
0c20: 61 72 79 20 66 69 6c 65 20 74 68 61 74 20 63 6f  ary file that co
0c30: 6e 74 61 69 6e 73 20 74 68 65 0d 0a 20 20 20 20  ntains the..    
0c40: 2f 2f 2f 20 22 76 74 73 68 69 6d 22 20 65 78 74  /// "vtshim" ext
0c50: 65 6e 73 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d  ension [wrapper]
0c60: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
0c70: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65  mary>..    prote
0c80: 63 74 65 64 20 73 74 72 69 6e 67 20 5f 73 68 69  cted string _shi
0c90: 6d 45 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61  mExtensionFileNa
0ca0: 6d 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  me = null;....  
0cb0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0cc0: 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73  .    /// This is
0cd0: 20 74 68 65 20 66 6c 61 67 20 69 6e 64 69 63 61   the flag indica
0ce0: 74 65 20 77 68 65 74 68 65 72 20 74 68 65 20 6e  te whether the n
0cf0: 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 66 69  ative library fi
0d00: 6c 65 20 74 68 61 74 0d 0a 20 20 20 20 2f 2f 2f  le that..    ///
0d10: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 22 76   contains the "v
0d20: 74 73 68 69 6d 22 20 65 78 74 65 6e 73 69 6f 6e  tshim" extension
0d30: 20 6d 75 73 74 20 62 65 20 64 79 6e 61 6d 69 63   must be dynamic
0d40: 61 6c 6c 79 20 6c 6f 61 64 65 64 20 62 79 0d 0a  ally loaded by..
0d50: 20 20 20 20 2f 2f 2f 20 74 68 69 73 20 63 6c 61      /// this cla
0d60: 73 73 20 70 72 69 6f 72 20 74 6f 20 75 73 65 2e  ss prior to use.
0d70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0d80: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0d90: 74 65 64 20 62 6f 6f 6c 3f 20 5f 73 68 69 6d 49  ted bool? _shimI
0da0: 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 6e 75  sLoadNeeded = nu
0db0: 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ll;....    /// <
0dc0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0dd0: 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 6e 61  / This is the na
0de0: 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  me of the native
0df0: 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72   entry point for
0e00: 20 74 68 65 20 22 76 74 73 68 69 6d 22 0d 0a 20   the "vtshim".. 
0e10: 20 20 20 2f 2f 2f 20 65 78 74 65 6e 73 69 6f 6e     /// extension
0e20: 20 5b 77 72 61 70 70 65 72 5d 2e 0d 0a 20 20 20   [wrapper]...   
0e30: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
0e40: 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73  .    protected s
0e50: 74 72 69 6e 67 20 5f 73 68 69 6d 45 78 74 65 6e  tring _shimExten
0e60: 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20 3d 20 22  sionProcName = "
0e70: 73 71 6c 69 74 65 33 5f 76 74 73 68 69 6d 5f 69  sqlite3_vtshim_i
0e80: 6e 69 74 22 3b 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  nit";....    ///
0e90: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
0ea0: 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 73 20  /// The modules 
0eb0: 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
0ec0: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  is connection...
0ed0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
0ee0: 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65  y>..    protecte
0ef0: 64 20 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72  d Dictionary<str
0f00: 69 6e 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c  ing, SQLiteModul
0f10: 65 3e 20 5f 6d 6f 64 75 6c 65 73 3b 0d 0a 23 65  e> _modules;..#e
0f20: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
0f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
0f90: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
0fa0: 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 6e 73 74 72  ..    /// Constr
0fb0: 75 63 74 73 20 74 68 65 20 6f 62 6a 65 63 74 20  ucts the object 
0fc0: 75 73 65 64 20 74 6f 20 69 6e 74 65 72 61 63 74  used to interact
0fd0: 20 77 69 74 68 20 74 68 65 20 53 51 4c 69 74 65   with the SQLite
0fe0: 20 63 6f 72 65 20 6c 69 62 72 61 72 79 0d 0a 20   core library.. 
0ff0: 20 20 20 2f 2f 2f 20 75 73 69 6e 67 20 74 68 65     /// using the
1000: 20 55 54 46 2d 38 20 74 65 78 74 20 65 6e 63 6f   UTF-8 text enco
1010: 64 69 6e 67 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ding...    /// <
1020: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
1030: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1040: 66 6d 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  fmt">..    /// T
1050: 68 65 20 44 61 74 65 54 69 6d 65 20 66 6f 72 6d  he DateTime form
1060: 61 74 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  at to be used wh
1070: 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 73 74  en converting st
1080: 72 69 6e 67 20 76 61 6c 75 65 73 20 74 6f 20 61  ring values to a
1090: 0d 0a 20 20 20 20 2f 2f 2f 20 44 61 74 65 54 69  ..    /// DateTi
10a0: 6d 65 20 61 6e 64 20 62 69 6e 64 69 6e 67 20 44  me and binding D
10b0: 61 74 65 54 69 6d 65 20 70 61 72 61 6d 65 74 65  ateTime paramete
10c0: 72 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  rs...    /// </p
10d0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
10e0: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6b 69 6e 64  param name="kind
10f0: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
1100: 3c 73 65 65 20 63 72 65 66 3d 22 44 61 74 65 54  <see cref="DateT
1110: 69 6d 65 4b 69 6e 64 22 20 2f 3e 20 74 6f 20 62  imeKind" /> to b
1120: 65 20 75 73 65 64 20 77 68 65 6e 20 63 72 65 61  e used when crea
1130: 74 69 6e 67 20 44 61 74 65 54 69 6d 65 0d 0a 20  ting DateTime.. 
1140: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
1150: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
1160: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1170: 20 6e 61 6d 65 3d 22 66 6d 74 53 74 72 69 6e 67   name="fmtString
1180: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
1190: 66 6f 72 6d 61 74 20 73 74 72 69 6e 67 20 74 6f  format string to
11a0: 20 62 65 20 75 73 65 64 20 77 68 65 6e 20 70 61   be used when pa
11b0: 72 73 69 6e 67 20 61 6e 64 20 66 6f 72 6d 61 74  rsing and format
11c0: 74 69 6e 67 20 44 61 74 65 54 69 6d 65 0d 0a 20  ting DateTime.. 
11d0: 20 20 20 2f 2f 2f 20 76 61 6c 75 65 73 2e 0d 0a     /// values...
11e0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
11f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
1200: 20 6e 61 6d 65 3d 22 64 62 22 3e 0d 0a 20 20 20   name="db">..   
1210: 20 2f 2f 2f 20 54 68 65 20 6e 61 74 69 76 65 20   /// The native 
1220: 68 61 6e 64 6c 65 20 74 6f 20 62 65 20 61 73 73  handle to be ass
1230: 6f 63 69 61 74 65 64 20 77 69 74 68 20 74 68 65  ociated with the
1240: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
1250: 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  tion...    /// <
1260: 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
1270: 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
1280: 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  leName">..    //
1290: 2f 20 54 68 65 20 66 75 6c 6c 79 20 71 75 61 6c  / The fully qual
12a0: 69 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20  ified file name 
12b0: 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
12c0: 3c 70 61 72 61 6d 72 65 66 20 6e 61 6d 65 3d 22  <paramref name="
12d0: 64 62 20 22 2f 3e 2e 0d 0a 20 20 20 20 2f 2f 2f  db "/>...    ///
12e0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
12f0: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1300: 6f 77 6e 48 61 6e 64 6c 65 22 3e 0d 0a 20 20 20  ownHandle">..   
1310: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
1320: 20 74 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74   the newly creat
1330: 65 64 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  ed object instan
1340: 63 65 20 77 69 6c 6c 20 6e 65 65 64 20 74 6f 20  ce will need to 
1350: 64 69 73 70 6f 73 65 0d 0a 20 20 20 20 2f 2f 2f  dispose..    ///
1360: 20 6f 66 20 3c 70 61 72 61 6d 72 65 66 20 6e 61   of <paramref na
1370: 6d 65 3d 22 64 62 22 20 2f 3e 20 77 68 65 6e 20  me="db" /> when 
1380: 69 74 20 69 73 20 6e 6f 20 6c 6f 6e 67 65 72 20  it is no longer 
1390: 6e 65 65 64 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f  needed...    ///
13a0: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
13b0: 6e 74 65 72 6e 61 6c 20 53 51 4c 69 74 65 33 28  nternal SQLite3(
13c0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
13d0: 44 61 74 65 46 6f 72 6d 61 74 73 20 66 6d 74 2c  DateFormats fmt,
13e0: 0d 0a 20 20 20 20 20 20 20 20 44 61 74 65 54 69  ..        DateTi
13f0: 6d 65 4b 69 6e 64 20 6b 69 6e 64 2c 0d 0a 20 20  meKind kind,..  
1400: 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 6d 74        string fmt
1410: 53 74 72 69 6e 67 2c 0d 0a 20 20 20 20 20 20 20  String,..       
1420: 20 49 6e 74 50 74 72 20 64 62 2c 0d 0a 20 20 20   IntPtr db,..   
1430: 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65       string file
1440: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 62  Name,..        b
1450: 6f 6f 6c 20 6f 77 6e 48 61 6e 64 6c 65 0d 0a 20  ool ownHandle.. 
1460: 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 20 20         )..      
1470: 3a 20 62 61 73 65 28 66 6d 74 2c 20 6b 69 6e 64  : base(fmt, kind
1480: 2c 20 66 6d 74 53 74 72 69 6e 67 29 0d 0a 20 20  , fmtString)..  
1490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
14a0: 28 64 62 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  (db != IntPtr.Ze
14b0: 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  ro)..        {..
14c0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
14d0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
14e0: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62  nectionHandle(db
14f0: 2c 20 6f 77 6e 48 61 6e 64 6c 65 29 3b 0d 0a 20  , ownHandle);.. 
1500: 20 20 20 20 20 20 20 20 20 20 20 5f 66 69 6c 65             _file
1510: 4e 61 6d 65 20 3d 20 66 69 6c 65 4e 61 6d 65 3b  Name = fileName;
1520: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
1530: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
1540: 2e 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c  .OnChanged(null,
1550: 20 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45   new ConnectionE
1560: 76 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20  ventArgs(..     
1570: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
1580: 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74  eConnectionEvent
1590: 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63 61 6c  Type.NewCritical
15a0: 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d 0a 20  Handle, null,.. 
15b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e                 n
15c0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c  ull, null, null,
15d0: 20 5f 73 71 6c 2c 20 66 69 6c 65 4e 61 6d 65 2c   _sql, fileName,
15e0: 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d   new object[] {.
15f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1600: 20 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29   typeof(SQLite3)
1610: 2c 20 66 6d 74 2c 20 6b 69 6e 64 2c 20 66 6d 74  , fmt, kind, fmt
1620: 53 74 72 69 6e 67 2c 20 64 62 2c 20 66 69 6c 65  String, db, file
1630: 4e 61 6d 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  Name,..         
1640: 20 20 20 20 20 20 20 6f 77 6e 48 61 6e 64 6c 65         ownHandle
1650: 20 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d   }));..        }
1660: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1670: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1680: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1690: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
16d0: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 49 44  ..    #region ID
16e0: 69 73 70 6f 73 61 62 6c 65 20 22 50 61 74 74 65  isposable "Patte
16f0: 72 6e 22 20 4d 65 6d 62 65 72 73 0d 0a 20 20 20  rn" Members..   
1700: 20 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 64 69   private bool di
1710: 73 70 6f 73 65 64 3b 0d 0a 20 20 20 20 70 72 69  sposed;..    pri
1720: 76 61 74 65 20 76 6f 69 64 20 43 68 65 63 6b 44  vate void CheckD
1730: 69 73 70 6f 73 65 64 28 29 20 2f 2a 20 74 68 72  isposed() /* thr
1740: 6f 77 20 2a 2f 0d 0a 20 20 20 20 7b 0d 0a 23 69  ow */..    {..#i
1750: 66 20 54 48 52 4f 57 5f 4f 4e 5f 44 49 53 50 4f  f THROW_ON_DISPO
1760: 53 45 44 0d 0a 20 20 20 20 20 20 20 20 69 66 20  SED..        if 
1770: 28 64 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20  (disposed)..    
1780: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
1790: 77 20 4f 62 6a 65 63 74 44 69 73 70 6f 73 65 64  w ObjectDisposed
17a0: 45 78 63 65 70 74 69 6f 6e 28 74 79 70 65 6f 66  Exception(typeof
17b0: 28 53 51 4c 69 74 65 33 29 2e 4e 61 6d 65 29 3b  (SQLite3).Name);
17c0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
17d0: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
17e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1800: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1810: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1820: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1830: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 70 72  //////....    pr
1840: 6f 74 65 63 74 65 64 20 6f 76 65 72 72 69 64 65  otected override
1850: 20 76 6f 69 64 20 44 69 73 70 6f 73 65 28 62 6f   void Dispose(bo
1860: 6f 6c 20 64 69 73 70 6f 73 69 6e 67 29 0d 0a 20  ol disposing).. 
1870: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
1880: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
1890: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 21 64            if (!d
18a0: 69 73 70 6f 73 65 64 29 0d 0a 20 20 20 20 20 20  isposed)..      
18b0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
18c0: 20 20 20 20 20 20 20 20 20 2f 2f 69 66 20 28 64           //if (d
18d0: 69 73 70 6f 73 69 6e 67 29 0d 0a 20 20 20 20 20  isposing)..     
18e0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 7b 0d 0a             //{..
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 2f 2f 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  //    //////////
1910: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20  //////////..    
1930: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1940: 20 20 2f 2f 20 64 69 73 70 6f 73 65 20 6d 61 6e    // dispose man
1950: 61 67 65 64 20 72 65 73 6f 75 72 63 65 73 20 68  aged resources h
1960: 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20 20 20 20  ere.....        
1970: 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f          //    //
1980: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1990: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19a0: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
19b0: 20 20 20 20 2f 2f 7d 0d 0a 0d 0a 20 20 20 20 20      //}....     
19c0: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
19d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  /..             
1a00: 20 20 20 2f 2f 20 72 65 6c 65 61 73 65 20 75 6e     // release un
1a10: 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72 63 65  managed resource
1a20: 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20 20 20  s here.....     
1a30: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 2f 2f 2f             /////
1a40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a60: 2f 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  /....#if INTEROP
1a70: 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
1a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a90: 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29  DisposeModules()
1aa0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
1ab0: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 6c 6f               Clo
1ac0: 73 65 28 66 61 6c 73 65 29 3b 20 2f 2a 20 44 69  se(false); /* Di
1ad0: 73 70 6f 73 69 6e 67 2c 20 63 61 6e 6e 6f 74 20  sposing, cannot 
1ae0: 74 68 72 6f 77 2e 20 2a 2f 0d 0a 20 20 20 20 20  throw. */..     
1af0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b00: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
1b10: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
1b20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 61 73  .            bas
1b30: 65 2e 44 69 73 70 6f 73 65 28 64 69 73 70 6f 73  e.Dispose(dispos
1b40: 69 6e 67 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ing);....       
1b50: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
1b60: 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 45 76       // NOTE: Ev
1b70: 65 72 79 74 68 69 6e 67 20 73 68 6f 75 6c 64 20  erything should 
1b80: 62 65 20 66 75 6c 6c 79 20 64 69 73 70 6f 73 65  be fully dispose
1b90: 64 20 61 74 20 74 68 69 73 20 70 6f 69 6e 74 2e  d at this point.
1ba0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f  ..            //
1bb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 64 69  ..            di
1bc0: 73 70 6f 73 65 64 20 3d 20 74 72 75 65 3b 0d 0a  sposed = true;..
1bd0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
1be0: 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69 6f 6e  ..    #endregion
1bf0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f  ....    ////////
1c00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c50: 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49  ///////....#if I
1c60: 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
1c70: 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ABLE..    /// <s
1c80: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
1c90: 20 54 68 69 73 20 6d 65 74 68 6f 64 20 61 74 74   This method att
1ca0: 65 6d 70 74 73 20 74 6f 20 64 69 73 70 6f 73 65  empts to dispose
1cb0: 20 6f 66 20 61 6c 6c 20 74 68 65 20 3c 73 65 65   of all the <see
1cc0: 20 63 72 65 66 3d 22 53 51 4c 69 74 65 4d 6f 64   cref="SQLiteMod
1cd0: 75 6c 65 22 20 2f 3e 20 64 65 72 69 76 65 64 0d  ule" /> derived.
1ce0: 0a 20 20 20 20 2f 2f 2f 20 6f 62 6a 65 63 74 20  .    /// object 
1cf0: 69 6e 73 74 61 6e 63 65 73 20 63 75 72 72 65 6e  instances curren
1d00: 74 6c 79 20 61 73 73 6f 63 69 61 74 65 64 20 77  tly associated w
1d10: 69 74 68 20 74 68 65 20 6e 61 74 69 76 65 20 64  ith the native d
1d20: 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
1d30: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
1d40: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
1d50: 76 61 74 65 20 76 6f 69 64 20 44 69 73 70 6f 73  vate void Dispos
1d60: 65 4d 6f 64 75 6c 65 73 28 29 0d 0a 20 20 20 20  eModules()..    
1d70: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20  {..        //.. 
1d80: 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20         // NOTE: 
1d90: 49 66 20 61 6e 79 20 6d 6f 64 75 6c 65 73 20 77  If any modules w
1da0: 65 72 65 20 63 72 65 61 74 65 64 2c 20 61 74 74  ere created, att
1db0: 65 6d 70 74 20 74 6f 20 64 69 73 70 6f 73 65 20  empt to dispose 
1dc0: 6f 66 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20  of..        //  
1dd0: 20 20 20 20 20 74 68 65 6d 20 6e 6f 77 2e 20 20       them now.  
1de0: 54 68 69 73 20 63 6f 64 65 20 69 73 20 64 65 73  This code is des
1df0: 69 67 6e 65 64 20 74 6f 20 61 76 6f 69 64 20 74  igned to avoid t
1e00: 68 72 6f 77 69 6e 67 0d 0a 20 20 20 20 20 20 20  hrowing..       
1e10: 20 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74   //       except
1e20: 69 6f 6e 73 20 75 6e 6c 65 73 73 20 74 68 65 20  ions unless the 
1e30: 44 69 73 70 6f 73 65 20 6d 65 74 68 6f 64 20 6f  Dispose method o
1e40: 66 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a 20 20  f the module..  
1e50: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 69        //       i
1e60: 74 73 65 6c 66 20 74 68 72 6f 77 73 20 61 6e 20  tself throws an 
1e70: 65 78 63 65 70 74 69 6f 6e 2e 0d 0a 20 20 20 20  exception...    
1e80: 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20      //..        
1e90: 69 66 20 28 5f 6d 6f 64 75 6c 65 73 20 21 3d 20  if (_modules != 
1ea0: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b  null)..        {
1eb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  ..            fo
1ec0: 72 65 61 63 68 20 28 4b 65 79 56 61 6c 75 65 50  reach (KeyValueP
1ed0: 61 69 72 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69  air<string, SQLi
1ee0: 74 65 4d 6f 64 75 6c 65 3e 20 70 61 69 72 20 69  teModule> pair i
1ef0: 6e 20 5f 6d 6f 64 75 6c 65 73 29 0d 0a 20 20 20  n _modules)..   
1f00: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
1f10: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1f20: 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 20  teModule module 
1f30: 3d 20 70 61 69 72 2e 56 61 6c 75 65 3b 0d 0a 0d  = pair.Value;...
1f40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f50: 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20 6e   if (module == n
1f60: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
1f70: 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e            contin
1f80: 75 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ue;....         
1f90: 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e 44 69         module.Di
1fa0: 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20 20  spose();..      
1fb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
1fc0: 20 20 20 20 20 20 20 5f 6d 6f 64 75 6c 65 73 2e         _modules.
1fd0: 43 6c 65 61 72 28 29 3b 0d 0a 20 20 20 20 20 20  Clear();..      
1fe0: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
1ff0: 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  if....    //////
2000: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
2060: 20 2f 2f 20 49 74 20 69 73 6e 27 74 20 6e 65 63   // It isn't nec
2070: 65 73 73 61 72 79 20 74 6f 20 63 6c 65 61 6e 75  essary to cleanu
2080: 70 20 61 6e 79 20 66 75 6e 63 74 69 6f 6e 73 20  p any functions 
2090: 77 65 27 76 65 20 72 65 67 69 73 74 65 72 65 64  we've registered
20a0: 2e 20 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63  .  If the connec
20b0: 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 20 67 6f 65  tion..    // goe
20c0: 73 20 74 6f 20 74 68 65 20 70 6f 6f 6c 20 61 6e  s to the pool an
20d0: 64 20 69 73 20 72 65 73 75 72 72 65 63 74 65 64  d is resurrected
20e0: 20 6c 61 74 65 72 2c 20 72 65 2d 72 65 67 69 73   later, re-regis
20f0: 74 65 72 65 64 20 66 75 6e 63 74 69 6f 6e 73 20  tered functions 
2100: 77 69 6c 6c 20 6f 76 65 72 77 72 69 74 65 20 74  will overwrite t
2110: 68 65 0d 0a 20 20 20 20 2f 2f 20 70 72 65 76 69  he..    // previ
2120: 6f 75 73 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20  ous functions.  
2130: 54 68 65 20 53 51 4c 69 74 65 46 75 6e 63 74 69  The SQLiteFuncti
2140: 6f 6e 43 6f 6f 6b 69 65 48 61 6e 64 6c 65 20 77  onCookieHandle w
2150: 69 6c 6c 20 74 61 6b 65 20 63 61 72 65 20 6f 66  ill take care of
2160: 20 66 72 65 65 69 6e 67 20 75 6e 6d 61 6e 61 67   freeing unmanag
2170: 65 64 0d 0a 20 20 20 20 2f 2f 20 72 65 73 6f 75  ed..    // resou
2180: 72 63 65 73 20 62 65 6c 6f 6e 67 69 6e 67 20 74  rces belonging t
2190: 6f 20 74 68 65 20 70 72 65 76 69 6f 75 73 6c 79  o the previously
21a0: 2d 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63  -registered func
21b0: 74 69 6f 6e 73 2e 0d 0a 20 20 20 20 69 6e 74 65  tions...    inte
21c0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
21d0: 69 64 20 43 6c 6f 73 65 28 62 6f 6f 6c 20 63 61  id Close(bool ca
21e0: 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a  nThrow)..    {..
21f0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
2200: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 7b  = null)..      {
2210: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
2220: 21 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64 6c 65 29  !_sql.OwnHandle)
2230: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
2240: 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71               _sq
2250: 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
2260: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 3b           return;
2270: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
2280: 0a 20 20 20 20 20 20 20 20 20 20 62 6f 6f 6c 20  .          bool 
2290: 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  unbindFunctions 
22a0: 3d 20 28 28 5f 66 6c 61 67 73 20 26 20 53 51 4c  = ((_flags & SQL
22b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
22c0: 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f  gs.UnbindFunctio
22d0: 6e 73 4f 6e 43 6c 6f 73 65 29 0d 0a 20 20 20 20  nsOnClose)..    
22e0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 53              == S
22f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
2300: 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75 6e 63 74  lags.UnbindFunct
2310: 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 3b 0d 0a 0d  ionsOnClose);...
2320: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f  .          if (_
2330: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20  usePool)..      
2340: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2350: 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 42       if (SQLiteB
2360: 61 73 65 2e 52 65 73 65 74 43 6f 6e 6e 65 63 74  ase.ResetConnect
2370: 69 6f 6e 28 5f 73 71 6c 2c 20 5f 73 71 6c 2c 20  ion(_sql, _sql, 
2380: 63 61 6e 54 68 72 6f 77 29 29 0d 0a 20 20 20 20  canThrow))..    
2390: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
23a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
23b0: 66 20 28 75 6e 62 69 6e 64 46 75 6e 63 74 69 6f  f (unbindFunctio
23c0: 6e 73 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ns)..           
23d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
23f0: 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74 69  if (SQLiteFuncti
2400: 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e 63  on.UnbindAllFunc
2410: 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c 61  tions(this, _fla
2420: 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20 20  gs, false))..   
2430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2440: 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43     {..#if !NET_C
2450: 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41  OMPACT_20 && TRA
2460: 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20  CE_CONNECTION.. 
2470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2480: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
2490: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
24a0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
24b0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
24c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24d0: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
24e0: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
24f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
2510: 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20  UnbindFunctions 
2520: 28 50 6f 6f 6c 29 20 53 75 63 63 65 73 73 3a 20  (Pool) Success: 
2530: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2550: 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
2560: 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
2570: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2580: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25a0: 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20   else..         
25b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
25c0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
25d0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
25e0: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
25f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2600: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2610: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
2620: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
2630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
2650: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
2660: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
2670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2680: 20 20 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64           "Unbind
2690: 46 75 6e 63 74 69 6f 6e 73 20 28 50 6f 6f 6c 29  Functions (Pool)
26a0: 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22 2c 0d   Failure: {0}",.
26b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
26c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 48                 H
26d0: 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29  andleToString())
26e0: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
26f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2700: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20    }..           
2710: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20         }....#if 
2720: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
2730: 54 41 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20  TABLE..         
2740: 20 20 20 20 20 20 20 20 20 44 69 73 70 6f 73 65           Dispose
2750: 4d 6f 64 75 6c 65 73 28 29 3b 0d 0a 23 65 6e 64  Modules();..#end
2760: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
2770: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
2780: 6e 6e 65 63 74 69 6f 6e 50 6f 6f 6c 2e 41 64 64  nnectionPool.Add
2790: 28 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 71 6c  (_fileName, _sql
27a0: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 29 3b  , _poolVersion);
27b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
27c0: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
27d0: 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
27e0: 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
27f0: 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
2800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2810: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
2820: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65  nectionEventType
2830: 2e 43 6c 6f 73 65 64 54 6f 50 6f 6f 6c 2c 20 6e  .ClosedToPool, n
2840: 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20  ull, null,..    
2850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2860: 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73    null, null, _s
2870: 71 6c 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20 6e  ql, _fileName, n
2880: 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20  ew object[] {.. 
2890: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
28a0: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
28b0: 74 65 33 29 2c 20 63 61 6e 54 68 72 6f 77 2c 20  te3), canThrow, 
28c0: 5f 66 69 6c 65 4e 61 6d 65 2c 20 5f 70 6f 6f 6c  _fileName, _pool
28d0: 56 65 72 73 69 6f 6e 20 7d 29 29 3b 0d 0a 0d 0a  Version }));....
28e0: 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54  #if !NET_COMPACT
28f0: 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e  _20 && TRACE_CON
2900: 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20  NECTION..       
2910: 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
2920: 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
2930: 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
2940: 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
2950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75                Cu
2960: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
2970: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
2980: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2990: 20 22 43 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 53   "Close (Pool) S
29a0: 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20  uccess: {0}",.. 
29b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29c0: 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
29d0: 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
29e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
29f0: 7d 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  }..#if !NET_COMP
2a00: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2a10: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2a20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
2a40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2a50: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
2a60: 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ne(HelperMethods
2a70: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
2a80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2a90: 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66        CultureInf
2aa0: 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65  o.CurrentCulture
2ab0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2ac0: 20 20 20 20 20 20 20 20 20 22 43 6c 6f 73 65 20           "Close 
2ad0: 28 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20  (Pool) Failure: 
2ae0: 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20  {0}",..         
2af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
2b00: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2b10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2b20: 7d 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  }..#endif..     
2b30: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2b40: 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20    else..        
2b50: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
2b60: 20 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75 6e     if (unbindFun
2b70: 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 20  ctions)..       
2b80: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
2ba0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
2bb0: 6e 62 69 6e 64 41 6c 6c 46 75 6e 63 74 69 6f 6e  nbindAllFunction
2bc0: 73 28 74 68 69 73 2c 20 5f 66 6c 61 67 73 2c 20  s(this, _flags, 
2bd0: 66 61 6c 73 65 29 29 0d 0a 20 20 20 20 20 20 20  false))..       
2be0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 23 69             {..#i
2bf0: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
2c00: 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45  0 && TRACE_CONNE
2c10: 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20  CTION..         
2c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72 61               Tra
2c30: 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
2c40: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
2c50: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
2c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c70: 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
2c80: 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
2c90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2ca0: 20 20 20 20 20 20 20 20 20 20 20 22 55 6e 62 69             "Unbi
2cb0: 6e 64 46 75 6e 63 74 69 6f 6e 73 20 53 75 63 63  ndFunctions Succ
2cc0: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2ce0: 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74        HandleToSt
2cf0: 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69  ring()));..#endi
2d00: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
2d10: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
2d20: 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a            else..
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d40: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
2d50: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2d60: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2d70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2d80: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
2d90: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
2da0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
2db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2dc0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2dd0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2de0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e00: 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f    "UnbindFunctio
2e10: 6e 73 20 46 61 69 6c 75 72 65 3a 20 7b 30 7d 22  ns Failure: {0}"
2e20: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
2e30: 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
2e40: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
2e50: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
2e60: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
2e80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2e90: 5f 73 71 6c 2e 44 69 73 70 6f 73 65 28 29 3b 0d  _sql.Dispose();.
2ea0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
2eb0: 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d 20 6e          _sql = n
2ec0: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ull;..      }.. 
2ed0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
2ee0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2ef0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f10: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23  ///////////....#
2f40: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
2f50: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
2f60: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 70 72 6f 74  ECTION..    prot
2f70: 65 63 74 65 64 20 73 74 72 69 6e 67 20 48 61 6e  ected string Han
2f80: 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 0d 0a 20  dleToString().. 
2f90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
2fa0: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
2fb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
2fc0: 75 72 6e 20 22 3c 6e 75 6c 6c 3e 22 3b 0d 0a 0d  urn "<null>";...
2fd0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
2fe0: 5f 73 71 6c 2e 54 6f 53 74 72 69 6e 67 28 29 3b  _sql.ToString();
2ff0: 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
3000: 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f  ...    /////////
3010: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3020: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3030: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3040: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3050: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3060: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f  //////....    //
3070: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
3080: 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
3090: 20 6e 75 6d 62 65 72 20 6f 66 20 74 69 6d 65 73   number of times
30a0: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
30b0: 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74 68 6f  Cancel" /> metho
30c0: 64 20 68 61 73 20 62 65 65 6e 0d 0a 20 20 20 20  d has been..    
30d0: 2f 2f 2f 20 63 61 6c 6c 65 64 2e 0d 0a 20 20 20  /// called...   
30e0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
30f0: 0a 20 20 20 20 70 72 69 76 61 74 65 20 69 6e 74  .    private int
3100: 20 47 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28   GetCancelCount(
3110: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3120: 20 20 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f    return Interlo
3130: 63 6b 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68  cked.CompareExch
3140: 61 6e 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c  ange(ref _cancel
3150: 43 6f 75 6e 74 2c 20 30 2c 20 30 29 3b 0d 0a 20  Count, 0, 0);.. 
3160: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f     }....    ////
3170: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3180: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3190: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
31d0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
31e0: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 6d  ..    /// This m
31f0: 65 74 68 6f 64 20 64 65 74 65 72 6d 69 6e 65 73  ethod determines
3200: 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
3210: 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  a <see cref="SQL
3220: 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f 3e  iteException" />
3230: 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 74 68 20 61  ..    /// with a
3240: 20 72 65 74 75 72 6e 20 63 6f 64 65 20 6f 66 20   return code of 
3250: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3260: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
3270: 72 75 70 74 22 20 2f 3e 20 73 68 6f 75 6c 64 0d  rupt" /> should.
3280: 0a 20 20 20 20 2f 2f 2f 20 62 65 20 74 68 72 6f  .    /// be thro
3290: 77 6e 20 61 66 74 65 72 20 6d 61 6b 69 6e 67 20  wn after making 
32a0: 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65 20  a call into the 
32b0: 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
32c0: 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ary...    /// </
32d0: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
32e0: 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
32f0: 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66   /// Non-zero if
3300: 20 61 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51   a <see cref="SQ
3310: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 22 20 2f  LiteException" /
3320: 3e 20 74 6f 20 62 65 20 74 68 72 6f 77 6e 2e 20  > to be thrown. 
3330: 20 54 68 69 73 20 6d 65 74 68 6f 64 0d 0a 20 20   This method..  
3340: 20 20 2f 2f 2f 20 77 69 6c 6c 20 6f 6e 6c 79 20    /// will only 
3350: 72 65 74 75 72 6e 20 6e 6f 6e 2d 7a 65 72 6f 20  return non-zero 
3360: 69 66 20 74 68 65 20 3c 73 65 65 20 63 72 65 66  if the <see cref
3370: 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20 6d 65 74  ="Cancel" /> met
3380: 68 6f 64 20 77 61 73 20 63 61 6c 6c 65 64 0d 0a  hod was called..
3390: 20 20 20 20 2f 2f 2f 20 6f 6e 65 20 6f 72 20 6d      /// one or m
33a0: 6f 72 65 20 74 69 6d 65 73 20 64 75 72 69 6e 67  ore times during
33b0: 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68 65   a call into the
33c0: 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
33d0: 72 61 72 79 20 28 65 2e 67 2e 20 77 68 65 6e 0d  rary (e.g. when.
33e0: 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c  .    /// the sql
33f0: 69 74 65 33 5f 70 72 65 70 61 72 65 2a 28 29 20  ite3_prepare*() 
3400: 6f 72 20 73 71 6c 69 74 65 33 5f 73 74 65 70 28  or sqlite3_step(
3410: 29 20 41 50 49 73 20 61 72 65 20 75 73 65 64 29  ) APIs are used)
3420: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
3430: 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61  urns>..    priva
3440: 74 65 20 62 6f 6f 6c 20 53 68 6f 75 6c 64 54 68  te bool ShouldTh
3450: 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 0d 0a  rowForCancel()..
3460: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
3470: 65 74 75 72 6e 20 47 65 74 43 61 6e 63 65 6c 43  eturn GetCancelC
3480: 6f 75 6e 74 28 29 20 3e 20 30 3b 0d 0a 20 20 20  ount() > 0;..   
3490: 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f   }....    //////
34a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
34f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
3500: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3510: 20 20 20 20 2f 2f 2f 20 52 65 73 65 74 73 20 74      /// Resets t
3520: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
3530: 3c 73 65 65 20 63 72 65 66 3d 22 5f 63 61 6e 63  <see cref="_canc
3540: 65 6c 43 6f 75 6e 74 22 20 2f 3e 20 66 69 65 6c  elCount" /> fiel
3550: 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  d...    /// </su
3560: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76  mmary>..    priv
3570: 61 74 65 20 69 6e 74 20 52 65 73 65 74 43 61 6e  ate int ResetCan
3580: 63 65 6c 43 6f 75 6e 74 28 29 0d 0a 20 20 20 20  celCount()..    
3590: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
35a0: 6e 20 49 6e 74 65 72 6c 6f 63 6b 65 64 2e 43 6f  n Interlocked.Co
35b0: 6d 70 61 72 65 45 78 63 68 61 6e 67 65 28 72 65  mpareExchange(re
35c0: 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 2c 20  f _cancelCount, 
35d0: 30 2c 20 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29  0, _cancelCount)
35e0: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
35f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3600: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3610: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3620: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3630: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3640: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
3650: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
3660: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74  ary>..    /// At
3670: 74 65 6d 70 74 73 20 74 6f 20 69 6e 74 65 72 72  tempts to interr
3680: 75 70 74 20 74 68 65 20 71 75 65 72 79 20 63 75  upt the query cu
3690: 72 72 65 6e 74 6c 79 20 65 78 65 63 75 74 69 6e  rrently executin
36a0: 67 20 6f 6e 20 74 68 65 20 61 73 73 6f 63 69 61  g on the associa
36b0: 74 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6e 61 74  ted..    /// nat
36c0: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
36d0: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
36e0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
36f0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3700: 69 64 65 20 76 6f 69 64 20 43 61 6e 63 65 6c 28  ide void Cancel(
3710: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
3720: 74 72 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20  try..      {..  
3730: 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68        // do noth
3740: 69 6e 67 2e 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ing...      }.. 
3750: 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
3760: 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
3770: 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
3780: 20 2a 2f 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20   */..      {..  
3790: 20 20 20 20 20 20 49 6e 74 65 72 6c 6f 63 6b 65        Interlocke
37a0: 64 2e 49 6e 63 72 65 6d 65 6e 74 28 72 65 66 20  d.Increment(ref 
37b0: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 29 3b 0d 0a  _cancelCount);..
37c0: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
37d0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
37e0: 74 65 33 5f 69 6e 74 65 72 72 75 70 74 28 5f 73  te3_interrupt(_s
37f0: 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20  ql);..      }.. 
3800: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
3810: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3820: 2f 2f 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e  // This function
3830: 20 62 69 6e 64 73 20 61 20 75 73 65 72 2d 64 65   binds a user-de
3840: 66 69 6e 65 64 20 66 75 6e 63 74 69 6f 6e 20 74  fined function t
3850: 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  o the connection
3860: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
3870: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
3880: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
3890: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22 3e 0d  tionAttribute">.
38a0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 3c 73 65  .    /// The <se
38b0: 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 46 75  e cref="SQLiteFu
38c0: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 22  nctionAttribute"
38d0: 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
38e0: 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67 0d 0a 20  ce containing.. 
38f0: 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65 74 61 64     /// the metad
3900: 61 74 61 20 66 6f 72 20 74 68 65 20 66 75 6e 63  ata for the func
3910: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
3920: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
3930: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
3940: 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 74 69  ram name="functi
3950: 6f 6e 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  on">..    /// Th
3960: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
3970: 69 74 65 46 75 6e 63 74 69 6f 6e 22 2f 3e 20 6f  iteFunction"/> o
3980: 62 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 20 74  bject instance t
3990: 68 61 74 20 69 6d 70 6c 65 6d 65 6e 74 73 20 74  hat implements t
39a0: 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63  he..    /// func
39b0: 74 69 6f 6e 20 74 6f 20 62 65 20 62 6f 75 6e 64  tion to be bound
39c0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
39d0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
39e0: 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22  ram name="flags"
39f0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66  >..    /// The f
3a00: 6c 61 67 73 20 61 73 73 6f 63 69 61 74 65 64 20  lags associated 
3a10: 77 69 74 68 20 74 68 65 20 70 61 72 65 6e 74 20  with the parent 
3a20: 63 6f 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63  connection objec
3a30: 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  t...    /// </pa
3a40: 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  ram>..    intern
3a50: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
3a60: 20 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a   BindFunction(..
3a70: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
3a80: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3a90: 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74  functionAttribut
3aa0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  e,..        SQLi
3ab0: 74 65 46 75 6e 63 74 69 6f 6e 20 66 75 6e 63 74  teFunction funct
3ac0: 69 6f 6e 2c 0d 0a 20 20 20 20 20 20 20 20 53 51  ion,..        SQ
3ad0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
3ae0: 61 67 73 20 66 6c 61 67 73 0d 0a 20 20 20 20 20  ags flags..     
3af0: 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
3b00: 20 20 20 20 20 69 66 20 28 66 75 6e 63 74 69 6f       if (functio
3b10: 6e 41 74 74 72 69 62 75 74 65 20 3d 3d 20 6e 75  nAttribute == nu
3b20: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
3b30: 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
3b40: 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
3b50: 28 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  ("functionAttrib
3b60: 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ute");....      
3b70: 20 20 69 66 20 28 66 75 6e 63 74 69 6f 6e 20 3d    if (function =
3b80: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
3b90: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
3ba0: 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
3bb0: 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 22 29  tion("function")
3bc0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ;....        SQL
3bd0: 69 74 65 46 75 6e 63 74 69 6f 6e 2e 42 69 6e 64  iteFunction.Bind
3be0: 46 75 6e 63 74 69 6f 6e 28 74 68 69 73 2c 20 66  Function(this, f
3bf0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3c00: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
3c10: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  s);....        i
3c20: 66 20 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d  f (_functions ==
3c30: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3c40: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
3c50: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
3c60: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
3c70: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
3c80: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
3c90: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
3ca0: 73 5b 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  s[functionAttrib
3cb0: 75 74 65 5d 20 3d 20 66 75 6e 63 74 69 6f 6e 3b  ute] = function;
3cc0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
3cd0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
3ce0: 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e 63 74    /// This funct
3cf0: 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73 65 72  ion binds a user
3d00: 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74 69 6f  -defined functio
3d10: 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65 63 74  n to the connect
3d20: 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
3d30: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
3d40: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3d50: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
3d60: 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
3d70: 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69 74  <see cref="SQLit
3d80: 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  eFunctionAttribu
3d90: 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73  te"/> object ins
3da0: 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69 6e 67  tance containing
3db0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6d 65  ..    /// the me
3dc0: 74 61 64 61 74 61 20 66 6f 72 20 74 68 65 20 66  tadata for the f
3dd0: 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20 75 6e  unction to be un
3de0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
3df0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3e00: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3e10: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
3e20: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
3e30: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
3e40: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
3e50: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
3e60: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
3e70: 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 4e 6f 6e 2d  // <returns>Non-
3e80: 7a 65 72 6f 20 69 66 20 74 68 65 20 66 75 6e 63  zero if the func
3e90: 74 69 6f 6e 20 77 61 73 20 75 6e 62 6f 75 6e 64  tion was unbound
3ea0: 20 61 6e 64 20 72 65 6d 6f 76 65 64 2e 3c 2f 72   and removed.</r
3eb0: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74  eturns>..    int
3ec0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62  ernal override b
3ed0: 6f 6f 6c 20 55 6e 62 69 6e 64 46 75 6e 63 74 69  ool UnbindFuncti
3ee0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
3ef0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
3f00: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
3f10: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
3f20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
3f30: 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a 20 20  nFlags flags..  
3f40: 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a        )..    {..
3f50: 20 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63          if (func
3f60: 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20 3d 3d  tionAttribute ==
3f70: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
3f80: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72      throw new Ar
3f90: 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74  gumentNullExcept
3fa0: 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41 74 74  ion("functionAtt
3fb0: 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20 20 20  ribute");....   
3fc0: 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69       if (_functi
3fd0: 6f 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ons == null)..  
3fe0: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
3ff0: 20 66 61 6c 73 65 3b 0d 0a 0d 0a 20 20 20 20 20   false;....     
4000: 20 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f     SQLiteFunctio
4010: 6e 20 66 75 6e 63 74 69 6f 6e 3b 0d 0a 0d 0a 20  n function;.... 
4020: 20 20 20 20 20 20 20 69 66 20 28 5f 66 75 6e 63         if (_func
4030: 74 69 6f 6e 73 2e 54 72 79 47 65 74 56 61 6c 75  tions.TryGetValu
4040: 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62  e(functionAttrib
4050: 75 74 65 2c 20 6f 75 74 20 66 75 6e 63 74 69 6f  ute, out functio
4060: 6e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  n))..        {..
4070: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4080: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e 55  SQLiteFunction.U
4090: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 28 0d 0a  nbindFunction(..
40a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
40b0: 20 20 20 20 74 68 69 73 2c 20 66 75 6e 63 74 69      this, functi
40c0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 66 75 6e  onAttribute, fun
40d0: 63 74 69 6f 6e 2c 20 66 6c 61 67 73 29 20 26 26  ction, flags) &&
40e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
40f0: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 2e 52 65 6d    _functions.Rem
4100: 6f 76 65 28 66 75 6e 63 74 69 6f 6e 41 74 74 72  ove(functionAttr
4110: 69 62 75 74 65 29 29 0d 0a 20 20 20 20 20 20 20  ibute))..       
4120: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4130: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 74          return t
4140: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
4150: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
4160: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4170: 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 7d 0d 0a   false;..    }..
4180: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4190: 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 56  verride string V
41a0: 65 72 73 69 6f 6e 0d 0a 20 20 20 20 7b 0d 0a 20  ersion..    {.. 
41b0: 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20       get..      
41c0: 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  {..        retur
41d0: 6e 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 3b  n SQLiteVersion;
41e0: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
41f0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4200: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 56 65   override int Ve
4210: 72 73 69 6f 6e 4e 75 6d 62 65 72 0d 0a 20 20 20  rsionNumber..   
4220: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
4230: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4240: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
4250: 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20 20 20  sionNumber;..   
4260: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4270: 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74     internal stat
4280: 69 63 20 73 74 72 69 6e 67 20 44 65 66 69 6e 65  ic string Define
4290: 43 6f 6e 73 74 61 6e 74 73 0d 0a 20 20 20 20 7b  Constants..    {
42a0: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
42b0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
42c0: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
42d0: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
42e0: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
42f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 49  ;..            I
4300: 4c 69 73 74 3c 73 74 72 69 6e 67 3e 20 6c 69 73  List<string> lis
4310: 74 20 3d 20 53 51 4c 69 74 65 44 65 66 69 6e 65  t = SQLiteDefine
4320: 43 6f 6e 73 74 61 6e 74 73 2e 4f 70 74 69 6f 6e  Constants.Option
4330: 4c 69 73 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  List;....       
4340: 20 20 20 20 20 69 66 20 28 6c 69 73 74 20 21 3d       if (list !=
4350: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
4360: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4370: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
4380: 73 74 72 69 6e 67 20 65 6c 65 6d 65 6e 74 20 69  string element i
4390: 6e 20 6c 69 73 74 29 0d 0a 20 20 20 20 20 20 20  n list)..       
43a0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
43c0: 69 66 20 28 65 6c 65 6d 65 6e 74 20 3d 3d 20 6e  if (element == n
43d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
43e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6f                co
43f0: 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  ntinue;....     
4400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
4410: 66 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68  f (result.Length
4420: 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20   > 0)..         
4430: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4440: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27  esult.Append(' '
4450: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
4460: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4470: 2e 41 70 70 65 6e 64 28 65 6c 65 6d 65 6e 74 29  .Append(element)
4480: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
4490: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
44a0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
44b0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
44c0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
44d0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
44e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
44f0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
4500: 69 74 65 56 65 72 73 69 6f 6e 0d 0a 20 20 20 20  iteVersion..    
4510: 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20  {..      get..  
4520: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
4530: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
4540: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
4550: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
4560: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
4570: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4580: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4590: 6c 20 73 74 61 74 69 63 20 69 6e 74 20 53 51 4c  l static int SQL
45a0: 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  iteVersionNumber
45b0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
45c0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
45d0: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
45e0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
45f0: 73 71 6c 69 74 65 33 5f 6c 69 62 76 65 72 73 69  sqlite3_libversi
4600: 6f 6e 5f 6e 75 6d 62 65 72 28 29 3b 0d 0a 20 20  on_number();..  
4610: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4620: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4630: 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c 69 74  tic string SQLit
4640: 65 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20 7b  eSourceId..    {
4650: 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20  ..      get..   
4660: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
4670: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
4680: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
4690: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 6f  thods.sqlite3_so
46a0: 75 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a  urceid(), -1);..
46b0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
46c0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
46d0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 53 51 4c  tatic string SQL
46e0: 69 74 65 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  iteCompileOption
46f0: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
4700: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 74  ..            St
4720: 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75  ringBuilder resu
4730: 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42  lt = new StringB
4740: 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20 20  uilder();..     
4750: 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65 78         int index
4760: 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20   = 0;..         
4770: 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75 65     IntPtr zValue
4780: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
4790: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
47a0: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
47b0: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20 20  (index++);....  
47c0: 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65 20            while 
47d0: 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50 74  (zValue != IntPt
47e0: 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
47f0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
4800: 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75          if (resu
4810: 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a  lt.Length > 0)..
4820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4830: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4840: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
4850: 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c             resul
4860: 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f 53  t.Append(UTF8ToS
4870: 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d 31  tring(zValue, -1
4880: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
4890: 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55 6e       zValue = Un
48a0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
48b0: 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c  s.sqlite3_compil
48c0: 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64 65  eoption_get(inde
48d0: 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  x++);..         
48e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
48f0: 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c      return resul
4900: 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20  t.ToString();.. 
4910: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
4920: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
4930: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e  static string In
4940: 74 65 72 6f 70 56 65 72 73 69 6f 6e 0d 0a 20 20  teropVersion..  
4950: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4960: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
4970: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4980: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  D..            r
4990: 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
49a0: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
49b0: 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 6c  ethods.interop_l
49c0: 69 62 76 65 72 73 69 6f 6e 28 29 2c 20 2d 31 29  ibversion(), -1)
49d0: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
49e0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c        return nul
49f0: 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  l;..#endif..    
4a00: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4a10: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61      internal sta
4a20: 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65 72  tic string Inter
4a30: 6f 70 53 6f 75 72 63 65 49 64 0d 0a 20 20 20 20  opSourceId..    
4a40: 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a  {..        get..
4a50: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
4a60: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
4a70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
4a80: 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
4a90: 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
4aa0: 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f 73 6f 75  hods.interop_sou
4ab0: 72 63 65 69 64 28 29 2c 20 2d 31 29 3b 0d 0a 23  rceid(), -1);..#
4ac0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20  else..          
4ad0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
4ae0: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
4af0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
4b00: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
4b10: 73 74 72 69 6e 67 20 49 6e 74 65 72 6f 70 43 6f  string InteropCo
4b20: 6d 70 69 6c 65 4f 70 74 69 6f 6e 73 0d 0a 20 20  mpileOptions..  
4b30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74    {..        get
4b40: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66  ..        {..#if
4b50: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
4b60: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53  D..            S
4b70: 74 72 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73  tringBuilder res
4b80: 75 6c 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67  ult = new String
4b90: 42 75 69 6c 64 65 72 28 29 3b 0d 0a 20 20 20 20  Builder();..    
4ba0: 20 20 20 20 20 20 20 20 69 6e 74 20 69 6e 64 65          int inde
4bb0: 78 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  x = 0;..        
4bc0: 20 20 20 20 49 6e 74 50 74 72 20 7a 56 61 6c 75      IntPtr zValu
4bd0: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
4be0: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
4bf0: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
4c00: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 0d 0a 20  t(index++);.... 
4c10: 20 20 20 20 20 20 20 20 20 20 20 77 68 69 6c 65             while
4c20: 20 28 7a 56 61 6c 75 65 20 21 3d 20 49 6e 74 50   (zValue != IntP
4c30: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
4c40: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
4c50: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 65 73           if (res
4c60: 75 6c 74 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d  ult.Length > 0).
4c70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4c80: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
4c90: 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20  nd(' ');....    
4ca0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
4cb0: 6c 74 2e 41 70 70 65 6e 64 28 55 54 46 38 54 6f  lt.Append(UTF8To
4cc0: 53 74 72 69 6e 67 28 7a 56 61 6c 75 65 2c 20 2d  String(zValue, -
4cd0: 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  1));..          
4ce0: 20 20 20 20 20 20 7a 56 61 6c 75 65 20 3d 20 55        zValue = U
4cf0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
4d00: 64 73 2e 69 6e 74 65 72 6f 70 5f 63 6f 6d 70 69  ds.interop_compi
4d10: 6c 65 6f 70 74 69 6f 6e 5f 67 65 74 28 69 6e 64  leoption_get(ind
4d20: 65 78 2b 2b 29 3b 0d 0a 20 20 20 20 20 20 20 20  ex++);..        
4d30: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
4d40: 20 20 20 20 20 72 65 74 75 72 6e 20 72 65 73 75       return resu
4d50: 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a  lt.ToString();..
4d60: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20  #else..         
4d70: 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d     return null;.
4d80: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
4d90: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
4da0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
4db0: 64 65 20 62 6f 6f 6c 20 41 75 74 6f 43 6f 6d 6d  de bool AutoComm
4dc0: 69 74 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  it..    {..     
4dd0: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20   get..      {.. 
4de0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 73         return Is
4df0: 41 75 74 6f 63 6f 6d 6d 69 74 28 5f 73 71 6c 2c  Autocommit(_sql,
4e00: 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20 7d   _sql);..      }
4e10: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
4e20: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
4e30: 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65 72 74   long LastInsert
4e40: 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a 20 20  RowId..    {..  
4e50: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
4e60: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
4e70: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
4e80: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
4e90: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4ea0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73  hods.sqlite3_las
4eb0: 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 28 5f  t_insert_rowid(_
4ec0: 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  sql);..#elif !SQ
4ed0: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
4ee0: 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 49         long rowI
4ef0: 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  d = 0;..        
4f00: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
4f10: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61 73 74  ods.sqlite3_last
4f20: 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f 69 6e  _insert_rowid_in
4f30: 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65 66 20  terop(_sql, ref 
4f40: 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20 20 20  rowId);..       
4f50: 20 72 65 74 75 72 6e 20 72 6f 77 49 64 3b 0d 0a   return rowId;..
4f60: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
4f70: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
4f80: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
4f90: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
4fa0: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
4fb0: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
4fc0: 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67 65 73  ride int Changes
4fd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
4fe0: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23 69 66  et..      {..#if
4ff0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
5000: 44 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  D..        retur
5010: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
5020: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 68  thods.sqlite3_ch
5030: 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28 5f 73  anges_interop(_s
5040: 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ql);..#else..   
5050: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
5060: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5070: 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65 73 28  sqlite3_changes(
5080: 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  _sql);..#endif..
5090: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
50a0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
50b0: 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d 65 6d  verride long Mem
50c0: 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b 0d 0a  oryUsed..    {..
50d0: 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20          get..   
50e0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
50f0: 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74 69      return Stati
5100: 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a 20 20  cMemoryUsed;..  
5110: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
5120: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
5130: 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74 69  tatic long Stati
5140: 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20  cMemoryUsed..   
5150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d   {..        get.
5160: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20  .        {..#if 
5170: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
5180: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
5190: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55          return U
51a0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
51b0: 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72  ds.sqlite3_memor
51c0: 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c 69 66  y_used();..#elif
51d0: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
51e0: 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c  D..            l
51f0: 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a  ong bytes = 0;..
5200: 20 20 20 20 20 20 20 20 20 20 20 20 55 6e 73 61              Unsa
5210: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
5220: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 75  sqlite3_memory_u
5230: 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65 66 20  sed_interop(ref 
5240: 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  bytes);..       
5250: 20 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65       return byte
5260: 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  s;..#else..     
5270: 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
5280: 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
5290: 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
52a0: 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  dif..        }..
52b0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
52c0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
52d0: 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68 77 61  ong MemoryHighwa
52e0: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
52f0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5310: 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d 65 6d  return StaticMem
5320: 6f 72 79 48 69 67 68 77 61 74 65 72 3b 0d 0a 20  oryHighwater;.. 
5330: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
5340: 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
5350: 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61 74  static long Stat
5360: 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61 74 65  icMemoryHighwate
5370: 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  r..    {..      
5380: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
5390: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
53a0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
53b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
53c0: 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
53d0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
53e0: 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61 74 65  _memory_highwate
53f0: 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51  r(0);..#elif !SQ
5400: 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
5410: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
5420: 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20 20 20  bytes = 0;..    
5430: 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
5440: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5450: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
5460: 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30 2c 20  ater_interop(0, 
5470: 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20  ref bytes);..   
5480: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
5490: 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20  bytes;..#else.. 
54a0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
54b0: 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e   new NotImplemen
54c0: 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d  tedException();.
54d0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
54e0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
54f0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
5500: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
5510: 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20  non-zero if the 
5520: 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74 69 76  underlying nativ
5530: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e  e connection han
5540: 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a 20 20  dle is owned..  
5550: 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20 69 6e    /// by this in
5560: 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
5570: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
5580: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
5590: 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e 64 6c  de bool OwnHandl
55a0: 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  e..    {..      
55b0: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
55c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
55d0: 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d   (_sql == null).
55e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
55f0: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
5600: 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63  eException("no c
5610: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
5620: 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 0d   available");...
5630: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
5640: 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61 6e 64  urn _sql.OwnHand
5650: 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  le;..        }..
5660: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
5670: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
5680: 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65 20  /// Returns the 
5690: 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f 66 20  logical list of 
56a0: 66 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f 63 69  functions associ
56b0: 61 74 65 64 20 77 69 74 68 20 74 68 69 73 20 63  ated with this c
56c0: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
56d0: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
56e0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
56f0: 72 72 69 64 65 20 49 44 69 63 74 69 6f 6e 61 72  rride IDictionar
5700: 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  y<SQLiteFunction
5710: 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74  Attribute, SQLit
5720: 65 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e 63 74  eFunction> Funct
5730: 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ions..    {..   
5740: 20 20 20 20 20 67 65 74 20 7b 20 72 65 74 75 72       get { retur
5750: 6e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 20 7d 0d  n _functions; }.
5760: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
5770: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
5780: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
5790: 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75 73 28  SetMemoryStatus(
57a0: 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20 20 20  bool value)..   
57b0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
57c0: 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f  rn StaticSetMemo
57d0: 72 79 53 74 61 74 75 73 28 76 61 6c 75 65 29 3b  ryStatus(value);
57e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
57f0: 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 53  nternal static S
5800: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53  QLiteErrorCode S
5810: 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79 53 74  taticSetMemorySt
5820: 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29  atus(bool value)
5830: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
5840: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5850: 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
5860: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
5870: 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d 0a 20  3_config_int(.. 
5880: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
5890: 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d 2e 53  eConfigOpsEnum.S
58a0: 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 45 4d  QLITE_CONFIG_MEM
58b0: 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20 3f 20  STATUS, value ? 
58c0: 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20 20 20  1 : 0);....     
58d0: 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20     return rc;.. 
58e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
58f0: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
5900: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 66  // Attempts to f
5910: 72 65 65 20 61 73 20 6d 75 63 68 20 68 65 61 70  ree as much heap
5920: 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69   memory as possi
5930: 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61 74 61  ble for the data
5940: 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
5950: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
5960: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
5970: 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64 61 72  eturns>A standar
5980: 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
5990: 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72 6f 20  code (i.e. zero 
59a0: 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e 64 20  for success and 
59b0: 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66 61 69  non-zero for fai
59c0: 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e 73 3e  lure).</returns>
59d0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
59e0: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
59f0: 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73 65 4d  rorCode ReleaseM
5a00: 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b 0d 0a  emory()..    {..
5a10: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
5a20: 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55 6e 73  rorCode rc = Uns
5a30: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
5a40: 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65  .sqlite3_db_rele
5a50: 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71 6c 29  ase_memory(_sql)
5a60: 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ;..        retur
5a70: 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
5a80: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
5a90: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74 65 6d  >..    /// Attem
5aa0: 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20 62 79  pts to free N by
5ab0: 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65 6d 6f  tes of heap memo
5ac0: 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61 74 69  ry by deallocati
5ad0: 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c  ng non-essential
5ae0: 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f 2f 2f   memory..    ///
5af0: 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68 65 6c   allocations hel
5b00: 64 20 62 79 20 74 68 65 20 64 61 74 61 62 61 73  d by the databas
5b10: 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d 6f 72  e library. Memor
5b20: 79 20 75 73 65 64 20 74 6f 20 63 61 63 68 65 20  y used to cache 
5b30: 64 61 74 61 62 61 73 65 20 70 61 67 65 73 0d 0a  database pages..
5b40: 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70 72 6f      /// to impro
5b50: 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65 20 69  ve performance i
5b60: 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f 66 20  s an example of 
5b70: 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20 6d 65  non-essential me
5b80: 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73 20 61  mory.  This is a
5b90: 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f 2f 20   no-op..    /// 
5ba0: 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f 20 69  returning zero i
5bb0: 66 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  f the SQLite cor
5bc0: 65 20 6c 69 62 72 61 72 79 20 77 61 73 20 6e 6f  e library was no
5bd0: 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74 68 20  t compiled with 
5be0: 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  the compile-time
5bf0: 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69 6f 6e  ..    /// option
5c00: 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4d   SQLITE_ENABLE_M
5c10: 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45 4e 54  EMORY_MANAGEMENT
5c20: 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c 20 61  .  Optionally, a
5c30: 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73 65 74  ttempts to reset
5c40: 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f 2f 2f   and/or..    ///
5c50: 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57 69 6e   compact the Win
5c60: 33 32 20 6e 61 74 69 76 65 20 68 65 61 70 2c 20  32 native heap, 
5c70: 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e 0d 0a  if applicable...
5c80: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
5c90: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
5ca0: 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65 73 22  am name="nBytes"
5cb0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 72  >..    /// The r
5cc0: 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65 72 20  equested number 
5cd0: 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72 65 65  of bytes to free
5ce0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
5cf0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
5d00: 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74 22  ram name="reset"
5d10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a  >..    /// Non-z
5d20: 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 61  ero to attempt a
5d30: 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a 20 20   heap reset...  
5d40: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5d50: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5d60: 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e 0d 0a  ame="compact">..
5d70: 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65 72 6f      /// Non-zero
5d80: 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65 61 70   to attempt heap
5d90: 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a 20 20   compaction...  
5da0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
5db0: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
5dc0: 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a 20 20  ame="nFree">..  
5dd0: 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72    /// The number
5de0: 20 6f 66 20 62 79 74 65 73 20 61 63 74 75 61 6c   of bytes actual
5df0: 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69 73 20  ly freed.  This 
5e00: 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a 65 72  value may be zer
5e10: 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  o...    /// </pa
5e20: 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
5e30: 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65 74  aram name="reset
5e40: 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  Ok">..    /// Th
5e50: 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  is value will be
5e60: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
5e70: 20 68 65 61 70 20 72 65 73 65 74 20 77 61 73 20   heap reset was 
5e80: 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20 20 20  successful...   
5e90: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
5ea0: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
5eb0: 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e 0d 0a  me="nLargest">..
5ec0: 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69 7a 65      /// The size
5ed0: 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73 74 20   of the largest 
5ee0: 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65 20 62  committed free b
5ef0: 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65 61 70  lock in the heap
5f00: 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20 20 20  , in bytes...   
5f10: 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75 65 20   /// This value 
5f20: 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75 6e 6c  will be zero unl
5f30: 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61 63 74  ess heap compact
5f40: 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64 2e 0d  ion is enabled..
5f50: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
5f60: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
5f70: 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
5f80: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
5f90: 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69 2e 65  return code (i.e
5fa0: 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63 63 65  . zero for succe
5fb0: 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72 6f 0d  ss and non-zero.
5fc0: 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66 61 69  .    /// for fai
5fd0: 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  lure)...    /// 
5fe0: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
5ff0: 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20  internal static 
6000: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
6010: 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d 65 6d  StaticReleaseMem
6020: 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20 69 6e  ory(..        in
6030: 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20 20 20  t nBytes,..     
6040: 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c 0d 0a     bool reset,..
6050: 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63 6f 6d          bool com
6060: 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20 20 72  pact,..        r
6070: 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d 0a 20  ef int nFree,.. 
6080: 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
6090: 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20 20 20  resetOk,..      
60a0: 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61 72 67    ref uint nLarg
60b0: 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  est..        )..
60c0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
60d0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
60e0: 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
60f0: 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20  ode.Ok;....     
6100: 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f 63 61     int nFreeLoca
6110: 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  l = UnsafeNative
6120: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
6130: 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6e  release_memory(n
6140: 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20 20 20  Bytes);..       
6150: 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74 4c 6f   uint nLargestLo
6160: 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  cal = 0;..      
6170: 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b 4c 6f    bool resetOkLo
6180: 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a  cal = false;....
6190: 23 69 66 20 21 44 45 42 55 47 20 26 26 20 57 49  #if !DEBUG && WI
61a0: 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a 20 53  NDOWS // NOTE: S
61b0: 68 6f 75 6c 64 20 62 65 20 22 57 49 4e 33 32 48  hould be "WIN32H
61c0: 45 41 50 20 26 26 20 21 4d 45 4d 44 45 42 55 47  EAP && !MEMDEBUG
61d0: 20 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a 20 20   && WINDOWS"..  
61e0: 20 20 20 20 20 20 69 66 20 28 48 65 6c 70 65 72        if (Helper
61f0: 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64 6f 77  Methods.IsWindow
6200: 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  s())..        {.
6210: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
6220: 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72  ((rc == SQLiteEr
6230: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 72  rorCode.Ok) && r
6240: 65 73 65 74 29 0d 0a 20 20 20 20 20 20 20 20 20  eset)..         
6250: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6260: 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73 61 66        rc = Unsaf
6270: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
6280: 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72 65 73  qlite3_win32_res
6290: 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a 20 20  et_heap();....  
62a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
62b0: 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72   (rc == SQLiteEr
62c0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20  rorCode.Ok)..   
62d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
62e0: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20 3d 20   resetOkLocal = 
62f0: 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20  true;..         
6300: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
6310: 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d 20 53      if ((rc == S
6320: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
6330: 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29 0d 0a  k) && compact)..
6340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6350: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
6360: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6370: 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74 5f 68  _win32_compact_h
6380: 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65 73 74  eap(ref nLargest
6390: 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20 20 20  Local);..       
63a0: 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
63b0: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
63c0: 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c 20 63    if (reset || c
63d0: 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20 20 20  ompact)..       
63e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
63f0: 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  rc = SQLiteError
6400: 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e 64 3b 0d 0a  Code.NotFound;..
6410: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
6420: 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e 46 72       nFree = nFr
6430: 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20 20 20  eeLocal;..      
6440: 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e 4c 61    nLargest = nLa
6450: 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20 20 20  rgestLocal;..   
6460: 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d 20 72       resetOk = r
6470: 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a 0d 0a  esetOkLocal;....
6480: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
6490: 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  c;..    }....   
64a0: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
64b0: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
64c0: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
64d0: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
64e0: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
64f0: 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20  ith different.. 
6500: 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61     /// configura
6510: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57  tion options.  W
6520: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
6530: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
6540: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
6550: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
6560: 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
6570: 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74 61 6e  s>Returns a stan
6580: 64 61 72 64 20 53 51 4c 69 74 65 20 72 65 73 75  dard SQLite resu
6590: 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75 72 6e  lt code.</return
65a0: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
65b0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
65c0: 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74 64 6f  ErrorCode Shutdo
65d0: 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  wn()..    {..   
65e0: 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61 74       return Stat
65f0: 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c 73 65  icShutdown(false
6600: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
6610: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
6620: 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f 77 6e      /// Shutdown
6630: 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e 67 69   the SQLite engi
6640: 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20 63 61  ne so that it ca
6650: 6e 20 62 65 20 72 65 73 74 61 72 74 65 64 20 77  n be restarted w
6660: 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d 0a 20  ith different.. 
6670: 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75 72 61     /// configura
6680: 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20 20 57  tion options.  W
6690: 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75 74 6f  e depend on auto
66a0: 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f 6e 20   initialization 
66b0: 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20 20 20  to recover...   
66c0: 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
66d0: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
66e0: 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72 69 65  name="directorie
66f0: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  s">..    /// Non
6700: 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74 20 74  -zero to reset t
6710: 68 65 20 64 61 74 61 62 61 73 65 20 61 6e 64 20  he database and 
6720: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
6730: 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72 0d 0a  ories to their..
6740: 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c 74 20      /// default 
6750: 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20 73 68  values, which sh
6760: 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66 6f 72  ould be null for
6770: 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70 61 72   both.  This par
6780: 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d 0a 20  ameter has no.. 
6790: 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20 6f 6e     /// effect on
67a0: 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f 70 65   non-Windows ope
67b0: 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73 2e 0d  rating systems..
67c0: 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d  .    /// </param
67d0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
67e0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74  rns>Returns a st
67f0: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
6800: 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75  sult code.</retu
6810: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
6820: 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69 74 65  al static SQLite
6830: 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74 69 63  ErrorCode Static
6840: 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20 20 20  Shutdown(..     
6850: 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74 6f 72     bool director
6860: 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  ies..        )..
6870: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
6880: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
6890: 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  c = SQLiteErrorC
68a0: 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20 20 20  ode.Ok;....     
68b0: 20 20 20 69 66 20 28 64 69 72 65 63 74 6f 72 69     if (directori
68c0: 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  es)..        {..
68d0: 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20 20 20  #if WINDOWS..   
68e0: 20 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c           if (Hel
68f0: 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e  perMethods.IsWin
6900: 64 6f 77 73 28 29 29 0d 0a 20 20 20 20 20 20 20  dows())..       
6910: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
6920: 20 20 20 20 20 20 20 20 69 66 20 28 72 63 20 3d          if (rc =
6930: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
6940: 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
6950: 20 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20             rc = 
6960: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
6970: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33  ods.sqlite3_win3
6980: 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72 79 28  2_set_directory(
6990: 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20  1, null);....   
69a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
69b0: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
69c0: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
69d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
69e0: 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  rc = UnsafeNativ
69f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
6a00: 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72 65 63  _win32_set_direc
6a10: 74 6f 72 79 28 32 2c 20 6e 75 6c 6c 29 3b 0d 0a  tory(2, null);..
6a20: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
6a30: 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d             else.
6a40: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
6a50: 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54       {..#if !NET
6a60: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
6a70: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
6a80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
6a90: 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
6aa0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
6ab0: 20 20 20 20 20 20 20 22 53 68 75 74 64 6f 77 6e         "Shutdown
6ac0: 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74 20 64  : Cannot reset d
6ad0: 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20 74 68  irectories on th
6ae0: 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29 3b 0d  is platform.");.
6af0: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
6b00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
6b10: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  }....        if 
6b20: 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45 72 72  (rc == SQLiteErr
6b30: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
6b40: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
6b50: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6b60: 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64 6f 77  .sqlite3_shutdow
6b70: 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  n();....        
6b80: 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20  return rc;..    
6b90: 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  }....    /// <su
6ba0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
6bb0: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68  Determines if th
6bc0: 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74  e associated nat
6bd0: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
6be0: 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a  andle is open...
6bf0: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
6c00: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
6c10: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
6c20: 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 61  on-zero if the a
6c30: 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69 76 65  ssociated native
6c40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
6c50: 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20 20 20  le is open...   
6c60: 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
6c70: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
6c80: 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 4f 70  erride bool IsOp
6c90: 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  en()..    {..   
6ca0: 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f 73 71       return (_sq
6cb0: 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20 21 5f  l != null) && !_
6cc0: 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20 26 26  sql.IsInvalid &&
6cd0: 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65 64 3b   !_sql.IsClosed;
6ce0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
6cf0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
6d00: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
6d10: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
6d20: 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20  d path and file 
6d30: 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72  name for the cur
6d40: 72 65 6e 74 6c 79 20 6f 70 65 6e 0d 0a 20 20 20  rently open..   
6d50: 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c 20 69   /// database, i
6d60: 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20  f any...    /// 
6d70: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
6d80: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
6d90: 22 64 62 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f  "dbName">..    /
6da0: 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74  // The name of t
6db0: 68 65 20 61 74 74 61 63 68 65 64 20 64 61 74 61  he attached data
6dc0: 62 61 73 65 20 74 6f 20 71 75 65 72 79 2e 0d 0a  base to query...
6dd0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6de0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
6df0: 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ns>..    /// The
6e00: 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64   fully qualified
6e10: 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65 20 6e   path and file n
6e20: 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75 72 72  ame for the curr
6e30: 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74 61 62  ently open datab
6e40: 61 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 66  ase,..    /// if
6e50: 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c   any...    /// <
6e60: 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
6e70: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
6e80: 20 73 74 72 69 6e 67 20 47 65 74 46 69 6c 65 4e   string GetFileN
6e90: 61 6d 65 28 73 74 72 69 6e 67 20 64 62 4e 61 6d  ame(string dbNam
6ea0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
6eb0: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
6ec0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
6ed0: 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a    return null;..
6ee0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6ef0: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
6f00: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
6f10: 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66 69 6c  s.sqlite3_db_fil
6f20: 65 6e 61 6d 65 5f 62 79 74 65 73 28 0d 0a 20 20  ename_bytes(..  
6f30: 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
6f40: 54 6f 55 54 46 38 28 64 62 4e 61 6d 65 29 29 2c  ToUTF8(dbName)),
6f50: 20 2d 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a   -1);..    }....
6f60: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
6f70: 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65 6e 28  rride void Open(
6f80: 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65 6e 61  string strFilena
6f90: 6d 65 2c 20 73 74 72 69 6e 67 20 76 66 73 4e 61  me, string vfsNa
6fa0: 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  me, SQLiteConnec
6fb0: 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e 65 63  tionFlags connec
6fc0: 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c 69 74  tionFlags, SQLit
6fd0: 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d 20 6f  eOpenFlagsEnum o
6fe0: 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20 6d 61  penFlags, int ma
6ff0: 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f 6c 20  xPoolSize, bool 
7000: 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 7b 0d  usePool)..    {.
7010: 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20  .      //..     
7020: 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74 68 65   // NOTE: If the
7030: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
7040: 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e 74 6c  tion is currentl
7050: 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70 74 20  y open, attempt 
7060: 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20 20 20  to..      //    
7070: 20 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f 77 2e     close it now.
7080: 20 20 54 68 69 73 20 6d 75 73 74 20 62 65 20 64    This must be d
7090: 6f 6e 65 20 62 65 63 61 75 73 65 20 74 68 65 20  one because the 
70a0: 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a 20 20  file name or..  
70b0: 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f 74 68      //       oth
70c0: 65 72 20 70 61 72 61 6d 65 74 65 72 73 20 74 68  er parameters th
70d0: 61 74 20 6d 61 79 20 69 6d 70 61 63 74 20 74 68  at may impact th
70e0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64 61 74  e underlying dat
70f0: 61 62 61 73 65 0d 0a 20 20 20 20 20 20 2f 2f 20  abase..      // 
7100: 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69 6f 6e        connection
7110: 20 6d 61 79 20 68 61 76 65 20 63 68 61 6e 67 65   may have change
7120: 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20  d...      //..  
7130: 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21 3d 20      if (_sql != 
7140: 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74 72 75 65  null) Close(true
7150: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  );....      //..
7160: 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49        // NOTE: I
7170: 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  f the connection
7180: 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73 65 64 20   was not closed 
7190: 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20 74 68  successfully, th
71a0: 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20 20 2f 2f  row an..      //
71b0: 20 20 20 20 20 20 20 65 78 63 65 70 74 69 6f 6e         exception
71c0: 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d   now...      //.
71d0: 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20  .      if (_sql 
71e0: 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
71f0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
7200: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63  LiteException("c
7210: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
7220: 20 69 73 20 73 74 69 6c 6c 20 61 63 74 69 76 65   is still active
7230: 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f 75 73  ");....      _us
7240: 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f 6c 3b  ePool = usePool;
7250: 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e 61 6d  ..      _fileNam
7260: 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d 65 3b  e = strFilename;
7270: 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67 73 20 3d  ..      _flags =
7280: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
7290: 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 75  ;....      if (u
72a0: 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b  sePool)..      {
72b0: 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c 20 3d  ..        _sql =
72c0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
72d0: 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73 74 72  nPool.Remove(str
72e0: 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50 6f 6f  Filename, maxPoo
72f0: 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f 6f 6c  lSize, out _pool
7300: 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20  Version);....   
7310: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
7320: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
7330: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
7340: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
7350: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
7360: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
7370: 74 54 79 70 65 2e 4f 70 65 6e 65 64 46 72 6f 6d  tType.OpenedFrom
7380: 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c  Pool, null, null
7390: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  ,..            n
73a0: 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c  ull, null, _sql,
73b0: 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65   strFilename, ne
73c0: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20  w object[] {..  
73d0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
73e0: 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72 46 69  (SQLite3), strFi
73f0: 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c  lename, vfsName,
7400: 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73   connectionFlags
7410: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6f  ,..            o
7420: 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f  penFlags, maxPoo
7430: 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c 2c 20  lSize, usePool, 
7440: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29  _poolVersion }))
7450: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
7460: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
7470: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
7480: 20 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74        Trace.Writ
7490: 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68  eLine(HelperMeth
74a0: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
74b0: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43  (..            C
74c0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
74d0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
74e0: 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20 28 50          "Open (P
74f0: 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61 6e 64  ool): {0}", Hand
7500: 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d  leToString()));.
7510: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d  .#endif..      }
7520: 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73  ....      if (_s
7530: 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ql == null)..   
7540: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 72     {..        tr
7550: 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
7560: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64 6f 20            // do 
7570: 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20  nothing...      
7580: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
7590: 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68  ally /* NOTE: Th
75a0: 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70 72 6f  read.Abort() pro
75b0: 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20  tection. */..   
75c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
75d0: 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20 49 6e    IntPtr db = In
75e0: 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
75f0: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
7600: 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20  rCode n;....#if 
7610: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
7620: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ..          int 
7630: 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63 6f 6e  extFuncs = ((con
7640: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26 20 53  nectionFlags & S
7650: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
7660: 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e  lags.NoExtension
7670: 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20 53 51  Functions) != SQ
7680: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
7690: 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f 6e 46  ags.NoExtensionF
76a0: 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20 3a 20  unctions) ? 1 : 
76b0: 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  0;....          
76c0: 69 66 20 28 65 78 74 46 75 6e 63 73 20 21 3d 20  if (extFuncs != 
76d0: 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  0)..          {.
76e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
76f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
7700: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
7710: 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54 46 38  n_interop(ToUTF8
7720: 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c 20 54  (strFilename), T
7730: 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 2c 20  oUTF8(vfsName), 
7740: 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74 46 75  openFlags, extFu
7750: 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d 0a 20  ncs, ref db);.. 
7760: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
7770: 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65 6e 64        else..#end
7780: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  if..          {.
7790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d  .            n =
77a0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
77b0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f 70 65  hods.sqlite3_ope
77c0: 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74 72 46  n_v2(ToUTF8(strF
77d0: 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20 64 62  ilename), ref db
77e0: 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54 6f 55  , openFlags, ToU
77f0: 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b 0d 0a  TF8(vfsName));..
7800: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 23            }....#
7810: 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f  if !NET_COMPACT_
7820: 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e  20 && TRACE_CONN
7830: 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20  ECTION..        
7840: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
7850: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
7860: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
7870: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
7880: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
7890: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
78a0: 20 20 20 20 20 20 20 20 22 4f 70 65 6e 3a 20 7b          "Open: {
78b0: 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65 6e 64  0}", db));..#end
78c0: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
78d0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
78e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
78f0: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
7900: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
7910: 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c  ..          _sql
7920: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43 6f 6e   = new SQLiteCon
7930: 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28 64 62  nectionHandle(db
7940: 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20 20 20  , true);..      
7950: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63    }..        loc
7960: 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20 48 41  k (_sql) { /* HA
7970: 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20 53 79  CK: Force the Sy
7980: 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20 22 63  ncBlock to be "c
7990: 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a 2f 20  reated" now. */ 
79a0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  }....        SQL
79b0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e  iteConnection.On
79c0: 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65  Changed(null, ne
79d0: 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  w ConnectionEven
79e0: 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20  tArgs(..        
79f0: 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
7a00: 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65  tionEventType.Ne
7a10: 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c  wCriticalHandle,
7a20: 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20   null,..        
7a30: 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
7a40: 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74 72 46  null, _sql, strF
7a50: 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a  ilename, new obj
7a60: 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20  ect[] {..       
7a70: 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c 69       typeof(SQLi
7a80: 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e 61 6d  te3), strFilenam
7a90: 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f 6e 6e  e, vfsName, conn
7aa0: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a 20 20  ectionFlags,..  
7ab0: 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e 46 6c            openFl
7ac0: 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69 7a 65  ags, maxPoolSize
7ad0: 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b 0d 0a  , usePool }));..
7ae0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
7af0: 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74 69 6f   // Bind functio
7b00: 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e 6e 65  ns to this conne
7b10: 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79 20 70  ction.  If any p
7b20: 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f 6e  revious function
7b30: 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20 6e 61  s of the same na
7b40: 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77 65 72  me..      // wer
7b50: 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e 64 2c  e already bound,
7b60: 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20 62 69   then the new bi
7b70: 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65 20 74  ndings replace t
7b80: 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20 20 69  he old...      i
7b90: 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  f ((connectionFl
7ba0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
7bb0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69  ectionFlags.NoBi
7bc0: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  ndFunctions) != 
7bd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7be0: 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75 6e 63  Flags.NoBindFunc
7bf0: 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20 7b 0d  tions)..      {.
7c00: 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f  .          if (_
7c10: 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c  functions == nul
7c20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
7c30: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 20 6e    _functions = n
7c40: 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c 53 51  ew Dictionary<SQ
7c50: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72  LiteFunctionAttr
7c60: 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e  ibute, SQLiteFun
7c70: 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20 20 20  ction>();....   
7c80: 20 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 28         foreach (
7c90: 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53 51 4c  KeyValuePair<SQL
7ca0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
7cb0: 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75 6e 63  bute, SQLiteFunc
7cc0: 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20 20 20  tion> pair..    
7cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
7ce0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 2e   SQLiteFunction.
7cf0: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28 74 68  BindFunctions(th
7d00: 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c  is, connectionFl
7d10: 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ags))..         
7d20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
7d30: 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70 61 69    _functions[pai
7d40: 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e 56 61  r.Key] = pair.Va
7d50: 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  lue;..          
7d60: 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  }..      }....  
7d70: 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74 28 30      SetTimeout(0
7d80: 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b 65 65  );..      GC.Kee
7d90: 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d 0a 20  pAlive(_sql);.. 
7da0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7db0: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7dc0: 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29 0d 0a  id ClearPool()..
7dd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
7de0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
7df0: 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66 69 6c  l.ClearPool(_fil
7e00: 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
7e10: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
7e20: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 75 6e  verride int Coun
7e30: 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a  tPool()..    {..
7e40: 20 20 20 20 20 20 20 20 44 69 63 74 69 6f 6e 61          Dictiona
7e50: 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74 3e 20  ry<string, int> 
7e60: 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b 0d 0a  counts = null;..
7e70: 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70 65 6e          int open
7e80: 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20  Count = 0;..    
7e90: 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43 6f 75      int closeCou
7ea0: 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20  nt = 0;..       
7eb0: 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e 74 20   int totalCount 
7ec0: 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  = 0;....        
7ed0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7ee0: 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73 28 5f  Pool.GetCounts(_
7ef0: 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20 20  fileName,..     
7f00: 20 20 20 20 20 20 20 72 65 66 20 63 6f 75 6e 74         ref count
7f10: 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75 6e 74  s, ref openCount
7f20: 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75 6e 74  , ref closeCount
7f30: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ,..            r
7f40: 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29 3b 0d  ef totalCount);.
7f50: 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
7f60: 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d 0a 20  n totalCount;.. 
7f70: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
7f80: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f  rnal override vo
7f90: 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28 69 6e  id SetTimeout(in
7fa0: 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d 0a 20  t nTimeoutMS).. 
7fb0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50     {..      IntP
7fc0: 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d 0a 20  tr db = _sql;.. 
7fd0: 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d 20 49       if (db == I
7fe0: 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68 72 6f  ntPtr.Zero) thro
7ff0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8000: 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e 65 63  ption("no connec
8010: 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76 61 69  tion handle avai
8020: 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20 20 20  lable");..      
8030: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
8040: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
8050: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
8060: 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
8070: 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d 0a 20   nTimeoutMS);.. 
8080: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
8090: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
80a0: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
80b0: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
80c0: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
80d0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
80e0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
80f0: 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69 74 65  bool Step(SQLite
8100: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d  Statement stmt).
8110: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51  .    {..      SQ
8120: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 3b  LiteErrorCode n;
8130: 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d 20 72  ..      Random r
8140: 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  nd = null;..    
8150: 20 20 75 69 6e 74 20 73 74 61 72 74 74 69 63 6b    uint starttick
8160: 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e   = (uint)Environ
8170: 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d  ment.TickCount;.
8180: 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69 6d 65  .      uint time
8190: 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73 74 6d  out = (uint)(stm
81a0: 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d  t._command._comm
81b0: 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31 30 30  andTimeout * 100
81c0: 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52 65 73  0);....      Res
81d0: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 3b  etCancelCount();
81e0: 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c 65 20  ....      while 
81f0: 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20 7b 0d  (true)..      {.
8200: 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20 20  .        try..  
8210: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
8220: 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69       // do nothi
8230: 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ng...        }..
8240: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
8250: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
8260: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
8270: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
8280: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e 20 3d  {..          n =
8290: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
82a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73 74 65  hods.sqlite3_ste
82b0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
82c0: 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  tmt);..        }
82d0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
82e0: 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61  ShouldThrowForCa
82f0: 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20  ncel())..       
8300: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
8310: 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
8320: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
8330: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8340: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
8350: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d  rorCode.Row) ||.
8360: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
8370: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
8380: 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20  orCode.Done)).. 
8390: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
83a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20                n 
83b0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
83c0: 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20  e.Interrupt;..  
83d0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
83e0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
83f0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
8400: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
8410: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
8420: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
8430: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
8440: 74 65 72 72 75 70 74 29 20 72 65 74 75 72 6e 20  terrupt) return 
8450: 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
8460: 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
8470: 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 72 65  rrorCode.Row) re
8480: 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20  turn true;..    
8490: 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
84a0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e  iteErrorCode.Don
84b0: 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73 65 3b  e) return false;
84c0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
84d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
84e0: 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20  Code.Ok)..      
84f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 53    {..          S
8500: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72  QLiteErrorCode r
8510: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 2f  ;....          /
8520: 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63 75 72  / An error occur
8530: 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74 6f 20  red, attempt to 
8540: 72 65 73 65 74 20 74 68 65 20 73 74 61 74 65 6d  reset the statem
8550: 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72 65 73  ent.  If the res
8560: 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61 75 73  et worked becaus
8570: 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20 20 20  e the..         
8580: 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73 20 63   // schema has c
8590: 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79 20 74  hanged, re-try t
85a0: 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e 20 20  he step again.  
85b0: 49 66 20 69 74 20 65 72 72 6f 72 65 64 20 6f 75  If it errored ou
85c0: 72 20 62 65 63 61 75 73 65 20 74 68 65 20 64 61  r because the da
85d0: 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 20 20  tabase..        
85e0: 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64 2c 20    // is locked, 
85f0: 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72 79 69  then keep retryi
8600: 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63 6f 6d  ng until the com
8610: 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f 63 63  mand timeout occ
8620: 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20  urs...          
8630: 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74 29 3b  r = Reset(stmt);
8640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  ....          if
8650: 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (r == SQLiteErr
8660: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
8670: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
8680: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
8690: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
86a0: 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r());....       
86b0: 20 20 20 65 6c 73 65 20 69 66 20 28 28 72 20 3d     else if ((r =
86c0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
86d0: 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20 3d 3d  e.Locked || r ==
86e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
86f0: 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74 2e 5f  .Busy) && stmt._
8700: 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c 6c 29  command != null)
8710: 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20  ..          {.. 
8720: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4b 65             // Ke
8730: 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20 20 20  ep trying..     
8740: 20 20 20 20 20 20 20 69 66 20 28 72 6e 64 20 3d         if (rnd =
8750: 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74  = null) // First
8760: 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e 63 6f   time we've enco
8770: 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f 63 6b  untered the lock
8780: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8790: 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d  rnd = new Random
87a0: 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
87b0: 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65 20 65     // If we've e
87c0: 78 63 65 65 64 65 64 20 74 68 65 20 63 6f 6d 6d  xceeded the comm
87d0: 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c 20 67  and's timeout, g
87e0: 69 76 65 20 75 70 20 61 6e 64 20 74 68 72 6f 77  ive up and throw
87f0: 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20 20 20   an error..     
8800: 20 20 20 20 20 20 20 69 66 20 28 28 75 69 6e 74         if ((uint
8810: 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63  )Environment.Tic
8820: 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74 74 69  kCount - startti
8830: 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d 0a 20  ck > timeout).. 
8840: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8850: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
8860: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
8870: 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61 73 74  ption(r, GetLast
8880: 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20  Error());..     
8890: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
88a0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
88b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
88c0: 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65           // Othe
88d0: 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20  rwise sleep for 
88e0: 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20  a random amount 
88f0: 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35  of time up to 15
8900: 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  0ms..           
8910: 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64     System.Thread
8920: 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70  ing.Thread.Sleep
8930: 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30  (rnd.Next(1, 150
8940: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
8950: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d   }..          }.
8960: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
8970: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
8980: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8990: 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74 68 65  .    /// Has the
89a0: 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28   sqlite3_errstr(
89b0: 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 41  ) core library A
89c0: 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65 64 20  PI been checked 
89d0: 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20 2f 2f  for yet?..    //
89e0: 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74 20 70  / If so, is it p
89f0: 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f  resent?..    ///
8a00: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8a10: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
8a20: 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72 73 74  bool? have_errst
8a30: 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  r = null;....   
8a40: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
8a50: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
8a60: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67  the error messag
8a70: 65 20 66 6f 72 20 74 68 65 20 73 70 65 63 69 66  e for the specif
8a80: 69 65 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ied SQLite retur
8a90: 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a 20 20  n code using..  
8aa0: 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69 74 65    /// the sqlite
8ab0: 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e 63 74  3_errstr() funct
8ac0: 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62 61 63  ion, falling bac
8ad0: 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72 6e 61  k to the interna
8ae0: 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20 2f 2f  l lookup..    //
8af0: 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63 65 73  / table if neces
8b00: 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sary...    /// <
8b10: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
8b20: 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
8b30: 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65 20 72  rc">The SQLite r
8b40: 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70 61 72  eturn code.</par
8b50: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
8b60: 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f 72 20  turns>The error 
8b70: 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c 6c 20  message or null 
8b80: 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  if it cannot be 
8b90: 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e 73 3e  found.</returns>
8ba0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73  ..    internal s
8bb0: 74 61 74 69 63 20 73 74 72 69 6e 67 20 47 65 74  tatic string Get
8bc0: 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51 4c 69  ErrorString(SQLi
8bd0: 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 29 0d  teErrorCode rc).
8be0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
8bf0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
8c00: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
8c10: 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d 20 6e  have_errstr == n
8c20: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
8c30: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
8c40: 20 20 20 20 20 69 6e 74 20 76 65 72 73 69 6f 6e       int version
8c50: 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74 65 56  Number = SQLiteV
8c60: 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d 0a 20  ersionNumber;.. 
8c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68                 h
8c80: 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28 76 65  ave_errstr = (ve
8c90: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
8ca0: 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20 20 20  007015);..      
8cb0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
8cc0: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
8cd0: 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d 0a 20  )have_errstr).. 
8ce0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
8cf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 49 6e                In
8d00: 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73 61 66  tPtr ptr = Unsaf
8d10: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
8d20: 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28 72 63  qlite3_errstr(rc
8d30: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
8d40: 20 20 20 20 20 20 69 66 20 28 70 74 72 20 21 3d        if (ptr !=
8d50: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
8d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
8d70: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
8d80: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
8d90: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
8da0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d 61 72        return Mar
8db0: 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69 6e 67  shal.PtrToString
8dc0: 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65 6c 73  Ansi(ptr);..#els
8dd0: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
8de0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54         return UT
8df0: 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72 2c 20  F8ToString(ptr, 
8e00: 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
8e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
8e20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
8e30: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
8e40: 20 20 20 63 61 74 63 68 20 28 45 6e 74 72 79 50     catch (EntryP
8e50: 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78 63 65  ointNotFoundExce
8e60: 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20 20 20  ption)..        
8e70: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
8e80: 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20  / do nothing... 
8e90: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
8ea0: 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c 6c 62      return Fallb
8eb0: 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72 69 6e  ackGetErrorStrin
8ec0: 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  g(rc);..    }...
8ed0: 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72  .    /// <summar
8ee0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20  y>..    /// Has 
8ef0: 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74 6d 74  the sqlite3_stmt
8f00: 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f 72 65  _readonly() core
8f10: 20 6c 69 62 72 61 72 79 20 41 50 49 20 62 65 65   library API bee
8f20: 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20 79 65  n checked for ye
8f30: 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66 20 73  t?..    /// If s
8f40: 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65 6e 74  o, is it present
8f50: 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ?..    /// </sum
8f60: 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61  mary>..    priva
8f70: 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 3f 20  te static bool? 
8f80: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
8f90: 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  ly = null;....  
8fa0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
8fb0: 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73  .    /// Returns
8fc0: 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   non-zero if the
8fd0: 20 73 70 65 63 69 66 69 65 64 20 73 74 61 74 65   specified state
8fe0: 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f 6e 6c  ment is read-onl
8ff0: 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a 20 20  y in nature...  
9000: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
9010: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
9020: 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68 65   name="stmt">The
9030: 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20 63 68   statement to ch
9040: 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  eck.</param>..  
9050: 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54    /// <returns>T
9060: 72 75 65 20 69 66 20 74 68 65 20 6f 75 74 65 72  rue if the outer
9070: 20 71 75 65 72 79 20 69 73 20 72 65 61 64 2d 6f   query is read-o
9080: 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a  nly.</returns>..
9090: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
90a0: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61  rride bool IsRea
90b0: 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  dOnly(..        
90c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
90d0: 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20 29 0d  stmt..        ).
90e0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
90f0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
9100: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
9110: 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e  have_stmt_readon
9120: 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ly == null)..   
9130: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
9140: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
9150: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3d 20  versionNumber = 
9160: 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e 75 6d  SQLiteVersionNum
9170: 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ber;..          
9180: 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d 74 5f        have_stmt_
9190: 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65 72 73  readonly = (vers
91a0: 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33 30 30  ionNumber >= 300
91b0: 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20 20 20  7004);..        
91c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
91d0: 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c 29 68       if ((bool)h
91e0: 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f 6e 6c  ave_stmt_readonl
91f0: 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  y)..            
9200: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
9210: 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
9220: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9230: 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61 64 6f  lite3_stmt_reado
9240: 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nly(..          
9250: 20 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 5f            stmt._
9260: 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21 3d 20  sqlite_stmt) != 
9270: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
9280: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
9290: 20 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74        catch (Ent
92a0: 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45  ryPointNotFoundE
92b0: 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20  xception)..     
92c0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
92d0: 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
92e0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
92f0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 61         return fa
9300: 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20 55 6e  lse; /* NOTE: Un
9310: 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20 66 61  known, assume fa
9320: 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d 0d 0a  lse. */..    }..
9330: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9340: 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
9350: 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28 53 51  rorCode Reset(SQ
9360: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
9370: 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  mt)..    {..    
9380: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
9390: 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  e n;....#if !SQL
93a0: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
93b0: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
93c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
93d0: 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65 72 6f  te3_reset_intero
93e0: 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
93f0: 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  tmt);..#else..  
9400: 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61      n = UnsafeNa
9410: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
9420: 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74 2e 5f  te3_reset(stmt._
9430: 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a 23  sqlite_stmt);..#
9440: 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 2f  endif....      /
9450: 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d 61 20  / If the schema 
9460: 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61 6e 64  changed, try and
9470: 20 72 65 2d 70 72 65 70 61 72 65 20 69 74 0d 0a   re-prepare it..
9480: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
9490: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53  QLiteErrorCode.S
94a0: 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20 7b 0d  chema)..      {.
94b0: 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65 63 72  .        // Recr
94c0: 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73 74 61  eate a dummy sta
94d0: 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20 20 20  tement..        
94e0: 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e 75 6c  string str = nul
94f0: 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73 69 6e  l;..        usin
9500: 67 20 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  g (SQLiteStateme
9510: 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61 72 65  nt tmp = Prepare
9520: 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73 71 6c  (null, stmt._sql
9530: 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c 6c 2c  Statement, null,
9540: 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f 63 6f   (uint)(stmt._co
9550: 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64 54 69  mmand._commandTi
9560: 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c 20 72  meout * 1000), r
9570: 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20 20 20  ef str))..      
9580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 2f    {..          /
9590: 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65 20 65  / Finalize the e
95a0: 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d 65 6e  xisting statemen
95b0: 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 6d  t..          stm
95c0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2e 44  t._sqlite_stmt.D
95d0: 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20 20  ispose();..     
95e0: 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69 67 6e       // Reassign
95f0: 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65 6e 74   a new statement
9600: 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68 65 20   pointer to the 
9610: 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20 61 6e  old statement an
9620: 64 20 63 6c 65 61 72 20 74 68 65 20 74 65 6d 70  d clear the temp
9630: 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20 20 20  orary one..     
9640: 20 20 20 20 20 69 66 20 28 74 6d 70 20 21 3d 20       if (tmp != 
9650: 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
9660: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9670: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
9680: 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f  t = tmp._sqlite_
9690: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  stmt;..         
96a0: 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65 5f 73     tmp._sqlite_s
96b0: 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  tmt = null;..   
96c0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
96d0: 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70 6c 79        // Reapply
96e0: 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20 20 20   parameters..   
96f0: 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69 6e 64         stmt.Bind
9700: 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d 0a 20  Parameters();.. 
9710: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
9720: 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65 45    return SQLiteE
9730: 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f 77 6e  rrorCode.Unknown
9740: 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73 20 4f  ; // Reset was O
9750: 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61 20 63  K, with schema c
9760: 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d 0d 0a  hange..      }..
9770: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
9780: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
9790: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 6e 20  ode.Locked || n 
97a0: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
97b0: 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20 20 20  de.Busy)..      
97c0: 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d 0a 20    return n;.... 
97d0: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
97e0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
97f0: 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72 6f 77  )..        throw
9800: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
9810: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
9820: 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20  rror());....    
9830: 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f 20 57    return n; // W
9840: 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f 20 73  e reset OK, no s
9850: 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d 0a 20  chema changes.. 
9860: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
9870: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
9880: 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72 6f  ring GetLastErro
9890: 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  r()..    {..    
98a0: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 4c 61      return GetLa
98b0: 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b 0d 0a  stError(null);..
98c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
98d0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
98e0: 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72 72  tring GetLastErr
98f0: 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56 61 6c  or(string defVal
9900: 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ue)..    {..    
9910: 20 20 20 20 73 74 72 69 6e 67 20 72 65 73 75 6c      string resul
9920: 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65 2e 47  t = SQLiteBase.G
9930: 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73 71 6c  etLastError(_sql
9940: 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20 20  , _sql);..      
9950: 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49 73 4e    if (String.IsN
9960: 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73 75 6c  ullOrEmpty(resul
9970: 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64 65 66  t)) result = def
9980: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
9990: 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b 0d 0a  return result;..
99a0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
99b0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
99f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9a00: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
9a10: 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75 65 72      #region Quer
9a20: 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20 53 75  y Diagnostics Su
9a30: 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c 41 54  pport..#if !PLAT
9a40: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
9a50: 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f 20 3c  EWORK..    /// <
9a60: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9a70: 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69 73 20  / This field is 
9a80: 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74 72 61  used to keep tra
9a90: 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20 6f 72  ck of whether or
9aa0: 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20 2f 2f   not the..    //
9ab0: 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63 65 4c  / "SQLite_ForceL
9ac0: 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76 69 72  ogPrepare" envir
9ad0: 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c 65 20  onment variable 
9ae0: 68 61 73 20 62 65 65 6e 20 71 75 65 72 69 65 64  has been queried
9af0: 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20 20 2f  .  If so,..    /
9b00: 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c 79 20  // it will only 
9b10: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
9b20: 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 20 76  he environment v
9b30: 61 72 69 61 62 6c 65 20 77 61 73 20 70 72 65 73  ariable was pres
9b40: 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ent...    /// </
9b50: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72  summary>..    pr
9b60: 69 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f  ivate static boo
9b70: 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61  l? forceLogPrepa
9b80: 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  re = null;....  
9b90: 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f    //////////////
9ba0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bb0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bc0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bd0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9be0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9bf0: 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75  /....    /// <su
9c00: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
9c10: 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 61 6c  Determines if al
9c20: 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70 61  l calls to prepa
9c30: 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 20 77  re a SQL query w
9c40: 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c 0d 0a  ill be logged,..
9c50: 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64 6c 65      /// regardle
9c60: 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67 73 20  ss of the flags 
9c70: 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
9c80: 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  ed connection...
9c90: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9ca0: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
9cb0: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  urns>..    /// N
9cc0: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67 20 61  on-zero to log a
9cd0: 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65 70  ll calls to prep
9ce0: 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79 2e  are a SQL query.
9cf0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
9d00: 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  rns>..    privat
9d10: 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 46 6f  e static bool Fo
9d20: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28 29 0d  rceLogPrepare().
9d30: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
9d40: 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74 29 0d  lock (syncRoot).
9d50: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
9d60: 20 20 20 20 20 20 20 20 69 66 20 28 66 6f 72 63          if (forc
9d70: 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d 20 6e  eLogPrepare == n
9d80: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
9d90: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9da0: 20 20 20 20 20 69 66 20 28 55 6e 73 61 66 65 4e       if (UnsafeN
9db0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65 74  ativeMethods.Get
9dc0: 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d 0a 20  SettingValue(.. 
9dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9de0: 20 20 20 20 20 20 20 22 53 51 4c 69 74 65 5f 46         "SQLite_F
9df0: 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 22 2c  orceLogPrepare",
9e00: 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c 29 0d   null) != null).
9e10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e20: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
9e30: 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c 6f 67          forceLog
9e40: 50 72 65 70 61 72 65 20 3d 20 74 72 75 65 3b 0d  Prepare = true;.
9e50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9e60: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
9e70: 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
9e80: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
9e90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9ea0: 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65   forceLogPrepare
9eb0: 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20   = false;..     
9ec0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
9ed0: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
9ee0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
9ef0: 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c 6f 67  n (bool)forceLog
9f00: 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20 20 20  Prepare;..      
9f10: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64    }..    }..#end
9f20: 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65 67 69  if..    #endregi
9f30: 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f 2f 2f  on....    //////
9f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20  /////////....   
9fa0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
9fb0: 64 65 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65  de SQLiteStateme
9fc0: 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c 69 74  nt Prepare(SQLit
9fd0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e 6e 2c  eConnection cnn,
9fe0: 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c 2c 20   string strSql, 
9ff0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a000: 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74 20 74  previous, uint t
a010: 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74  imeoutMS, ref st
a020: 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e 29 0d  ring strRemain).
a030: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 66  .    {..      if
a040: 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c   (!String.IsNull
a050: 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c 29 29  OrEmpty(strSql))
a060: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c   strSql = strSql
a070: 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20 20 20  .Trim();..      
a080: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
a090: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
a0a0: 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ))..      {..   
a0b0: 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
a0c0: 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69 74 65   // NOTE: SQLite
a0d0: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
a0e0: 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20 6f 66  t the concept of
a0f0: 20 73 65 70 61 72 61 74 65 20 73 63 68 65 6d 61   separate schema
a100: 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  s..        //   
a110: 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74 61 62      in one datab
a120: 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65 2c 20  ase; therefore, 
a130: 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73 65 20  remove the base 
a140: 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20 20 20  schema name..   
a150: 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 75 73       //       us
a160: 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69 6e 74  ed to smooth int
a170: 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20 74 68  egration with th
a180: 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72 61 6d  e base .NET Fram
a190: 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20 20 2f  ework..        /
a1a0: 2f 20 20 20 20 20 20 20 64 61 74 61 20 63 6c 61  /       data cla
a1b0: 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20 20 2f  sses...        /
a1c0: 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  /..        strin
a1d0: 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61 6d 65  g baseSchemaName
a1e0: 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29   = (cnn != null)
a1f0: 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63 68 65   ? cnn._baseSche
a200: 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b 0d 0a  maName : null;..
a210: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 21 53  ..        if (!S
a220: 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72 45 6d  tring.IsNullOrEm
a230: 70 74 79 28 62 61 73 65 53 63 68 65 6d 61 4e 61  pty(baseSchemaNa
a240: 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  me))..        {.
a250: 0a 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71  .          strSq
a260: 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70 6c 61  l = strSql.Repla
a270: 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ce(..           
a280: 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f 64 73     HelperMethods
a290: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 43 75  .StringFormat(Cu
a2a0: 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
a2b0: 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  antCulture,..   
a2c0: 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b 30 7d             "[{0}
a2d0: 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d 61 4e  ].", baseSchemaN
a2e0: 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45 6d 70  ame), String.Emp
a2f0: 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ty);....        
a300: 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71    strSql = strSq
a310: 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20 20 20  l.Replace(..    
a320: 20 20 20 20 20 20 20 20 20 20 48 65 6c 70 65 72            Helper
a330: 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f  Methods.StringFo
a340: 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e 66 6f  rmat(CultureInfo
a350: 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74 75 72  .InvariantCultur
a360: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
a370: 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65 53 63    "{0}.", baseSc
a380: 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e  hemaName), Strin
a390: 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20 20 20  g.Empty);..     
a3a0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d     }..      }...
a3b0: 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e  .      SQLiteCon
a3c0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
a3d0: 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20 20 20  gs =..          
a3e0: 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  (cnn != null) ? 
a3f0: 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51 4c 69  cnn.Flags : SQLi
a400: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
a410: 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a 20 20  s.Default;....  
a420: 20 20 20 20 69 66 20 28 0d 0a 23 69 66 20 21 50      if (..#if !P
a430: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
a440: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
a450: 20 20 20 20 46 6f 72 63 65 4c 6f 67 50 72 65 70      ForceLogPrep
a460: 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64 69 66  are() ||..#endif
a470: 0d 0a 20 20 20 20 20 20 20 20 20 20 28 28 66 6c  ..          ((fl
a480: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
a490: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 50  ectionFlags.LogP
a4a0: 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c 69 74  repare) == SQLit
a4b0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
a4c0: 2e 4c 6f 67 50 72 65 70 61 72 65 29 29 0d 0a 20  .LogPrepare)).. 
a4d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
a4e0: 20 20 69 66 20 28 28 73 74 72 53 71 6c 20 3d 3d    if ((strSql ==
a4f0: 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72 53 71   null) || (strSq
a500: 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 20 7c  l.Length == 0) |
a510: 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d 28 29  | (strSql.Trim()
a520: 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29 0d 0a  .Length == 0))..
a530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
a540: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
a550: 67 65 28 22 50 72 65 70 61 72 69 6e 67 20 7b 3c  ge("Preparing {<
a560: 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29 3b 0d  nothing>}...");.
a570: 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73 65 0d  .          else.
a580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53  .              S
a590: 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73  QLiteLog.LogMess
a5a0: 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  age(HelperMethod
a5b0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
a5c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a5d0: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
a5e0: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 20 22  urrentCulture, "
a5f0: 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30 7d 7d  Preparing {{{0}}
a600: 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29 29 3b  }...", strSql));
a610: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
a620: 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74 20 3d     IntPtr stmt =
a630: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20   IntPtr.Zero;.. 
a640: 20 20 20 20 20 49 6e 74 50 74 72 20 70 74 72 20       IntPtr ptr 
a650: 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a  = IntPtr.Zero;..
a660: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
a670: 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65  0;..      SQLite
a680: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 53 51  ErrorCode n = SQ
a690: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
a6a0: 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69 6e 74  hema;..      int
a6b0: 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d 0a 20   retries = 0;.. 
a6c0: 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d 75 6d       int maximum
a6d0: 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e 20 21  Retries = (cnn !
a6e0: 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e 5f 70  = null) ? cnn._p
a6f0: 72 65 70 61 72 65 52 65 74 72 69 65 73 20 3a 20  repareRetries : 
a700: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
a710: 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72 65 52  .DefaultPrepareR
a720: 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20 20 62  etries;..      b
a730: 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38  yte[] b = ToUTF8
a740: 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20 20 20  (strSql);..     
a750: 20 73 74 72 69 6e 67 20 74 79 70 65 64 65 66 73   string typedefs
a760: 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20   = null;..      
a770: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
a780: 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20  cmd = null;..   
a790: 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20 3d 20     Random rnd = 
a7a0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75 69 6e  null;..      uin
a7b0: 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20 28 75  t starttick = (u
a7c0: 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e  int)Environment.
a7d0: 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a 20 20  TickCount;....  
a7e0: 20 20 20 20 52 65 73 65 74 43 61 6e 63 65 6c 43      ResetCancelC
a7f0: 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ount();....     
a800: 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65   GCHandle handle
a810: 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c 6c 6f   = GCHandle.Allo
a820: 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54 79 70  c(b, GCHandleTyp
a830: 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20 20 20  e.Pinned);..    
a840: 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20 3d 20    IntPtr psql = 
a850: 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50 69 6e  handle.AddrOfPin
a860: 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a 20 20  nedObject();..  
a870: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
a880: 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74 65 6d  entHandle statem
a890: 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75 6c 6c  entHandle = null
a8a0: 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a 20 20  ;..      try..  
a8b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 77      {..        w
a8c0: 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51 4c 69  hile ((n == SQLi
a8d0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65  teErrorCode.Sche
a8e0: 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74  ma || n == SQLit
a8f0: 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65  eErrorCode.Locke
a900: 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69 74 65  d || n == SQLite
a910: 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 20  ErrorCode.Busy) 
a920: 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d 61 78  && retries < max
a930: 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a 20 20  imumRetries)..  
a940: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
a950: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
a960: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a970: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
a980: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
a990: 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 20          finally 
a9a0: 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e  /* NOTE: Thread.
a9b0: 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63 74 69  Abort() protecti
a9c0: 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  on. */..        
a9d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
a9e0: 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72 2e 5a   stmt = IntPtr.Z
a9f0: 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ero;..          
aa00: 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a    ptr = IntPtr.Z
aa10: 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c  ero;....#if !SQL
aa20: 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
aa30: 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20            len = 
aa40: 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  0;..            
aa50: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
aa60: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
aa70: 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f 70 28  prepare_interop(
aa80: 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e 4c 65  _sql, psql, b.Le
aa90: 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20 73 74  ngth - 1, ref st
aaa0: 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72 65 66  mt, ref ptr, ref
aab0: 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 23   len);..#else..#
aac0: 69 66 20 55 53 45 5f 50 52 45 50 41 52 45 5f 56  if USE_PREPARE_V
aad0: 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  2..            n
aae0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
aaf0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70  ethods.sqlite3_p
ab00: 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c 2c 20  repare_v2(_sql, 
ab10: 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  psql, b.Length -
ab20: 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20 72 65   1, ref stmt, re
ab30: 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65 0d 0a  f ptr);..#else..
ab40: 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20              n = 
ab50: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
ab60: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72 65 70  ods.sqlite3_prep
ab70: 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20  are(_sql, psql, 
ab80: 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65  b.Length - 1, re
ab90: 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74 72 29  f stmt, ref ptr)
aba0: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
abb0: 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d 31 3b         len = -1;
abc0: 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69 66 20  ..#endif....#if 
abd0: 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
abe0: 26 26 20 54 52 41 43 45 5f 53 54 41 54 45 4d 45  && TRACE_STATEME
abf0: 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  NT..            
ac00: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
ac10: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
ac20: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
ac30: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
ac40: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
ac50: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
ac60: 20 20 20 20 20 20 20 20 20 20 22 50 72 65 70 61            "Prepa
ac70: 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22 2c 20  re ({0}): {1}", 
ac80: 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65 6e 64  n, stmt));..#end
ac90: 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  if....          
aca0: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
acb0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
acc0: 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e 74 50  && (stmt != IntP
acd0: 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20 20 20  tr.Zero))..     
ace0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
acf0: 20 20 20 20 20 20 20 20 69 66 20 28 73 74 61 74          if (stat
ad00: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d 20 6e  ementHandle != n
ad10: 75 6c 6c 29 20 73 74 61 74 65 6d 65 6e 74 48 61  ull) statementHa
ad20: 6e 64 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d  ndle.Dispose();.
ad30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
ad40: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d  tatementHandle =
ad50: 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65   new SQLiteState
ad60: 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71 6c 2c  mentHandle(_sql,
ad70: 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20   stmt);..       
ad80: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
ad90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
ada0: 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74 48 61   if (statementHa
adb0: 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle != null).. 
adc0: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
add0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
ade0: 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67  nnection.OnChang
adf0: 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e  ed(null, new Con
ae00: 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73  nectionEventArgs
ae10: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
ae20: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ae30: 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72  nEventType.NewCr
ae40: 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75  iticalHandle, nu
ae50: 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20  ll, null,..     
ae60: 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e           null, n
ae70: 75 6c 6c 2c 20 73 74 61 74 65 6d 65 6e 74 48 61  ull, statementHa
ae80: 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2c 20 6e 65  ndle, strSql, ne
ae90: 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20  w object[] {..  
aea0: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
aeb0: 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 63 6e 6e  of(SQLite3), cnn
aec0: 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f  , strSql, previo
aed0: 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 20 7d 29  us, timeoutMS })
aee0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d  );..          }.
aef0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ...          if 
af00: 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43  (ShouldThrowForC
af10: 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20  ancel())..      
af20: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
af30: 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
af40: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
af50: 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20  k) ||..         
af60: 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20 53           (n == S
af70: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 52  QLiteErrorCode.R
af80: 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20 20  ow) ||..        
af90: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
afa0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
afb0: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
afc0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
afd0: 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d 20 53             n = S
afe0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49  QLiteErrorCode.I
aff0: 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20 20 20  nterrupt;..     
b000: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
b010: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
b020: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
b030: 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d  ption(n, null);.
b040: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  .          }....
b050: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
b060: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
b070: 64 65 2e 49 6e 74 65 72 72 75 70 74 29 0d 0a 20  de.Interrupt).. 
b080: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
b090: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
b0a0: 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
b0b0: 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68 65 6d  eErrorCode.Schem
b0c0: 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  a)..            
b0d0: 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20 20 20  retries++;..    
b0e0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 6e        else if (n
b0f0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
b100: 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20 20 20  ode.Error)..    
b110: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b120: 20 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e       if (String.
b130: 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73 74 45  Compare(GetLastE
b140: 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20 5c 22  rror(), "near \"
b150: 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61 78 20  TYPES\": syntax 
b160: 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67 43 6f  error", StringCo
b170: 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e 61 6c  mparison.Ordinal
b180: 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d 20 30  IgnoreCase) == 0
b190: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
b1a0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b1b0: 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53 71 6c  int pos = strSql
b1c0: 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b 0d 0a  .IndexOf(';');..
b1d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
b1e0: 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70 6f 73   (pos == -1) pos
b1f0: 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74 68   = strSql.Length
b200: 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20 20 20   - 1;....       
b210: 20 20 20 20 20 20 20 74 79 70 65 64 65 66 73 20         typedefs 
b220: 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  = strSql.Substri
b230: 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29 3b 0d  ng(0, pos + 1);.
b240: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
b250: 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 53  trSql = strSql.S
b260: 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b 20 31  ubstring(pos + 1
b270: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
b280: 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20      strRemain = 
b290: 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 0d  String.Empty;...
b2a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77  .              w
b2b0: 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c  hile (cmd == nul
b2c0: 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67  l && strSql.Leng
b2d0: 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20  th > 0)..       
b2e0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
b2f0: 20 20 20 20 20 20 20 20 20 20 63 6d 64 20 3d 20            cmd = 
b300: 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73 74 72  Prepare(cnn, str
b310: 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c 20 74  Sql, previous, t
b320: 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20 73 74  imeoutMS, ref st
b330: 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20 20 20  rRemain);..     
b340: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 53 71             strSq
b350: 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b 0d 0a  l = strRemain;..
b360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
b370: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b380: 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75 6c 6c   if (cmd != null
b390: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
b3a0: 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65 73 28     cmd.SetTypes(
b3b0: 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a 20 20  typedefs);....  
b3c0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
b3d0: 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20  rn cmd;..       
b3e0: 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e 45 54       }..#if (NET
b3f0: 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20 7c 7c  _35 || NET_40 ||
b400: 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54 5f 34   NET_45 || NET_4
b410: 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20 7c 7c  51 || NET_452 ||
b420: 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54 5f 34   NET_46 || NET_4
b430: 36 31 29 20 26 26 20 21 50 4c 41 54 46 4f 52 4d  61) && !PLATFORM
b440: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
b450: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 65  K..            e
b460: 6c 73 65 20 69 66 20 28 5f 62 75 69 6c 64 69 6e  lse if (_buildin
b470: 67 53 63 68 65 6d 61 20 3d 3d 20 66 61 6c 73 65  gSchema == false
b480: 20 26 26 20 53 74 72 69 6e 67 2e 43 6f 6d 70 61   && String.Compa
b490: 72 65 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  re(GetLastError(
b4a0: 29 2c 20 30 2c 20 22 6e 6f 20 73 75 63 68 20 74  ), 0, "no such t
b4b0: 61 62 6c 65 3a 20 54 45 4d 50 2e 53 43 48 45 4d  able: TEMP.SCHEM
b4c0: 41 22 2c 20 30 2c 20 32 36 2c 20 53 74 72 69 6e  A", 0, 26, Strin
b4d0: 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69  gComparison.Ordi
b4e0: 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d  nalIgnoreCase) =
b4f0: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
b500: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
b510: 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d 20 53     strRemain = S
b520: 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a 20 20  tring.Empty;..  
b530: 20 20 20 20 20 20 20 20 20 20 20 20 5f 62 75 69              _bui
b540: 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d 20 74 72  ldingSchema = tr
b550: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
b560: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
b570: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b580: 20 20 20 20 20 20 20 20 20 49 53 51 4c 69 74 65           ISQLite
b590: 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73  SchemaExtensions
b5a0: 20 65 78 74 20 3d 20 28 28 49 53 65 72 76 69 63   ext = ((IServic
b5b0: 65 50 72 6f 76 69 64 65 72 29 53 51 4c 69 74 65  eProvider)SQLite
b5c0: 46 61 63 74 6f 72 79 2e 49 6e 73 74 61 6e 63 65  Factory.Instance
b5d0: 29 2e 47 65 74 53 65 72 76 69 63 65 28 74 79 70  ).GetService(typ
b5e0: 65 6f 66 28 49 53 51 4c 69 74 65 53 63 68 65 6d  eof(ISQLiteSchem
b5f0: 61 45 78 74 65 6e 73 69 6f 6e 73 29 29 20 61 73  aExtensions)) as
b600: 20 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78   ISQLiteSchemaEx
b610: 74 65 6e 73 69 6f 6e 73 3b 0d 0a 0d 0a 20 20 20  tensions;....   
b620: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
b630: 28 65 78 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  (ext != null).. 
b640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b650: 20 65 78 74 2e 42 75 69 6c 64 54 65 6d 70 53 63   ext.BuildTempSc
b660: 68 65 6d 61 28 63 6e 6e 29 3b 0d 0a 0d 0a 20 20  hema(cnn);....  
b670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 77 68                wh
b680: 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e 75 6c 6c  ile (cmd == null
b690: 20 26 26 20 73 74 72 53 71 6c 2e 4c 65 6e 67 74   && strSql.Lengt
b6a0: 68 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20  h > 0)..        
b6b0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64               cmd
b6d0: 20 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20   = Prepare(cnn, 
b6e0: 73 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73  strSql, previous
b6f0: 2c 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66  , timeoutMS, ref
b700: 20 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20   strRemain);..  
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 73 74 72 53 71 6c 20 3d 20 73 74 72 52 65 6d 61  strSql = strRema
b730: 69 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  in;..           
b740: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
b750: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
b760: 20 63 6d 64 3b 0d 0a 20 20 20 20 20 20 20 20 20   cmd;..         
b770: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
b780: 20 20 20 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20        finally.. 
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7b0: 5f 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20  _buildingSchema 
b7c0: 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  = false;..      
b7d0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
b7e0: 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66         }..#endif
b7f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20  ..          }.. 
b800: 20 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66           else if
b810: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
b820: 6f 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c  orCode.Locked ||
b830: 20 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f   n == SQLiteErro
b840: 72 43 6f 64 65 2e 42 75 73 79 29 20 2f 2f 20 4c  rCode.Busy) // L
b850: 6f 63 6b 65 64 20 2d 2d 20 64 65 6c 61 79 20 61  ocked -- delay a
b860: 20 73 6d 61 6c 6c 20 61 6d 6f 75 6e 74 20 62 65   small amount be
b870: 66 6f 72 65 20 72 65 74 72 79 69 6e 67 0d 0a 20  fore retrying.. 
b880: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b890: 20 20 20 20 20 20 20 20 2f 2f 20 4b 65 65 70 20          // Keep 
b8a0: 74 72 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20  trying..        
b8b0: 20 20 20 20 69 66 20 28 72 6e 64 20 3d 3d 20 6e      if (rnd == n
b8c0: 75 6c 6c 29 20 2f 2f 20 46 69 72 73 74 20 74 69  ull) // First ti
b8d0: 6d 65 20 77 65 27 76 65 20 65 6e 63 6f 75 6e 74  me we've encount
b8e0: 65 72 65 64 20 74 68 65 20 6c 6f 63 6b 0d 0a 20  ered the lock.. 
b8f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 6e 64               rnd
b900: 20 3d 20 6e 65 77 20 52 61 6e 64 6f 6d 28 29 3b   = new Random();
b910: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b920: 2f 2f 20 49 66 20 77 65 27 76 65 20 65 78 63 65  // If we've exce
b930: 65 64 65 64 20 74 68 65 20 63 6f 6d 6d 61 6e 64  eded the command
b940: 27 73 20 74 69 6d 65 6f 75 74 2c 20 67 69 76 65  's timeout, give
b950: 20 75 70 20 61 6e 64 20 74 68 72 6f 77 20 61 6e   up and throw an
b960: 20 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20   error..        
b970: 20 20 20 20 69 66 20 28 28 75 69 6e 74 29 45 6e      if ((uint)En
b980: 76 69 72 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f  vironment.TickCo
b990: 75 6e 74 20 2d 20 73 74 61 72 74 74 69 63 6b 20  unt - starttick 
b9a0: 3e 20 74 69 6d 65 6f 75 74 4d 53 29 0d 0a 20 20  > timeoutMS)..  
b9b0: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
b9c0: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
b9d0: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
b9e0: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
b9f0: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
ba00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ba10: 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20       else..     
ba20: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
ba30: 20 20 20 20 20 20 20 20 2f 2f 20 4f 74 68 65 72          // Other
ba40: 77 69 73 65 20 73 6c 65 65 70 20 66 6f 72 20 61  wise sleep for a
ba50: 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e 74 20 6f   random amount o
ba60: 66 20 74 69 6d 65 20 75 70 20 74 6f 20 31 35 30  f time up to 150
ba70: 6d 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ms..            
ba80: 20 20 53 79 73 74 65 6d 2e 54 68 72 65 61 64 69    System.Threadi
ba90: 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65 65 70 28  ng.Thread.Sleep(
baa0: 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31 35 30 29  rnd.Next(1, 150)
bab0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
bac0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  }..          }..
bad0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
bae0: 20 20 20 20 20 69 66 20 28 53 68 6f 75 6c 64 54       if (ShouldT
baf0: 68 72 6f 77 46 6f 72 43 61 6e 63 65 6c 28 29 29  hrowForCancel())
bb00: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
bb10: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 6e 20           if ((n 
bb20: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
bb30: 64 65 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20  de.Ok) ||..     
bb40: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
bb50: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bb60: 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20  .Row) ||..      
bb70: 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d 20            (n == 
bb80: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
bb90: 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Done))..        
bba0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bbb0: 20 20 20 20 20 20 20 6e 20 3d 20 53 51 4c 69 74         n = SQLit
bbc0: 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e 74 65 72  eErrorCode.Inter
bbd0: 72 75 70 74 3b 0d 0a 20 20 20 20 20 20 20 20 20  rupt;..         
bbe0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
bbf0: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
bc00: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
bc10: 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20 20 20 20   null);..       
bc20: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
bc30: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
bc40: 6f 72 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74  orCode.Interrupt
bc50: 29 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a  ) return null;..
bc60: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
bc70: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
bc80: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
bc90: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
bca0: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
bcb0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  );....        st
bcc0: 72 52 65 6d 61 69 6e 20 3d 20 55 54 46 38 54 6f  rRemain = UTF8To
bcd0: 53 74 72 69 6e 67 28 70 74 72 2c 20 6c 65 6e 29  String(ptr, len)
bce0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
bcf0: 28 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  (statementHandle
bd00: 20 21 3d 20 6e 75 6c 6c 29 20 63 6d 64 20 3d 20   != null) cmd = 
bd10: 6e 65 77 20 53 51 4c 69 74 65 53 74 61 74 65 6d  new SQLiteStatem
bd20: 65 6e 74 28 74 68 69 73 2c 20 66 6c 61 67 73 2c  ent(this, flags,
bd30: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
bd40: 2c 20 73 74 72 53 71 6c 2e 53 75 62 73 74 72 69  , strSql.Substri
bd50: 6e 67 28 30 2c 20 73 74 72 53 71 6c 2e 4c 65 6e  ng(0, strSql.Len
bd60: 67 74 68 20 2d 20 73 74 72 52 65 6d 61 69 6e 2e  gth - strRemain.
bd70: 4c 65 6e 67 74 68 29 2c 20 70 72 65 76 69 6f 75  Length), previou
bd80: 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  s);....        r
bd90: 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20  eturn cmd;..    
bda0: 20 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c    }..      final
bdb0: 6c 79 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  ly..      {..   
bdc0: 20 20 20 20 20 68 61 6e 64 6c 65 2e 46 72 65 65       handle.Free
bdd0: 28 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  ();..      }..  
bde0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
bdf0: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
be00: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
be10: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
be20: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
be30: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
be40: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
be50: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
be60: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
be70: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
be80: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
be90: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
bea0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
beb0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
bec0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
bed0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
bee0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
bef0: 72 20 23 7b 31 7d 20 61 73 20 4e 55 4c 4c 2e 2e  r #{1} as NULL..
bf00: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
bf10: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69   handleIntPtr, i
bf20: 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ndex));..    }..
bf30: 0d 0a 20 20 20 20 70 72 6f 74 65 63 74 65 64 20  ..    protected 
bf40: 73 74 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42  static void LogB
bf50: 69 6e 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ind(SQLiteStatem
bf60: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
bf70: 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 56 61 6c  , int index, Val
bf80: 75 65 54 79 70 65 20 76 61 6c 75 65 29 0d 0a 20  ueType value).. 
bf90: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e     {..        In
bfa0: 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74  tPtr handleIntPt
bfb0: 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20  r = handle;.... 
bfc0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
bfd0: 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c 70  .LogMessage(Help
bfe0: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
bff0: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
c000: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
c010: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
c020: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 42  ..            "B
c030: 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65 6e 74  inding statement
c040: 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 23 7b   {0} paramter #{
c050: 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d 20 77  1} as type {2} w
c060: 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33 7d 7d  ith value {{{3}}
c070: 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20  }...",..        
c080: 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72      handleIntPtr
c090: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 2e 47  , index, value.G
c0a0: 65 74 54 79 70 65 28 29 2c 20 76 61 6c 75 65 29  etType(), value)
c0b0: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c0c0: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c0d0: 73 74 72 69 6e 67 20 46 6f 72 6d 61 74 44 61 74  string FormatDat
c0e0: 65 54 69 6d 65 28 44 61 74 65 54 69 6d 65 20 76  eTime(DateTime v
c0f0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
c100: 20 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c        StringBuil
c110: 64 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77  der result = new
c120: 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29   StringBuilder()
c130: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 73  ;....        res
c140: 75 6c 74 2e 41 70 70 65 6e 64 28 76 61 6c 75 65  ult.Append(value
c150: 2e 54 6f 53 74 72 69 6e 67 28 22 79 79 79 79 2d  .ToString("yyyy-
c160: 4d 4d 2d 64 64 54 48 48 3a 6d 6d 3a 73 73 2e 46  MM-ddTHH:mm:ss.F
c170: 46 46 46 46 46 46 4b 22 29 29 3b 0d 0a 20 20 20  FFFFFFK"));..   
c180: 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65       result.Appe
c190: 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20 20  nd(' ');..      
c1a0: 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28    result.Append(
c1b0: 76 61 6c 75 65 2e 4b 69 6e 64 29 3b 0d 0a 20 20  value.Kind);..  
c1c0: 20 20 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70        result.App
c1d0: 65 6e 64 28 27 20 27 29 3b 0d 0a 20 20 20 20 20  end(' ');..     
c1e0: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
c1f0: 28 76 61 6c 75 65 2e 54 69 63 6b 73 29 3b 0d 0a  (value.Ticks);..
c200: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
c210: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
c220: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
c230: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
c240: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
c250: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
c260: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
c270: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
c280: 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  e value)..    {.
c290: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
c2a0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c2b0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c2c0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
c2d0: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
c2e0: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
c2f0: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
c300: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
c310: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
c320: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
c330: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
c340: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
c350: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
c360: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
c370: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
c380: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
c390: 65 78 2c 20 74 79 70 65 6f 66 28 44 61 74 65 54  ex, typeof(DateT
c3a0: 69 6d 65 29 2c 20 46 6f 72 6d 61 74 44 61 74 65  ime), FormatDate
c3b0: 54 69 6d 65 28 76 61 6c 75 65 29 29 29 3b 0d 0a  Time(value)));..
c3c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
c3d0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
c3e0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
c3f0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
c400: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
c410: 65 78 2c 20 73 74 72 69 6e 67 20 76 61 6c 75 65  ex, string value
c420: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
c430: 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49    IntPtr handleI
c440: 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  ntPtr = handle;.
c450: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
c460: 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28  eLog.LogMessage(
c470: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
c480: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
c490: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
c4a0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
c4b0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
c4c0: 20 20 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65    "Binding state
c4d0: 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65  ment {0} paramte
c4e0: 72 20 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b  r #{1} as type {
c4f0: 32 7d 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b  2} with value {{
c500: 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20  {3}}}...",..    
c510: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
c520: 74 50 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70  tPtr, index, typ
c530: 65 6f 66 28 53 74 72 69 6e 67 29 2c 20 28 76 61  eof(String), (va
c540: 6c 75 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 76  lue != null) ? v
c550: 61 6c 75 65 20 3a 20 22 3c 6e 75 6c 6c 3e 22 29  alue : "<null>")
c560: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
c570: 20 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20   private static 
c580: 73 74 72 69 6e 67 20 54 6f 48 65 78 61 64 65 63  string ToHexadec
c590: 69 6d 61 6c 53 74 72 69 6e 67 28 0d 0a 20 20 20  imalString(..   
c5a0: 20 20 20 20 20 62 79 74 65 5b 5d 20 61 72 72 61       byte[] arra
c5b0: 79 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  y..        )..  
c5c0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
c5d0: 28 61 72 72 61 79 20 3d 3d 20 6e 75 6c 6c 29 0d  (array == null).
c5e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
c5f0: 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  urn null;....   
c600: 20 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64       StringBuild
c610: 65 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20  er result = new 
c620: 53 74 72 69 6e 67 42 75 69 6c 64 65 72 28 61 72  StringBuilder(ar
c630: 72 61 79 2e 4c 65 6e 67 74 68 20 2a 20 32 29 3b  ray.Length * 2);
c640: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ....        int 
c650: 6c 65 6e 67 74 68 20 3d 20 61 72 72 61 79 2e 4c  length = array.L
c660: 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20  ength;....      
c670: 20 20 66 6f 72 20 28 69 6e 74 20 69 6e 64 65 78    for (int index
c680: 20 3d 20 30 3b 20 69 6e 64 65 78 20 3c 20 6c 65   = 0; index < le
c690: 6e 67 74 68 3b 20 69 6e 64 65 78 2b 2b 29 0d 0a  ngth; index++)..
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 72 65 73 75              resu
c6b0: 6c 74 2e 41 70 70 65 6e 64 28 61 72 72 61 79 5b  lt.Append(array[
c6c0: 69 6e 64 65 78 5d 2e 54 6f 53 74 72 69 6e 67 28  index].ToString(
c6d0: 22 78 32 22 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  "x2"));....     
c6e0: 20 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74     return result
c6f0: 2e 54 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20  .ToString();..  
c700: 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65    }....    prote
c710: 63 74 65 64 20 73 74 61 74 69 63 20 76 6f 69 64  cted static void
c720: 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53   LogBind(SQLiteS
c730: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
c740: 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78  andle, int index
c750: 2c 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d  , byte[] value).
c760: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c770: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
c780: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
c790: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
c7a0: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
c7b0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
c7c0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
c7d0: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
c7e0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
c7f0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c800: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
c810: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
c820: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
c830: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
c840: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
c850: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
c860: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
c870: 66 28 42 79 74 65 5b 5d 29 2c 20 28 76 61 6c 75  f(Byte[]), (valu
c880: 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 54 6f 48  e != null) ? ToH
c890: 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e 67  exadecimalString
c8a0: 28 76 61 6c 75 65 29 20 3a 20 22 3c 6e 75 6c 6c  (value) : "<null
c8b0: 3e 22 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  >"));..    }....
c8c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
c8d0: 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f  rride void Bind_
c8e0: 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74 61  Double(SQLiteSta
c8f0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
c900: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
c910: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
c920: 64 65 78 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75  dex, double valu
c930: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
c940: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
c950: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
c960: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
c970: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
c980: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
c990: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
c9a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
c9b0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
c9c0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
c9d0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
c9e0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
c9f0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
ca00: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
ca10: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
ca20: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
ca30: 4b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  K..        SQLit
ca40: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
ca50: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
ca60: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
ca70: 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65 2c 20 69  double(handle, i
ca80: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
ca90: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
caa0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
cab0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
cac0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
cad0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
cae0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
caf0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
cb00: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
cb10: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
cb20: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
cb30: 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69  e3_bind_double_i
cb40: 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69  nterop(handle, i
cb50: 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29  ndex, ref value)
cb60: 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e  ;..        if (n
cb70: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
cb80: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
cb90: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
cba0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
cbb0: 72 28 29 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  r());..#else..  
cbc0: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
cbd0: 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78  NotImplementedEx
cbe0: 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64  ception();..#end
cbf0: 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  if..    }....   
cc00: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
cc10: 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 49 6e 74  de void Bind_Int
cc20: 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  32(SQLiteStateme
cc30: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
cc40: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
cc50: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c  lags, int index,
cc60: 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20   int value)..   
cc70: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
cc80: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
cc90: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
cca0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
ccb0: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
ccc0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ccd0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cce0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
ccf0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
cd00: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
cd10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
cd20: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
cd30: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
cd40: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
cd50: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
cd60: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
cd70: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
cd80: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68 61 6e  te3_bind_int(han
cd90: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
cda0: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  e);..        if 
cdb0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
cdc0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
cdd0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
cde0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
cdf0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
ce00: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
ce10: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
ce20: 64 5f 55 49 6e 74 33 32 28 53 51 4c 69 74 65 53  d_UInt32(SQLiteS
ce30: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53  tatement stmt, S
ce40: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
ce50: 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20  lags flags, int 
ce60: 69 6e 64 65 78 2c 20 75 69 6e 74 20 76 61 6c 75  index, uint valu
ce70: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
ce80: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
ce90: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
cea0: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
ceb0: 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41  tmt;....#if !PLA
cec0: 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41  TFORM_COMPACTFRA
ced0: 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20  MEWORK..        
cee0: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
cef0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
cf00: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
cf10: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
cf20: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
cf30: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
cf40: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
cf50: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
cf60: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
cf70: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
cf80: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
cf90: 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  de n;....       
cfa0: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
cfb0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
cfc0: 61 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73  ags.BindUInt32As
cfd0: 49 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69 74 65  Int64) == SQLite
cfe0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
cff0: 42 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36  BindUInt32AsInt6
d000: 34 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  4)..        {.. 
d010: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
d020: 76 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b 0d  value2 = value;.
d030: 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d  ...#if !PLATFORM
d040: 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52  _COMPACTFRAMEWOR
d050: 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  K..            n
d060: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
d070: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
d080: 69 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65  ind_int64(handle
d090: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29  , index, value2)
d0a0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
d0b0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
d0c0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
d0d0: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d0e0: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36  qlite3_bind_int6
d0f0: 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65  4_interop(handle
d100: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
d110: 75 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  ue2);..#else..  
d120: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
d130: 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
d140: 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
d150: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
d160: 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
d170: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
d180: 20 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61          n = Unsa
d190: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
d1a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e  sqlite3_bind_uin
d1b0: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
d1c0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
d1d0: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20    }..        if 
d1e0: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
d1f0: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
d200: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
d210: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
d220: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
d230: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
d240: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
d250: 64 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  d_Int64(SQLiteSt
d260: 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51  atement stmt, SQ
d270: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d280: 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69  ags flags, int i
d290: 6e 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  ndex, long value
d2a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
d2b0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
d2c0: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  tHandle handle =
d2d0: 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74   stmt._sqlite_st
d2e0: 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54  mt;....#if !PLAT
d2f0: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
d300: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69  EWORK..        i
d310: 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69  f ((flags & SQLi
d320: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
d330: 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51  s.LogBind) == SQ
d340: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
d350: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20  ags.LogBind)..  
d360: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
d370: 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e       LogBind(han
d380: 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75  dle, index, valu
d390: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  e);..        }..
d3a0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d3b0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
d3c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
d3d0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69  s.sqlite3_bind_i
d3e0: 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64  nt64(handle, ind
d3f0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
d400: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
d410: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
d420: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
d430: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
d440: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
d450: 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
d460: 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20  TANDARD..       
d470: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d480: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
d490: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
d4a0: 5f 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65  _bind_int64_inte
d4b0: 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  rop(handle, inde
d4c0: 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
d4d0: 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d          if (n !=
d4e0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
d4f0: 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53  .Ok) throw new S
d500: 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
d510: 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
d520: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
d530: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
d540: 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
d550: 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
d560: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
d570: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
d580: 76 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34  void Bind_UInt64
d590: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
d5a0: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
d5b0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
d5c0: 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75  gs, int index, u
d5d0: 6c 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20  long value)..   
d5e0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69   {..        SQLi
d5f0: 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c  teStatementHandl
d600: 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e  e handle = stmt.
d610: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d  _sqlite_stmt;...
d620: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d630: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d640: 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c  .        if ((fl
d650: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
d660: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d670: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
d680: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
d690: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
d6a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c  {..            L
d6b0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
d6c0: 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20  ndex, value);.. 
d6d0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
d6e0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
d6f0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
d700: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
d710: 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28  te3_bind_uint64(
d720: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
d730: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
d740: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
d750: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
d760: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
d770: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
d780: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69  tError());..#eli
d790: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
d7a0: 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  RD..        SQLi
d7b0: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
d7c0: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
d7d0: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64  ods.sqlite3_bind
d7e0: 5f 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  _uint64_interop(
d7f0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
d800: 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  ef value);..    
d810: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
d820: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
d830: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d840: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
d850: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
d860: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74  #else..        t
d870: 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
d880: 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
d890: 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
d8a0: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
d8b0: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
d8c0: 20 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74   Bind_Text(SQLit
d8d0: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
d8e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d8f0: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
d900: 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20  t index, string 
d910: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
d920: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
d930: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
d940: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
d950: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20  te_stmt;....#if 
d960: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
d970: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
d980: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
d990: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
d9a0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
d9b0: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
d9c0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
d9d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
d9e0: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
d9f0: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
da00: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
da10: 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20    }..#endif.... 
da20: 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20         byte[] b 
da30: 3d 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b  = ToUTF8(value);
da40: 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52  ....#if !PLATFOR
da50: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
da60: 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  RK..        if (
da70: 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
da80: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
da90: 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74  ogBind) == SQLit
daa0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
dab0: 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20  .LogBind)..     
dac0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
dad0: 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65    LogBind(handle
dae0: 2c 20 69 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20  , index, b);..  
daf0: 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d        }..#endif.
db00: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
db10: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
db20: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
db30: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
db40: 74 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64  text(handle, ind
db50: 65 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20  ex, b, b.Length 
db60: 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
db70: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ));..        if 
db80: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
db90: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
dba0: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
dbb0: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
dbc0: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
dbd0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
dbe0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e  verride void Bin
dbf0: 64 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74  d_DateTime(SQLit
dc00: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
dc10: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
dc20: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
dc30: 74 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d  t index, DateTim
dc40: 65 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  e dt)..    {..  
dc50: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
dc60: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
dc70: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
dc80: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23 69 66 20 21  e_stmt;....#if !
dc90: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
dca0: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
dcb0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
dcc0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dcd0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
dce0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
dcf0: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
dd00: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
dd10: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
dd20: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
dd30: 64 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  dt);..        }.
dd40: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
dd50: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
dd60: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dd70: 46 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69  Flags.BindDateTi
dd80: 6d 65 57 69 74 68 4b 69 6e 64 29 20 3d 3d 20 53  meWithKind) == S
dd90: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
dda0: 6c 61 67 73 2e 42 69 6e 64 44 61 74 65 54 69 6d  lags.BindDateTim
ddb0: 65 57 69 74 68 4b 69 6e 64 29 0d 0a 20 20 20 20  eWithKind)..    
ddc0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ddd0: 20 20 20 69 66 20 28 28 5f 64 61 74 65 74 69 6d     if ((_datetim
dde0: 65 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69 6d  eKind != DateTim
ddf0: 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69 65  eKind.Unspecifie
de00: 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  d) &&..         
de10: 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64 20         (dt.Kind 
de20: 21 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e  != DateTimeKind.
de30: 55 6e 73 70 65 63 69 66 69 65 64 29 20 26 26 0d  Unspecified) &&.
de40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
de50: 20 28 64 74 2e 4b 69 6e 64 20 21 3d 20 5f 64 61   (dt.Kind != _da
de60: 74 65 74 69 6d 65 4b 69 6e 64 29 29 0d 0a 20 20  tetimeKind))..  
de70: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
de80: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
de90: 28 5f 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d  (_datetimeKind =
dea0: 3d 20 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55  = DateTimeKind.U
deb0: 74 63 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  tc)..           
dec0: 20 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74           dt = dt
ded0: 2e 54 6f 55 6e 69 76 65 72 73 61 6c 54 69 6d 65  .ToUniversalTime
dee0: 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ();..           
def0: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64       else if (_d
df00: 61 74 65 74 69 6d 65 4b 69 6e 64 20 3d 3d 20 44  atetimeKind == D
df10: 61 74 65 54 69 6d 65 4b 69 6e 64 2e 4c 6f 63 61  ateTimeKind.Loca
df20: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
df30: 20 20 20 20 20 20 20 20 64 74 20 3d 20 64 74 2e          dt = dt.
df40: 54 6f 4c 6f 63 61 6c 54 69 6d 65 28 29 3b 0d 0a  ToLocalTime();..
df50: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
df60: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
df70: 20 20 20 20 73 77 69 74 63 68 20 28 5f 64 61 74      switch (_dat
df80: 65 74 69 6d 65 46 6f 72 6d 61 74 29 0d 0a 20 20  etimeFormat)..  
df90: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
dfa0: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
dfb0: 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
dfc0: 73 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s:..            
dfd0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
dfe0: 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20             long 
dff0: 76 61 6c 75 65 20 3d 20 64 74 2e 54 69 63 6b 73  value = dt.Ticks
e000: 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f  ;....#if !PLATFO
e010: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
e020: 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ORK..           
e030: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
e040: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
e050: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
e060: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
e070: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
e080: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
e090: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e0a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e0b0: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
e0c0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
e0d0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
e0e0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
e0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e100: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
e110: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
e120: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
e130: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
e140: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
e150: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
e160: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
e170: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
e180: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
e190: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
e1a0: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
e1b0: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
e1c0: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
e1d0: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
e1e0: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
e1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
e200: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
e210: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
e220: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
e230: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
e240: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
e250: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e280: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e290: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e2a0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e2b0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e2c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2d0: 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d    break;..#else.
e2e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e2f0: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
e300: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
e310: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
e320: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
e330: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
e340: 20 20 63 61 73 65 20 53 51 4c 69 74 65 44 61 74    case SQLiteDat
e350: 65 46 6f 72 6d 61 74 73 2e 4a 75 6c 69 61 6e 44  eFormats.JulianD
e360: 61 79 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ay:..           
e370: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e380: 20 20 20 20 20 20 20 20 20 20 20 20 64 6f 75 62              doub
e390: 6c 65 20 76 61 6c 75 65 20 3d 20 54 6f 4a 75 6c  le value = ToJul
e3a0: 69 61 6e 44 61 79 28 64 74 29 3b 0d 0a 0d 0a 23  ianDay(dt);....#
e3b0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
e3c0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
e3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3e0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
e3f0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e400: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
e410: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e420: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
e430: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e440: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e460: 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c   LogBind(handle,
e470: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d   index, value);.
e480: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e490: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
e4a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
e4b0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
e4c0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
e4d0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
e4e0: 6e 64 5f 64 6f 75 62 6c 65 28 68 61 6e 64 6c 65  nd_double(handle
e4f0: 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b  , index, value);
e500: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e510: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
e520: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
e530: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
e540: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
e550: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
e560: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e570: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65        break;..#e
e580: 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  lif !SQLITE_STAN
e590: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
e5a0: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
e5b0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e5c0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e5d0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
e5e0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
e5f0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
e600: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
e610: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
e620: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
e630: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
e640: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
e650: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
e660: 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20  rror());..      
e670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
e680: 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  eak;..#else..   
e690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6a0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
e6b0: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
e6c0: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
e6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 61  ..            ca
e6f0: 73 65 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72  se SQLiteDateFor
e700: 6d 61 74 73 2e 55 6e 69 78 45 70 6f 63 68 3a 0d  mats.UnixEpoch:.
e710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e720: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e730: 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76 61 6c          long val
e740: 75 65 20 3d 20 43 6f 6e 76 65 72 74 2e 54 6f 49  ue = Convert.ToI
e750: 6e 74 36 34 28 64 74 2e 53 75 62 74 72 61 63 74  nt64(dt.Subtract
e760: 28 55 6e 69 78 45 70 6f 63 68 29 2e 54 6f 74 61  (UnixEpoch).Tota
e770: 6c 53 65 63 6f 6e 64 73 29 3b 0d 0a 0d 0a 23 69  lSeconds);....#i
e780: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
e790: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
e7a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e7b0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
e7c0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e7d0: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
e7e0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e7f0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
e800: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e810: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
e820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e830: 4c 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20  LogBind(handle, 
e840: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
e850: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e860: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
e870: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
e880: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
e890: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
e8a0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
e8b0: 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20  d_int64(handle, 
e8c0: 69 6e 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a  index, value);..
e8d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8e0: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
e8f0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
e900: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
e910: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
e920: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
e930: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e940: 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69      break;..#eli
e950: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
e960: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RD..            
e970: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
e980: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
e990: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
e9a0: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74  sqlite3_bind_int
e9b0: 36 34 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c  64_interop(handl
e9c0: 65 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  e, index, ref va
e9d0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
e9e0: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
e9f0: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ea00: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
ea10: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
ea20: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
ea30: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
ea40: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
ea50: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
ea60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
ea70: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
ea80: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
ea90: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
eaa0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
eab0: 20 20 20 20 20 20 20 20 20 20 20 64 65 66 61 75             defau
eac0: 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lt:..           
ead0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
eae0: 20 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65              byte
eaf0: 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 64 74  [] b = ToUTF8(dt
eb00: 29 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  );....#if !PLATF
eb10: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
eb20: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20  WORK..          
eb30: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
eb40: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
eb50: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
eb60: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
eb70: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
eb80: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
eba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ebb0: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
ebc0: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62  handle, index, b
ebd0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
ebe0: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
ebf0: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  f....           
ec00: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45           SQLiteE
ec10: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
ec20: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
ec30: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65  .sqlite3_bind_te
ec40: 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  xt(handle, index
ec50: 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20  , b, b.Length - 
ec60: 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  1, (IntPtr)(-1))
ec70: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ec80: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
ec90: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
eca0: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
ecb0: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
ecc0: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
ecd0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
ece0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20         break;.. 
ecf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
ed00: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
ed10: 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
ed20: 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
ed30: 20 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74   Bind_Blob(SQLit
ed40: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
ed50: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
ed60: 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e  nFlags flags, in
ed70: 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20  t index, byte[] 
ed80: 62 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b  blobData)..    {
ed90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
eda0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
edb0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
edc0: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 23  qlite_stmt;....#
edd0: 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
ede0: 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
edf0: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
ee00: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
ee10: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
ee20: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
ee30: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
ee40: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
ee50: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
ee60: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
ee70: 65 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a  ex, blobData);..
ee80: 20 20 20 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69          }..#endi
ee90: 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  f....        SQL
eea0: 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
eeb0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
eec0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e  hods.sqlite3_bin
eed0: 64 5f 62 6c 6f 62 28 68 61 6e 64 6c 65 2c 20 69  d_blob(handle, i
eee0: 6e 64 65 78 2c 20 62 6c 6f 62 44 61 74 61 2c 20  ndex, blobData, 
eef0: 62 6c 6f 62 44 61 74 61 2e 4c 65 6e 67 74 68 2c  blobData.Length,
ef00: 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b 0d   (IntPtr)(-1));.
ef10: 0a 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21  .        if (n !
ef20: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
ef30: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
ef40: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
ef50: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
ef60: 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
ef70: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
ef80: 69 64 65 20 76 6f 69 64 20 42 69 6e 64 5f 4e 75  ide void Bind_Nu
ef90: 6c 6c 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  ll(SQLiteStateme
efa0: 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43  nt stmt, SQLiteC
efb0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
efc0: 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78 29  lags, int index)
efd0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
efe0: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
eff0: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
f000: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
f010: 74 3b 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54 46  t;....#if !PLATF
f020: 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
f030: 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 69 66  WORK..        if
f040: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
f050: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
f060: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
f070: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f080: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
f090: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
f0a0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
f0b0: 6c 65 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  le, index);..   
f0c0: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
f0d0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
f0e0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
f0f0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f100: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e  s.sqlite3_bind_n
f110: 75 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ull(handle, inde
f120: 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20  x);..        if 
f130: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
f140: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
f150: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
f160: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
f170: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
f180: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
f190: 76 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64  verride int Bind
f1a0: 5f 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69  _ParamCount(SQLi
f1b0: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
f1c0: 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  , SQLiteConnecti
f1d0: 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a  onFlags flags)..
f1e0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53      {..        S
f1f0: 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61  QLiteStatementHa
f200: 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74  ndle handle = st
f210: 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b  mt._sqlite_stmt;
f220: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61  ..        int va
f230: 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  lue = UnsafeNati
f240: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
f250: 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72  3_bind_parameter
f260: 5f 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d  _count(handle);.
f270: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
f280: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
f290: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
f2a0: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
f2b0: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f2c0: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
f2d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f2e0: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
f2f0: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
f300: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
f310: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
f320: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
f330: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
f340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f350: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
f360: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
f370: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
f380: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
f390: 6d 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31  mter count is {1
f3a0: 7d 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  }.",..          
f3b0: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
f3c0: 74 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20  tr, value));..  
f3d0: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
f3e0: 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b     return value;
f3f0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
f400: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
f410: 20 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72   string Bind_Par
f420: 61 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61  amName(SQLiteSta
f430: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
f440: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
f450: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
f460: 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
f470: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
f480: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
f490: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
f4a0: 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20  _stmt;..        
f4b0: 73 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a  string name;....
f4c0: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
f4d0: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e  DARD..        in
f4e0: 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  t len = 0;..    
f4f0: 20 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54      name = UTF8T
f500: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
f510: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f520: 74 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74  te3_bind_paramet
f530: 65 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28  er_name_interop(
f540: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72  handle, index, r
f550: 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
f560: 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e  #else..        n
f570: 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  ame = UTF8ToStri
f580: 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
f590: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
f5a0: 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61  ind_parameter_na
f5b0: 6d 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  me(handle, index
f5c0: 29 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d  ), -1);..#endif.
f5d0: 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
f5e0: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
f5f0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
f600: 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65  gBind) == SQLite
f610: 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e  ConnectionFlags.
f620: 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20  LogBind)..      
f630: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
f640: 20 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e   IntPtr handleIn
f650: 74 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  tPtr = handle;..
f660: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
f670: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
f680: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
f690: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
f6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f6b0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
f6c0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
f6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74               "St
f6e0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
f6f0: 6d 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69  mter #{1} name i
f700: 73 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20  s {{{2}}}.",..  
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61                ha
f720: 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65  ndleIntPtr, inde
f730: 78 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20  x, name));..    
f740: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
f750: 20 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20   return name;.. 
f760: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
f770: 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e  rnal override in
f780: 74 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65  t Bind_ParamInde
f790: 78 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  x(SQLiteStatemen
f7a0: 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f  t stmt, SQLiteCo
f7b0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
f7c0: 61 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61  ags, string para
f7d0: 6d 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  mName)..    {.. 
f7e0: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
f7f0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
f800: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
f810: 74 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20  te_stmt;..      
f820: 20 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e    int index = Un
f830: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
f840: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70  s.sqlite3_bind_p
f850: 61 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68  arameter_index(h
f860: 61 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61  andle, ToUTF8(pa
f870: 72 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20  ramName));....  
f880: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
f890: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
f8a0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
f8b0: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
f8c0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
f8d0: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
f8e0: 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
f8f0: 74 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20  tr handleIntPtr 
f900: 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
f910: 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c           SQLiteL
f920: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
f930: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
f940: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
f950: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
f960: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
f970: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
f980: 20 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65          "Stateme
f990: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
f9a0: 69 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b  index of name {{
f9b0: 7b 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c  {1}}} is #{2}.",
f9c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f9d0: 20 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20    handleIntPtr, 
f9e0: 70 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78  paramName, index
f9f0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
fa00: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
fa10: 20 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a   index;..    }..
fa20: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
fa30: 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75  verride int Colu
fa40: 6d 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74  mnCount(SQLiteSt
fa50: 61 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20  atement stmt).. 
fa60: 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
fa70: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
fa80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
fa90: 6f 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74  olumn_count(stmt
faa0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
fab0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
fac0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
fad0: 73 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d  string ColumnNam
fae0: 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
faf0: 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
fb00: 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
fb10: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
fb20: 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
fb30: 20 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74   0;..      IntPt
fb40: 72 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  r p = UnsafeNati
fb50: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
fb60: 33 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e  3_column_name_in
fb70: 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
fb80: 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
fb90: 72 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  ref len);..#else
fba0: 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70  ..      IntPtr p
fbb0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
fbc0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
fbd0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e  olumn_name(stmt.
fbe0: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
fbf0: 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  dex);..#endif.. 
fc00: 20 20 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e       if (p == In
fc10: 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20  tPtr.Zero)..    
fc20: 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
fc30: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51  LiteException(SQ
fc40: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f  LiteErrorCode.No
fc50: 4d 65 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  Mem, GetLastErro
fc60: 72 28 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49  r());..#if !SQLI
fc70: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
fc80: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
fc90: 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d  String(p, len);.
fca0: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
fcb0: 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
fcc0: 67 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69  g(p, -1);..#endi
fcd0: 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  f..    }....    
fce0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
fcf0: 65 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43  e TypeAffinity C
fd00: 6f 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51  olumnAffinity(SQ
fd10: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
fd20: 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
fd30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
fd40: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
fd50: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
fd60: 63 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74  column_type(stmt
fd70: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
fd80: 6e 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ndex);..    }...
fd90: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
fda0: 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
fdb0: 6c 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53  lumnType(SQLiteS
fdc0: 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
fdd0: 6e 74 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79  nt index, ref Ty
fde0: 70 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69  peAffinity nAffi
fdf0: 6e 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  nity)..    {..  
fe00: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a        int len;..
fe10: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
fe20: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 65  DARD..        le
fe30: 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20  n = 0;..        
fe40: 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
fe50: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
fe60: 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65  qlite3_column_de
fe70: 63 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73  cltype_interop(s
fe80: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
fe90: 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e  , index, ref len
fea0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
feb0: 20 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20     len = -1;..  
fec0: 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
fed0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
fee0: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
fef0: 75 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d  umn_decltype(stm
ff00: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
ff10: 69 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d  index);..#endif.
ff20: 0a 20 20 20 20 20 20 20 20 6e 41 66 66 69 6e 69  .        nAffini
ff30: 74 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e  ty = ColumnAffin
ff40: 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
ff50: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
ff60: 28 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65  ((p != IntPtr.Ze
ff70: 72 6f 29 20 26 26 20 28 28 6c 65 6e 20 3e 20 30  ro) && ((len > 0
ff80: 29 20 7c 7c 20 28 6c 65 6e 20 3d 3d 20 2d 31 29  ) || (len == -1)
ff90: 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
ffa0: 20 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e             strin
ffb0: 67 20 64 65 63 6c 54 79 70 65 20 3d 20 55 54 46  g declType = UTF
ffc0: 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e  8ToString(p, len
ffd0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
ffe0: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
fff0: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 63 6c  NullOrEmpty(decl
10000 54 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Type))..        
10010 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64          return d
10020 65 63 6c 54 79 70 65 3b 0d 0a 20 20 20 20 20 20  eclType;..      
10030 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73    }....        s
10040 74 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d  tring[] ar = stm
10050 74 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e  t.TypeDefinition
10060 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  s;....        if
10070 20 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20   (ar != null).. 
10080 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
10090 20 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20        if (index 
100a0 3c 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61  < ar.Length && a
100b0 72 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c  r[index] != null
100c0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
100d0 20 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64     return ar[ind
100e0 65 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ex];..        }.
100f0 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
10100 6e 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  n String.Empty;.
10110 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
10120 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
10130 69 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28  int ColumnIndex(
10140 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10150 73 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c  stmt, string col
10160 75 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  umnName)..    {.
10170 0a 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43  .      int x = C
10180 6f 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29  olumnCount(stmt)
10190 3b 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28  ;....      for (
101a0 69 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78  int n = 0; n < x
101b0 3b 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d  ; n++)..      {.
101c0 0a 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72  .        if (Str
101d0 69 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75  ing.Compare(colu
101e0 6d 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61  mnName, ColumnNa
101f0 6d 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72  me(stmt, n), Str
10200 69 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72  ingComparison.Or
10210 64 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29  dinalIgnoreCase)
10220 20 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20   == 0)..        
10230 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20    return n;..   
10240 20 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75     }..      retu
10250 72 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  rn -1;..    }...
10260 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
10270 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
10280 6c 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65  lumnOriginalName
10290 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
102a0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
102b0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
102c0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
102d0 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
102e0 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
102f0 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
10300 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10310 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10320 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74  _origin_name_int
10330 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
10340 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
10350 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
10360 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
10370 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10380 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
10390 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
103a0 75 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28  umn_origin_name(
103b0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
103c0 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
103d0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
103e0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
103f0 76 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43  verride string C
10400 6f 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d  olumnDatabaseNam
10410 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
10420 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
10430 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21  x)..    {..#if !
10440 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
10450 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
10460 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
10470 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55  n UTF8ToString(U
10480 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
10490 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
104a0 6e 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f  n_database_name_
104b0 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
104c0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
104d0 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29  , ref len), len)
104e0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
104f0 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72  return UTF8ToStr
10500 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65  ing(UnsafeNative
10510 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
10520 63 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f  column_database_
10530 6e 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74  name(stmt._sqlit
10540 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20  e_stmt, index), 
10550 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  -1);..#endif..  
10560 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
10570 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
10580 69 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e  ing ColumnTableN
10590 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ame(SQLiteStatem
105a0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
105b0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  dex)..    {..#if
105c0 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
105d0 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
105e0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
105f0 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10600 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
10610 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
10620 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69  umn_table_name_i
10630 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
10640 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
10650 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
10660 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
10670 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
10680 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
10690 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
106a0 6f 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65  olumn_table_name
106b0 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
106c0 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b  mt, index), -1);
106d0 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d  ..#endif..    }.
106e0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
106f0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f  override void Co
10700 6c 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72  lumnMetaData(str
10710 69 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73 74  ing dataBase, st
10720 72 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69  ring table, stri
10730 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 73  ng column, ref s
10740 74 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20  tring dataType, 
10750 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  ref string colla
10760 74 65 53 65 71 75 65 6e 63 65 2c 20 72 65 66 20  teSequence, ref 
10770 62 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65  bool notNull, re
10780 66 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65  f bool primaryKe
10790 79 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75 74 6f  y, ref bool auto
107a0 49 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20  Increment)..    
107b0 7b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20  {..      IntPtr 
107c0 64 61 74 61 54 79 70 65 50 74 72 20 3d 20 49 6e  dataTypePtr = In
107d0 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20  tPtr.Zero;..    
107e0 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71    IntPtr collSeq
107f0 50 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Ptr = IntPtr.Zer
10800 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e  o;..      int nn
10810 6f 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20  otNull = 0;..   
10820 20 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b     int nprimaryK
10830 65 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69  ey = 0;..      i
10840 6e 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20 30 3b  nt nautoInc = 0;
10850 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72  ..      SQLiteEr
10860 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20  rorCode n;..    
10870 20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20    int dtLen;..  
10880 20 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a      int csLen;..
10890 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
108a0 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 74  ANDARD..      dt
108b0 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  Len = 0;..      
108c0 63 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20  csLen = 0;..    
108d0 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
108e0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
108f0 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
10900 65 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28  etadata_interop(
10910 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74  _sql, ToUTF8(dat
10920 61 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74  aBase), ToUTF8(t
10930 61 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f  able), ToUTF8(co
10940 6c 75 6d 6e 29 2c 20 72 65 66 20 64 61 74 61 54  lumn), ref dataT
10950 79 70 65 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c  ypePtr, ref coll
10960 53 65 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74  SeqPtr, ref nnot
10970 4e 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61  Null, ref nprima
10980 72 79 4b 65 79 2c 20 72 65 66 20 6e 61 75 74 6f  ryKey, ref nauto
10990 49 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e 2c 20  Inc, ref dtLen, 
109a0 72 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c  ref csLen);..#el
109b0 73 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20  se..      dtLen 
109c0 3d 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c  = -1;..      csL
109d0 65 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20  en = -1;....    
109e0 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
109f0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
10a00 33 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d  3_table_column_m
10a10 65 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f  etadata(_sql, To
10a20 55 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20  UTF8(dataBase), 
10a30 54 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54  ToUTF8(table), T
10a40 6f 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72  oUTF8(column), r
10a50 65 66 20 64 61 74 61 54 79 70 65 50 74 72 2c 20  ef dataTypePtr, 
10a60 72 65 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20  ref collSeqPtr, 
10a70 72 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65  ref nnotNull, re
10a80 66 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 72  f nprimaryKey, r
10a90 65 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23  ef nautoInc);..#
10aa0 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20  endif..      if 
10ab0 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
10ac0 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
10ad0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
10ae0 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
10af0 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
10b00 20 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38   dataType = UTF8
10b10 54 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70  ToString(dataTyp
10b20 65 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20  ePtr, dtLen);.. 
10b30 20 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75       collateSequ
10b40 65 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72  ence = UTF8ToStr
10b50 69 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20  ing(collSeqPtr, 
10b60 63 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20  csLen);....     
10b70 20 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74   notNull = (nnot
10b80 4e 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  Null == 1);..   
10b90 20 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20     primaryKey = 
10ba0 28 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20  (nprimaryKey == 
10bb0 31 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49  1);..      autoI
10bc0 6e 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74  ncrement = (naut
10bd0 6f 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20  oInc == 1);..   
10be0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10bf0 61 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65  al override obje
10c00 63 74 20 47 65 74 4f 62 6a 65 63 74 28 53 51 4c  ct GetObject(SQL
10c10 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
10c20 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
10c30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77     {..        sw
10c40 69 74 63 68 20 28 43 6f 6c 75 6d 6e 41 66 66 69  itch (ColumnAffi
10c50 6e 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78  nity(stmt, index
10c60 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  ))..        {.. 
10c70 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
10c80 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74  TypeAffinity.Int
10c90 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  64:..           
10ca0 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10cb0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10cc0 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74  rn GetInt64(stmt
10cd0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
10ce0 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
10cf0 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
10d00 79 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62  ypeAffinity.Doub
10d10 6c 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  le:..           
10d20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
10d30 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
10d40 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d  rn GetDouble(stm
10d50 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
10d60 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
10d70 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20             case 
10d80 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78  TypeAffinity.Tex
10d90 74 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t:..            
10da0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
10db0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
10dc0 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  n GetText(stmt, 
10dd0 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
10de0 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
10df0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
10e00 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d  eAffinity.Blob:.
10e10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10e20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
10e30 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 73 69 7a          long siz
10e40 65 20 3d 20 47 65 74 42 79 74 65 73 28 73 74 6d  e = GetBytes(stm
10e50 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c  t, index, 0, nul
10e60 6c 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20  l, 0, 0);....   
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 20 69 66 20 28 28 73 69 7a 65 20 3e 20 30 29 20   if ((size > 0) 
10e90 26 26 20 28 73 69 7a 65 20 3c 3d 20 69 6e 74 2e  && (size <= int.
10ea0 4d 61 78 56 61 6c 75 65 29 29 0d 0a 20 20 20 20  MaxValue))..    
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
10ed0 20 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b             byte[
10ee0 5d 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79  ] bytes = new by
10ef0 74 65 5b 28 69 6e 74 29 73 69 7a 65 5d 3b 0d 0a  te[(int)size];..
10f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10f10 20 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74            GetByt
10f20 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  es(stmt, index, 
10f30 30 2c 20 62 79 74 65 73 2c 20 30 2c 20 28 69 6e  0, bytes, 0, (in
10f40 74 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20  t)size);....    
10f50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10f60 20 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73      return bytes
10f70 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
10f80 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
10f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72                br
10fa0 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  eak;..          
10fb0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
10fc0 20 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66       case TypeAf
10fd0 66 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a 20 20  finity.Null:..  
10fe0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
10ff0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11000 20 20 20 20 20 72 65 74 75 72 6e 20 44 42 4e 75       return DBNu
11010 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20  ll.Value;..     
11020 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11030 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
11040 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
11050 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
11060 74 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a  tion();..    }..
11070 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11080 76 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47  verride double G
11090 65 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53  etDouble(SQLiteS
110a0 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69  tatement stmt, i
110b0 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b  nt index)..    {
110c0 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
110d0 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
110e0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
110f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
11100 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
11110 6e 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73  n_double(stmt._s
11120 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
11130 78 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  x);..#elif !SQLI
11140 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
11150 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20     double value 
11160 3d 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e  = 0.0;..      Un
11170 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11180 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
11190 5f 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28  _double_interop(
111a0 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
111b0 74 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61  t, index, ref va
111c0 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74  lue);..      ret
111d0 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73  urn value;..#els
111e0 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
111f0 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
11200 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
11210 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
11220 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
11230 72 72 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f  rride bool GetBo
11240 6f 6c 65 61 6e 28 53 51 4c 69 74 65 53 74 61 74  olean(SQLiteStat
11250 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20  ement stmt, int 
11260 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20  index)..    {.. 
11270 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 42 6f       return ToBo
11280 6f 6c 65 61 6e 28 47 65 74 4f 62 6a 65 63 74 28  olean(GetObject(
11290 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 43 75  stmt, index), Cu
112a0 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69  ltureInfo.Invari
112b0 61 6e 74 43 75 6c 74 75 72 65 2c 20 66 61 6c 73  antCulture, fals
112c0 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  e);..    }....  
112d0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
112e0 69 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79  ide sbyte GetSBy
112f0 74 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  te(SQLiteStateme
11300 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11310 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
11320 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
11330 65 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e  ed((sbyte)(GetIn
11340 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
11350 20 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65   & byte.MaxValue
11360 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ));..    }....  
11370 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
11380 69 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65  ide byte GetByte
11390 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
113a0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
113b0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
113c0 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64  return unchecked
113d0 28 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32  ((byte)(GetInt32
113e0 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
113f0 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b  byte.MaxValue));
11400 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
11410 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
11420 20 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28   short GetInt16(
11430 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11440 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11450 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
11460 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
11470 28 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32  (short)(GetInt32
11480 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20  (stmt, index) & 
11490 75 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29  ushort.MaxValue)
114a0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
114b0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
114c0 64 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e  de ushort GetUIn
114d0 74 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t16(SQLiteStatem
114e0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
114f0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
11500 20 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63     return unchec
11510 6b 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74  ked((ushort)(Get
11520 49 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65  Int32(stmt, inde
11530 78 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56  x) & ushort.MaxV
11540 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  alue));..    }..
11550 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
11560 76 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49  verride int GetI
11570 6e 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65  nt32(SQLiteState
11580 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
11590 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
115a0 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66      return Unsaf
115b0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
115c0 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e  qlite3_column_in
115d0 74 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  t(stmt._sqlite_s
115e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
115f0 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11600 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e  nal override uin
11610 74 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69  t GetUInt32(SQLi
11620 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11630 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11640 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
11650 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e  n unchecked((uin
11660 74 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c  t)GetInt32(stmt,
11670 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d   index));..    }
11680 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
11690 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
116a0 65 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74  etInt64(SQLiteSt
116b0 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
116c0 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
116d0 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
116e0 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
116f0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
11700 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
11710 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
11720 5f 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c  _int64(stmt._sql
11730 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29  ite_stmt, index)
11740 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
11750 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
11760 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 30 3b   long value = 0;
11770 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
11780 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11790 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34  te3_column_int64
117a0 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
117b0 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
117c0 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  x, ref value);..
117d0 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c        return val
117e0 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ue;..#else..    
117f0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
11800 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
11810 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
11820 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11830 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75  ernal override u
11840 6c 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53  long GetUInt64(S
11850 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
11860 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11870 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
11880 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
11890 75 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73  ulong)GetInt64(s
118a0 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20  tmt, index));.. 
118b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
118c0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74  rnal override st
118d0 72 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c  ring GetText(SQL
118e0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
118f0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
11900 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
11910 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
11920 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a    int len = 0;..
11930 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46        return UTF
11940 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65  8ToString(Unsafe
11950 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11960 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78  lite3_column_tex
11970 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  t_interop(stmt._
11980 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11990 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65  ex, ref len), le
119a0 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  n);..#else..    
119b0 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
119c0 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
119d0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
119e0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
119f0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
11a00 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
11a10 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
11a20 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
11a30 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
11a40 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
11a50 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
11a60 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
11a70 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44  ernal override D
11a80 61 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54  ateTime GetDateT
11a90 69 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  ime(SQLiteStatem
11aa0 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
11ab0 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
11ac0 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65     if (_datetime
11ad0 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65  Format == SQLite
11ae0 44 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b  DateFormats.Tick
11af0 73 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  s)..        retu
11b00 72 6e 20 54 69 63 6b 73 54 6f 44 61 74 65 54 69  rn TicksToDateTi
11b10 6d 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74  me(GetInt64(stmt
11b20 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74  , index), _datet
11b30 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20  imeKind);..     
11b40 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74   else if (_datet
11b50 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c  imeFormat == SQL
11b60 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a  iteDateFormats.J
11b70 75 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20 20 20  ulianDay)..     
11b80 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65     return ToDate
11b90 54 69 6d 65 28 47 65 74 44 6f 75 62 6c 65 28 73  Time(GetDouble(s
11ba0 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61  tmt, index), _da
11bb0 74 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20  tetimeKind);..  
11bc0 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61      else if (_da
11bd0 74 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20  tetimeFormat == 
11be0 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74  SQLiteDateFormat
11bf0 73 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20  s.UnixEpoch)..  
11c00 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 69        return Uni
11c10 78 45 70 6f 63 68 54 6f 44 61 74 65 54 69 6d 65  xEpochToDateTime
11c20 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20  (GetInt64(stmt, 
11c30 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d  index), _datetim
11c40 65 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20 21  eKind);....#if !
11c50 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
11c60 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d  .      int len =
11c70 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72   0;..      retur
11c80 6e 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73  n ToDateTime(Uns
11c90 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11ca0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11cb0 74 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d  text_interop(stm
11cc0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11cd0 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c  index, ref len),
11ce0 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20   len);..#else.. 
11cf0 20 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61       return ToDa
11d00 74 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74  teTime(UnsafeNat
11d10 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11d20 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73  e3_column_text(s
11d30 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
11d40 2c 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20  , index),..     
11d50 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
11d60 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
11d70 6f 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74  olumn_bytes(stmt
11d80 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
11d90 6e 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ndex));..#endif.
11da0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
11db0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
11dc0 6c 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51  long GetBytes(SQ
11dd0 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11de0 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69  mt, int index, i
11df0 6e 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  nt nDataOffset, 
11e00 62 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e  byte[] bDest, in
11e10 74 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c  t nStart, int nL
11e20 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20  ength)..    {.. 
11e30 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20       int nlen = 
11e40 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
11e50 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
11e60 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73  mn_bytes(stmt._s
11e70 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
11e80 78 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20  x);....      // 
11e90 49 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f  If no destinatio
11ea0 6e 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e  n buffer, return
11eb0 20 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64   the size needed
11ec0 2e 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65  ...      if (bDe
11ed0 73 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75  st == null) retu
11ee0 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20  rn nlen;....    
11ef0 20 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20    int nCopied = 
11f00 6e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20  nLength;....    
11f10 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20    if (nCopied + 
11f20 6e 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c  nStart > bDest.L
11f30 65 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d  ength) nCopied =
11f40 20 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20   bDest.Length - 
11f50 6e 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69  nStart;..      i
11f60 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61  f (nCopied + nDa
11f70 74 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29  taOffset > nlen)
11f80 20 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20   nCopied = nlen 
11f90 2d 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a  - nDataOffset;..
11fa0 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
11fb0 69 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20  ied > 0)..      
11fc0 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74  {..        IntPt
11fd0 72 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61  r ptr = UnsafeNa
11fe0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
11ff0 74 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28  te3_column_blob(
12000 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
12010 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20  t, index);....  
12020 20 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f        Marshal.Co
12030 70 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e  py((IntPtr)(ptr.
12040 54 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74  ToInt64() + nDat
12050 61 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c  aOffset), bDest,
12060 20 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64   nStart, nCopied
12070 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20  );..      }..   
12080 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b     else..      {
12090 0d 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65  ..        nCopie
120a0 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d  d = 0;..      }.
120b0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
120c0 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d  nCopied;..    }.
120d0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
120e0 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
120f0 74 43 68 61 72 73 28 53 51 4c 69 74 65 53 74 61  tChars(SQLiteSta
12100 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
12110 20 69 6e 64 65 78 2c 20 69 6e 74 20 6e 44 61 74   index, int nDat
12120 61 4f 66 66 73 65 74 2c 20 63 68 61 72 5b 5d 20  aOffset, char[] 
12130 62 44 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72  bDest, int nStar
12140 74 2c 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d  t, int nLength).
12150 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e  .    {..      in
12160 74 20 6e 6c 65 6e 3b 0d 0a 20 20 20 20 20 20 69  t nlen;..      i
12170 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e 4c 65  nt nCopied = nLe
12180 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 73  ngth;....      s
12190 74 72 69 6e 67 20 73 74 72 20 3d 20 47 65 74 54  tring str = GetT
121a0 65 78 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ext(stmt, index)
121b0 3b 0d 0a 20 20 20 20 20 20 6e 6c 65 6e 20 3d 20  ;..      nlen = 
121c0 73 74 72 2e 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20  str.Length;.... 
121d0 20 20 20 20 20 69 66 20 28 62 44 65 73 74 20 3d       if (bDest =
121e0 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 6e  = null) return n
121f0 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  len;....      if
12200 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 53 74 61   (nCopied + nSta
12210 72 74 20 3e 20 62 44 65 73 74 2e 4c 65 6e 67 74  rt > bDest.Lengt
12220 68 29 20 6e 43 6f 70 69 65 64 20 3d 20 62 44 65  h) nCopied = bDe
12230 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e 53 74 61  st.Length - nSta
12240 72 74 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  rt;..      if (n
12250 43 6f 70 69 65 64 20 2b 20 6e 44 61 74 61 4f 66  Copied + nDataOf
12260 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20 6e 43 6f  fset > nlen) nCo
12270 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d 20 6e 44  pied = nlen - nD
12280 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d 0a 20 20  ataOffset;....  
12290 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
122a0 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 73 74  > 0)..        st
122b0 72 2e 43 6f 70 79 54 6f 28 6e 44 61 74 61 4f 66  r.CopyTo(nDataOf
122c0 66 73 65 74 2c 20 62 44 65 73 74 2c 20 6e 53 74  fset, bDest, nSt
122d0 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d 0a  art, nCopied);..
122e0 20 20 20 20 20 20 65 6c 73 65 20 6e 43 6f 70 69        else nCopi
122f0 65 64 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20  ed = 0;....     
12300 20 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b   return nCopied;
12310 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
12320 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12330 20 62 6f 6f 6c 20 49 73 4e 75 6c 6c 28 53 51 4c   bool IsNull(SQL
12340 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
12350 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
12360 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
12370 72 6e 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  rn (ColumnAffini
12380 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  ty(stmt, index) 
12390 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
123a0 4e 75 6c 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  Null);..    }...
123b0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
123c0 65 72 72 69 64 65 20 69 6e 74 20 41 67 67 72 65  erride int Aggre
123d0 67 61 74 65 43 6f 75 6e 74 28 49 6e 74 50 74 72  gateCount(IntPtr
123e0 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
123f0 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
12400 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12410 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72 65  ds.sqlite3_aggre
12420 67 61 74 65 5f 63 6f 75 6e 74 28 63 6f 6e 74 65  gate_count(conte
12430 78 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  xt);..    }.... 
12440 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12450 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
12460 43 6f 64 65 20 43 72 65 61 74 65 46 75 6e 63 74  Code CreateFunct
12470 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72 46 75  ion(string strFu
12480 6e 63 74 69 6f 6e 2c 20 69 6e 74 20 6e 41 72 67  nction, int nArg
12490 73 2c 20 62 6f 6f 6c 20 6e 65 65 64 43 6f 6c 6c  s, bool needColl
124a0 53 65 71 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62  Seq, SQLiteCallb
124b0 61 63 6b 20 66 75 6e 63 2c 20 53 51 4c 69 74 65  ack func, SQLite
124c0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 73 74 65  Callback funcste
124d0 70 2c 20 53 51 4c 69 74 65 46 69 6e 61 6c 43 61  p, SQLiteFinalCa
124e0 6c 6c 62 61 63 6b 20 66 75 6e 63 66 69 6e 61 6c  llback funcfinal
124f0 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77 29  , bool canThrow)
12500 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
12510 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
12520 3b 0d 0a 0d 0a 23 69 66 20 21 53 51 4c 49 54 45  ;....#if !SQLITE
12530 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
12540 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
12550 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
12560 5f 63 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e  _create_function
12570 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 54  _interop(_sql, T
12580 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
12590 6e 29 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e  n), nArgs, 4, In
125a0 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
125b0 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
125c0 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f 6c 6c 53  inal, (needCollS
125d0 65 71 20 3d 3d 20 74 72 75 65 29 20 3f 20 31 20  eq == true) ? 1 
125e0 3a 20 30 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  : 0);..      if 
125f0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
12600 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
12610 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12620 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
12630 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72 6f  _function_intero
12640 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73  p(_sql, ToUTF8(s
12650 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72  trFunction), nAr
12660 67 73 2c 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65  gs, 1, IntPtr.Ze
12670 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73 74  ro, func, funcst
12680 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20 28  ep, funcfinal, (
12690 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20 74  needCollSeq == t
126a0 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d 0a  rue) ? 1 : 0);..
126b0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 6e 20 3d  #else..      n =
126c0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
126d0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65  hods.sqlite3_cre
126e0 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f 73 71  ate_function(_sq
126f0 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e  l, ToUTF8(strFun
12700 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 34  ction), nArgs, 4
12710 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66  , IntPtr.Zero, f
12720 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66  unc, funcstep, f
12730 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 20 20 20 20  uncfinal);..    
12740 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
12750 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 6e  eErrorCode.Ok) n
12760 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
12770 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
12780 72 65 61 74 65 5f 66 75 6e 63 74 69 6f 6e 28 5f  reate_function(_
12790 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74 72 46  sql, ToUTF8(strF
127a0 75 6e 63 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c  unction), nArgs,
127b0 20 31 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c   1, IntPtr.Zero,
127c0 20 66 75 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c   func, funcstep,
127d0 20 66 75 6e 63 66 69 6e 61 6c 29 3b 0d 0a 23 65   funcfinal);..#e
127e0 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
127f0 63 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21  canThrow && (n !
12800 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
12810 65 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77  e.Ok)) throw new
12820 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
12830 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
12840 28 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ());..      retu
12850 72 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  rn n;..    }....
12860 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
12870 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f  rride SQLiteErro
12880 72 43 6f 64 65 20 43 72 65 61 74 65 43 6f 6c 6c  rCode CreateColl
12890 61 74 69 6f 6e 28 73 74 72 69 6e 67 20 73 74 72  ation(string str
128a0 43 6f 6c 6c 61 74 69 6f 6e 2c 20 53 51 4c 69 74  Collation, SQLit
128b0 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 2c  eCollation func,
128c0 20 53 51 4c 69 74 65 43 6f 6c 6c 61 74 69 6f 6e   SQLiteCollation
128d0 20 66 75 6e 63 31 36 2c 20 62 6f 6f 6c 20 63 61   func16, bool ca
128e0 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20 7b 0d 0a  nThrow)..    {..
128f0 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
12900 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
12910 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
12920 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 63 6f 6c  lite3_create_col
12930 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  lation(_sql, ToU
12940 54 46 38 28 73 74 72 43 6f 6c 6c 61 74 69 6f 6e  TF8(strCollation
12950 29 2c 20 32 2c 20 49 6e 74 50 74 72 2e 5a 65 72  ), 2, IntPtr.Zer
12960 6f 2c 20 66 75 6e 63 31 36 29 3b 0d 0a 20 20 20  o, func16);..   
12970 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69     if (n == SQLi
12980 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
12990 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
129a0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
129b0 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
129c0 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
129d0 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 31 2c 20  rCollation), 1, 
129e0 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
129f0 63 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 63  c);..      if (c
12a00 61 6e 54 68 72 6f 77 20 26 26 20 28 6e 20 21 3d  anThrow && (n !=
12a10 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
12a20 2e 4f 6b 29 29 20 74 68 72 6f 77 20 6e 65 77 20  .Ok)) throw new 
12a30 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
12a40 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
12a50 29 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ));..      retur
12a60 6e 20 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  n n;..    }.... 
12a70 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
12a80 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
12a90 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
12aa0 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
12ab0 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
12ac0 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
12ad0 20 73 31 2c 20 73 74 72 69 6e 67 20 73 32 29 0d   s1, string s2).
12ae0 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
12af0 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
12b00 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
12b10 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
12b20 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
12b30 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
12b40 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
12b50 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
12b60 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
12b70 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
12b80 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
12b90 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
12ba0 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
12bb0 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
12bc0 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
12bd0 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
12be0 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
12bf0 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
12c00 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
12c10 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
12c20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
12c30 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
12c40 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
12c50 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
12c60 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
12c70 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
12c80 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
12c90 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
12ca0 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
12cb0 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
12cc0 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
12cd0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
12ce0 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
12cf0 74 42 79 74 65 73 28 73 31 29 3b 0d 0a 20 20 20  tBytes(s1);..   
12d00 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
12d10 72 2e 47 65 74 42 79 74 65 73 28 73 32 29 3b 0d  r.GetBytes(s2);.
12d20 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
12d30 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
12d40 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
12d50 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
12d60 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
12d70 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
12d80 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
12d90 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
12da0 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
12db0 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
12dc0 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
12dd0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12de0 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43  l override int C
12df0 6f 6e 74 65 78 74 43 6f 6c 6c 61 74 65 43 6f 6d  ontextCollateCom
12e00 70 61 72 65 28 43 6f 6c 6c 61 74 69 6f 6e 45 6e  pare(CollationEn
12e10 63 6f 64 69 6e 67 45 6e 75 6d 20 65 6e 63 2c 20  codingEnum enc, 
12e20 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
12e30 63 68 61 72 5b 5d 20 63 31 2c 20 63 68 61 72 5b  char[] c1, char[
12e40 5d 20 63 32 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ] c2)..    {..#i
12e50 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
12e60 52 44 0d 0a 20 20 20 20 20 20 62 79 74 65 5b 5d  RD..      byte[]
12e70 20 62 31 3b 0d 0a 20 20 20 20 20 20 62 79 74 65   b1;..      byte
12e80 5b 5d 20 62 32 3b 0d 0a 20 20 20 20 20 20 53 79  [] b2;..      Sy
12e90 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
12ea0 6e 67 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 6e  ng converter = n
12eb0 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 73 77  ull;....      sw
12ec0 69 74 63 68 20 28 65 6e 63 29 0d 0a 20 20 20 20  itch (enc)..    
12ed0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 63 61 73    {..        cas
12ee0 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64  e CollationEncod
12ef0 69 6e 67 45 6e 75 6d 2e 55 54 46 38 3a 0d 0a 20  ingEnum.UTF8:.. 
12f00 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74           convert
12f10 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74  er = System.Text
12f20 2e 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 3b 0d  .Encoding.UTF8;.
12f30 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
12f40 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65 20  ;..        case 
12f50 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e  CollationEncodin
12f60 67 45 6e 75 6d 2e 55 54 46 31 36 4c 45 3a 0d 0a  gEnum.UTF16LE:..
12f70 20 20 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72            conver
12f80 74 65 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78  ter = System.Tex
12f90 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 6e 69 63 6f  t.Encoding.Unico
12fa0 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  de;..          b
12fb0 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
12fc0 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
12fd0 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 42  odingEnum.UTF16B
12fe0 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
12ff0 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
13000 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 42  .Text.Encoding.B
13010 69 67 45 6e 64 69 61 6e 55 6e 69 63 6f 64 65 3b  igEndianUnicode;
13020 0d 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61  ..          brea
13030 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  k;..      }.... 
13040 20 20 20 20 20 62 31 20 3d 20 63 6f 6e 76 65 72       b1 = conver
13050 74 65 72 2e 47 65 74 42 79 74 65 73 28 63 31 29  ter.GetBytes(c1)
13060 3b 0d 0a 20 20 20 20 20 20 62 32 20 3d 20 63 6f  ;..      b2 = co
13070 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
13080 28 63 32 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 72  (c2);....      r
13090 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
130a0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
130b0 33 5f 63 6f 6e 74 65 78 74 5f 63 6f 6c 6c 63 6f  3_context_collco
130c0 6d 70 61 72 65 5f 69 6e 74 65 72 6f 70 28 63 6f  mpare_interop(co
130d0 6e 74 65 78 74 2c 20 62 31 2c 20 62 31 2e 4c 65  ntext, b1, b1.Le
130e0 6e 67 74 68 2c 20 62 32 2c 20 62 32 2e 4c 65 6e  ngth, b2, b2.Len
130f0 67 74 68 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  gth);..#else..  
13100 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f      throw new No
13110 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65  tImplementedExce
13120 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66  ption();..#endif
13130 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13140 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13150 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
13160 63 65 20 47 65 74 43 6f 6c 6c 61 74 69 6f 6e 53  ce GetCollationS
13170 65 71 75 65 6e 63 65 28 53 51 4c 69 74 65 46 75  equence(SQLiteFu
13180 6e 63 74 69 6f 6e 20 66 75 6e 63 2c 20 49 6e 74  nction func, Int
13190 50 74 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20  Ptr context)..  
131a0 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
131b0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
131c0 20 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   CollationSequen
131d0 63 65 20 73 65 71 20 3d 20 6e 65 77 20 43 6f 6c  ce seq = new Col
131e0 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63 65 28 29  lationSequence()
131f0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  ;..      int len
13200 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74   = 0;..      int
13210 20 74 79 70 65 20 3d 20 30 3b 0d 0a 20 20 20 20   type = 0;..    
13220 20 20 69 6e 74 20 65 6e 63 20 3d 20 30 3b 0d 0a    int enc = 0;..
13230 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d        IntPtr p =
13240 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
13250 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
13260 74 65 78 74 5f 63 6f 6c 6c 73 65 71 5f 69 6e 74  text_collseq_int
13270 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72 65  erop(context, re
13280 66 20 74 79 70 65 2c 20 72 65 66 20 65 6e 63 2c  f type, ref enc,
13290 20 72 65 66 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20   ref len);....  
132a0 20 20 20 20 69 66 20 28 70 20 21 3d 20 6e 75 6c      if (p != nul
132b0 6c 29 20 73 65 71 2e 4e 61 6d 65 20 3d 20 55 54  l) seq.Name = UT
132c0 46 38 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65  F8ToString(p, le
132d0 6e 29 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 54  n);..      seq.T
132e0 79 70 65 20 3d 20 28 43 6f 6c 6c 61 74 69 6f 6e  ype = (Collation
132f0 54 79 70 65 45 6e 75 6d 29 74 79 70 65 3b 0d 0a  TypeEnum)type;..
13300 20 20 20 20 20 20 73 65 71 2e 5f 66 75 6e 63 20        seq._func 
13310 3d 20 66 75 6e 63 3b 0d 0a 20 20 20 20 20 20 73  = func;..      s
13320 65 71 2e 45 6e 63 6f 64 69 6e 67 20 3d 20 28 43  eq.Encoding = (C
13330 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13340 45 6e 75 6d 29 65 6e 63 3b 0d 0a 0d 0a 20 20 20  Enum)enc;....   
13350 20 20 20 72 65 74 75 72 6e 20 73 65 71 3b 0d 0a     return seq;..
13360 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
13370 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
13380 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
13390 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
133a0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
133b0 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47   override long G
133c0 65 74 50 61 72 61 6d 56 61 6c 75 65 42 79 74 65  etParamValueByte
133d0 73 28 49 6e 74 50 74 72 20 70 2c 20 69 6e 74 20  s(IntPtr p, int 
133e0 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62 79 74  nDataOffset, byt
133f0 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74 20 6e  e[] bDest, int n
13400 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65 6e 67  Start, int nLeng
13410 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  th)..    {..    
13420 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55 6e 73    int nlen = Uns
13430 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13440 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
13450 79 74 65 73 28 70 29 3b 0d 0a 0d 0a 20 20 20 20  ytes(p);....    
13460 20 20 2f 2f 20 49 66 20 6e 6f 20 64 65 73 74 69    // If no desti
13470 6e 61 74 69 6f 6e 20 62 75 66 66 65 72 2c 20 72  nation buffer, r
13480 65 74 75 72 6e 20 74 68 65 20 73 69 7a 65 20 6e  eturn the size n
13490 65 65 64 65 64 2e 0d 0a 20 20 20 20 20 20 69 66  eeded...      if
134a0 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c 29   (bDest == null)
134b0 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a 0d   return nlen;...
134c0 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f 70 69  .      int nCopi
134d0 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d 0a 0d  ed = nLength;...
134e0 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
134f0 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62 44  ed + nStart > bD
13500 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f 70  est.Length) nCop
13510 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e 67  ied = bDest.Leng
13520 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20 20  th - nStart;..  
13530 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64 20      if (nCopied 
13540 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e 20  + nDataOffset > 
13550 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d 20  nlen) nCopied = 
13560 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66 73  nlen - nDataOffs
13570 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  et;....      if 
13580 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a 20  (nCopied > 0).. 
13590 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
135a0 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
135b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
135c0 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
135d0 6c 6f 62 28 70 29 3b 0d 0a 0d 0a 20 20 20 20 20  lob(p);....     
135e0 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70 79 28     Marshal.Copy(
135f0 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54 6f 49  (IntPtr)(ptr.ToI
13600 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61 4f 66  nt64() + nDataOf
13610 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20 6e 53  fset), bDest, nS
13620 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29 3b 0d  tart, nCopied);.
13630 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20  .      }..      
13640 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  else..      {.. 
13650 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64 20 3d         nCopied =
13660 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a   0;..      }....
13670 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 43 6f        return nCo
13680 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  pied;..    }....
13690 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
136a0 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65 74  rride double Get
136b0 50 61 72 61 6d 56 61 6c 75 65 44 6f 75 62 6c 65  ParamValueDouble
136c0 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a 20 20  (IntPtr ptr)..  
136d0 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f    {..#if !PLATFO
136e0 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
136f0 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ORK..      retur
13700 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
13710 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61  thods.sqlite3_va
13720 6c 75 65 5f 64 6f 75 62 6c 65 28 70 74 72 29 3b  lue_double(ptr);
13730 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
13740 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
13750 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d 20 30  double value = 0
13760 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66  .0;..      Unsaf
13770 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13780 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f 75  qlite3_value_dou
13790 62 6c 65 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c  ble_interop(ptr,
137a0 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
137b0 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65      return value
137c0 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
137d0 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70  throw new NotImp
137e0 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f  lementedExceptio
137f0 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  n();..#endif..  
13800 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
13810 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
13820 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e   GetParamValueIn
13830 74 33 32 28 49 6e 74 50 74 72 20 70 74 72 29 0d  t32(IntPtr ptr).
13840 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
13850 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
13860 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13870 5f 76 61 6c 75 65 5f 69 6e 74 28 70 74 72 29 3b  _value_int(ptr);
13880 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13890 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
138a0 20 6c 6f 6e 67 20 47 65 74 50 61 72 61 6d 56 61   long GetParamVa
138b0 6c 75 65 49 6e 74 36 34 28 49 6e 74 50 74 72 20  lueInt64(IntPtr 
138c0 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
138d0 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41   !PLATFORM_COMPA
138e0 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20  CTFRAMEWORK..   
138f0 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
13900 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13910 6c 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36  lite3_value_int6
13920 34 28 70 74 72 29 3b 0d 0a 23 65 6c 69 66 20 21  4(ptr);..#elif !
13930 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
13940 0a 20 20 20 20 20 20 49 6e 74 36 34 20 76 61 6c  .      Int64 val
13950 75 65 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 55  ue = 0;..      U
13960 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13970 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
13980 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 70  _int64_interop(p
13990 74 72 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  tr, ref value);.
139a0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 76 61  .      return va
139b0 6c 75 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  lue;..#else..   
139c0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
139d0 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
139e0 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
139f0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13a00 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13a10 73 74 72 69 6e 67 20 47 65 74 50 61 72 61 6d 56  string GetParamV
13a20 61 6c 75 65 54 65 78 74 28 49 6e 74 50 74 72 20  alueText(IntPtr 
13a30 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66  ptr)..    {..#if
13a40 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
13a50 44 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e  D..      int len
13a60 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74   = 0;..      ret
13a70 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
13a80 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
13a90 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
13aa0 75 65 5f 74 65 78 74 5f 69 6e 74 65 72 6f 70 28  ue_text_interop(
13ab0 70 74 72 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c  ptr, ref len), l
13ac0 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  en);..#else..   
13ad0 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
13ae0 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
13af0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13b00 65 33 5f 76 61 6c 75 65 5f 74 65 78 74 28 70 74  e3_value_text(pt
13b10 72 29 2c 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  r),..        Uns
13b20 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13b30 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 62  .sqlite3_value_b
13b40 79 74 65 73 28 70 74 72 29 29 3b 0d 0a 23 65 6e  ytes(ptr));..#en
13b50 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
13b60 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
13b70 69 64 65 20 54 79 70 65 41 66 66 69 6e 69 74 79  ide TypeAffinity
13b80 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 79   GetParamValueTy
13b90 70 65 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  pe(IntPtr ptr)..
13ba0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
13bb0 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13bc0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13bd0 76 61 6c 75 65 5f 74 79 70 65 28 70 74 72 29 3b  value_type(ptr);
13be0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
13bf0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
13c00 20 76 6f 69 64 20 52 65 74 75 72 6e 42 6c 6f 62   void ReturnBlob
13c10 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c  (IntPtr context,
13c20 20 62 79 74 65 5b 5d 20 76 61 6c 75 65 29 0d 0a   byte[] value)..
13c30 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
13c40 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
13c50 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
13c60 62 6c 6f 62 28 63 6f 6e 74 65 78 74 2c 20 76 61  blob(context, va
13c70 6c 75 65 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74  lue, value.Lengt
13c80 68 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29  h, (IntPtr)(-1))
13c90 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
13ca0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
13cb0 65 20 76 6f 69 64 20 52 65 74 75 72 6e 44 6f 75  e void ReturnDou
13cc0 62 6c 65 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  ble(IntPtr conte
13cd0 78 74 2c 20 64 6f 75 62 6c 65 20 76 61 6c 75 65  xt, double value
13ce0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
13cf0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
13d00 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
13d10 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
13d20 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
13d30 6c 74 5f 64 6f 75 62 6c 65 28 63 6f 6e 74 65 78  lt_double(contex
13d40 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69  t, value);..#eli
13d50 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
13d60 52 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RD..      Unsafe
13d70 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13d80 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
13d90 62 6c 65 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74  ble_interop(cont
13da0 65 78 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b  ext, ref value);
13db0 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74  ..#else..      t
13dc0 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c  hrow new NotImpl
13dd0 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e  ementedException
13de0 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ();..#endif..   
13df0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
13e00 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
13e10 20 52 65 74 75 72 6e 45 72 72 6f 72 28 49 6e 74   ReturnError(Int
13e20 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 73 74 72  Ptr context, str
13e30 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ing value)..    
13e40 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
13e50 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13e60 69 74 65 33 5f 72 65 73 75 6c 74 5f 65 72 72 6f  ite3_result_erro
13e70 72 28 63 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46  r(context, ToUTF
13e80 38 28 76 61 6c 75 65 29 2c 20 76 61 6c 75 65 2e  8(value), value.
13e90 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20 20 7d 0d  Length);..    }.
13ea0 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
13eb0 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52 65  override void Re
13ec0 74 75 72 6e 49 6e 74 33 32 28 49 6e 74 50 74 72  turnInt32(IntPtr
13ed0 20 63 6f 6e 74 65 78 74 2c 20 69 6e 74 20 76 61   context, int va
13ee0 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
13ef0 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
13f00 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
13f10 65 73 75 6c 74 5f 69 6e 74 28 63 6f 6e 74 65 78  esult_int(contex
13f20 74 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  t, value);..    
13f30 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13f40 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
13f50 52 65 74 75 72 6e 49 6e 74 36 34 28 49 6e 74 50  ReturnInt64(IntP
13f60 74 72 20 63 6f 6e 74 65 78 74 2c 20 6c 6f 6e 67  tr context, long
13f70 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
13f80 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
13f90 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
13fa0 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69        UnsafeNati
13fb0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
13fc0 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36 34 28 63  3_result_int64(c
13fd0 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 29 3b 0d  ontext, value);.
13fe0 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53  .#elif !SQLITE_S
13ff0 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 55  TANDARD..      U
14000 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
14010 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c  ds.sqlite3_resul
14020 74 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28  t_int64_interop(
14030 63 6f 6e 74 65 78 74 2c 20 72 65 66 20 76 61 6c  context, ref val
14040 75 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  ue);..#else..   
14050 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74     throw new Not
14060 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70  ImplementedExcep
14070 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  tion();..#endif.
14080 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14090 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
140a0 76 6f 69 64 20 52 65 74 75 72 6e 4e 75 6c 6c 28  void ReturnNull(
140b0 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29 0d  IntPtr context).
140c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
140d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
140e0 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74  s.sqlite3_result
140f0 5f 6e 75 6c 6c 28 63 6f 6e 74 65 78 74 29 3b 0d  _null(context);.
14100 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
14110 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
14120 76 6f 69 64 20 52 65 74 75 72 6e 54 65 78 74 28  void ReturnText(
14130 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20  IntPtr context, 
14140 73 74 72 69 6e 67 20 76 61 6c 75 65 29 0d 0a 20  string value).. 
14150 20 20 20 7b 0d 0a 20 20 20 20 20 20 62 79 74 65     {..      byte
14160 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28 76 61  [] b = ToUTF8(va
14170 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 55 6e 73  lue);..      Uns
14180 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14190 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
141a0 74 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 54 6f  text(context, To
141b0 55 54 46 38 28 76 61 6c 75 65 29 2c 20 62 2e 4c  UTF8(value), b.L
141c0 65 6e 67 74 68 20 2d 20 31 2c 20 28 49 6e 74 50  ength - 1, (IntP
141d0 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20 20 7d  tr)(-1));..    }
141e0 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f  ....#if INTEROP_
141f0 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20  VIRTUAL_TABLE.. 
14200 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
14210 0d 0a 20 20 20 20 2f 2f 2f 20 44 65 74 65 72 6d  ..    /// Determ
14220 69 6e 65 73 20 74 68 65 20 66 69 6c 65 20 6e 61  ines the file na
14230 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  me of the native
14240 20 6c 69 62 72 61 72 79 20 63 6f 6e 74 61 69 6e   library contain
14250 69 6e 67 20 74 68 65 20 6e 61 74 69 76 65 0d 0a  ing the native..
14260 20 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d 22      /// "vtshim"
14270 20 65 78 74 65 6e 73 69 6f 6e 20 2d 41 4e 44 2d   extension -AND-
14280 20 77 68 65 74 68 65 72 20 69 74 20 73 68 6f 75   whether it shou
14290 6c 64 20 62 65 20 64 79 6e 61 6d 69 63 61 6c 6c  ld be dynamicall
142a0 79 20 6c 6f 61 64 65 64 20 62 79 0d 0a 20 20 20  y loaded by..   
142b0 20 2f 2f 2f 20 74 68 69 73 20 63 6c 61 73 73 2e   /// this class.
142c0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
142d0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
142e0 61 72 61 6d 20 6e 61 6d 65 3d 22 69 73 4c 6f 61  aram name="isLoa
142f0 64 4e 65 65 64 65 64 22 3e 0d 0a 20 20 20 20 2f  dNeeded">..    /
14300 2f 2f 20 54 68 69 73 20 6f 75 74 70 75 74 20 70  // This output p
14310 61 72 61 6d 65 74 65 72 20 77 69 6c 6c 20 62 65  arameter will be
14320 20 73 65 74 20 74 6f 20 6e 6f 6e 2d 7a 65 72 6f   set to non-zero
14330 20 69 66 20 74 68 65 20 72 65 74 75 72 6e 65 64   if the returned
14340 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f 2f   native..    ///
14350 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 6e 61   library file na
14360 6d 65 20 73 68 6f 75 6c 64 20 62 65 20 64 79 6e  me should be dyn
14370 61 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64 20  amically loaded 
14380 70 72 69 6f 72 20 74 6f 20 61 74 74 65 6d 70 74  prior to attempt
14390 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65  ing..    /// the
143a0 20 63 72 65 61 74 69 6f 6e 20 6f 66 20 6e 61 74   creation of nat
143b0 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 65  ive disposable e
143c0 78 74 65 6e 73 69 6f 6e 20 6d 6f 64 75 6c 65 73  xtension modules
143d0 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
143e0 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
143f0 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
14400 54 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66  The file name of
14410 20 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72   the native libr
14420 61 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74  ary containing t
14430 68 65 20 6e 61 74 69 76 65 20 22 76 74 73 68 69  he native "vtshi
14440 6d 22 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65  m"..    /// exte
14450 6e 73 69 6f 6e 20 2d 4f 52 2d 20 6e 75 6c 6c 20  nsion -OR- null 
14460 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62 65 20  if it cannot be 
14470 64 65 74 65 72 6d 69 6e 65 64 2e 0d 0a 20 20 20  determined...   
14480 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
14490 0a 20 20 20 20 70 72 69 76 61 74 65 20 73 74 72  .    private str
144a0 69 6e 67 20 47 65 74 53 68 69 6d 45 78 74 65 6e  ing GetShimExten
144b0 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 28 0d 0a 20  sionFileName(.. 
144c0 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c 20         ref bool 
144d0 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 2f 2a 20  isLoadNeeded /* 
144e0 6f 75 74 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20  out */..        
144f0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14500 20 20 69 66 20 28 5f 73 68 69 6d 49 73 4c 6f 61    if (_shimIsLoa
14510 64 4e 65 65 64 65 64 20 21 3d 20 6e 75 6c 6c 29  dNeeded != null)
14520 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 73  ..            is
14530 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 28 62 6f  LoadNeeded = (bo
14540 6f 6c 29 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65  ol)_shimIsLoadNe
14550 65 64 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 65  eded;..        e
14560 6c 73 65 0d 0a 23 69 66 20 53 51 4c 49 54 45 5f  lse..#if SQLITE_
14570 53 54 41 4e 44 41 52 44 20 7c 7c 20 55 53 45 5f  STANDARD || USE_
14580 49 4e 54 45 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50  INTEROP_DLL || P
14590 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
145a0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
145b0 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65 65 64        isLoadNeed
145c0 65 64 20 3d 20 48 65 6c 70 65 72 4d 65 74 68 6f  ed = HelperMetho
145d0 64 73 2e 49 73 57 69 6e 64 6f 77 73 28 29 3b 20  ds.IsWindows(); 
145e0 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65  /* COMPAT */..#e
145f0 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
14600 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20   isLoadNeeded = 
14610 66 61 6c 73 65 3b 20 2f 2a 20 6d 69 78 65 64 2d  false; /* mixed-
14620 6d 6f 64 65 20 61 73 73 65 6d 62 6c 79 20 2a 2f  mode assembly */
14630 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
14640 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c 65 4e      string fileN
14650 61 6d 65 20 3d 20 5f 73 68 69 6d 45 78 74 65 6e  ame = _shimExten
14660 73 69 6f 6e 46 69 6c 65 4e 61 6d 65 3b 0d 0a 0d  sionFileName;...
14670 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c  .        if (fil
14680 65 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a  eName != null)..
14690 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
146a0 72 6e 20 66 69 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a  rn fileName;....
146b0 23 69 66 20 28 53 51 4c 49 54 45 5f 53 54 41 4e  #if (SQLITE_STAN
146c0 44 41 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45  DARD || USE_INTE
146d0 52 4f 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46  ROP_DLL || PLATF
146e0 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45  ORM_COMPACTFRAME
146f0 57 4f 52 4b 29 20 26 26 20 50 52 45 4c 4f 41 44  WORK) && PRELOAD
14700 5f 4e 41 54 49 56 45 5f 4c 49 42 52 41 52 59 0d  _NATIVE_LIBRARY.
14710 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
14720 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
14730 6f 64 73 2e 47 65 74 4e 61 74 69 76 65 4c 69 62  ods.GetNativeLib
14740 72 61 72 79 46 69 6c 65 4e 61 6d 65 4f 6e 6c 79  raryFileNameOnly
14750 28 29 3b 20 2f 2a 20 43 4f 4d 50 41 54 20 2a 2f  (); /* COMPAT */
14760 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
14770 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b 0d 0a 23   return null;..#
14780 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
14790 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
147a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
147b0 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
147c0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
147d0 69 6e 20 6f 72 64 65 72 20 74 6f 20 63 72 65 61  in order to crea
147e0 74 65 20 61 20 64 69 73 70 6f 73 61 62 6c 65 0d  te a disposable.
147f0 0a 20 20 20 20 2f 2f 2f 20 6d 6f 64 75 6c 65 20  .    /// module 
14800 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 69  containing the i
14810 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66  mplementation of
14820 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65   a virtual table
14830 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
14840 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
14850 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75  param name="modu
14860 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  le">..    /// Th
14870 65 20 6d 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20  e module object 
14880 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e 20  to be used when 
14890 63 72 65 61 74 69 6e 67 20 74 68 65 20 6e 61 74  creating the nat
148a0 69 76 65 20 64 69 73 70 6f 73 61 62 6c 65 20 6d  ive disposable m
148b0 6f 64 75 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  odule...    /// 
148c0 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
148d0 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
148e0 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
148f0 54 68 65 20 66 6c 61 67 73 20 66 6f 72 20 74 68  The flags for th
14900 65 20 61 73 73 6f 63 69 61 74 65 64 20 3c 73 65  e associated <se
14910 65 20 63 72 65 66 3d 22 53 51 4c 69 74 65 43 6f  e cref="SQLiteCo
14920 6e 6e 65 63 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a  nnection" /> obj
14930 65 63 74 20 69 6e 73 74 61 6e 63 65 2e 0d 0a 20  ect instance... 
14940 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
14950 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
14960 65 72 72 69 64 65 20 76 6f 69 64 20 43 72 65 61  erride void Crea
14970 74 65 4d 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d  teModule(SQLiteM
14980 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51  odule module, SQ
14990 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
149a0 61 67 73 20 66 6c 61 67 73 29 0d 0a 20 20 20 20  ags flags)..    
149b0 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d  {..        if (m
149c0 6f 64 75 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  odule == null)..
149d0 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
149e0 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
149f0 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64  llException("mod
14a00 75 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ule");....      
14a10 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
14a20 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
14a30 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65  lags.NoLogModule
14a40 29 20 21 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) != SQLiteConne
14a50 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f 4c 6f 67  ctionFlags.NoLog
14a60 4d 6f 64 75 6c 65 29 0d 0a 20 20 20 20 20 20 20  Module)..       
14a70 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
14a80 6d 6f 64 75 6c 65 2e 4c 6f 67 45 72 72 6f 72 73  module.LogErrors
14a90 20 3d 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c   = ((flags & SQL
14aa0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
14ab0 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45 72 72 6f  gs.LogModuleErro
14ac0 72 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  r) == SQLiteConn
14ad0 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d  ectionFlags.LogM
14ae0 6f 64 75 6c 65 45 72 72 6f 72 29 3b 0d 0a 20 20  oduleError);..  
14af0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
14b00 2e 4c 6f 67 45 78 63 65 70 74 69 6f 6e 73 20 3d  .LogExceptions =
14b10 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
14b20 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
14b30 2e 4c 6f 67 4d 6f 64 75 6c 65 45 78 63 65 70 74  .LogModuleExcept
14b40 69 6f 6e 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ion) == SQLiteCo
14b50 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
14b60 67 4d 6f 64 75 6c 65 45 78 63 65 70 74 69 6f 6e  gModuleException
14b70 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
14b80 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 73 71  .        if (_sq
14b90 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l == null)..    
14ba0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
14bb0 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
14bc0 6e 28 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  n("connection ha
14bd0 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
14be0 64 6c 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  dle");....      
14bf0 20 20 62 6f 6f 6c 20 69 73 4c 6f 61 64 4e 65 65    bool isLoadNee
14c00 64 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20  ded = false;..  
14c10 20 20 20 20 20 20 73 74 72 69 6e 67 20 66 69 6c        string fil
14c20 65 4e 61 6d 65 20 3d 20 47 65 74 53 68 69 6d 45  eName = GetShimE
14c30 78 74 65 6e 73 69 6f 6e 46 69 6c 65 4e 61 6d 65  xtensionFileName
14c40 28 72 65 66 20 69 73 4c 6f 61 64 4e 65 65 64 65  (ref isLoadNeede
14c50 64 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69  d);....        i
14c60 66 20 28 69 73 4c 6f 61 64 4e 65 65 64 65 64 29  f (isLoadNeeded)
14c70 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
14c80 20 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c           if (fil
14c90 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
14ca0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cb0 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
14cc0 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65 20 66  Exception("the f
14cd0 69 6c 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65  ile name for the
14ce0 20 5c 22 76 74 73 68 69 6d 5c 22 20 65 78 74 65   \"vtshim\" exte
14cf0 6e 73 69 6f 6e 20 69 73 20 75 6e 6b 6e 6f 77 6e  nsion is unknown
14d00 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ");....         
14d10 20 20 20 69 66 20 28 5f 73 68 69 6d 45 78 74 65     if (_shimExte
14d20 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65 20 3d 3d  nsionProcName ==
14d30 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
14d40 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
14d50 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
14d60 6e 28 22 74 68 65 20 65 6e 74 72 79 20 70 6f 69  n("the entry poi
14d70 6e 74 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73  nt for the \"vts
14d80 68 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20  him\" extension 
14d90 69 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d  is unknown");...
14da0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 65 74  .            Set
14db0 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28 74 72  LoadExtension(tr
14dc0 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ue);..          
14dd0 20 20 4c 6f 61 64 45 78 74 65 6e 73 69 6f 6e 28    LoadExtension(
14de0 66 69 6c 65 4e 61 6d 65 2c 20 5f 73 68 69 6d 45  fileName, _shimE
14df0 78 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d 65  xtensionProcName
14e00 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
14e10 0a 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64  .        if (mod
14e20 75 6c 65 2e 43 72 65 61 74 65 44 69 73 70 6f 73  ule.CreateDispos
14e30 61 62 6c 65 4d 6f 64 75 6c 65 28 5f 73 71 6c 29  ableModule(_sql)
14e40 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
14e50 20 20 20 20 20 20 20 20 20 20 69 66 20 28 5f 6d            if (_m
14e60 6f 64 75 6c 65 73 20 3d 3d 20 6e 75 6c 6c 29 0d  odules == null).
14e70 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14e80 20 5f 6d 6f 64 75 6c 65 73 20 3d 20 6e 65 77 20   _modules = new 
14e90 44 69 63 74 69 6f 6e 61 72 79 3c 73 74 72 69 6e  Dictionary<strin
14ea0 67 2c 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e  g, SQLiteModule>
14eb0 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ();....         
14ec0 20 20 20 5f 6d 6f 64 75 6c 65 73 2e 41 64 64 28     _modules.Add(
14ed0 6d 6f 64 75 6c 65 2e 4e 61 6d 65 2c 20 6d 6f 64  module.Name, mod
14ee0 75 6c 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ule);....       
14ef0 20 20 20 20 20 69 66 20 28 5f 75 73 65 50 6f 6f       if (_usePoo
14f00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
14f10 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
14f20 20 20 20 5f 75 73 65 50 6f 6f 6c 20 3d 20 66 61     _usePool = fa
14f30 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54  lse;....#if !NET
14f40 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
14f50 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
14f60 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
14f70 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65   Trace.WriteLine
14f80 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53  (HelperMethods.S
14f90 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20  tringFormat(..  
14fa0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fb0 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75    CultureInfo.Cu
14fc0 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  rrentCulture,.. 
14fd0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14fe0 20 20 20 22 43 72 65 61 74 65 4d 6f 64 75 6c 65     "CreateModule
14ff0 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65 64   (Pool) Disabled
15000 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20  : {0}",..       
15010 20 20 20 20 20 20 20 20 20 20 20 20 20 48 61 6e               Han
15020 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b  dleToString()));
15030 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
15040 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
15050 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
15060 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15070 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15080 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
15090 6f 6e 28 47 65 74 4c 61 73 74 45 72 72 6f 72 28  on(GetLastError(
150a0 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ));..        }..
150b0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f      }....    ///
150c0 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
150d0 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e 61  /// Calls the na
150e0 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72 65  tive SQLite core
150f0 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64 65   library in orde
15100 72 20 74 6f 20 63 6c 65 61 6e 75 70 20 74 68 65  r to cleanup the
15110 20 72 65 73 6f 75 72 63 65 73 0d 0a 20 20 20 20   resources..    
15120 2f 2f 2f 20 61 73 73 6f 63 69 61 74 65 64 20 77  /// associated w
15130 69 74 68 20 61 20 6d 6f 64 75 6c 65 20 63 6f 6e  ith a module con
15140 74 61 69 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c  taining the impl
15150 65 6d 65 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20  ementation of a 
15160 76 69 72 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a  virtual table...
15170 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
15180 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
15190 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22  am name="module"
151a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d  >..    /// The m
151b0 6f 64 75 6c 65 20 6f 62 6a 65 63 74 20 70 72 65  odule object pre
151c0 76 69 6f 75 73 6c 79 20 70 61 73 73 65 64 20 74  viously passed t
151d0 6f 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d  o the <see cref=
151e0 22 43 72 65 61 74 65 4d 6f 64 75 6c 65 22 20 2f  "CreateModule" /
151f0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6d 65 74 68 6f  >..    /// metho
15200 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
15210 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
15220 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73  aram name="flags
15230 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20  ">..    /// The 
15240 66 6c 61 67 73 20 66 6f 72 20 74 68 65 20 61 73  flags for the as
15250 73 6f 63 69 61 74 65 64 20 3c 73 65 65 20 63 72  sociated <see cr
15260 65 66 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63  ef="SQLiteConnec
15270 74 69 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20  tion" /> object 
15280 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
15290 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
152a0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
152b0 64 65 20 76 6f 69 64 20 44 69 73 70 6f 73 65 4d  de void DisposeM
152c0 6f 64 75 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75  odule(SQLiteModu
152d0 6c 65 20 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74  le module, SQLit
152e0 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
152f0 20 66 6c 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a   flags)..    {..
15300 20 20 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75          if (modu
15310 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  le == null)..   
15320 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
15330 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
15340 78 63 65 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65  xception("module
15350 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 6d  ");....        m
15360 6f 64 75 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b  odule.Dispose();
15370 0d 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d  ..    }..#endif.
15380 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
15390 6f 76 65 72 72 69 64 65 20 49 6e 74 50 74 72 20  override IntPtr 
153a0 41 67 67 72 65 67 61 74 65 43 6f 6e 74 65 78 74  AggregateContext
153b0 28 49 6e 74 50 74 72 20 63 6f 6e 74 65 78 74 29  (IntPtr context)
153c0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
153d0 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69  eturn UnsafeNati
153e0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
153f0 33 5f 61 67 67 72 65 67 61 74 65 5f 63 6f 6e 74  3_aggregate_cont
15400 65 78 74 28 63 6f 6e 74 65 78 74 2c 20 31 29 3b  ext(context, 1);
15410 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49  ..    }....#if I
15420 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54  NTEROP_VIRTUAL_T
15430 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  ABLE..    /// <s
15440 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
15450 20 43 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76   Calls the nativ
15460 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69  e SQLite core li
15470 62 72 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74  brary in order t
15480 6f 20 64 65 63 6c 61 72 65 20 61 20 76 69 72 74  o declare a virt
15490 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f  ual table..    /
154a0 2f 2f 20 69 6e 20 72 65 73 70 6f 6e 73 65 20 74  // in response t
154b0 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74 68  o a call into th
154c0 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51  e <see cref="ISQ
154d0 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65  LiteNativeModule
154e0 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20 20  .xCreate" />..  
154f0 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63 72    /// or <see cr
15500 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
15510 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63 74  eModule.xConnect
15520 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61 62  " /> virtual tab
15530 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20 20  le methods...   
15540 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
15550 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
15560 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
15570 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72 74      /// The virt
15580 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c 65  ual table module
15590 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20 72   that is to be r
155a0 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20 74  esponsible for t
155b0 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
155c0 0d 0a 20 20 20 20 2f 2f 2f 20 62 65 69 6e 67 20  ..    /// being 
155d0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
155e0 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
155f0 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15600 3d 22 73 74 72 53 71 6c 22 3e 0d 0a 20 20 20 20  ="strSql">..    
15610 2f 2f 2f 20 54 68 65 20 73 74 72 69 6e 67 20 63  /// The string c
15620 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 53 51  ontaining the SQ
15630 4c 20 73 74 61 74 65 6d 65 6e 74 20 64 65 73 63  L statement desc
15640 72 69 62 69 6e 67 20 74 68 65 20 76 69 72 74 75  ribing the virtu
15650 61 6c 20 74 61 62 6c 65 20 74 6f 0d 0a 20 20 20  al table to..   
15660 20 2f 2f 2f 20 62 65 20 64 65 63 6c 61 72 65 64   /// be declared
15670 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
15680 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
15690 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f 72 22  ram name="error"
156a0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f 6e 20  >..    /// Upon 
156b0 73 75 63 63 65 73 73 2c 20 74 68 65 20 63 6f 6e  success, the con
156c0 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20 70 61  tents of this pa
156d0 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e 64 65  rameter are unde
156e0 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66 61 69  fined.  Upon fai
156f0 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69  lure,..    /// i
15700 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61 69 6e  t should contain
15710 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74 65 20   an appropriate 
15720 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a  error message...
15730 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
15740 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72  ..    /// <retur
15750 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 73  ns>..    /// A s
15760 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72  tandard SQLite r
15770 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20 20 20  eturn code...   
15780 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d   /// </returns>.
15790 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
157a0 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
157b0 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65 56 69  orCode DeclareVi
157c0 72 74 75 61 6c 54 61 62 6c 65 28 0d 0a 20 20 20  rtualTable(..   
157d0 20 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c       SQLiteModul
157e0 65 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20  e module,..     
157f0 20 20 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c     string strSql
15800 2c 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73  ,..        ref s
15810 74 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20  tring error..   
15820 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
15830 20 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20         if (_sql 
15840 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
15850 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
15860 20 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63   error = "connec
15870 74 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61  tion has an inva
15880 6c 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20  lid handle";..  
15890 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
158a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
158b0 2e 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20  .Error;..       
158c0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e   }....        In
158d0 74 50 74 72 20 70 53 71 6c 20 3d 20 49 6e 74 50  tPtr pSql = IntP
158e0 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
158f0 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
15900 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15910 70 53 71 6c 20 3d 20 53 51 4c 69 74 65 53 74 72  pSql = SQLiteStr
15920 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46 72  ing.Utf8IntPtrFr
15930 6f 6d 53 74 72 69 6e 67 28 73 74 72 53 71 6c 29  omString(strSql)
15940 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15950 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15960 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
15970 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
15980 5f 64 65 63 6c 61 72 65 5f 76 74 61 62 28 0d 0a  _declare_vtab(..
15990 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
159a0 5f 73 71 6c 2c 20 70 53 71 6c 29 3b 0d 0a 0d 0a  _sql, pSql);....
159b0 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
159c0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
159d0 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6d 6f  rCode.Ok) && (mo
159e0 64 75 6c 65 20 21 3d 20 6e 75 6c 6c 29 29 0d 0a  dule != null))..
159f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15a00 6d 6f 64 75 6c 65 2e 44 65 63 6c 61 72 65 64 20  module.Declared 
15a10 3d 20 74 72 75 65 3b 0d 0a 0d 0a 20 20 20 20 20  = true;....     
15a20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
15a30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15a40 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47 65 74 4c  Ok) error = GetL
15a50 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a 0d 0a 20  astError();.... 
15a60 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
15a70 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  n n;..        }.
15a80 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
15a90 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
15aa0 20 20 20 20 20 20 20 20 20 69 66 20 28 70 53 71           if (pSq
15ab0 6c 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  l != IntPtr.Zero
15ac0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
15ad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15ae0 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72 79 2e 46    SQLiteMemory.F
15af0 72 65 65 28 70 53 71 6c 29 3b 0d 0a 20 20 20 20  ree(pSql);..    
15b00 20 20 20 20 20 20 20 20 20 20 20 20 70 53 71 6c              pSql
15b10 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
15b20 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
15b30 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
15b40 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
15b50 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
15b60 61 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20  alls the native 
15b70 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
15b80 61 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20  ary in order to 
15b90 64 65 63 6c 61 72 65 20 61 20 76 69 72 74 75 61  declare a virtua
15ba0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
15bb0 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 72 65 73   function in res
15bc0 70 6f 6e 73 65 20 74 6f 20 61 20 63 61 6c 6c 20  ponse to a call 
15bd0 69 6e 74 6f 20 74 68 65 20 3c 73 65 65 20 63 72  into the <see cr
15be0 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69 76  ef="ISQLiteNativ
15bf0 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61 74 65 22  eModule.xCreate"
15c00 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 6f 72 20   />..    /// or 
15c10 3c 73 65 65 20 63 72 65 66 3d 22 49 53 51 4c 69  <see cref="ISQLi
15c20 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c 65 2e 78  teNativeModule.x
15c30 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76 69 72 74  Connect" /> virt
15c40 75 61 6c 20 74 61 62 6c 65 20 6d 65 74 68 6f 64  ual table method
15c50 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  s...    /// </su
15c60 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
15c70 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 6d 6f 64  <param name="mod
15c80 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  ule">..    /// T
15c90 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c 65  he virtual table
15ca0 20 6d 6f 64 75 6c 65 20 74 68 61 74 20 69 73 20   module that is 
15cb0 74 6f 20 62 65 20 72 65 73 70 6f 6e 73 69 62 6c  to be responsibl
15cc0 65 20 66 6f 72 20 74 68 65 20 76 69 72 74 75 61  e for the virtua
15cd0 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f  l table..    ///
15ce0 20 66 75 6e 63 74 69 6f 6e 20 62 65 69 6e 67 20   function being 
15cf0 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20 20 2f  declared...    /
15d00 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
15d10 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
15d20 3d 22 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 22  ="argumentCount"
15d30 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
15d40 75 6d 62 65 72 20 6f 66 20 61 72 67 75 6d 65 6e  umber of argumen
15d50 74 73 20 74 6f 20 74 68 65 20 66 75 6e 63 74 69  ts to the functi
15d60 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72 65  on being declare
15d70 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  d...    /// </pa
15d80 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
15d90 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 61 6d 65 22  aram name="name"
15da0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e  >..    /// The n
15db0 61 6d 65 20 6f 66 20 74 68 65 20 66 75 6e 63 74  ame of the funct
15dc0 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
15dd0 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
15de0 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
15df0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 65 72 72 6f  param name="erro
15e00 72 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 55 70 6f  r">..    /// Upo
15e10 6e 20 73 75 63 63 65 73 73 2c 20 74 68 65 20 63  n success, the c
15e20 6f 6e 74 65 6e 74 73 20 6f 66 20 74 68 69 73 20  ontents of this 
15e30 70 61 72 61 6d 65 74 65 72 20 61 72 65 20 75 6e  parameter are un
15e40 64 65 66 69 6e 65 64 2e 20 20 55 70 6f 6e 20 66  defined.  Upon f
15e50 61 69 6c 75 72 65 2c 0d 0a 20 20 20 20 2f 2f 2f  ailure,..    ///
15e60 20 69 74 20 73 68 6f 75 6c 64 20 63 6f 6e 74 61   it should conta
15e70 69 6e 20 61 6e 20 61 70 70 72 6f 70 72 69 61 74  in an appropriat
15e80 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e  e error message.
15e90 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
15ea0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
15eb0 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
15ec0 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65   standard SQLite
15ed0 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 0d 0a 20   return code... 
15ee0 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
15ef0 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
15f00 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45  override SQLiteE
15f10 72 72 6f 72 43 6f 64 65 20 44 65 63 6c 61 72 65  rrorCode Declare
15f20 56 69 72 74 75 61 6c 46 75 6e 63 74 69 6f 6e 28  VirtualFunction(
15f30 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
15f40 4d 6f 64 75 6c 65 20 6d 6f 64 75 6c 65 2c 0d 0a  Module module,..
15f50 20 20 20 20 20 20 20 20 69 6e 74 20 61 72 67 75          int argu
15f60 6d 65 6e 74 43 6f 75 6e 74 2c 0d 0a 20 20 20 20  mentCount,..    
15f70 20 20 20 20 73 74 72 69 6e 67 20 6e 61 6d 65 2c      string name,
15f80 0d 0a 20 20 20 20 20 20 20 20 72 65 66 20 73 74  ..        ref st
15f90 72 69 6e 67 20 65 72 72 6f 72 0d 0a 20 20 20 20  ring error..    
15fa0 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20      )..    {..  
15fb0 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d        if (_sql =
15fc0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
15fd0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
15fe0 65 72 72 6f 72 20 3d 20 22 63 6f 6e 6e 65 63 74  error = "connect
15ff0 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
16000 69 64 20 68 61 6e 64 6c 65 22 3b 0d 0a 20 20 20  id handle";..   
16010 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
16020 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
16030 45 72 72 6f 72 3b 0d 0a 20 20 20 20 20 20 20 20  Error;..        
16040 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  }....        Int
16050 50 74 72 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50  Ptr pName = IntP
16060 74 72 2e 5a 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20  tr.Zero;....    
16070 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20      try..       
16080 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
16090 70 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53 74  pName = SQLiteSt
160a0 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72 46  ring.Utf8IntPtrF
160b0 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29 3b  romString(name);
160c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
160d0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
160e0 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
160f0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16100 6f 76 65 72 6c 6f 61 64 5f 66 75 6e 63 74 69 6f  overload_functio
16110 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
16120 20 20 20 20 5f 73 71 6c 2c 20 70 4e 61 6d 65 2c      _sql, pName,
16130 20 61 72 67 75 6d 65 6e 74 43 6f 75 6e 74 29 3b   argumentCount);
16140 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
16150 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
16160 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72 72  rrorCode.Ok) err
16170 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72 6f  or = GetLastErro
16180 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  r();....        
16190 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20      return n;.. 
161a0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
161b0 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
161c0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
161d0 20 20 69 66 20 28 70 4e 61 6d 65 20 21 3d 20 49    if (pName != I
161e0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
161f0 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16200 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16210 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 4e  teMemory.Free(pN
16220 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ame);..         
16230 20 20 20 20 20 20 20 70 4e 61 6d 65 20 3d 20 49         pName = I
16240 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20  ntPtr.Zero;..   
16250 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
16260 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
16270 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ndif....    /// 
16280 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
16290 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20 64 69  // Enables or di
162a0 73 61 62 6c 65 64 20 65 78 74 65 6e 73 69 6f 6e  sabled extension
162b0 20 6c 6f 61 64 69 6e 67 20 62 79 20 53 51 4c 69   loading by SQLi
162c0 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  te...    /// </s
162d0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
162e0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f   <param name="bO
162f0 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  nOff">..    /// 
16300 54 72 75 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c  True to enable l
16310 6f 61 64 69 6e 67 20 6f 66 20 65 78 74 65 6e 73  oading of extens
16320 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74 6f 20 64  ions, false to d
16330 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f  isable...    ///
16340 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
16350 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
16360 20 76 6f 69 64 20 53 65 74 4c 6f 61 64 45 78 74   void SetLoadExt
16370 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62 4f 6e 4f  ension(bool bOnO
16380 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ff)..    {..    
16390 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
163a0 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
163b0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
163c0 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61 64 5f  te3_enable_load_
163d0 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20 20 20  extension(..    
163e0 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 28 62          _sql, (b
163f0 4f 6e 4f 66 66 20 3f 20 2d 31 20 3a 20 30 29 29  OnOff ? -1 : 0))
16400 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
16410 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
16420 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
16430 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
16440 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
16450 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ror());..    }..
16460 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
16470 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f 61  ry>..    /// Loa
16480 64 73 20 61 20 53 51 4c 69 74 65 20 65 78 74 65  ds a SQLite exte
16490 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66 72  nsion library fr
164a0 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69 6c  om the named fil
164b0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
164c0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
164d0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69 6c  <param name="fil
164e0 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  eName">..    ///
164f0 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
16500 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c 69   dynamic link li
16510 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74 61  brary file conta
16520 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e 73  ining the extens
16530 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ion...    /// </
16540 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
16550 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72 6f  <param name="pro
16560 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  cName">..    ///
16570 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65   The name of the
16580 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74 69   exported functi
16590 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74 69  on used to initi
165a0 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e 73  alize the extens
165b0 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  ion...    /// If
165c0 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61 75   null, the defau
165d0 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74 65  lt "sqlite3_exte
165e0 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c 6c  nsion_init" will
165f0 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20 2f   be used...    /
16600 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  // </param>..   
16610 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16620 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74 65  de void LoadExte
16630 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69 6c  nsion(string fil
16640 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70 72  eName, string pr
16650 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  ocName)..    {..
16660 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c 65          if (file
16670 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  Name == null).. 
16680 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
16690 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c   new ArgumentNul
166a0 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c 65  lException("file
166b0 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  Name");....     
166c0 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f 72     IntPtr pError
166d0 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
166e0 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  ...        try..
166f0 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
16700 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74         byte[] ut
16710 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54 46  f8FileName = UTF
16720 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e 47  8Encoding.UTF8.G
16730 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d 65  etBytes(fileName
16740 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20 20   + '\0');..     
16750 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75 74         byte[] ut
16760 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75 6c  f8ProcName = nul
16770 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  l;....          
16780 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20 21    if (procName !
16790 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
167a0 20 20 20 20 20 20 20 20 20 75 74 66 38 50 72 6f           utf8Pro
167b0 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63 6f  cName = UTF8Enco
167c0 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79 74  ding.UTF8.GetByt
167d0 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27 5c  es(procName + '\
167e0 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  0');....        
167f0 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
16800 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
16810 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
16820 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73 69  te3_load_extensi
16830 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
16840 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38 46       _sql, utf8F
16850 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72 6f  ileName, utf8Pro
16860 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72 6f  cName, ref pErro
16870 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  r);....         
16880 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
16890 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d  teErrorCode.Ok).
168a0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
168b0 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
168c0 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55 54  eException(n, UT
168d0 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72 6f  F8ToString(pErro
168e0 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  r, -1));..      
168f0 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e    }..        fin
16900 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ally..        {.
16910 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
16920 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50 74  (pError != IntPt
16930 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
16940 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
16950 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61          UnsafeNa
16960 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
16970 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72 29  te3_free(pError)
16980 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
16990 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74 50     pError = IntP
169a0 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
169b0 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
169c0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
169d0 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72 20   /// Enables or 
169e0 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64 65  disabled extende
169f0 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20 72  d result codes r
16a00 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69 74  eturned by SQLit
16a10 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  e..    internal 
16a20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
16a30 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74 43  tExtendedResultC
16a40 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66 66  odes(bool bOnOff
16a50 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16a60 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
16a70 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
16a80 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
16a90 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74 5f  extended_result_
16aa0 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20 20  codes(..        
16ab0 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66 20    _sql, (bOnOff 
16ac0 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a 20  ? -1 : 0));.... 
16ad0 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
16ae0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
16af0 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
16b00 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
16b10 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
16b20 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f 20  .    }..    /// 
16b30 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53 51  Gets the last SQ
16b40 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65 0d  Lite error code.
16b50 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
16b60 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
16b70 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f 64  orCode ResultCod
16b80 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  e()..    {..    
16b90 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
16ba0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
16bb0 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73 71  ite3_errcode(_sq
16bc0 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20  l);..    }..    
16bd0 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61 73  /// Gets the las
16be0 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64 65  t SQLite extende
16bf0 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20 20  d error code..  
16c00 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16c10 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
16c20 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73 75  ode ExtendedResu
16c30 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b 0d  ltCode()..    {.
16c40 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
16c50 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16c60 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e 64  s.sqlite3_extend
16c70 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c 29  ed_errcode(_sql)
16c80 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
16c90 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65  /// Add a log me
16ca0 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51  ssage via the SQ
16cb0 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67  Lite sqlite3_log
16cc0 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20   interface...   
16cd0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16ce0 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73 61  de void LogMessa
16cf0 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  ge(SQLiteErrorCo
16d00 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74 72  de iErrCode, str
16d10 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a 20  ing zMessage).. 
16d20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 74 61 74     {..      Stat
16d30 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 69 45 72  icLogMessage(iEr
16d40 72 43 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65 29  rCode, zMessage)
16d50 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
16d60 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d 65  /// Add a log me
16d70 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53 51  ssage via the SQ
16d80 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f 67  Lite sqlite3_log
16d90 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20 20   interface...   
16da0 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
16db0 20 76 6f 69 64 20 53 74 61 74 69 63 4c 6f 67 4d   void StaticLogM
16dc0 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72 72  essage(SQLiteErr
16dd0 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65 2c  orCode iErrCode,
16de0 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67 65   string zMessage
16df0 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
16e00 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16e10 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67 28  ods.sqlite3_log(
16e20 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46 38  iErrCode, ToUTF8
16e30 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20 20  (zMessage));..  
16e40 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52    }....#if INTER
16e50 4f 50 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54 45  OP_CODEC || INTE
16e60 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45 0d  ROP_INCLUDE_SEE.
16e70 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
16e80 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74 50  erride void SetP
16e90 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20 70  assword(byte[] p
16ea0 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20  asswordBytes).. 
16eb0 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69     {..      SQLi
16ec0 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
16ed0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
16ee0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79 28  ods.sqlite3_key(
16ef0 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42 79  _sql, passwordBy
16f00 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79 74  tes, passwordByt
16f10 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20 20  es.Length);..   
16f20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
16f30 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
16f40 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
16f50 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
16f60 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d  LastError());...
16f70 0a 20 20 20 20 20 20 69 66 20 28 5f 75 73 65 50  .      if (_useP
16f80 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ool)..      {.. 
16f90 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c 20         _usePool 
16fa0 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66 20  = false;....#if 
16fb0 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20  !NET_COMPACT_20 
16fc0 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54  && TRACE_CONNECT
16fd0 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72 61  ION..        Tra
16fe0 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c  ce.WriteLine(Hel
16ff0 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
17000 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
17010 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
17020 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
17030 0a 20 20 20 20 20 20 20 20 20 20 22 53 65 74 50  .          "SetP
17040 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20 44  assword (Pool) D
17050 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d 0a  isabled: {0}",..
17060 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
17070 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
17080 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d 0a  endif..      }..
17090 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
170a0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
170b0 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77 6f  oid ChangePasswo
170c0 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61 73  rd(byte[] newPas
170d0 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20 20  swordBytes)..   
170e0 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65   {..      SQLite
170f0 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
17100 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
17110 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 28  s.sqlite3_rekey(
17120 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f 72  _sql, newPasswor
17130 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73 73  dBytes, (newPass
17140 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75 6c  wordBytes == nul
17150 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73 73  l) ? 0 : newPass
17160 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74 68  wordBytes.Length
17170 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20  );..      if (n 
17180 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
17190 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77  de.Ok) throw new
171a0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
171b0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
171c0 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  ());....      if
171d0 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20   (_usePool)..   
171e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 75     {..        _u
171f0 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d  sePool = false;.
17200 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  ...#if !NET_COMP
17210 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
17220 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
17230 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
17240 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
17250 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
17260 0a 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75  .          Cultu
17270 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
17280 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
17290 20 20 22 43 68 61 6e 67 65 50 61 73 73 77 6f 72    "ChangePasswor
172a0 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c 65  d (Pool) Disable
172b0 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20  d: {0}",..      
172c0 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
172d0 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
172e0 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d  .      }..    }.
172f0 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 69  .#endif....    i
17300 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17310 20 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65 73   void SetProgres
17320 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c 20  sHook(int nOps, 
17330 53 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43 61  SQLiteProgressCa
17340 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20  llback func)..  
17350 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73    {..        Uns
17360 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
17370 2e 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65 73  .sqlite3_progres
17380 73 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c 20  s_handler(_sql, 
17390 6e 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74 50  nOps, func, IntP
173a0 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
173b0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
173c0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
173d0 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f 6b  etAuthorizerHook
173e0 28 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a 65  (SQLiteAuthorize
173f0 72 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  rCallback func).
17400 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
17410 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
17420 73 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61 75  s.sqlite3_set_au
17430 74 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20 66  thorizer(_sql, f
17440 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f  unc, IntPtr.Zero
17450 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
17460 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
17470 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61 74  de void SetUpdat
17480 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64 61  eHook(SQLiteUpda
17490 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  teCallback func)
174a0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
174b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
174c0 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61 74  ds.sqlite3_updat
174d0 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e  e_hook(_sql, fun
174e0 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b  c, IntPtr.Zero);
174f0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
17500 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
17510 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74 48   void SetCommitH
17520 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69 74  ook(SQLiteCommit
17530 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
17540 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
17550 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
17560 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74 5f  .sqlite3_commit_
17570 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c  hook(_sql, func,
17580 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
17590 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
175a0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
175b0 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c 6c  oid SetTraceCall
175c0 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63 65  back(SQLiteTrace
175d0 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a  Callback func)..
175e0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
175f0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
17600 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28 5f  .sqlite3_trace(_
17610 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50 74  sql, func, IntPt
17620 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d 0d  r.Zero);..    }.
17630 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
17640 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65  override void Se
17650 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53 51  tRollbackHook(SQ
17660 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c 6c  LiteRollbackCall
17670 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
17680 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  {..      UnsafeN
17690 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
176a0 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68 6f  ite3_rollback_ho
176b0 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49  ok(_sql, func, I
176c0 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20  ntPtr.Zero);..  
176d0 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
176e0 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
176f0 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65 74  / Allows the set
17700 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69 6e  ting of a loggin
17710 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f 6b  g callback invok
17720 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68 65  ed by SQLite whe
17730 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f 67  n a..    /// log
17740 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20 20   event occurs.  
17750 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61 63  Only one callbac
17760 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20 49  k may be set.  I
17770 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65 64  f NULL is passed
17780 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20 6c  ,..    /// the l
17790 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b 20  ogging callback 
177a0 69 73 20 75 6e 72 65 67 69 73 74 65 72 65 64 2e  is unregistered.
177b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
177c0 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
177d0 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63 22  aram name="func"
177e0 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66 75  >The callback fu
177f0 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b 65  nction to invoke
17800 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
17810 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74 75  // <returns>Retu
17820 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f 64  rns a result cod
17830 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  e</returns>..   
17840 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
17850 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
17860 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61 63  de SetLogCallbac
17870 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c 62  k(SQLiteLogCallb
17880 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20 7b  ack func)..    {
17890 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
178a0 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
178b0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
178c0 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  ds.sqlite3_confi
178d0 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20 20  g_log(..        
178e0 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69 67      SQLiteConfig
178f0 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 43  OpsEnum.SQLITE_C
17900 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63 2c  ONFIG_LOG, func,
17910 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a   IntPtr.Zero);..
17920 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
17930 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
17940 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
17950 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17960 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17970 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17980 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
17990 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
179a0 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73  //....    /// <s
179b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
179c0 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20 53   Creates a new S
179d0 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62 6a  QLite backup obj
179e0 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68 65  ect based on the
179f0 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69 6e   provided destin
17a00 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 64  ation..    /// d
17a10 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69  atabase connecti
17a20 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65 20  on.  The source 
17a30 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
17a40 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d 0a  ion is the one..
17a50 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61 74      /// associat
17a60 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62 6a  ed with this obj
17a70 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ect.  The source
17a80 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f 6e   and destination
17a90 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 2f   database..    /
17aa0 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20 63  // connections c
17ab0 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61 6d  annot be the sam
17ac0 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  e...    /// </su
17ad0 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
17ae0 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73  <param name="des
17af0 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69 6e  tCnn">The destin
17b00 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20 63  ation database c
17b10 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72 61  onnection.</para
17b20 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
17b30 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61 6d  am name="destNam
17b40 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74 69  e">The destinati
17b50 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  on database name
17b60 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
17b70 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
17b80 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65 20  sourceName">The 
17b90 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
17ba0 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20  name.</param>.. 
17bb0 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
17bc0 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74 65  The newly create
17bd0 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e  d backup object.
17be0 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
17bf0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
17c00 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20 49  e SQLiteBackup I
17c10 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70 28  nitializeBackup(
17c20 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
17c30 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74 43  Connection destC
17c40 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  nn,..        str
17c50 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a 20  ing destName,.. 
17c60 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73 6f         string so
17c70 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20 20  urceName..      
17c80 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
17c90 20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e 20      if (destCnn 
17ca0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
17cb0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
17cc0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
17cd0 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22 29  ption("destCnn")
17ce0 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
17cf0 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75 6c  (destName == nul
17d00 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
17d10 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
17d20 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
17d30 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  "destName");....
17d40 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75 72          if (sour
17d50 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d  ceName == null).
17d60 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17d70 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
17d80 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73 6f  ullException("so
17d90 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20  urceName");.... 
17da0 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 20 64         SQLite3 d
17db0 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65 73  estSqlite3 = des
17dc0 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51 4c  tCnn._sql as SQL
17dd0 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ite3;....       
17de0 20 69 66 20 28 64 65 73 74 53 71 6c 69 74 65 33   if (destSqlite3
17df0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
17e00 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
17e10 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74 69   ArgumentExcepti
17e20 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
17e30 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69 6f       "Destinatio
17e40 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73  n connection has
17e50 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d 0a   no wrapper.",..
17e60 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
17e70 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20  "destCnn");.... 
17e80 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
17e90 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64 65  nectionHandle de
17ea0 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74 53  stHandle = destS
17eb0 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d 0a  qlite3._sql;....
17ec0 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73 74          if (dest
17ed0 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d  Handle == null).
17ee0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17ef0 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 45  ow new ArgumentE
17f00 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
17f10 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73 74             "Dest
17f20 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74 69  ination connecti
17f30 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  on has an invali
17f40 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20 20  d handle.",..   
17f50 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64 65               "de
17f60 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20  stCnn");....    
17f70 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63      SQLiteConnec
17f80 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72 63  tionHandle sourc
17f90 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b 0d  eHandle = _sql;.
17fa0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 73  ...        if (s
17fb0 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20 6e  ourceHandle == n
17fc0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
17fd0 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
17fe0 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
17ff0 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
18000 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65 20          "Source 
18010 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20 61  connection has a
18020 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
18030 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
18040 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d 65  byte[] zDestName
18050 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e 61   = ToUTF8(destNa
18060 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62 79  me);..        by
18070 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d 65  te[] zSourceName
18080 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63 65   = ToUTF8(source
18090 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  Name);....      
180a0 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48 61    SQLiteBackupHa
180b0 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64 6c  ndle backupHandl
180c0 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20  e = null;....   
180d0 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
180e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
180f0 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
18100 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
18110 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20 4e      finally /* N
18120 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f 72  OTE: Thread.Abor
18130 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e 20  t() protection. 
18140 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  */..        {.. 
18150 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
18160 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61 66  r backup = Unsaf
18170 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
18180 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69 6e  qlite3_backup_in
18190 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  it(..           
181a0 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65 2c       destHandle,
181b0 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75 72   zDestName, sour
181c0 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72 63  ceHandle, zSourc
181d0 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
181e0 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b 75         if (backu
181f0 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  p == IntPtr.Zero
18200 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  )..            {
18210 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
18220 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
18230 65 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20 52  e resultCode = R
18240 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d 0a  esultCode();....
18250 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
18260 69 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20 21  if (resultCode !
18270 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
18280 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 20  e.Ok)..         
18290 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
182a0 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
182b0 74 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65 2c  tion(resultCode,
182c0 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
182d0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
182e0 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 20     else..       
182f0 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72               thr
18300 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
18310 65 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20 74  eption("failed t
18320 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61 63  o initialize bac
18330 6b 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20 20  kup");..        
18340 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
18350 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64 6c       backupHandl
18360 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42 61  e = new SQLiteBa
18370 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74 48  ckupHandle(destH
18380 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b 0d  andle, backup);.
18390 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
183a0 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
183b0 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64  ection.OnChanged
183c0 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65  (null, new Conne
183d0 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d  ctionEventArgs(.
183e0 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
183f0 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65  iteConnectionEve
18400 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69 63  ntType.NewCritic
18410 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c 0d  alHandle, null,.
18420 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c  .            nul
18430 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 62  l, null, null, b
18440 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75 6c  ackupHandle, nul
18450 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20  l, new object[] 
18460 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  {..            t
18470 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20  ypeof(SQLite3), 
18480 64 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61 6d  destCnn, destNam
18490 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d 29  e, sourceName })
184a0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  );....        re
184b0 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65 42  turn new SQLiteB
184c0 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
184d0 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75 70      this, backup
184e0 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e 64  Handle, destHand
184f0 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73  le, zDestName, s
18500 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20 20  ourceHandle,..  
18510 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72 63            zSourc
18520 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a  eName);..    }..
18530 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
18540 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f 70  ry>..    /// Cop
18550 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67 65  ies up to N page
18560 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72 63  s from the sourc
18570 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  e database to th
18580 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a 20  e destination.. 
18590 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 20     /// database 
185a0 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20  associated with 
185b0 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62 61  the specified ba
185c0 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
185d0 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
185e0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
185f0 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
18600 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
18610 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d 3e   to use.</param>
18620 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
18630 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d 0a   name="nPage">..
18640 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
18650 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20 63  er of pages to c
18660 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74 6f  opy, negative to
18670 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69 6e   copy all remain
18680 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20 20  ing pages...    
18690 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
186a0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
186b0 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20 20  e="retry">..    
186c0 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65 20  /// Set to true 
186d0 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f 6e  if the operation
186e0 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65 74   needs to be ret
186f0 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74 61  ried due to data
18700 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  base..    /// lo
18710 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f 74  cking issues; ot
18720 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f 20  herwise, set to 
18730 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  false...    /// 
18740 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
18750 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  / <returns>..   
18760 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68 65   /// True if the
18770 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67 65  re are more page
18780 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c 20  s to be copied, 
18790 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65 2e  false otherwise.
187a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
187b0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
187c0 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c  al override bool
187d0 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20 20   StepBackup(..  
187e0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
187f0 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20 20  up backup,..    
18800 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d 0a      int nPage,..
18810 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f 6c          ref bool
18820 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20 20   retry..        
18830 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
18840 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65 3b    retry = false;
18850 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
18860 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29 0d  backup == null).
18870 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
18880 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e  ow new ArgumentN
18890 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62 61  ullException("ba
188a0 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  ckup");....     
188b0 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
188c0 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 62  andle handle = b
188d0 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62 61  ackup._sqlite_ba
188e0 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ckup;....       
188f0 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20 6e   if (handle == n
18900 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
18910 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61    throw new Inva
18920 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65  lidOperationExce
18930 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20  ption(..        
18940 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70 20          "Backup 
18950 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e  object has an in
18960 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29 3b  valid handle.");
18970 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50  ....        IntP
18980 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20 68  tr handlePtr = h
18990 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
189a0 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72 20    if (handlePtr 
189b0 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  == IntPtr.Zero).
189c0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
189d0 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70  ow new InvalidOp
189e0 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e  erationException
189f0 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
18a00 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63     "Backup objec
18a10 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64  t has an invalid
18a20 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72 2e   handle pointer.
18a30 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  ");....        S
18a40 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
18a50 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
18a60 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
18a70 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64 6c  ackup_step(handl
18a80 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a 20  ePtr, nPage);.. 
18a90 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f 73         backup._s
18aa0 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20 2f  tepResult = n; /
18ab0 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f 72  * NOTE: Save for
18ac0 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42 61   use by FinishBa
18ad0 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20 20  ckup. */....    
18ae0 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c      if (n == SQL
18af0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
18b00 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
18b10 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
18b20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  true;..        }
18b30 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20 69  ..        else i
18b40 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72  f (n == SQLiteEr
18b50 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20  rorCode.Busy).. 
18b60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
18b70 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74 72        retry = tr
18b80 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ue;..           
18b90 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20   return true;.. 
18ba0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
18bb0 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20    else if (n == 
18bc0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
18bd0 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20 20  Locked)..       
18be0 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
18bf0 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a 20  retry = true;.. 
18c00 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
18c10 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  n true;..       
18c20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65   }..        else
18c30 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65   if (n == SQLite
18c40 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 0d  ErrorCode.Done).
18c50 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
18c60 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 66          return f
18c70 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  alse;..        }
18c80 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
18c90 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
18ca0 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
18cb0 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e   SQLiteException
18cc0 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  (n, GetLastError
18cd0 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ());..        }.
18ce0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
18cf0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
18d00 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68 65   /// Returns the
18d10 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
18d20 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62 65   remaining to be
18d30 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68 65   copied from the
18d40 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f 2f   source..    ///
18d50 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68 65   database to the
18d60 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61 74   destination dat
18d70 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65 64  abase associated
18d80 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69 66   with the specif
18d90 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61 63  ied..    /// bac
18da0 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20 20  kup object...   
18db0 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
18dc0 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
18dd0 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68  name="backup">Th
18de0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20  e backup object 
18df0 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d  to check.</param
18e00 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
18e10 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20 6f  rns>The number o
18e20 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69 6e  f pages remainin
18e30 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e 3c  g to be copied.<
18e40 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
18e50 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
18e60 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42 61   int RemainingBa
18e70 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
18e80 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
18e90 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
18ea0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
18eb0 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
18ec0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
18ed0 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
18ee0 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
18ef0 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
18f00 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
18f10 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
18f20 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
18f30 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
18f40 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
18f50 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
18f60 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
18f70 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
18f80 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
18f90 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
18fa0 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
18fb0 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
18fc0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
18fd0 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
18fe0 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
18ff0 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
19000 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
19010 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
19020 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
19030 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
19040 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19050 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
19060 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
19070 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
19080 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
19090 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
190a0 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
190b0 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61 69  te3_backup_remai
190c0 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29 3b  ning(handlePtr);
190d0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
190e0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
190f0 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
19100 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
19110 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
19120 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20 61  ource database a
19130 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f  ssociated..    /
19140 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65 63  // with the spec
19150 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62 6a  ified backup obj
19160 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ect...    /// </
19170 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
19180 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 62  / <param name="b
19190 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b 75  ackup">The backu
191a0 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65 63  p object to chec
191b0 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  k.</param>..    
191c0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68 65  /// <returns>The
191d0 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f 66   total number of
191e0 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73 6f   pages in the so
191f0 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c 2f  urce database.</
19200 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e  returns>..    in
19210 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
19220 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61 63  int PageCountBac
19230 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53 51  kup(..        SQ
19240 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b 75  LiteBackup backu
19250 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  p..        )..  
19260 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
19270 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
19280 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
19290 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
192a0 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
192b0 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
192c0 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
192d0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
192e0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
192f0 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
19300 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
19310 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
19320 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
19330 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
19340 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
19350 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
19360 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
19370 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
19380 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
19390 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
193a0 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
193b0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
193c0 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
193d0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
193e0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
193f0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
19400 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
19410 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
19420 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
19430 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
19440 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
19450 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
19460 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
19470 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63 6f  e3_backup_pageco
19480 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  unt(handlePtr);.
19490 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
194a0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
194b0 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74 68   /// Destroys th
194c0 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 2c  e backup object,
194d0 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61 6e   rolling back an
194e0 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d 61  y backup that ma
194f0 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f 2f  y be in..    ///
19500 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20 2f   progess...    /
19510 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
19520 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
19530 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65 20  me="backup">The 
19540 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74 6f  backup object to
19550 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61 6d   destroy.</param
19560 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
19570 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46 69  override void Fi
19580 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20 20  nishBackup(..   
19590 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
195a0 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20 20  p backup..      
195b0 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
195c0 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20 3d      if (backup =
195d0 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
195e0 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41       throw new A
195f0 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70  rgumentNullExcep
19600 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b 0d  tion("backup");.
19610 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
19620 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68 61  eBackupHandle ha
19630 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f 73  ndle = backup._s
19640 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a 0d  qlite_backup;...
19650 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61 6e  .        if (han
19660 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  dle == null)..  
19670 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
19680 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72 61  new InvalidOpera
19690 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d 0a  tionException(..
196a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
196b0 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 68  "Backup object h
196c0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
196d0 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20  ndle.");....    
196e0 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64 6c      IntPtr handl
196f0 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a  ePtr = handle;..
19700 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
19710 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50 74  ndlePtr == IntPt
19720 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20  r.Zero)..       
19730 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
19740 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
19750 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
19760 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
19770 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
19780 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 20   invalid handle 
19790 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a 23  pointer.");....#
197a0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
197b0 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  ARD..        SQL
197c0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
197d0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
197e0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61 63  hods.sqlite3_bac
197f0 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65 72  kup_finish_inter
19800 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d 0a  op(handlePtr);..
19810 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 53  #else..        S
19820 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
19830 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
19840 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
19850 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61 6e  ackup_finish(han
19860 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69 66  dlePtr);..#endif
19870 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65  ..        handle
19880 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76 61  .SetHandleAsInva
19890 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43 4f  lid();....#if CO
198a0 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20 20  UNT_HANDLE..    
198b0 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
198c0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
198d0 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b 75  ) || (n == backu
198e0 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29 20  p._stepResult)) 
198f0 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61 73  handle.WasReleas
19900 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66 0d  edOk();..#endif.
19910 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28  ...        if ((
19920 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
19930 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20 21  Code.Ok) && (n !
19940 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52 65  = backup._stepRe
19950 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20 20  sult))..        
19960 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51      throw new SQ
19970 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
19980 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
19990 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
199a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199e0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
199f0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
19a00 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
19a10 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44 65  ary>..    /// De
19a20 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65 20  termines if the 
19a30 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72  SQLite core libr
19a40 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e 69  ary has been ini
19a50 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
19a60 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65 6e  ..    /// curren
19a70 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20 20  t process...    
19a80 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
19a90 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
19aa0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f 6f  >..    /// A boo
19ab0 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67 20  lean indicating 
19ac0 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20 74  whether or not t
19ad0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
19ae0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 0d  ibrary has been.
19af0 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61 6c  .    /// initial
19b00 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75 72  ized for the cur
19b10 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
19b20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
19b30 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
19b40 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
19b50 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a 20  Initialized().. 
19b60 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
19b70 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e 69  turn StaticIsIni
19b80 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20 20  tialized();..   
19b90 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73   }....    /// <s
19ba0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
19bb0 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74   Determines if t
19bc0 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c  he SQLite core l
19bd0 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e 20  ibrary has been 
19be0 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20  initialized for 
19bf0 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72  the..    /// cur
19c00 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20  rent process... 
19c10 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
19c20 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
19c30 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20  rns>..    /// A 
19c40 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69  boolean indicati
19c50 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f  ng whether or no
19c60 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  t the SQLite cor
19c70 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62 65  e library has be
19c80 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74  en..    /// init
19c90 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20  ialized for the 
19ca0 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e  current process.
19cb0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75  ..    /// </retu
19cc0 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
19cd0 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20 53  al static bool S
19ce0 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69 7a  taticIsInitializ
19cf0 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ed()..    {..   
19d00 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20       //..       
19d10 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65 76   // BUGFIX: Prev
19d20 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20 6f  ent races with o
19d30 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f 72  ther threads for
19d40 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c 6f   this entire blo
19d50 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20 20  ck, due..       
19d60 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20 74   //         to t
19d70 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20 73  he try/finally s
19d80 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20 74  emantics.  See t
19d90 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61 37  icket [72905c9a7
19da0 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f 0d  7]...        //.
19db0 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28 73  .        lock (s
19dc0 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20 20  yncRoot)..      
19dd0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
19de0 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19df0 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20 74   // NOTE: Save t
19e00 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65 20  he state of the 
19e10 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61 6e  logging class an
19e20 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20 69  d then restore i
19e30 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  t..            /
19e40 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77 65  /       after we
19e50 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76 6f   are done to avo
19e60 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20 6d  id logging too m
19e70 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72 73  any false errors
19e80 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  ...            /
19e90 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 62  /..            b
19ea0 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65 64  ool savedEnabled
19eb0 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61   = SQLiteLog.Ena
19ec0 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20 20  bled;..         
19ed0 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e 61     SQLiteLog.Ena
19ee0 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d  bled = false;...
19ef0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72 79  .            try
19f00 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
19f10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
19f20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20   //..           
19f30 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54 68       // NOTE: Th
19f40 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75 73  is method [ab]us
19f50 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61 74  es the fact that
19f60 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c 77   SQLite will alw
19f70 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ays..           
19f80 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72 65       //       re
19f90 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
19fa0 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f 77  R for any unknow
19fb0 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  n configuration 
19fc0 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20 20  option..        
19fd0 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20          //      
19fe0 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53 51   *unless* the SQ
19ff0 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61 73  Lite library has
1a000 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
1a010 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20 20  itialized...    
1a020 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 20              //  
1a030 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61 73       In that cas
1a040 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79 73  e it will always
1a050 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4d   return SQLITE_M
1a060 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20 20  ISUSE...        
1a070 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20          //..    
1a080 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
1a090 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
1a0a0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1a0b0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e  hods.sqlite3_con
1a0c0 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20 20  fig_none(..     
1a0d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
1a0e0 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e  QLiteConfigOpsEn
1a0f0 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  um.SQLITE_CONFIG
1a100 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20 20  _NONE);....     
1a110 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
1a120 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  n (rc == SQLiteE
1a130 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65 29  rrorCode.Misuse)
1a140 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  ;..            }
1a150 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 69  ..            fi
1a160 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20  nally..         
1a170 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a180 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e        SQLiteLog.
1a190 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64 45  Enabled = savedE
1a1a0 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20  nabled;..       
1a1b0 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
1a1c0 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
1a1d0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
1a1e0 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66 75     /// Helper fu
1a1f0 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69 65  nction to retrie
1a200 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20 64  ve a column of d
1a210 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74 69  ata from an acti
1a220 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a 20  ve statement... 
1a230 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
1a240 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
1a250 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54 68  m name="stmt">Th
1a260 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69 6e  e statement bein
1a270 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f 75  g step()'d throu
1a280 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  gh</param>..    
1a290 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1a2a0 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61 67  "flags">The flag
1a2b0 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  s associated wit
1a2c0 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  h the connection
1a2d0 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f  .</param>..    /
1a2e0 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
1a2f0 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75 6d  index">The colum
1a300 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72 69  n index to retri
1a310 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  eve</param>..   
1a320 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1a330 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65 20  ="typ">The type 
1a340 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e 65  of data containe
1a350 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e 2e  d in the column.
1a360 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69 7a    If Uninitializ
1a370 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69 6f  ed, this functio
1a380 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65 20  n will retrieve 
1a390 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e 66  the datatype inf
1a3a0 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61 6d  ormation.</param
1a3b0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
1a3c0 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65 20  rns>Returns the 
1a3d0 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c 75  data in the colu
1a3e0 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  mn</returns>..  
1a3f0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
1a400 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56 61  ide object GetVa
1a410 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d  lue(SQLiteStatem
1a420 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74 65  ent stmt, SQLite
1a430 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20  ConnectionFlags 
1a440 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65 78  flags, int index
1a450 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79 70  , SQLiteType typ
1a460 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
1a470 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66 66  TypeAffinity aff
1a480 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79 3b   = typ.Affinity;
1a490 0d 0a 20 20 20 20 20 20 69 66 20 28 61 66 66 20  ..      if (aff 
1a4a0 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e  == TypeAffinity.
1a4b0 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20 44 42 4e  Null) return DBN
1a4c0 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20  ull.Value;..    
1a4d0 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c 3b    Type t = null;
1a4e0 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74 79  ....      if (ty
1a4f0 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70 65  p.Type != DbType
1a500 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20 20  .Object)..      
1a510 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20 53  {..        t = S
1a520 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51 4c  QLiteConvert.SQL
1a530 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74 79  iteTypeToType(ty
1a540 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66 66  p);..        aff
1a550 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69 74   = TypeToAffinit
1a560 79 28 74 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  y(t);..      }..
1a570 0d 0a 20 20 20 20 20 20 69 66 20 28 28 66 6c 61  ..      if ((fla
1a580 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
1a590 63 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c  ctionFlags.GetAl
1a5a0 6c 41 73 54 65 78 74 29 20 3d 3d 20 53 51 4c 69  lAsText) == SQLi
1a5b0 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
1a5c0 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29 0d  s.GetAllAsText).
1a5d0 0a 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72  .          retur
1a5e0 6e 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  n GetText(stmt, 
1a5f0 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20 20 20  index);....     
1a600 20 73 77 69 74 63 68 20 28 61 66 66 29 0d 0a 20   switch (aff).. 
1a610 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
1a620 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
1a630 79 2e 42 6c 6f 62 3a 0d 0a 20 20 20 20 20 20 20  y.Blob:..       
1a640 20 20 20 69 66 20 28 74 79 70 2e 54 79 70 65 20     if (typ.Type 
1a650 3d 3d 20 44 62 54 79 70 65 2e 47 75 69 64 20 26  == DbType.Guid &
1a660 26 20 74 79 70 2e 41 66 66 69 6e 69 74 79 20 3d  & typ.Affinity =
1a670 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 54  = TypeAffinity.T
1a680 65 78 74 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ext)..          
1a690 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47 75 69    return new Gui
1a6a0 64 28 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20  d(GetText(stmt, 
1a6b0 69 6e 64 65 78 29 29 3b 0d 0a 0d 0a 20 20 20 20  index));....    
1a6c0 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 28 69        int n = (i
1a6d0 6e 74 29 47 65 74 42 79 74 65 73 28 73 74 6d 74  nt)GetBytes(stmt
1a6e0 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c  , index, 0, null
1a6f0 2c 20 30 2c 20 30 29 3b 0d 0a 20 20 20 20 20 20  , 0, 0);..      
1a700 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 6e      byte[] b = n
1a710 65 77 20 62 79 74 65 5b 6e 5d 3b 0d 0a 20 20 20  ew byte[n];..   
1a720 20 20 20 20 20 20 20 47 65 74 42 79 74 65 73 28         GetBytes(
1a730 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30 2c 20  stmt, index, 0, 
1a740 62 2c 20 30 2c 20 6e 29 3b 0d 0a 0d 0a 20 20 20  b, 0, n);....   
1a750 20 20 20 20 20 20 20 69 66 20 28 74 79 70 2e 54         if (typ.T
1a760 79 70 65 20 3d 3d 20 44 62 54 79 70 65 2e 47 75  ype == DbType.Gu
1a770 69 64 20 26 26 20 6e 20 3d 3d 20 31 36 29 0d 0a  id && n == 16)..
1a780 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1a790 72 6e 20 6e 65 77 20 47 75 69 64 28 62 29 3b 0d  rn new Guid(b);.
1a7a0 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 72 65 74  ...          ret
1a7b0 75 72 6e 20 62 3b 0d 0a 20 20 20 20 20 20 20 20  urn b;..        
1a7c0 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69 74  case TypeAffinit
1a7d0 79 2e 44 61 74 65 54 69 6d 65 3a 0d 0a 20 20 20  y.DateTime:..   
1a7e0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65         return Ge
1a7f0 74 44 61 74 65 54 69 6d 65 28 73 74 6d 74 2c 20  tDateTime(stmt, 
1a800 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20  index);..       
1a810 20 63 61 73 65 20 54 79 70 65 41 66 66 69 6e 69   case TypeAffini
1a820 74 79 2e 44 6f 75 62 6c 65 3a 0d 0a 20 20 20 20  ty.Double:..    
1a830 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 6e        if (t == n
1a840 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65 74 44  ull) return GetD
1a850 6f 75 62 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65  ouble(stmt, inde
1a860 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 72  x);..          r
1a870 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e 43 68  eturn Convert.Ch
1a880 61 6e 67 65 54 79 70 65 28 47 65 74 44 6f 75 62  angeType(GetDoub
1a890 6c 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c  le(stmt, index),
1a8a0 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20 20   t, null);..    
1a8b0 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
1a8c0 69 6e 69 74 79 2e 49 6e 74 36 34 3a 0d 0a 20 20  inity.Int64:..  
1a8d0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1a8e0 20 6e 75 6c 6c 29 20 72 65 74 75 72 6e 20 47 65   null) return Ge
1a8f0 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64  tInt64(stmt, ind
1a900 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ex);..          
1a910 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28  if (t == typeof(
1a920 42 6f 6f 6c 65 61 6e 29 29 20 72 65 74 75 72 6e  Boolean)) return
1a930 20 47 65 74 42 6f 6f 6c 65 61 6e 28 73 74 6d 74   GetBoolean(stmt
1a940 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1a950 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
1a960 70 65 6f 66 28 53 42 79 74 65 29 29 20 72 65 74  peof(SByte)) ret
1a970 75 72 6e 20 47 65 74 53 42 79 74 65 28 73 74 6d  urn GetSByte(stm
1a980 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
1a990 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
1a9a0 79 70 65 6f 66 28 42 79 74 65 29 29 20 72 65 74  ypeof(Byte)) ret
1a9b0 75 72 6e 20 47 65 74 42 79 74 65 28 73 74 6d 74  urn GetByte(stmt
1a9c0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1a9d0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
1a9e0 70 65 6f 66 28 49 6e 74 31 36 29 29 20 72 65 74  peof(Int16)) ret
1a9f0 75 72 6e 20 47 65 74 49 6e 74 31 36 28 73 74 6d  urn GetInt16(stm
1aa00 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
1aa10 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
1aa20 79 70 65 6f 66 28 55 49 6e 74 31 36 29 29 20 72  ypeof(UInt16)) r
1aa30 65 74 75 72 6e 20 47 65 74 55 49 6e 74 31 36 28  eturn GetUInt16(
1aa40 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1aa50 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d           if (t =
1aa60 3d 20 74 79 70 65 6f 66 28 49 6e 74 33 32 29 29  = typeof(Int32))
1aa70 20 72 65 74 75 72 6e 20 47 65 74 49 6e 74 33 32   return GetInt32
1aa80 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a  (stmt, index);..
1aa90 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74 20            if (t 
1aaa0 3d 3d 20 74 79 70 65 6f 66 28 55 49 6e 74 33 32  == typeof(UInt32
1aab0 29 29 20 72 65 74 75 72 6e 20 47 65 74 55 49 6e  )) return GetUIn
1aac0 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t32(stmt, index)
1aad0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
1aae0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
1aaf0 36 34 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  64)) return GetI
1ab00 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt64(stmt, index
1ab10 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
1ab20 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
1ab30 6e 74 36 34 29 29 20 72 65 74 75 72 6e 20 47 65  nt64)) return Ge
1ab40 74 55 49 6e 74 36 34 28 73 74 6d 74 2c 20 69 6e  tUInt64(stmt, in
1ab50 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1ab60 20 72 65 74 75 72 6e 20 43 6f 6e 76 65 72 74 2e   return Convert.
1ab70 43 68 61 6e 67 65 54 79 70 65 28 47 65 74 49 6e  ChangeType(GetIn
1ab80 74 36 34 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t64(stmt, index)
1ab90 2c 20 74 2c 20 6e 75 6c 6c 29 3b 0d 0a 20 20 20  , t, null);..   
1aba0 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20       default:.. 
1abb0 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1abc0 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69 6e  GetText(stmt, in
1abd0 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  dex);..      }..
1abe0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1abf0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
1ac00 6e 74 20 47 65 74 43 75 72 73 6f 72 46 6f 72 54  nt GetCursorForT
1ac10 61 62 6c 65 28 53 51 4c 69 74 65 53 74 61 74 65  able(SQLiteState
1ac20 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 64  ment stmt, int d
1ac30 62 2c 20 69 6e 74 20 72 6f 6f 74 50 61 67 65 29  b, int rootPage)
1ac40 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
1ac50 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
1ac60 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
1ac70 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
1ac80 73 71 6c 69 74 65 33 5f 74 61 62 6c 65 5f 63 75  sqlite3_table_cu
1ac90 72 73 6f 72 5f 69 6e 74 65 72 6f 70 28 73 74 6d  rsor_interop(stm
1aca0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
1acb0 64 62 2c 20 72 6f 6f 74 50 61 67 65 29 3b 0d 0a  db, rootPage);..
1acc0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
1acd0 75 72 6e 20 2d 31 3b 0d 0a 23 65 6e 64 69 66 0d  urn -1;..#endif.
1ace0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
1acf0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
1ad00 6c 6f 6e 67 20 47 65 74 52 6f 77 49 64 46 6f 72  long GetRowIdFor
1ad10 43 75 72 73 6f 72 28 53 51 4c 69 74 65 53 74 61  Cursor(SQLiteSta
1ad20 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
1ad30 20 63 75 72 73 6f 72 29 0d 0a 20 20 20 20 7b 0d   cursor)..    {.
1ad40 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1ad50 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 6c 6f 6e  NDARD..      lon
1ad60 67 20 72 6f 77 69 64 20 3d 20 30 3b 0d 0a 20 20  g rowid = 0;..  
1ad70 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1ad80 6f 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e  ode rc = UnsafeN
1ad90 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
1ada0 69 74 65 33 5f 63 75 72 73 6f 72 5f 72 6f 77 69  ite3_cursor_rowi
1adb0 64 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f  d_interop(stmt._
1adc0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 63 75 72  sqlite_stmt, cur
1add0 73 6f 72 2c 20 72 65 66 20 72 6f 77 69 64 29 3b  sor, ref rowid);
1ade0 0d 0a 20 20 20 20 20 20 69 66 20 28 72 63 20 3d  ..      if (rc =
1adf0 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
1ae00 65 2e 4f 6b 29 20 72 65 74 75 72 6e 20 72 6f 77  e.Ok) return row
1ae10 69 64 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  id;....      ret
1ae20 75 72 6e 20 30 3b 0d 0a 23 65 6c 73 65 0d 0a 20  urn 0;..#else.. 
1ae30 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
1ae40 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
1ae50 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1ae60 65 72 72 69 64 65 20 76 6f 69 64 20 47 65 74 49  erride void GetI
1ae70 6e 64 65 78 43 6f 6c 75 6d 6e 45 78 74 65 6e 64  ndexColumnExtend
1ae80 65 64 49 6e 66 6f 28 73 74 72 69 6e 67 20 64 61  edInfo(string da
1ae90 74 61 62 61 73 65 2c 20 73 74 72 69 6e 67 20 69  tabase, string i
1aea0 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 63 6f 6c  ndex, string col
1aeb0 75 6d 6e 2c 20 72 65 66 20 69 6e 74 20 73 6f 72  umn, ref int sor
1aec0 74 4d 6f 64 65 2c 20 72 65 66 20 69 6e 74 20 6f  tMode, ref int o
1aed0 6e 45 72 72 6f 72 2c 20 72 65 66 20 73 74 72 69  nError, ref stri
1aee0 6e 67 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75  ng collationSequ
1aef0 65 6e 63 65 29 0d 0a 20 20 20 20 7b 0d 0a 23 69  ence)..    {..#i
1af00 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
1af10 52 44 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  RD..      IntPtr
1af20 20 63 6f 6c 6c 20 3d 20 49 6e 74 50 74 72 2e 5a   coll = IntPtr.Z
1af30 65 72 6f 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  ero;..      int 
1af40 63 6f 6c 6c 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20  colllen = 0;..  
1af50 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
1af60 6f 64 65 20 72 63 3b 0d 0a 0d 0a 20 20 20 20 20  ode rc;....     
1af70 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74 69   rc = UnsafeNati
1af80 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
1af90 33 5f 69 6e 64 65 78 5f 63 6f 6c 75 6d 6e 5f 69  3_index_column_i
1afa0 6e 66 6f 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  nfo_interop(_sql
1afb0 2c 20 54 6f 55 54 46 38 28 64 61 74 61 62 61 73  , ToUTF8(databas
1afc0 65 29 2c 20 54 6f 55 54 46 38 28 69 6e 64 65 78  e), ToUTF8(index
1afd0 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c 75 6d 6e  ), ToUTF8(column
1afe0 29 2c 20 72 65 66 20 73 6f 72 74 4d 6f 64 65 2c  ), ref sortMode,
1aff0 20 72 65 66 20 6f 6e 45 72 72 6f 72 2c 20 72 65   ref onError, re
1b000 66 20 63 6f 6c 6c 2c 20 72 65 66 20 63 6f 6c 6c  f coll, ref coll
1b010 6c 65 6e 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  len);..      if 
1b020 28 72 63 20 21 3d 20 53 51 4c 69 74 65 45 72 72  (rc != SQLiteErr
1b030 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
1b040 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
1b050 74 69 6f 6e 28 72 63 2c 20 6e 75 6c 6c 29 3b 0d  tion(rc, null);.
1b060 0a 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ...      collati
1b070 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 55 54 46  onSequence = UTF
1b080 38 54 6f 53 74 72 69 6e 67 28 63 6f 6c 6c 2c 20  8ToString(coll, 
1b090 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65  colllen);..#else
1b0a0 0d 0a 20 20 20 20 20 20 73 6f 72 74 4d 6f 64 65  ..      sortMode
1b0b0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 6f 6e 45   = 0;..      onE
1b0c0 72 72 6f 72 20 3d 20 32 3b 0d 0a 20 20 20 20 20  rror = 2;..     
1b0d0 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
1b0e0 63 65 20 3d 20 22 42 49 4e 41 52 59 22 3b 0d 0a  ce = "BINARY";..
1b0f0 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
1b100 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1b110 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72 72  erride SQLiteErr
1b120 6f 72 43 6f 64 65 20 46 69 6c 65 43 6f 6e 74 72  orCode FileContr
1b130 6f 6c 28 73 74 72 69 6e 67 20 7a 44 62 4e 61 6d  ol(string zDbNam
1b140 65 2c 20 69 6e 74 20 6f 70 2c 20 49 6e 74 50 74  e, int op, IntPt
1b150 72 20 70 41 72 67 29 0d 0a 20 20 20 20 7b 0d 0a  r pArg)..    {..
1b160 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
1b170 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
1b180 2e 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f  .sqlite3_file_co
1b190 6e 74 72 6f 6c 28 5f 73 71 6c 2c 20 28 7a 44 62  ntrol(_sql, (zDb
1b1a0 4e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 20 3f 20  Name != null) ? 
1b1b0 54 6f 55 54 46 38 28 7a 44 62 4e 61 6d 65 29 20  ToUTF8(zDbName) 
1b1c0 3a 20 6e 75 6c 6c 2c 20 6f 70 2c 20 70 41 72 67  : null, op, pArg
1b1d0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 7d 0d 0a  );..    }..  }..
1b1e0 7d 0d 0a                                         }..