System.Data.SQLite
Hex Artifact Content
Not logged in

Artifact 101d06bf3890179c9cefaf55273d2b2c6ffbc5a1:


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 36 2e 30 22 3b 0d 0a 23   "1.0.106.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 20  T_46 || NET_461 
0ac0: 7c 7c 20 4e 45 54 5f 34 36 32 20 7c 7c 20 4e 45  || NET_462 || NE
0ad0: 54 5f 34 37 29 20 26 26 20 21 50 4c 41 54 46 4f  T_47) && !PLATFO
0ae0: 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57  RM_COMPACTFRAMEW
0af0: 4f 52 4b 0d 0a 20 20 20 20 70 72 69 76 61 74 65  ORK..    private
0b00: 20 62 6f 6f 6c 20 5f 62 75 69 6c 64 69 6e 67 53   bool _buildingS
0b10: 63 68 65 6d 61 3b 0d 0a 23 65 6e 64 69 66 0d 0a  chema;..#endif..
0b20: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
0b30: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  ry>..    /// The
0b40: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
0b50: 6e 63 74 69 6f 6e 73 20 72 65 67 69 73 74 65 72  nctions register
0b60: 65 64 20 6f 6e 20 74 68 69 73 20 63 6f 6e 6e 65  ed on this conne
0b70: 63 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ction..    /// <
0b80: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
0b90: 72 6f 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e  rotected Diction
0ba0: 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ary<SQLiteFuncti
0bb0: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
0bc0: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 5f 66 75  iteFunction> _fu
0bd0: 6e 63 74 69 6f 6e 73 3b 0d 0a 0d 0a 23 69 66 20  nctions;....#if 
0be0: 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f  INTEROP_VIRTUAL_
0bf0: 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f 20 3c  TABLE..    /// <
0c00: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
0c10: 2f 20 54 68 69 73 20 69 73 20 74 68 65 20 6e 61  / This is the na
0c20: 6d 65 20 6f 66 20 74 68 65 20 6e 61 74 69 76 65  me of the native
0c30: 20 6c 69 62 72 61 72 79 20 66 69 6c 65 20 74 68   library file th
0c40: 61 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 0d  at contains the.
0c50: 0a 20 20 20 20 2f 2f 2f 20 22 76 74 73 68 69 6d  .    /// "vtshim
0c60: 22 20 65 78 74 65 6e 73 69 6f 6e 20 5b 77 72 61  " extension [wra
0c70: 70 70 65 72 5d 2e 0d 0a 20 20 20 20 2f 2f 2f 20  pper]...    /// 
0c80: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
0c90: 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e 67  protected string
0ca0: 20 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46   _shimExtensionF
0cb0: 69 6c 65 4e 61 6d 65 20 3d 20 6e 75 6c 6c 3b 0d  ileName = null;.
0cc0: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
0cd0: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ary>..    /// Th
0ce0: 69 73 20 69 73 20 74 68 65 20 66 6c 61 67 20 69  is is the flag i
0cf0: 6e 64 69 63 61 74 65 20 77 68 65 74 68 65 72 20  ndicate whether 
0d00: 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  the native libra
0d10: 72 79 20 66 69 6c 65 20 74 68 61 74 0d 0a 20 20  ry file that..  
0d20: 20 20 2f 2f 2f 20 63 6f 6e 74 61 69 6e 73 20 74    /// contains t
0d30: 68 65 20 22 76 74 73 68 69 6d 22 20 65 78 74 65  he "vtshim" exte
0d40: 6e 73 69 6f 6e 20 6d 75 73 74 20 62 65 20 64 79  nsion must be dy
0d50: 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f 61 64 65 64  namically loaded
0d60: 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 69   by..    /// thi
0d70: 73 20 63 6c 61 73 73 20 70 72 69 6f 72 20 74 6f  s class prior to
0d80: 20 75 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c   use...    /// <
0d90: 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70  /summary>..    p
0da0: 72 6f 74 65 63 74 65 64 20 62 6f 6f 6c 3f 20 5f  rotected bool? _
0db0: 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64  shimIsLoadNeeded
0dc0: 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
0dd0: 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
0de0: 20 20 20 2f 2f 2f 20 54 68 69 73 20 69 73 20 74     /// This is t
0df0: 68 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  he name of the n
0e00: 61 74 69 76 65 20 65 6e 74 72 79 20 70 6f 69 6e  ative entry poin
0e10: 74 20 66 6f 72 20 74 68 65 20 22 76 74 73 68 69  t for the "vtshi
0e20: 6d 22 0d 0a 20 20 20 20 2f 2f 2f 20 65 78 74 65  m"..    /// exte
0e30: 6e 73 69 6f 6e 20 5b 77 72 61 70 70 65 72 5d 2e  nsion [wrapper].
0e40: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
0e50: 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f 74 65 63  ary>..    protec
0e60: 74 65 64 20 73 74 72 69 6e 67 20 5f 73 68 69 6d  ted string _shim
0e70: 45 78 74 65 6e 73 69 6f 6e 50 72 6f 63 4e 61 6d  ExtensionProcNam
0e80: 65 20 3d 20 22 73 71 6c 69 74 65 33 5f 76 74 73  e = "sqlite3_vts
0e90: 68 69 6d 5f 69 6e 69 74 22 3b 0d 0a 0d 0a 20 20  him_init";....  
0ea0: 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
0eb0: 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64  .    /// The mod
0ec0: 75 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69  ules created usi
0ed0: 6e 67 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69  ng this connecti
0ee0: 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  on...    /// </s
0ef0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 6f  ummary>..    pro
0f00: 74 65 63 74 65 64 20 44 69 63 74 69 6f 6e 61 72  tected Dictionar
0f10: 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c 69 74 65  y<string, SQLite
0f20: 4d 6f 64 75 6c 65 3e 20 5f 6d 6f 64 75 6c 65 73  Module> _modules
0f30: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  ;..#endif....   
0f40: 20 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 2f 2f 2f 2f 2f  ////////////////
0f90: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
0fa0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
0fb0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43  mary>..    /// C
0fc0: 6f 6e 73 74 72 75 63 74 73 20 74 68 65 20 6f 62  onstructs the ob
0fd0: 6a 65 63 74 20 75 73 65 64 20 74 6f 20 69 6e 74  ject used to int
0fe0: 65 72 61 63 74 20 77 69 74 68 20 74 68 65 20 53  eract with the S
0ff0: 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
1000: 72 79 0d 0a 20 20 20 20 2f 2f 2f 20 75 73 69 6e  ry..    /// usin
1010: 67 20 74 68 65 20 55 54 46 2d 38 20 74 65 78 74  g the UTF-8 text
1020: 20 65 6e 63 6f 64 69 6e 67 2e 0d 0a 20 20 20 20   encoding...    
1030: 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1040: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1050: 61 6d 65 3d 22 66 6d 74 22 3e 0d 0a 20 20 20 20  ame="fmt">..    
1060: 2f 2f 2f 20 54 68 65 20 44 61 74 65 54 69 6d 65  /// The DateTime
1070: 20 66 6f 72 6d 61 74 20 74 6f 20 62 65 20 75 73   format to be us
1080: 65 64 20 77 68 65 6e 20 63 6f 6e 76 65 72 74 69  ed when converti
1090: 6e 67 20 73 74 72 69 6e 67 20 76 61 6c 75 65 73  ng string values
10a0: 20 74 6f 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 44   to a..    /// D
10b0: 61 74 65 54 69 6d 65 20 61 6e 64 20 62 69 6e 64  ateTime and bind
10c0: 69 6e 67 20 44 61 74 65 54 69 6d 65 20 70 61 72  ing DateTime par
10d0: 61 6d 65 74 65 72 73 2e 0d 0a 20 20 20 20 2f 2f  ameters...    //
10e0: 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
10f0: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1100: 22 6b 69 6e 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f  "kind">..    ///
1110: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
1120: 44 61 74 65 54 69 6d 65 4b 69 6e 64 22 20 2f 3e  DateTimeKind" />
1130: 20 74 6f 20 62 65 20 75 73 65 64 20 77 68 65 6e   to be used when
1140: 20 63 72 65 61 74 69 6e 67 20 44 61 74 65 54 69   creating DateTi
1150: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  me..    /// valu
1160: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
1170: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1180: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 6d 74 53  param name="fmtS
1190: 74 72 69 6e 67 22 3e 0d 0a 20 20 20 20 2f 2f 2f  tring">..    ///
11a0: 20 54 68 65 20 66 6f 72 6d 61 74 20 73 74 72 69   The format stri
11b0: 6e 67 20 74 6f 20 62 65 20 75 73 65 64 20 77 68  ng to be used wh
11c0: 65 6e 20 70 61 72 73 69 6e 67 20 61 6e 64 20 66  en parsing and f
11d0: 6f 72 6d 61 74 74 69 6e 67 20 44 61 74 65 54 69  ormatting DateTi
11e0: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 76 61 6c 75  me..    /// valu
11f0: 65 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  es...    /// </p
1200: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
1210: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 62 22 3e  param name="db">
1220: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 61  ..    /// The na
1230: 74 69 76 65 20 68 61 6e 64 6c 65 20 74 6f 20 62  tive handle to b
1240: 65 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74  e associated wit
1250: 68 20 74 68 65 20 64 61 74 61 62 61 73 65 20 63  h the database c
1260: 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20  onnection...    
1270: 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
1280: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1290: 65 3d 22 66 69 6c 65 4e 61 6d 65 22 3e 0d 0a 20  e="fileName">.. 
12a0: 20 20 20 2f 2f 2f 20 54 68 65 20 66 75 6c 6c 79     /// The fully
12b0: 20 71 75 61 6c 69 66 69 65 64 20 66 69 6c 65 20   qualified file 
12c0: 6e 61 6d 65 20 61 73 73 6f 63 69 61 74 65 64 20  name associated 
12d0: 77 69 74 68 20 3c 70 61 72 61 6d 72 65 66 20 6e  with <paramref n
12e0: 61 6d 65 3d 22 64 62 20 22 2f 3e 2e 0d 0a 20 20  ame="db "/>...  
12f0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
1300: 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1310: 61 6d 65 3d 22 6f 77 6e 48 61 6e 64 6c 65 22 3e  ame="ownHandle">
1320: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
1330: 72 6f 20 69 66 20 74 68 65 20 6e 65 77 6c 79 20  ro if the newly 
1340: 63 72 65 61 74 65 64 20 6f 62 6a 65 63 74 20 69  created object i
1350: 6e 73 74 61 6e 63 65 20 77 69 6c 6c 20 6e 65 65  nstance will nee
1360: 64 20 74 6f 20 64 69 73 70 6f 73 65 0d 0a 20 20  d to dispose..  
1370: 20 20 2f 2f 2f 20 6f 66 20 3c 70 61 72 61 6d 72    /// of <paramr
1380: 65 66 20 6e 61 6d 65 3d 22 64 62 22 20 2f 3e 20  ef name="db" /> 
1390: 77 68 65 6e 20 69 74 20 69 73 20 6e 6f 20 6c 6f  when it is no lo
13a0: 6e 67 65 72 20 6e 65 65 64 65 64 2e 0d 0a 20 20  nger needed...  
13b0: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
13c0: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 53 51 4c      internal SQL
13d0: 69 74 65 33 28 0d 0a 20 20 20 20 20 20 20 20 53  ite3(..        S
13e0: 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
13f0: 20 66 6d 74 2c 0d 0a 20 20 20 20 20 20 20 20 44   fmt,..        D
1400: 61 74 65 54 69 6d 65 4b 69 6e 64 20 6b 69 6e 64  ateTimeKind kind
1410: 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e  ,..        strin
1420: 67 20 66 6d 74 53 74 72 69 6e 67 2c 0d 0a 20 20  g fmtString,..  
1430: 20 20 20 20 20 20 49 6e 74 50 74 72 20 64 62 2c        IntPtr db,
1440: 0d 0a 20 20 20 20 20 20 20 20 73 74 72 69 6e 67  ..        string
1450: 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
1460: 20 20 20 20 62 6f 6f 6c 20 6f 77 6e 48 61 6e 64      bool ownHand
1470: 6c 65 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  le..        ).. 
1480: 20 20 20 20 20 3a 20 62 61 73 65 28 66 6d 74 2c       : base(fmt,
1490: 20 6b 69 6e 64 2c 20 66 6d 74 53 74 72 69 6e 67   kind, fmtString
14a0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
14b0: 20 20 69 66 20 28 64 62 20 21 3d 20 49 6e 74 50    if (db != IntP
14c0: 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
14d0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
14e0: 20 5f 73 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69   _sql = new SQLi
14f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64  teConnectionHand
1500: 6c 65 28 64 62 2c 20 6f 77 6e 48 61 6e 64 6c 65  le(db, ownHandle
1510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1520: 5f 66 69 6c 65 4e 61 6d 65 20 3d 20 66 69 6c 65  _fileName = file
1530: 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  Name;....       
1540: 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
1550: 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65 64 28  ction.OnChanged(
1560: 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e 65 63  null, new Connec
1570: 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28 0d 0a  tionEventArgs(..
1580: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1590: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
15a0: 45 76 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69  EventType.NewCri
15b0: 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c  ticalHandle, nul
15c0: 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l,..            
15d0: 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20      null, null, 
15e0: 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 66 69 6c 65  null, _sql, file
15f0: 4e 61 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74  Name, new object
1600: 5b 5d 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20  [] {..          
1610: 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51 4c        typeof(SQL
1620: 69 74 65 33 29 2c 20 66 6d 74 2c 20 6b 69 6e 64  ite3), fmt, kind
1630: 2c 20 66 6d 74 53 74 72 69 6e 67 2c 20 64 62 2c  , fmtString, db,
1640: 20 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20 20   fileName,..    
1650: 20 20 20 20 20 20 20 20 20 20 20 20 6f 77 6e 48              ownH
1660: 61 6e 64 6c 65 20 7d 29 29 3b 0d 0a 20 20 20 20  andle }));..    
1670: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
1680: 20 20 20 20 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 2f 2f  ////////////////
16d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
16e0: 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 23 72 65 67 69  ///....    #regi
16f0: 6f 6e 20 49 44 69 73 70 6f 73 61 62 6c 65 20 22  on IDisposable "
1700: 50 61 74 74 65 72 6e 22 20 4d 65 6d 62 65 72 73  Pattern" Members
1710: 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20 62 6f  ..    private bo
1720: 6f 6c 20 64 69 73 70 6f 73 65 64 3b 0d 0a 20 20  ol disposed;..  
1730: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 43    private void C
1740: 68 65 63 6b 44 69 73 70 6f 73 65 64 28 29 20 2f  heckDisposed() /
1750: 2a 20 74 68 72 6f 77 20 2a 2f 0d 0a 20 20 20 20  * throw */..    
1760: 7b 0d 0a 23 69 66 20 54 48 52 4f 57 5f 4f 4e 5f  {..#if THROW_ON_
1770: 44 49 53 50 4f 53 45 44 0d 0a 20 20 20 20 20 20  DISPOSED..      
1780: 20 20 69 66 20 28 64 69 73 70 6f 73 65 64 29 0d    if (disposed).
1790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
17a0: 6f 77 20 6e 65 77 20 4f 62 6a 65 63 74 44 69 73  ow new ObjectDis
17b0: 70 6f 73 65 64 45 78 63 65 70 74 69 6f 6e 28 74  posedException(t
17c0: 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2e 4e  ypeof(SQLite3).N
17d0: 61 6d 65 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ame);..#endif.. 
17e0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1840: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
1850: 20 20 20 70 72 6f 74 65 63 74 65 64 20 6f 76 65     protected ove
1860: 72 72 69 64 65 20 76 6f 69 64 20 44 69 73 70 6f  rride void Dispo
1870: 73 65 28 62 6f 6f 6c 20 64 69 73 70 6f 73 69 6e  se(bool disposin
1880: 67 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  g)..    {..     
1890: 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20     try..        
18a0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
18b0: 66 20 28 21 64 69 73 70 6f 73 65 64 29 0d 0a 20  f (!disposed).. 
18c0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
18d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f                //
18e0: 69 66 20 28 64 69 73 70 6f 73 69 6e 67 29 0d 0a  if (disposing)..
18f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1900: 2f 2f 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  //{..           
1910: 20 20 20 20 20 2f 2f 20 20 20 20 2f 2f 2f 2f 2f       //    /////
1920: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1930: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d  ///////////////.
1940: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1950: 20 2f 2f 20 20 20 20 2f 2f 20 64 69 73 70 6f 73   //    // dispos
1960: 65 20 6d 61 6e 61 67 65 64 20 72 65 73 6f 75 72  e managed resour
1970: 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a 20 20 20  ces here.....   
1980: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1990: 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f     /////////////
19a0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19b0: 2f 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20  ///////..       
19c0: 20 20 20 20 20 20 20 20 20 2f 2f 7d 0d 0a 0d 0a           //}....
19d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
19e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
19f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a00: 2f 2f 2f 2f 2f 2f 0d 0a 20 20 20 20 20 20 20 20  //////..        
1a10: 20 20 20 20 20 20 20 20 2f 2f 20 72 65 6c 65 61          // relea
1a20: 73 65 20 75 6e 6d 61 6e 61 67 65 64 20 72 65 73  se unmanaged res
1a30: 6f 75 72 63 65 73 20 68 65 72 65 2e 2e 2e 0d 0a  ources here.....
1a40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1a50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a70: 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 23 69 66 20 49 4e  //////....#if IN
1a80: 54 45 52 4f 50 5f 56 49 52 54 55 41 4c 5f 54 41  TEROP_VIRTUAL_TA
1a90: 42 4c 45 0d 0a 20 20 20 20 20 20 20 20 20 20 20  BLE..           
1aa0: 20 20 20 20 20 44 69 73 70 6f 73 65 4d 6f 64 75       DisposeModu
1ab0: 6c 65 73 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  les();..#endif..
1ac0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ad0: 20 20 43 6c 6f 73 65 28 66 61 6c 73 65 29 3b 20    Close(false); 
1ae0: 2f 2a 20 44 69 73 70 6f 73 69 6e 67 2c 20 63 61  /* Disposing, ca
1af0: 6e 6e 6f 74 20 74 68 72 6f 77 2e 20 2a 2f 0d 0a  nnot throw. */..
1b00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
1b10: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
1b20: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
1b30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1b40: 20 20 62 61 73 65 2e 44 69 73 70 6f 73 65 28 64    base.Dispose(d
1b50: 69 73 70 6f 73 69 6e 67 29 3b 0d 0a 0d 0a 20 20  isposing);....  
1b60: 20 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20            //..  
1b70: 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4e 4f 54            // NOT
1b80: 45 3a 20 45 76 65 72 79 74 68 69 6e 67 20 73 68  E: Everything sh
1b90: 6f 75 6c 64 20 62 65 20 66 75 6c 6c 79 20 64 69  ould be fully di
1ba0: 73 70 6f 73 65 64 20 61 74 20 74 68 69 73 20 70  sposed at this p
1bb0: 6f 69 6e 74 2e 0d 0a 20 20 20 20 20 20 20 20 20  oint...         
1bc0: 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20     //..         
1bd0: 20 20 20 64 69 73 70 6f 73 65 64 20 3d 20 74 72     disposed = tr
1be0: 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  ue;..        }..
1bf0: 20 20 20 20 7d 0d 0a 20 20 20 20 23 65 6e 64 72      }..    #endr
1c00: 65 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f  egion....    ///
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 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1c60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a  ////////////....
1c70: 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54  #if INTEROP_VIRT
1c80: 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f  UAL_TABLE..    /
1c90: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1ca0: 20 20 2f 2f 2f 20 54 68 69 73 20 6d 65 74 68 6f    /// This metho
1cb0: 64 20 61 74 74 65 6d 70 74 73 20 74 6f 20 64 69  d attempts to di
1cc0: 73 70 6f 73 65 20 6f 66 20 61 6c 6c 20 74 68 65  spose of all the
1cd0: 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c 69   <see cref="SQLi
1ce0: 74 65 4d 6f 64 75 6c 65 22 20 2f 3e 20 64 65 72  teModule" /> der
1cf0: 69 76 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 62  ived..    /// ob
1d00: 6a 65 63 74 20 69 6e 73 74 61 6e 63 65 73 20 63  ject instances c
1d10: 75 72 72 65 6e 74 6c 79 20 61 73 73 6f 63 69 61  urrently associa
1d20: 74 65 64 20 77 69 74 68 20 74 68 65 20 6e 61 74  ted with the nat
1d30: 69 76 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e  ive database con
1d40: 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f  nection...    //
1d50: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
1d60: 20 20 70 72 69 76 61 74 65 20 76 6f 69 64 20 44    private void D
1d70: 69 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 0d  isposeModules().
1d80: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
1d90: 2f 2f 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 4e  //..        // N
1da0: 4f 54 45 3a 20 49 66 20 61 6e 79 20 6d 6f 64 75  OTE: If any modu
1db0: 6c 65 73 20 77 65 72 65 20 63 72 65 61 74 65 64  les were created
1dc0: 2c 20 61 74 74 65 6d 70 74 20 74 6f 20 64 69 73  , attempt to dis
1dd0: 70 6f 73 65 20 6f 66 0d 0a 20 20 20 20 20 20 20  pose of..       
1de0: 20 2f 2f 20 20 20 20 20 20 20 74 68 65 6d 20 6e   //       them n
1df0: 6f 77 2e 20 20 54 68 69 73 20 63 6f 64 65 20 69  ow.  This code i
1e00: 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20 61 76  s designed to av
1e10: 6f 69 64 20 74 68 72 6f 77 69 6e 67 0d 0a 20 20  oid throwing..  
1e20: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 65        //       e
1e30: 78 63 65 70 74 69 6f 6e 73 20 75 6e 6c 65 73 73  xceptions unless
1e40: 20 74 68 65 20 44 69 73 70 6f 73 65 20 6d 65 74   the Dispose met
1e50: 68 6f 64 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c  hod of the modul
1e60: 65 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 20 20  e..        //   
1e70: 20 20 20 20 69 74 73 65 6c 66 20 74 68 72 6f 77      itself throw
1e80: 73 20 61 6e 20 65 78 63 65 70 74 69 6f 6e 2e 0d  s an exception..
1e90: 0a 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  .        //..   
1ea0: 20 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65       if (_module
1eb0: 73 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  s != null)..    
1ec0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ed0: 20 20 20 66 6f 72 65 61 63 68 20 28 4b 65 79 56     foreach (KeyV
1ee0: 61 6c 75 65 50 61 69 72 3c 73 74 72 69 6e 67 2c  aluePair<string,
1ef0: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 3e 20 70   SQLiteModule> p
1f00: 61 69 72 20 69 6e 20 5f 6d 6f 64 75 6c 65 73 29  air in _modules)
1f10: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
1f20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1f30: 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f   SQLiteModule mo
1f40: 64 75 6c 65 20 3d 20 70 61 69 72 2e 56 61 6c 75  dule = pair.Valu
1f50: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  e;....          
1f60: 20 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65        if (module
1f70: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
1f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 63                 c
1f90: 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a 20 20 20 20  ontinue;....    
1fa0: 20 20 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75              modu
1fb0: 6c 65 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20  le.Dispose();.. 
1fc0: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
1fd0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64              _mod
1fe0: 75 6c 65 73 2e 43 6c 65 61 72 28 29 3b 0d 0a 20  ules.Clear();.. 
1ff0: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
2000: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f  .#endif....    /
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 2f 2f 2f 2f 2f 2f 2f  ////////////////
2060: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
2070: 0d 0a 20 20 20 20 2f 2f 20 49 74 20 69 73 6e 27  ..    // It isn'
2080: 74 20 6e 65 63 65 73 73 61 72 79 20 74 6f 20 63  t necessary to c
2090: 6c 65 61 6e 75 70 20 61 6e 79 20 66 75 6e 63 74  leanup any funct
20a0: 69 6f 6e 73 20 77 65 27 76 65 20 72 65 67 69 73  ions we've regis
20b0: 74 65 72 65 64 2e 20 20 49 66 20 74 68 65 20 63  tered.  If the c
20c0: 6f 6e 6e 65 63 74 69 6f 6e 0d 0a 20 20 20 20 2f  onnection..    /
20d0: 2f 20 67 6f 65 73 20 74 6f 20 74 68 65 20 70 6f  / goes to the po
20e0: 6f 6c 20 61 6e 64 20 69 73 20 72 65 73 75 72 72  ol and is resurr
20f0: 65 63 74 65 64 20 6c 61 74 65 72 2c 20 72 65 2d  ected later, re-
2100: 72 65 67 69 73 74 65 72 65 64 20 66 75 6e 63 74  registered funct
2110: 69 6f 6e 73 20 77 69 6c 6c 20 6f 76 65 72 77 72  ions will overwr
2120: 69 74 65 20 74 68 65 0d 0a 20 20 20 20 2f 2f 20  ite the..    // 
2130: 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69 6f  previous functio
2140: 6e 73 2e 20 20 54 68 65 20 53 51 4c 69 74 65 46  ns.  The SQLiteF
2150: 75 6e 63 74 69 6f 6e 43 6f 6f 6b 69 65 48 61 6e  unctionCookieHan
2160: 64 6c 65 20 77 69 6c 6c 20 74 61 6b 65 20 63 61  dle will take ca
2170: 72 65 20 6f 66 20 66 72 65 65 69 6e 67 20 75 6e  re of freeing un
2180: 6d 61 6e 61 67 65 64 0d 0a 20 20 20 20 2f 2f 20  managed..    // 
2190: 72 65 73 6f 75 72 63 65 73 20 62 65 6c 6f 6e 67  resources belong
21a0: 69 6e 67 20 74 6f 20 74 68 65 20 70 72 65 76 69  ing to the previ
21b0: 6f 75 73 6c 79 2d 72 65 67 69 73 74 65 72 65 64  ously-registered
21c0: 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 20 20 20   functions...   
21d0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
21e0: 64 65 20 76 6f 69 64 20 43 6c 6f 73 65 28 62 6f  de void Close(bo
21f0: 6f 6c 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20  ol canThrow)..  
2200: 20 20 7b 0d 0a 20 20 20 20 20 20 69 66 20 28 5f    {..      if (_
2210: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  sql != null)..  
2220: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
2230: 20 69 66 20 28 21 5f 73 71 6c 2e 4f 77 6e 48 61   if (!_sql.OwnHa
2240: 6e 64 6c 65 29 0d 0a 20 20 20 20 20 20 20 20 20  ndle)..         
2250: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
2260: 20 20 5f 73 71 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a    _sql = null;..
2270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
2280: 74 75 72 6e 3b 0d 0a 20 20 20 20 20 20 20 20 20  turn;..         
2290: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
22a0: 62 6f 6f 6c 20 75 6e 62 69 6e 64 46 75 6e 63 74  bool unbindFunct
22b0: 69 6f 6e 73 20 3d 20 28 28 5f 66 6c 61 67 73 20  ions = ((_flags 
22c0: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
22d0: 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e 64 46 75  onFlags.UnbindFu
22e0: 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73 65 29 0d  nctionsOnClose).
22f0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2300: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
2310: 74 69 6f 6e 46 6c 61 67 73 2e 55 6e 62 69 6e 64  tionFlags.Unbind
2320: 46 75 6e 63 74 69 6f 6e 73 4f 6e 43 6c 6f 73 65  FunctionsOnClose
2330: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
2340: 69 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20  if (_usePool).. 
2350: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
2360: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 53 51            if (SQ
2370: 4c 69 74 65 42 61 73 65 2e 52 65 73 65 74 43 6f  LiteBase.ResetCo
2380: 6e 6e 65 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 5f  nnection(_sql, _
2390: 73 71 6c 2c 20 63 61 6e 54 68 72 6f 77 29 29 0d  sql, canThrow)).
23a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b  .              {
23b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
23c0: 20 20 20 20 69 66 20 28 75 6e 62 69 6e 64 46 75      if (unbindFu
23d0: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
23e0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
23f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2400: 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 46       if (SQLiteF
2410: 75 6e 63 74 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c  unction.UnbindAl
2420: 6c 46 75 6e 63 74 69 6f 6e 73 28 74 68 69 73 2c  lFunctions(this,
2430: 20 5f 66 6c 61 67 73 2c 20 66 61 6c 73 65 29 29   _flags, false))
2440: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
2450: 20 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21          {..#if !
2460: 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26  NET_COMPACT_20 &
2470: 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49  & TRACE_CONNECTI
2480: 4f 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ON..            
2490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 54 72                Tr
24a0: 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
24b0: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
24c0: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
24d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
24e0: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
24f0: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2500: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
2510: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2520: 20 20 20 20 22 55 6e 62 69 6e 64 46 75 6e 63 74      "UnbindFunct
2530: 69 6f 6e 73 20 28 50 6f 6f 6c 29 20 53 75 63 63  ions (Pool) Succ
2540: 65 73 73 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ess: {0}",..    
2550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2560: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
2570: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
2580: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2590: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
25a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25b0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
25c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
25d0: 20 20 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f    {..#if !NET_CO
25e0: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
25f0: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2600: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2610: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2620: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2630: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2640: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2660: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2670: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2690: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 55                "U
26a0: 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73 20 28  nbindFunctions (
26b0: 50 6f 6f 6c 29 20 46 61 69 6c 75 72 65 3a 20 7b  Pool) Failure: {
26c0: 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  0}",..          
26d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
26e0: 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69      HandleToStri
26f0: 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d  ng()));..#endif.
2700: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2710: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
2720: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
2730: 0a 23 69 66 20 49 4e 54 45 52 4f 50 5f 56 49 52  .#if INTEROP_VIR
2740: 54 55 41 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20  TUAL_TABLE..    
2750: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 44 69                Di
2760: 73 70 6f 73 65 4d 6f 64 75 6c 65 73 28 29 3b 0d  sposeModules();.
2770: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
2780: 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
2790: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50 6f 6f  iteConnectionPoo
27a0: 6c 2e 41 64 64 28 5f 66 69 6c 65 4e 61 6d 65 2c  l.Add(_fileName,
27b0: 20 5f 73 71 6c 2c 20 5f 70 6f 6f 6c 56 65 72 73   _sql, _poolVers
27c0: 69 6f 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  ion);....       
27d0: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
27e0: 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68  eConnection.OnCh
27f0: 61 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20  anged(null, new 
2800: 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41  ConnectionEventA
2810: 72 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20  rgs(..          
2820: 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
2830: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e  teConnectionEven
2840: 74 54 79 70 65 2e 43 6c 6f 73 65 64 54 6f 50 6f  tType.ClosedToPo
2850: 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d  ol, null, null,.
2860: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2870: 20 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c         null, nul
2880: 6c 2c 20 5f 73 71 6c 2c 20 5f 66 69 6c 65 4e 61  l, _sql, _fileNa
2890: 6d 65 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  me, new object[]
28a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
28b0: 20 20 20 20 20 20 20 20 20 20 74 79 70 65 6f 66            typeof
28c0: 28 53 51 4c 69 74 65 33 29 2c 20 63 61 6e 54 68  (SQLite3), canTh
28d0: 72 6f 77 2c 20 5f 66 69 6c 65 4e 61 6d 65 2c 20  row, _fileName, 
28e0: 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d 29 29  _poolVersion }))
28f0: 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f  ;....#if !NET_CO
2900: 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43  MPACT_20 && TRAC
2910: 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20  E_CONNECTION..  
2920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2930: 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28  Trace.WriteLine(
2940: 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74  HelperMethods.St
2950: 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20  ringFormat(..   
2960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2970: 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43     CultureInfo.C
2980: 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a  urrentCulture,..
2990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
29a0: 20 20 20 20 20 20 22 43 6c 6f 73 65 20 28 50 6f        "Close (Po
29b0: 6f 6c 29 20 53 75 63 63 65 73 73 3a 20 7b 30 7d  ol) Success: {0}
29c0: 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ",..            
29d0: 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c 65            Handle
29e0: 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23  ToString()));..#
29f0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20  endif..         
2a00: 20 20 20 20 20 7d 0d 0a 23 69 66 20 21 4e 45 54       }..#if !NET
2a10: 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54  _COMPACT_20 && T
2a20: 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d  RACE_CONNECTION.
2a30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65  .              e
2a40: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2a50: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
2a60: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
2a70: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
2a80: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
2a90: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
2aa0: 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75             Cultu
2ab0: 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75  reInfo.CurrentCu
2ac0: 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20  lture,..        
2ad0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43                "C
2ae0: 6c 6f 73 65 20 28 50 6f 6f 6c 29 20 46 61 69 6c  lose (Pool) Fail
2af0: 75 72 65 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20  ure: {0}",..    
2b00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2b10: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2b20: 28 29 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  ()));..         
2b30: 20 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a       }..#endif..
2b40: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2b50: 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20         else..   
2b60: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
2b70: 20 20 20 20 20 20 20 20 69 66 20 28 75 6e 62 69          if (unbi
2b80: 6e 64 46 75 6e 63 74 69 6f 6e 73 29 0d 0a 20 20  ndFunctions)..  
2b90: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
2ba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2bb0: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
2bc0: 69 6f 6e 2e 55 6e 62 69 6e 64 41 6c 6c 46 75 6e  ion.UnbindAllFun
2bd0: 63 74 69 6f 6e 73 28 74 68 69 73 2c 20 5f 66 6c  ctions(this, _fl
2be0: 61 67 73 2c 20 66 61 6c 73 65 29 29 0d 0a 20 20  ags, false))..  
2bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c00: 7b 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50  {..#if !NET_COMP
2c10: 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f  ACT_20 && TRACE_
2c20: 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20  CONNECTION..    
2c30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c40: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
2c50: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
2c60: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
2c70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2c80: 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72 65           Culture
2c90: 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74  Info.CurrentCult
2ca0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
2cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2cc0: 22 55 6e 62 69 6e 64 46 75 6e 63 74 69 6f 6e 73  "UnbindFunctions
2cd0: 20 53 75 63 63 65 73 73 3a 20 7b 30 7d 22 2c 0d   Success: {0}",.
2ce0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
2cf0: 20 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c             Handl
2d00: 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
2d10: 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20  #endif..        
2d20: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
2d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 65                 e
2d40: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
2d50: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
2d60: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
2d70: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
2d80: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
2d90: 20 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57           Trace.W
2da0: 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d  riteLine(HelperM
2db0: 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72  ethods.StringFor
2dc0: 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  mat(..          
2dd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2de0: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
2df0: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
2e00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e10: 20 20 20 20 20 20 20 22 55 6e 62 69 6e 64 46 75         "UnbindFu
2e20: 6e 63 74 69 6f 6e 73 20 46 61 69 6c 75 72 65 3a  nctions Failure:
2e30: 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20   {0}",..        
2e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e50: 20 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67    HandleToString
2e60: 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ()));..#endif.. 
2e70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
2e80: 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   }..            
2e90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20    }....         
2ea0: 20 20 20 20 20 5f 73 71 6c 2e 44 69 73 70 6f 73       _sql.Dispos
2eb0: 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  e();..          
2ec0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73 71  }..          _sq
2ed0: 6c 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20  l = null;..     
2ee0: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
2ef0: 20 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 2f 2f 2f 2f 2f  ////////////////
2f40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
2f50: 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
2f60: 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
2f70: 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
2f80: 20 70 72 6f 74 65 63 74 65 64 20 73 74 72 69 6e   protected strin
2f90: 67 20 48 61 6e 64 6c 65 54 6f 53 74 72 69 6e 67  g HandleToString
2fa0: 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  ()..    {..     
2fb0: 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
2fc0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
2fd0: 20 20 72 65 74 75 72 6e 20 22 3c 6e 75 6c 6c 3e    return "<null>
2fe0: 22 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  ";....        re
2ff0: 74 75 72 6e 20 5f 73 71 6c 2e 54 6f 53 74 72 69  turn _sql.ToStri
3000: 6e 67 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 23 65  ng();..    }..#e
3010: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  ndif....    ////
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 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3070: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
3080: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
3090: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
30a0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
30b0: 74 69 6d 65 73 20 74 68 65 20 3c 73 65 65 20 63  times the <see c
30c0: 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f 3e 20  ref="Cancel" /> 
30d0: 6d 65 74 68 6f 64 20 68 61 73 20 62 65 65 6e 0d  method has been.
30e0: 0a 20 20 20 20 2f 2f 2f 20 63 61 6c 6c 65 64 2e  .    /// called.
30f0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
3100: 61 72 79 3e 0d 0a 20 20 20 20 70 72 69 76 61 74  ary>..    privat
3110: 65 20 69 6e 74 20 47 65 74 43 61 6e 63 65 6c 43  e int GetCancelC
3120: 6f 75 6e 74 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ount()..    {.. 
3130: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 49 6e         return In
3140: 74 65 72 6c 6f 63 6b 65 64 2e 43 6f 6d 70 61 72  terlocked.Compar
3150: 65 45 78 63 68 61 6e 67 65 28 72 65 66 20 5f 63  eExchange(ref _c
3160: 61 6e 63 65 6c 43 6f 75 6e 74 2c 20 30 2c 20 30  ancelCount, 0, 0
3170: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
3180: 20 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 2f 2f 2f 2f 2f  ////////////////
31d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
31e0: 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
31f0: 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  mary>..    /// T
3200: 68 69 73 20 6d 65 74 68 6f 64 20 64 65 74 65 72  his method deter
3210: 6d 69 6e 65 73 20 77 68 65 74 68 65 72 20 6f 72  mines whether or
3220: 20 6e 6f 74 20 61 20 3c 73 65 65 20 63 72 65 66   not a <see cref
3230: 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  ="SQLiteExceptio
3240: 6e 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20 77  n" />..    /// w
3250: 69 74 68 20 61 20 72 65 74 75 72 6e 20 63 6f 64  ith a return cod
3260: 65 20 6f 66 20 3c 73 65 65 20 63 72 65 66 3d 22  e of <see cref="
3270: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
3280: 49 6e 74 65 72 72 75 70 74 22 20 2f 3e 20 73 68  Interrupt" /> sh
3290: 6f 75 6c 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 65  ould..    /// be
32a0: 20 74 68 72 6f 77 6e 20 61 66 74 65 72 20 6d 61   thrown after ma
32b0: 6b 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74 6f  king a call into
32c0: 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65   the SQLite core
32d0: 20 6c 69 62 72 61 72 79 2e 0d 0a 20 20 20 20 2f   library...    /
32e0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
32f0: 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
3300: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
3310: 72 6f 20 69 66 20 61 20 3c 73 65 65 20 63 72 65  ro if a <see cre
3320: 66 3d 22 53 51 4c 69 74 65 45 78 63 65 70 74 69  f="SQLiteExcepti
3330: 6f 6e 22 20 2f 3e 20 74 6f 20 62 65 20 74 68 72  on" /> to be thr
3340: 6f 77 6e 2e 20 20 54 68 69 73 20 6d 65 74 68 6f  own.  This metho
3350: 64 0d 0a 20 20 20 20 2f 2f 2f 20 77 69 6c 6c 20  d..    /// will 
3360: 6f 6e 6c 79 20 72 65 74 75 72 6e 20 6e 6f 6e 2d  only return non-
3370: 7a 65 72 6f 20 69 66 20 74 68 65 20 3c 73 65 65  zero if the <see
3380: 20 63 72 65 66 3d 22 43 61 6e 63 65 6c 22 20 2f   cref="Cancel" /
3390: 3e 20 6d 65 74 68 6f 64 20 77 61 73 20 63 61 6c  > method was cal
33a0: 6c 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 6f 6e 65  led..    /// one
33b0: 20 6f 72 20 6d 6f 72 65 20 74 69 6d 65 73 20 64   or more times d
33c0: 75 72 69 6e 67 20 61 20 63 61 6c 6c 20 69 6e 74  uring a call int
33d0: 6f 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72  o the SQLite cor
33e0: 65 20 6c 69 62 72 61 72 79 20 28 65 2e 67 2e 20  e library (e.g. 
33f0: 77 68 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 74 68  when..    /// th
3400: 65 20 73 71 6c 69 74 65 33 5f 70 72 65 70 61 72  e sqlite3_prepar
3410: 65 2a 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  e*() or sqlite3_
3420: 73 74 65 70 28 29 20 41 50 49 73 20 61 72 65 20  step() APIs are 
3430: 75 73 65 64 29 2e 0d 0a 20 20 20 20 2f 2f 2f 20  used)...    /// 
3440: 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
3450: 70 72 69 76 61 74 65 20 62 6f 6f 6c 20 53 68 6f  private bool Sho
3460: 75 6c 64 54 68 72 6f 77 46 6f 72 43 61 6e 63 65  uldThrowForCance
3470: 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  l()..    {..    
3480: 20 20 20 20 72 65 74 75 72 6e 20 47 65 74 43 61      return GetCa
3490: 6e 63 65 6c 43 6f 75 6e 74 28 29 20 3e 20 30 3b  ncelCount() > 0;
34a0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 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 2f 2f 2f 2f 2f 2f 2f  ////////////////
3500: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
3510: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
3520: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 73  ry>..    /// Res
3530: 65 74 73 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ets the value of
3540: 20 74 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   the <see cref="
3550: 5f 63 61 6e 63 65 6c 43 6f 75 6e 74 22 20 2f 3e  _cancelCount" />
3560: 20 66 69 65 6c 64 2e 0d 0a 20 20 20 20 2f 2f 2f   field...    ///
3570: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
3580: 20 70 72 69 76 61 74 65 20 69 6e 74 20 52 65 73   private int Res
3590: 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28 29 0d  etCancelCount().
35a0: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
35b0: 72 65 74 75 72 6e 20 49 6e 74 65 72 6c 6f 63 6b  return Interlock
35c0: 65 64 2e 43 6f 6d 70 61 72 65 45 78 63 68 61 6e  ed.CompareExchan
35d0: 67 65 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f  ge(ref _cancelCo
35e0: 75 6e 74 2c 20 30 2c 20 5f 63 61 6e 63 65 6c 43  unt, 0, _cancelC
35f0: 6f 75 6e 74 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ount);..    }...
3600: 0a 20 20 20 20 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 2f  ////////////////
3650: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
3660: 2f 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20  ////....    /// 
3670: 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
3680: 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f 20 69  // Attempts to i
3690: 6e 74 65 72 72 75 70 74 20 74 68 65 20 71 75 65  nterrupt the que
36a0: 72 79 20 63 75 72 72 65 6e 74 6c 79 20 65 78 65  ry currently exe
36b0: 63 75 74 69 6e 67 20 6f 6e 20 74 68 65 20 61 73  cuting on the as
36c0: 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20 2f 2f  sociated..    //
36d0: 2f 20 6e 61 74 69 76 65 20 64 61 74 61 62 61 73  / native databas
36e0: 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20  e connection... 
36f0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
3700: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
3710: 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 61  override void Ca
3720: 6e 63 65 6c 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  ncel()..    {.. 
3730: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
3740: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 64 6f  {..        // do
3750: 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20 20   nothing...     
3760: 20 7d 0d 0a 20 20 20 20 20 20 66 69 6e 61 6c 6c   }..      finall
3770: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
3780: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
3790: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
37a0: 7b 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 65 72  {..        Inter
37b0: 6c 6f 63 6b 65 64 2e 49 6e 63 72 65 6d 65 6e 74  locked.Increment
37c0: 28 72 65 66 20 5f 63 61 6e 63 65 6c 43 6f 75 6e  (ref _cancelCoun
37d0: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 55 6e 73  t);..        Uns
37e0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
37f0: 2e 73 71 6c 69 74 65 33 5f 69 6e 74 65 72 72 75  .sqlite3_interru
3800: 70 74 28 5f 73 71 6c 29 3b 0d 0a 20 20 20 20 20  pt(_sql);..     
3810: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
3820: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
3830: 20 20 20 20 2f 2f 2f 20 54 68 69 73 20 66 75 6e      /// This fun
3840: 63 74 69 6f 6e 20 62 69 6e 64 73 20 61 20 75 73  ction binds a us
3850: 65 72 2d 64 65 66 69 6e 65 64 20 66 75 6e 63 74  er-defined funct
3860: 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f 6e 6e 65  ion to the conne
3870: 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20  ction...    /// 
3880: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
3890: 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
38a0: 22 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  "functionAttribu
38b0: 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  te">..    /// Th
38c0: 65 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51 4c  e <see cref="SQL
38d0: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
38e0: 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63 74 20 69  bute"/> object i
38f0: 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61 69 6e 69  nstance containi
3900: 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  ng..    /// the 
3910: 6d 65 74 61 64 61 74 61 20 66 6f 72 20 74 68 65  metadata for the
3920: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
3930: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
3940: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
3950: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3960: 75 6e 63 74 69 6f 6e 22 3e 0d 0a 20 20 20 20 2f  unction">..    /
3970: 2f 2f 20 54 68 65 20 3c 73 65 65 20 63 72 65 66  // The <see cref
3980: 3d 22 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  ="SQLiteFunction
3990: 22 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61  "/> object insta
39a0: 6e 63 65 20 74 68 61 74 20 69 6d 70 6c 65 6d 65  nce that impleme
39b0: 6e 74 73 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f  nts the..    ///
39c0: 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20 62 65 20   function to be 
39d0: 62 6f 75 6e 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20  bound...    /// 
39e0: 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f  </param>..    //
39f0: 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66  / <param name="f
3a00: 6c 61 67 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  lags">..    /// 
3a10: 54 68 65 20 66 6c 61 67 73 20 61 73 73 6f 63 69  The flags associ
3a20: 61 74 65 64 20 77 69 74 68 20 74 68 65 20 70 61  ated with the pa
3a30: 72 65 6e 74 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  rent connection 
3a40: 6f 62 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f  object...    ///
3a50: 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
3a60: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
3a70: 20 76 6f 69 64 20 42 69 6e 64 46 75 6e 63 74 69   void BindFuncti
3a80: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c  on(..        SQL
3a90: 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74 72 69  iteFunctionAttri
3aa0: 62 75 74 65 20 66 75 6e 63 74 69 6f 6e 41 74 74  bute functionAtt
3ab0: 72 69 62 75 74 65 2c 0d 0a 20 20 20 20 20 20 20  ribute,..       
3ac0: 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 20   SQLiteFunction 
3ad0: 66 75 6e 63 74 69 6f 6e 2c 0d 0a 20 20 20 20 20  function,..     
3ae0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
3af0: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 0d 0a  ionFlags flags..
3b00: 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20 20 7b          )..    {
3b10: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 75  ..        if (fu
3b20: 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65 20  nctionAttribute 
3b30: 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
3b40: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
3b50: 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
3b60: 70 74 69 6f 6e 28 22 66 75 6e 63 74 69 6f 6e 41  ption("functionA
3b70: 74 74 72 69 62 75 74 65 22 29 3b 0d 0a 0d 0a 20  ttribute");.... 
3b80: 20 20 20 20 20 20 20 69 66 20 28 66 75 6e 63 74         if (funct
3b90: 69 6f 6e 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20  ion == null)..  
3ba0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
3bb0: 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c  new ArgumentNull
3bc0: 45 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74  Exception("funct
3bd0: 69 6f 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  ion");....      
3be0: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
3bf0: 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 28 74 68  .BindFunction(th
3c00: 69 73 2c 20 66 75 6e 63 74 69 6f 6e 41 74 74 72  is, functionAttr
3c10: 69 62 75 74 65 2c 20 66 75 6e 63 74 69 6f 6e 2c  ibute, function,
3c20: 20 66 6c 61 67 73 29 3b 0d 0a 0d 0a 20 20 20 20   flags);....    
3c30: 20 20 20 20 69 66 20 28 5f 66 75 6e 63 74 69 6f      if (_functio
3c40: 6e 73 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  ns == null)..   
3c50: 20 20 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69           _functi
3c60: 6f 6e 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  ons = new Dictio
3c70: 6e 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74  nary<SQLiteFunct
3c80: 69 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51  ionAttribute, SQ
3c90: 4c 69 74 65 46 75 6e 63 74 69 6f 6e 3e 28 29 3b  LiteFunction>();
3ca0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 5f 66 75 6e  ....        _fun
3cb0: 63 74 69 6f 6e 73 5b 66 75 6e 63 74 69 6f 6e 41  ctions[functionA
3cc0: 74 74 72 69 62 75 74 65 5d 20 3d 20 66 75 6e 63  ttribute] = func
3cd0: 74 69 6f 6e 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  tion;..    }....
3ce0: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
3cf0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69 73 20  >..    /// This 
3d00: 66 75 6e 63 74 69 6f 6e 20 62 69 6e 64 73 20 61  function binds a
3d10: 20 75 73 65 72 2d 64 65 66 69 6e 65 64 20 66 75   user-defined fu
3d20: 6e 63 74 69 6f 6e 20 74 6f 20 74 68 65 20 63 6f  nction to the co
3d30: 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20 20 20 2f  nnection...    /
3d40: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
3d50: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3d60: 6d 65 3d 22 66 75 6e 63 74 69 6f 6e 41 74 74 72  me="functionAttr
3d70: 69 62 75 74 65 22 3e 0d 0a 20 20 20 20 2f 2f 2f  ibute">..    ///
3d80: 20 54 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22   The <see cref="
3d90: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
3da0: 74 72 69 62 75 74 65 22 2f 3e 20 6f 62 6a 65 63  tribute"/> objec
3db0: 74 20 69 6e 73 74 61 6e 63 65 20 63 6f 6e 74 61  t instance conta
3dc0: 69 6e 69 6e 67 0d 0a 20 20 20 20 2f 2f 2f 20 74  ining..    /// t
3dd0: 68 65 20 6d 65 74 61 64 61 74 61 20 66 6f 72 20  he metadata for 
3de0: 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 74 6f 20  the function to 
3df0: 62 65 20 75 6e 62 6f 75 6e 64 2e 0d 0a 20 20 20  be unbound...   
3e00: 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
3e10: 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
3e20: 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20 20  me="flags">..   
3e30: 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20 61   /// The flags a
3e40: 73 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 74  ssociated with t
3e50: 68 65 20 70 61 72 65 6e 74 20 63 6f 6e 6e 65 63  he parent connec
3e60: 74 69 6f 6e 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  tion object...  
3e70: 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
3e80: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
3e90: 3e 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65  >Non-zero if the
3ea0: 20 66 75 6e 63 74 69 6f 6e 20 77 61 73 20 75 6e   function was un
3eb0: 62 6f 75 6e 64 20 61 6e 64 20 72 65 6d 6f 76 65  bound and remove
3ec0: 64 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  d.</returns>..  
3ed0: 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
3ee0: 69 64 65 20 62 6f 6f 6c 20 55 6e 62 69 6e 64 46  ide bool UnbindF
3ef0: 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  unction(..      
3f00: 20 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e    SQLiteFunction
3f10: 41 74 74 72 69 62 75 74 65 20 66 75 6e 63 74 69  Attribute functi
3f20: 6f 6e 41 74 74 72 69 62 75 74 65 2c 0d 0a 20 20  onAttribute,..  
3f30: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
3f40: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
3f50: 73 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20  s..        )..  
3f60: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20    {..        if 
3f70: 28 66 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75  (functionAttribu
3f80: 74 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  te == null)..   
3f90: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
3fa0: 65 77 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45  ew ArgumentNullE
3fb0: 78 63 65 70 74 69 6f 6e 28 22 66 75 6e 63 74 69  xception("functi
3fc0: 6f 6e 41 74 74 72 69 62 75 74 65 22 29 3b 0d 0a  onAttribute");..
3fd0: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 5f 66  ..        if (_f
3fe0: 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e 75 6c 6c  unctions == null
3ff0: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  )..            r
4000: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 0d 0a  eturn false;....
4010: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 46 75          SQLiteFu
4020: 6e 63 74 69 6f 6e 20 66 75 6e 63 74 69 6f 6e 3b  nction function;
4030: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
4040: 5f 66 75 6e 63 74 69 6f 6e 73 2e 54 72 79 47 65  _functions.TryGe
4050: 74 56 61 6c 75 65 28 66 75 6e 63 74 69 6f 6e 41  tValue(functionA
4060: 74 74 72 69 62 75 74 65 2c 20 6f 75 74 20 66 75  ttribute, out fu
4070: 6e 63 74 69 6f 6e 29 29 0d 0a 20 20 20 20 20 20  nction))..      
4080: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
4090: 20 69 66 20 28 53 51 4c 69 74 65 46 75 6e 63 74   if (SQLiteFunct
40a0: 69 6f 6e 2e 55 6e 62 69 6e 64 46 75 6e 63 74 69  ion.UnbindFuncti
40b0: 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
40c0: 20 20 20 20 20 20 20 20 20 74 68 69 73 2c 20 66           this, f
40d0: 75 6e 63 74 69 6f 6e 41 74 74 72 69 62 75 74 65  unctionAttribute
40e0: 2c 20 66 75 6e 63 74 69 6f 6e 2c 20 66 6c 61 67  , function, flag
40f0: 73 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20 20  s) &&..         
4100: 20 20 20 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e         _function
4110: 73 2e 52 65 6d 6f 76 65 28 66 75 6e 63 74 69 6f  s.Remove(functio
4120: 6e 41 74 74 72 69 62 75 74 65 29 29 0d 0a 20 20  nAttribute))..  
4130: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4140: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74               ret
4150: 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20  urn true;..     
4160: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
4170: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72    }....        r
4180: 65 74 75 72 6e 20 66 61 6c 73 65 3b 0d 0a 20 20  eturn false;..  
4190: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
41a0: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
41b0: 69 6e 67 20 56 65 72 73 69 6f 6e 0d 0a 20 20 20  ing Version..   
41c0: 20 7b 0d 0a 20 20 20 20 20 20 67 65 74 0d 0a 20   {..      get.. 
41d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
41e0: 72 65 74 75 72 6e 20 53 51 4c 69 74 65 56 65 72  return SQLiteVer
41f0: 73 69 6f 6e 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a  sion;..      }..
4200: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
4210: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
4220: 6e 74 20 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72  nt VersionNumber
4230: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67  ..    {..      g
4240: 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20  et..      {..   
4250: 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69       return SQLi
4260: 74 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b  teVersionNumber;
4270: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
4280: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
4290: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 44   static string D
42a0: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 0d 0a  efineConstants..
42b0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67      {..        g
42c0: 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  et..        {.. 
42d0: 20 20 20 20 20 20 20 20 20 20 20 53 74 72 69 6e             Strin
42e0: 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74 20  gBuilder result 
42f0: 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69 6c  = new StringBuil
4300: 64 65 72 28 29 3b 0d 0a 20 20 20 20 20 20 20 20  der();..        
4310: 20 20 20 20 49 4c 69 73 74 3c 73 74 72 69 6e 67      IList<string
4320: 3e 20 6c 69 73 74 20 3d 20 53 51 4c 69 74 65 44  > list = SQLiteD
4330: 65 66 69 6e 65 43 6f 6e 73 74 61 6e 74 73 2e 4f  efineConstants.O
4340: 70 74 69 6f 6e 4c 69 73 74 3b 0d 0a 0d 0a 20 20  ptionList;....  
4350: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6c 69            if (li
4360: 73 74 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20  st != null)..   
4370: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
4380: 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 65              fore
4390: 61 63 68 20 28 73 74 72 69 6e 67 20 65 6c 65 6d  ach (string elem
43a0: 65 6e 74 20 69 6e 20 6c 69 73 74 29 0d 0a 20 20  ent in list)..  
43b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d                {.
43c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
43d0: 20 20 20 20 20 69 66 20 28 65 6c 65 6d 65 6e 74       if (element
43e0: 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
43f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4400: 20 20 20 63 6f 6e 74 69 6e 75 65 3b 0d 0a 0d 0a     continue;....
4410: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4420: 20 20 20 20 69 66 20 28 72 65 73 75 6c 74 2e 4c      if (result.L
4430: 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20  ength > 0)..    
4440: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4450: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
4460: 64 28 27 20 27 29 3b 0d 0a 0d 0a 20 20 20 20 20  d(' ');....     
4470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72                 r
4480: 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 65 6c 65  esult.Append(ele
4490: 6d 65 6e 74 29 3b 0d 0a 20 20 20 20 20 20 20 20  ment);..        
44a0: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
44b0: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
44c0: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 72          return r
44d0: 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28 29  esult.ToString()
44e0: 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  ;..        }..  
44f0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
4500: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
4510: 67 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 0d  g SQLiteVersion.
4520: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65  .    {..      ge
4530: 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  t..      {..    
4540: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
4550: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
4560: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
4570: 74 65 33 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  te3_libversion()
4580: 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d  , -1);..      }.
4590: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
45a0: 74 65 72 6e 61 6c 20 73 74 61 74 69 63 20 69 6e  ternal static in
45b0: 74 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  t SQLiteVersionN
45c0: 75 6d 62 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  umber..    {..  
45d0: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 7b      get..      {
45e0: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
45f0: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
4600: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 69 62  hods.sqlite3_lib
4610: 76 65 72 73 69 6f 6e 5f 6e 75 6d 62 65 72 28 29  version_number()
4620: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
4630: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4640: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
4650: 53 51 4c 69 74 65 53 6f 75 72 63 65 49 64 0d 0a  SQLiteSourceId..
4660: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 67 65 74      {..      get
4670: 0d 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20  ..      {..     
4680: 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f     return UTF8To
4690: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
46a0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
46b0: 65 33 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d  e3_sourceid(), -
46c0: 31 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20  1);..      }..  
46d0: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
46e0: 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e  nal static strin
46f0: 67 20 53 51 4c 69 74 65 43 6f 6d 70 69 6c 65 4f  g SQLiteCompileO
4700: 70 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20  ptions..    {.. 
4710: 20 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20         get..    
4720: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
4730: 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65 72     StringBuilder
4740: 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53 74   result = new St
4750: 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d 0a  ringBuilder();..
4760: 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
4770: 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20 20  index = 0;..    
4780: 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 7a          IntPtr z
4790: 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e 61  Value = UnsafeNa
47a0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
47b0: 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
47c0: 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b 0d  n_get(index++);.
47d0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 77  ...            w
47e0: 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d 20  hile (zValue != 
47f0: 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20  IntPtr.Zero)..  
4800: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
4810: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
4820: 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20 3e  (result.Length >
4830: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
4840: 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e           result.
4850: 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d 0a  Append(' ');....
4860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4870: 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55 54  result.Append(UT
4880: 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c 75  F8ToString(zValu
4890: 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20  e, -1));..      
48a0: 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75 65            zValue
48b0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
48c0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
48d0: 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65 74  ompileoption_get
48e0: 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20 20  (index++);..    
48f0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
4900: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
4910: 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67 28  result.ToString(
4920: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20  );..        }.. 
4930: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
4940: 72 6e 61 6c 20 73 74 61 74 69 63 20 73 74 72 69  rnal static stri
4950: 6e 67 20 49 6e 74 65 72 6f 70 56 65 72 73 69 6f  ng InteropVersio
4960: 6e 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  n..    {..      
4970: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4980: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4990: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
49a0: 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38 54      return UTF8T
49b0: 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61  oString(UnsafeNa
49c0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65  tiveMethods.inte
49d0: 72 6f 70 5f 6c 69 62 76 65 72 73 69 6f 6e 28 29  rop_libversion()
49e0: 2c 20 2d 31 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  , -1);..#else.. 
49f0: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
4a00: 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d  n null;..#endif.
4a10: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
4a20: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
4a30: 6c 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20  l static string 
4a40: 49 6e 74 65 72 6f 70 53 6f 75 72 63 65 49 64 0d  InteropSourceId.
4a50: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
4a60: 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  get..        {..
4a70: 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
4a80: 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20  DARD..          
4a90: 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
4aa0: 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69  tring(UnsafeNati
4ab0: 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f  veMethods.intero
4ac0: 70 5f 73 6f 75 72 63 65 69 64 28 29 2c 20 2d 31  p_sourceid(), -1
4ad0: 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
4ae0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 75         return nu
4af0: 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  ll;..#endif..   
4b00: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
4b10: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 73 74  .    internal st
4b20: 61 74 69 63 20 73 74 72 69 6e 67 20 49 6e 74 65  atic string Inte
4b30: 72 6f 70 43 6f 6d 70 69 6c 65 4f 70 74 69 6f 6e  ropCompileOption
4b40: 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  s..    {..      
4b50: 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20 20 7b    get..        {
4b60: 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
4b70: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
4b80: 20 20 20 20 53 74 72 69 6e 67 42 75 69 6c 64 65      StringBuilde
4b90: 72 20 72 65 73 75 6c 74 20 3d 20 6e 65 77 20 53  r result = new S
4ba0: 74 72 69 6e 67 42 75 69 6c 64 65 72 28 29 3b 0d  tringBuilder();.
4bb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
4bc0: 20 69 6e 64 65 78 20 3d 20 30 3b 0d 0a 20 20 20   index = 0;..   
4bd0: 20 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20           IntPtr 
4be0: 7a 56 61 6c 75 65 20 3d 20 55 6e 73 61 66 65 4e  zValue = UnsafeN
4bf0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 69 6e 74  ativeMethods.int
4c00: 65 72 6f 70 5f 63 6f 6d 70 69 6c 65 6f 70 74 69  erop_compileopti
4c10: 6f 6e 5f 67 65 74 28 69 6e 64 65 78 2b 2b 29 3b  on_get(index++);
4c20: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
4c30: 77 68 69 6c 65 20 28 7a 56 61 6c 75 65 20 21 3d  while (zValue !=
4c40: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20   IntPtr.Zero).. 
4c50: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
4c60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
4c70: 20 28 72 65 73 75 6c 74 2e 4c 65 6e 67 74 68 20   (result.Length 
4c80: 3e 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  > 0)..          
4c90: 20 20 20 20 20 20 20 20 20 20 72 65 73 75 6c 74            result
4ca0: 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d 0a 0d  .Append(' ');...
4cb0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
4cc0: 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64 28 55   result.Append(U
4cd0: 54 46 38 54 6f 53 74 72 69 6e 67 28 7a 56 61 6c  TF8ToString(zVal
4ce0: 75 65 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20  ue, -1));..     
4cf0: 20 20 20 20 20 20 20 20 20 20 20 7a 56 61 6c 75             zValu
4d00: 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  e = UnsafeNative
4d10: 4d 65 74 68 6f 64 73 2e 69 6e 74 65 72 6f 70 5f  Methods.interop_
4d20: 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67 65  compileoption_ge
4d30: 74 28 69 6e 64 65 78 2b 2b 29 3b 0d 0a 20 20 20  t(index++);..   
4d40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
4d50: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
4d60: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
4d70: 28 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20  ();..#else..    
4d80: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e          return n
4d90: 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ull;..#endif..  
4da0: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a        }..    }..
4db0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
4dc0: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 41 75 74  verride bool Aut
4dd0: 6f 43 6f 6d 6d 69 74 0d 0a 20 20 20 20 7b 0d 0a  oCommit..    {..
4de0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
4df0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75   {..        retu
4e00: 72 6e 20 49 73 41 75 74 6f 63 6f 6d 6d 69 74 28  rn IsAutocommit(
4e10: 5f 73 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20  _sql, _sql);..  
4e20: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
4e30: 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
4e40: 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52 65 61  rride bool IsRea
4e50: 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  dOnly(..        
4e60: 73 74 72 69 6e 67 20 6e 61 6d 65 0d 0a 20 20 20  string name..   
4e70: 20 20 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20       )..    {.. 
4e80: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 44         IntPtr pD
4e90: 62 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a  bName = IntPtr.Z
4ea0: 65 72 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ero;....        
4eb0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
4ec0: 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
4ed0: 6e 61 6d 65 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20  name != null).. 
4ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
4ef0: 44 62 4e 61 6d 65 20 3d 20 53 51 4c 69 74 65 53  DbName = SQLiteS
4f00: 74 72 69 6e 67 2e 55 74 66 38 49 6e 74 50 74 72  tring.Utf8IntPtr
4f10: 46 72 6f 6d 53 74 72 69 6e 67 28 6e 61 6d 65 29  FromString(name)
4f20: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
4f30: 20 69 6e 74 20 72 65 73 75 6c 74 20 3d 20 55 6e   int result = Un
4f40: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
4f50: 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 61  s.sqlite3_db_rea
4f60: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
4f70: 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20 70 44          _sql, pD
4f80: 62 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  bName);....     
4f90: 20 20 20 20 20 20 20 69 66 20 28 72 65 73 75 6c         if (resul
4fa0: 74 20 3d 3d 20 2d 31 29 20 2f 2a 20 64 61 74 61  t == -1) /* data
4fb0: 62 61 73 65 20 6e 6f 74 20 66 6f 75 6e 64 20 2a  base not found *
4fc0: 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  /..            {
4fd0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
4fe0: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
4ff0: 74 65 45 78 63 65 70 74 69 6f 6e 28 48 65 6c 70  teException(Help
5000: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
5010: 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20  Format(..       
5020: 20 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c               Cul
5030: 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74  tureInfo.Current
5040: 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20  Culture,..      
5050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
5060: 61 74 61 62 61 73 65 20 5c 22 7b 30 7d 5c 22 20  atabase \"{0}\" 
5070: 6e 6f 74 20 66 6f 75 6e 64 22 2c 20 6e 61 6d 65  not found", name
5080: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
5090: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20   }....          
50a0: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 20    return result 
50b0: 3d 3d 20 30 20 3f 20 66 61 6c 73 65 20 3a 20 74  == 0 ? false : t
50c0: 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  rue;..        }.
50d0: 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c 79  .        finally
50e0: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
50f0: 20 20 20 20 20 20 20 20 20 69 66 20 28 70 44 62           if (pDb
5100: 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e 5a  Name != IntPtr.Z
5110: 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ero)..          
5120: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
5130: 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f 72       SQLiteMemor
5140: 79 2e 46 72 65 65 28 70 44 62 4e 61 6d 65 29 3b  y.Free(pDbName);
5150: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
5160: 20 20 70 44 62 4e 61 6d 65 20 3d 20 49 6e 74 50    pDbName = IntP
5170: 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20  tr.Zero;..      
5180: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
5190: 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
51a0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
51b0: 64 65 20 6c 6f 6e 67 20 4c 61 73 74 49 6e 73 65  de long LastInse
51c0: 72 74 52 6f 77 49 64 0d 0a 20 20 20 20 7b 0d 0a  rtRowId..    {..
51d0: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
51e0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
51f0: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5200: 52 4b 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  RK..        retu
5210: 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
5220: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c  ethods.sqlite3_l
5230: 61 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64  ast_insert_rowid
5240: 28 5f 73 71 6c 29 3b 0d 0a 23 65 6c 69 66 20 21  (_sql);..#elif !
5250: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
5260: 0a 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 72 6f  .        long ro
5270: 77 49 64 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  wId = 0;..      
5280: 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
5290: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 61  thods.sqlite3_la
52a0: 73 74 5f 69 6e 73 65 72 74 5f 72 6f 77 69 64 5f  st_insert_rowid_
52b0: 69 6e 74 65 72 6f 70 28 5f 73 71 6c 2c 20 72 65  interop(_sql, re
52c0: 66 20 72 6f 77 49 64 29 3b 0d 0a 20 20 20 20 20  f rowId);..     
52d0: 20 20 20 72 65 74 75 72 6e 20 72 6f 77 49 64 3b     return rowId;
52e0: 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20  ..#else..       
52f0: 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
5300: 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
5310: 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
5320: 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
5330: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
5340: 65 72 72 69 64 65 20 69 6e 74 20 43 68 61 6e 67  erride int Chang
5350: 65 73 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  es..    {..     
5360: 20 67 65 74 0d 0a 20 20 20 20 20 20 7b 0d 0a 23   get..      {..#
5370: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
5380: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ARD..        ret
5390: 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
53a0: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
53b0: 63 68 61 6e 67 65 73 5f 69 6e 74 65 72 6f 70 28  changes_interop(
53c0: 5f 73 71 6c 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  _sql);..#else.. 
53d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e         return Un
53e0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
53f0: 73 2e 73 71 6c 69 74 65 33 5f 63 68 61 6e 67 65  s.sqlite3_change
5400: 73 28 5f 73 71 6c 29 3b 0d 0a 23 65 6e 64 69 66  s(_sql);..#endif
5410: 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
5420: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
5430: 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 4d   override long M
5440: 65 6d 6f 72 79 55 73 65 64 0d 0a 20 20 20 20 7b  emoryUsed..    {
5450: 0d 0a 20 20 20 20 20 20 20 20 67 65 74 0d 0a 20  ..        get.. 
5460: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
5470: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74 61        return Sta
5480: 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 3b 0d 0a  ticMemoryUsed;..
5490: 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d          }..    }
54a0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
54b0: 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74 61   static long Sta
54c0: 74 69 63 4d 65 6d 6f 72 79 55 73 65 64 0d 0a 20  ticMemoryUsed.. 
54d0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 67 65     {..        ge
54e0: 74 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 23 69  t..        {..#i
54f0: 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50  f !PLATFORM_COMP
5500: 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20  ACTFRAMEWORK..  
5510: 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
5520: 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
5530: 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d  hods.sqlite3_mem
5540: 6f 72 79 5f 75 73 65 64 28 29 3b 0d 0a 23 65 6c  ory_used();..#el
5550: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
5560: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ARD..           
5570: 20 6c 6f 6e 67 20 62 79 74 65 73 20 3d 20 30 3b   long bytes = 0;
5580: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 55 6e  ..            Un
5590: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
55a0: 73 2e 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79  s.sqlite3_memory
55b0: 5f 75 73 65 64 5f 69 6e 74 65 72 6f 70 28 72 65  _used_interop(re
55c0: 66 20 62 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  f bytes);..     
55d0: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 62 79         return by
55e0: 74 65 73 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  tes;..#else..   
55f0: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
5600: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
5610: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
5620: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
5630: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
5640: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
5650: 20 6c 6f 6e 67 20 4d 65 6d 6f 72 79 48 69 67 68   long MemoryHigh
5660: 77 61 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20  water..    {..  
5670: 20 20 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20        get..     
5680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
5690: 20 20 72 65 74 75 72 6e 20 53 74 61 74 69 63 4d    return StaticM
56a0: 65 6d 6f 72 79 48 69 67 68 77 61 74 65 72 3b 0d  emoryHighwater;.
56b0: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
56c0: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
56d0: 6c 20 73 74 61 74 69 63 20 6c 6f 6e 67 20 53 74  l static long St
56e0: 61 74 69 63 4d 65 6d 6f 72 79 48 69 67 68 77 61  aticMemoryHighwa
56f0: 74 65 72 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ter..    {..    
5700: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5710: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
5720: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
5730: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
5740: 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74  return UnsafeNat
5750: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
5760: 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77 61  e3_memory_highwa
5770: 74 65 72 28 30 29 3b 0d 0a 23 65 6c 69 66 20 21  ter(0);..#elif !
5780: 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d  SQLITE_STANDARD.
5790: 0a 20 20 20 20 20 20 20 20 20 20 20 20 6c 6f 6e  .            lon
57a0: 67 20 62 79 74 65 73 20 3d 20 30 3b 0d 0a 20 20  g bytes = 0;..  
57b0: 20 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65            Unsafe
57c0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
57d0: 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67  lite3_memory_hig
57e0: 68 77 61 74 65 72 5f 69 6e 74 65 72 6f 70 28 30  hwater_interop(0
57f0: 2c 20 72 65 66 20 62 79 74 65 73 29 3b 0d 0a 20  , ref bytes);.. 
5800: 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
5810: 6e 20 62 79 74 65 73 3b 0d 0a 23 65 6c 73 65 0d  n bytes;..#else.
5820: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
5830: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
5840: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
5850: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
5860: 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20     }..    }.... 
5870: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
5880: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
5890: 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  s non-zero if th
58a0: 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 6e 61 74  e underlying nat
58b0: 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68  ive connection h
58c0: 61 6e 64 6c 65 20 69 73 20 6f 77 6e 65 64 0d 0a  andle is owned..
58d0: 20 20 20 20 2f 2f 2f 20 62 79 20 74 68 69 73 20      /// by this 
58e0: 69 6e 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f  instance...    /
58f0: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
5900: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
5910: 72 69 64 65 20 62 6f 6f 6c 20 4f 77 6e 48 61 6e  ride bool OwnHan
5920: 64 6c 65 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  dle..    {..    
5930: 20 20 20 20 67 65 74 0d 0a 20 20 20 20 20 20 20      get..       
5940: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
5950: 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
5960: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
5970: 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
5980: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 22 6e 6f  iteException("no
5990: 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64   connection hand
59a0: 6c 65 20 61 76 61 69 6c 61 62 6c 65 22 29 3b 0d  le available");.
59b0: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72  ...            r
59c0: 65 74 75 72 6e 20 5f 73 71 6c 2e 4f 77 6e 48 61  eturn _sql.OwnHa
59d0: 6e 64 6c 65 3b 0d 0a 20 20 20 20 20 20 20 20 7d  ndle;..        }
59e0: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
59f0: 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
5a00: 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
5a10: 65 20 6c 6f 67 69 63 61 6c 20 6c 69 73 74 20 6f  e logical list o
5a20: 66 20 66 75 6e 63 74 69 6f 6e 73 20 61 73 73 6f  f functions asso
5a30: 63 69 61 74 65 64 20 77 69 74 68 20 74 68 69 73  ciated with this
5a40: 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a 20 20   connection...  
5a50: 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
5a60: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
5a70: 76 65 72 72 69 64 65 20 49 44 69 63 74 69 6f 6e  verride IDiction
5a80: 61 72 79 3c 53 51 4c 69 74 65 46 75 6e 63 74 69  ary<SQLiteFuncti
5a90: 6f 6e 41 74 74 72 69 62 75 74 65 2c 20 53 51 4c  onAttribute, SQL
5aa0: 69 74 65 46 75 6e 63 74 69 6f 6e 3e 20 46 75 6e  iteFunction> Fun
5ab0: 63 74 69 6f 6e 73 0d 0a 20 20 20 20 7b 0d 0a 20  ctions..    {.. 
5ac0: 20 20 20 20 20 20 20 67 65 74 20 7b 20 72 65 74         get { ret
5ad0: 75 72 6e 20 5f 66 75 6e 63 74 69 6f 6e 73 3b 20  urn _functions; 
5ae0: 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  }..    }....    
5af0: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
5b00: 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  e SQLiteErrorCod
5b10: 65 20 53 65 74 4d 65 6d 6f 72 79 53 74 61 74 75  e SetMemoryStatu
5b20: 73 28 62 6f 6f 6c 20 76 61 6c 75 65 29 0d 0a 20  s(bool value).. 
5b30: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72 65     {..        re
5b40: 74 75 72 6e 20 53 74 61 74 69 63 53 65 74 4d 65  turn StaticSetMe
5b50: 6d 6f 72 79 53 74 61 74 75 73 28 76 61 6c 75 65  moryStatus(value
5b60: 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
5b70: 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69 63   internal static
5b80: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
5b90: 20 53 74 61 74 69 63 53 65 74 4d 65 6d 6f 72 79   StaticSetMemory
5ba0: 53 74 61 74 75 73 28 62 6f 6f 6c 20 76 61 6c 75  Status(bool valu
5bb0: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
5bc0: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
5bd0: 64 65 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61  de rc = UnsafeNa
5be0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
5bf0: 74 65 33 5f 63 6f 6e 66 69 67 5f 69 6e 74 28 0d  te3_config_int(.
5c00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
5c10: 69 74 65 43 6f 6e 66 69 67 4f 70 73 45 6e 75 6d  iteConfigOpsEnum
5c20: 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  .SQLITE_CONFIG_M
5c30: 45 4d 53 54 41 54 55 53 2c 20 76 61 6c 75 65 20  EMSTATUS, value 
5c40: 3f 20 31 20 3a 20 30 29 3b 0d 0a 0d 0a 20 20 20  ? 1 : 0);....   
5c50: 20 20 20 20 20 72 65 74 75 72 6e 20 72 63 3b 0d       return rc;.
5c60: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
5c70: 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
5c80: 20 2f 2f 2f 20 41 74 74 65 6d 70 74 73 20 74 6f   /// Attempts to
5c90: 20 66 72 65 65 20 61 73 20 6d 75 63 68 20 68 65   free as much he
5ca0: 61 70 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73  ap memory as pos
5cb0: 73 69 62 6c 65 20 66 6f 72 20 74 68 65 20 64 61  sible for the da
5cc0: 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f  tabase connectio
5cd0: 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75  n...    /// </su
5ce0: 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20  mmary>..    /// 
5cf0: 3c 72 65 74 75 72 6e 73 3e 41 20 73 74 61 6e 64  <returns>A stand
5d00: 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
5d10: 6e 20 63 6f 64 65 20 28 69 2e 65 2e 20 7a 65 72  n code (i.e. zer
5d20: 6f 20 66 6f 72 20 73 75 63 63 65 73 73 20 61 6e  o for success an
5d30: 64 20 6e 6f 6e 2d 7a 65 72 6f 20 66 6f 72 20 66  d non-zero for f
5d40: 61 69 6c 75 72 65 29 2e 3c 2f 72 65 74 75 72 6e  ailure).</return
5d50: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
5d60: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
5d70: 45 72 72 6f 72 43 6f 64 65 20 52 65 6c 65 61 73  ErrorCode Releas
5d80: 65 4d 65 6d 6f 72 79 28 29 0d 0a 20 20 20 20 7b  eMemory()..    {
5d90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
5da0: 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20 55  ErrorCode rc = U
5db0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
5dc0: 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 72 65  ds.sqlite3_db_re
5dd0: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 5f 73 71  lease_memory(_sq
5de0: 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 74  l);..        ret
5df0: 75 72 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a  urn rc;..    }..
5e00: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
5e10: 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 74 74  ry>..    /// Att
5e20: 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20 4e 20  empts to free N 
5e30: 62 79 74 65 73 20 6f 66 20 68 65 61 70 20 6d 65  bytes of heap me
5e40: 6d 6f 72 79 20 62 79 20 64 65 61 6c 6c 6f 63 61  mory by dealloca
5e50: 74 69 6e 67 20 6e 6f 6e 2d 65 73 73 65 6e 74 69  ting non-essenti
5e60: 61 6c 20 6d 65 6d 6f 72 79 0d 0a 20 20 20 20 2f  al memory..    /
5e70: 2f 2f 20 61 6c 6c 6f 63 61 74 69 6f 6e 73 20 68  // allocations h
5e80: 65 6c 64 20 62 79 20 74 68 65 20 64 61 74 61 62  eld by the datab
5e90: 61 73 65 20 6c 69 62 72 61 72 79 2e 20 4d 65 6d  ase library. Mem
5ea0: 6f 72 79 20 75 73 65 64 20 74 6f 20 63 61 63 68  ory used to cach
5eb0: 65 20 64 61 74 61 62 61 73 65 20 70 61 67 65 73  e database pages
5ec0: 0d 0a 20 20 20 20 2f 2f 2f 20 74 6f 20 69 6d 70  ..    /// to imp
5ed0: 72 6f 76 65 20 70 65 72 66 6f 72 6d 61 6e 63 65  rove performance
5ee0: 20 69 73 20 61 6e 20 65 78 61 6d 70 6c 65 20 6f   is an example o
5ef0: 66 20 6e 6f 6e 2d 65 73 73 65 6e 74 69 61 6c 20  f non-essential 
5f00: 6d 65 6d 6f 72 79 2e 20 20 54 68 69 73 20 69 73  memory.  This is
5f10: 20 61 20 6e 6f 2d 6f 70 0d 0a 20 20 20 20 2f 2f   a no-op..    //
5f20: 2f 20 72 65 74 75 72 6e 69 6e 67 20 7a 65 72 6f  / returning zero
5f30: 20 69 66 20 74 68 65 20 53 51 4c 69 74 65 20 63   if the SQLite c
5f40: 6f 72 65 20 6c 69 62 72 61 72 79 20 77 61 73 20  ore library was 
5f50: 6e 6f 74 20 63 6f 6d 70 69 6c 65 64 20 77 69 74  not compiled wit
5f60: 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d 74 69  h the compile-ti
5f70: 6d 65 0d 0a 20 20 20 20 2f 2f 2f 20 6f 70 74 69  me..    /// opti
5f80: 6f 6e 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  on SQLITE_ENABLE
5f90: 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41 47 45 4d 45  _MEMORY_MANAGEME
5fa0: 4e 54 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  NT.  Optionally,
5fb0: 20 61 74 74 65 6d 70 74 73 20 74 6f 20 72 65 73   attempts to res
5fc0: 65 74 20 61 6e 64 2f 6f 72 0d 0a 20 20 20 20 2f  et and/or..    /
5fd0: 2f 2f 20 63 6f 6d 70 61 63 74 20 74 68 65 20 57  // compact the W
5fe0: 69 6e 33 32 20 6e 61 74 69 76 65 20 68 65 61 70  in32 native heap
5ff0: 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e  , if applicable.
6000: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6010: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ary>..    /// <p
6020: 61 72 61 6d 20 6e 61 6d 65 3d 22 6e 42 79 74 65  aram name="nByte
6030: 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65  s">..    /// The
6040: 20 72 65 71 75 65 73 74 65 64 20 6e 75 6d 62 65   requested numbe
6050: 72 20 6f 66 20 62 79 74 65 73 20 74 6f 20 66 72  r of bytes to fr
6060: 65 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ee...    /// </p
6070: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
6080: 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73 65  param name="rese
6090: 74 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e  t">..    /// Non
60a0: 2d 7a 65 72 6f 20 74 6f 20 61 74 74 65 6d 70 74  -zero to attempt
60b0: 20 61 20 68 65 61 70 20 72 65 73 65 74 2e 0d 0a   a heap reset...
60c0: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
60d0: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
60e0: 20 6e 61 6d 65 3d 22 63 6f 6d 70 61 63 74 22 3e   name="compact">
60f0: 0d 0a 20 20 20 20 2f 2f 2f 20 4e 6f 6e 2d 7a 65  ..    /// Non-ze
6100: 72 6f 20 74 6f 20 61 74 74 65 6d 70 74 20 68 65  ro to attempt he
6110: 61 70 20 63 6f 6d 70 61 63 74 69 6f 6e 2e 0d 0a  ap compaction...
6120: 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e      /// </param>
6130: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
6140: 20 6e 61 6d 65 3d 22 6e 46 72 65 65 22 3e 0d 0a   name="nFree">..
6150: 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62      /// The numb
6160: 65 72 20 6f 66 20 62 79 74 65 73 20 61 63 74 75  er of bytes actu
6170: 61 6c 6c 79 20 66 72 65 65 64 2e 20 20 54 68 69  ally freed.  Thi
6180: 73 20 76 61 6c 75 65 20 6d 61 79 20 62 65 20 7a  s value may be z
6190: 65 72 6f 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ero...    /// </
61a0: 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
61b0: 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 72 65 73  <param name="res
61c0: 65 74 4f 6b 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20  etOk">..    /// 
61d0: 54 68 69 73 20 76 61 6c 75 65 20 77 69 6c 6c 20  This value will 
61e0: 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  be non-zero if t
61f0: 68 65 20 68 65 61 70 20 72 65 73 65 74 20 77 61  he heap reset wa
6200: 73 20 73 75 63 63 65 73 73 66 75 6c 2e 0d 0a 20  s successful... 
6210: 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
6220: 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
6230: 6e 61 6d 65 3d 22 6e 4c 61 72 67 65 73 74 22 3e  name="nLargest">
6240: 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 73 69  ..    /// The si
6250: 7a 65 20 6f 66 20 74 68 65 20 6c 61 72 67 65 73  ze of the larges
6260: 74 20 63 6f 6d 6d 69 74 74 65 64 20 66 72 65 65  t committed free
6270: 20 62 6c 6f 63 6b 20 69 6e 20 74 68 65 20 68 65   block in the he
6280: 61 70 2c 20 69 6e 20 62 79 74 65 73 2e 0d 0a 20  ap, in bytes... 
6290: 20 20 20 2f 2f 2f 20 54 68 69 73 20 76 61 6c 75     /// This valu
62a0: 65 20 77 69 6c 6c 20 62 65 20 7a 65 72 6f 20 75  e will be zero u
62b0: 6e 6c 65 73 73 20 68 65 61 70 20 63 6f 6d 70 61  nless heap compa
62c0: 63 74 69 6f 6e 20 69 73 20 65 6e 61 62 6c 65 64  ction is enabled
62d0: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
62e0: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
62f0: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20  turns>..    /// 
6300: 41 20 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74  A standard SQLit
6310: 65 20 72 65 74 75 72 6e 20 63 6f 64 65 20 28 69  e return code (i
6320: 2e 65 2e 20 7a 65 72 6f 20 66 6f 72 20 73 75 63  .e. zero for suc
6330: 63 65 73 73 20 61 6e 64 20 6e 6f 6e 2d 7a 65 72  cess and non-zer
6340: 6f 0d 0a 20 20 20 20 2f 2f 2f 20 66 6f 72 20 66  o..    /// for f
6350: 61 69 6c 75 72 65 29 2e 0d 0a 20 20 20 20 2f 2f  ailure)...    //
6360: 2f 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  / </returns>..  
6370: 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
6380: 63 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  c SQLiteErrorCod
6390: 65 20 53 74 61 74 69 63 52 65 6c 65 61 73 65 4d  e StaticReleaseM
63a0: 65 6d 6f 72 79 28 0d 0a 20 20 20 20 20 20 20 20  emory(..        
63b0: 69 6e 74 20 6e 42 79 74 65 73 2c 0d 0a 20 20 20  int nBytes,..   
63c0: 20 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 2c       bool reset,
63d0: 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c 20 63  ..        bool c
63e0: 6f 6d 70 61 63 74 2c 0d 0a 20 20 20 20 20 20 20  ompact,..       
63f0: 20 72 65 66 20 69 6e 74 20 6e 46 72 65 65 2c 0d   ref int nFree,.
6400: 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
6410: 6c 20 72 65 73 65 74 4f 6b 2c 0d 0a 20 20 20 20  l resetOk,..    
6420: 20 20 20 20 72 65 66 20 75 69 6e 74 20 6e 4c 61      ref uint nLa
6430: 72 67 65 73 74 0d 0a 20 20 20 20 20 20 20 20 29  rgest..        )
6440: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6450: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6460: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
6470: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
6480: 20 20 20 20 20 69 6e 74 20 6e 46 72 65 65 4c 6f       int nFreeLo
6490: 63 61 6c 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  cal = UnsafeNati
64a0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
64b0: 33 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72 79  3_release_memory
64c0: 28 6e 42 79 74 65 73 29 3b 0d 0a 20 20 20 20 20  (nBytes);..     
64d0: 20 20 20 75 69 6e 74 20 6e 4c 61 72 67 65 73 74     uint nLargest
64e0: 4c 6f 63 61 6c 20 3d 20 30 3b 0d 0a 20 20 20 20  Local = 0;..    
64f0: 20 20 20 20 62 6f 6f 6c 20 72 65 73 65 74 4f 6b      bool resetOk
6500: 4c 6f 63 61 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  Local = false;..
6510: 0d 0a 23 69 66 20 21 44 45 42 55 47 20 26 26 20  ..#if !DEBUG && 
6520: 57 49 4e 44 4f 57 53 20 2f 2f 20 4e 4f 54 45 3a  WINDOWS // NOTE:
6530: 20 53 68 6f 75 6c 64 20 62 65 20 22 57 49 4e 33   Should be "WIN3
6540: 32 48 45 41 50 20 26 26 20 21 4d 45 4d 44 45 42  2HEAP && !MEMDEB
6550: 55 47 20 26 26 20 57 49 4e 44 4f 57 53 22 0d 0a  UG && WINDOWS"..
6560: 20 20 20 20 20 20 20 20 69 66 20 28 48 65 6c 70          if (Help
6570: 65 72 4d 65 74 68 6f 64 73 2e 49 73 57 69 6e 64  erMethods.IsWind
6580: 6f 77 73 28 29 29 0d 0a 20 20 20 20 20 20 20 20  ows())..        
6590: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  {..            i
65a0: 66 20 28 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  f ((rc == SQLite
65b0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 26 26  ErrorCode.Ok) &&
65c0: 20 72 65 73 65 74 29 0d 0a 20 20 20 20 20 20 20   reset)..       
65d0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
65e0: 20 20 20 20 20 20 20 20 72 63 20 3d 20 55 6e 73          rc = Uns
65f0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
6600: 2e 73 71 6c 69 74 65 33 5f 77 69 6e 33 32 5f 72  .sqlite3_win32_r
6610: 65 73 65 74 5f 68 65 61 70 28 29 3b 0d 0a 0d 0a  eset_heap();....
6620: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6630: 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
6640: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20  ErrorCode.Ok).. 
6650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6660: 20 20 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 20     resetOkLocal 
6670: 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20  = true;..       
6680: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
6690: 20 20 20 20 20 20 69 66 20 28 28 72 63 20 3d 3d        if ((rc ==
66a0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
66b0: 2e 4f 6b 29 20 26 26 20 63 6f 6d 70 61 63 74 29  .Ok) && compact)
66c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
66d0: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
66e0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
66f0: 65 33 5f 77 69 6e 33 32 5f 63 6f 6d 70 61 63 74  e3_win32_compact
6700: 5f 68 65 61 70 28 72 65 66 20 6e 4c 61 72 67 65  _heap(ref nLarge
6710: 73 74 4c 6f 63 61 6c 29 3b 0d 0a 20 20 20 20 20  stLocal);..     
6720: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c     }..        el
6730: 73 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  se..#endif..    
6740: 20 20 20 20 69 66 20 28 72 65 73 65 74 20 7c 7c      if (reset ||
6750: 20 63 6f 6d 70 61 63 74 29 0d 0a 20 20 20 20 20   compact)..     
6760: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
6770: 20 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72    rc = SQLiteErr
6780: 6f 72 43 6f 64 65 2e 4e 6f 74 46 6f 75 6e 64 3b  orCode.NotFound;
6790: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
67a0: 20 20 20 20 20 20 20 6e 46 72 65 65 20 3d 20 6e         nFree = n
67b0: 46 72 65 65 4c 6f 63 61 6c 3b 0d 0a 20 20 20 20  FreeLocal;..    
67c0: 20 20 20 20 6e 4c 61 72 67 65 73 74 20 3d 20 6e      nLargest = n
67d0: 4c 61 72 67 65 73 74 4c 6f 63 61 6c 3b 0d 0a 20  LargestLocal;.. 
67e0: 20 20 20 20 20 20 20 72 65 73 65 74 4f 6b 20 3d         resetOk =
67f0: 20 72 65 73 65 74 4f 6b 4c 6f 63 61 6c 3b 0d 0a   resetOkLocal;..
6800: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
6810: 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20   rc;..    }.... 
6820: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
6830: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
6840: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
6850: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
6860: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
6870: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d   with different.
6880: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75  .    /// configu
6890: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20  ration options. 
68a0: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
68b0: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
68c0: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
68d0: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
68e0: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75  >..    /// <retu
68f0: 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20 73 74  rns>Returns a st
6900: 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20 72 65  andard SQLite re
6910: 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65 74 75  sult code.</retu
6920: 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e  rns>..    intern
6930: 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69  al override SQLi
6940: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 68 75 74  teErrorCode Shut
6950: 64 6f 77 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  down()..    {.. 
6960: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 74         return St
6970: 61 74 69 63 53 68 75 74 64 6f 77 6e 28 66 61 6c  aticShutdown(fal
6980: 73 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  se);..    }.... 
6990: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
69a0: 0d 0a 20 20 20 20 2f 2f 2f 20 53 68 75 74 64 6f  ..    /// Shutdo
69b0: 77 6e 20 74 68 65 20 53 51 4c 69 74 65 20 65 6e  wn the SQLite en
69c0: 67 69 6e 65 20 73 6f 20 74 68 61 74 20 69 74 20  gine so that it 
69d0: 63 61 6e 20 62 65 20 72 65 73 74 61 72 74 65 64  can be restarted
69e0: 20 77 69 74 68 20 64 69 66 66 65 72 65 6e 74 0d   with different.
69f0: 0a 20 20 20 20 2f 2f 2f 20 63 6f 6e 66 69 67 75  .    /// configu
6a00: 72 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 73 2e 20  ration options. 
6a10: 20 57 65 20 64 65 70 65 6e 64 20 6f 6e 20 61 75   We depend on au
6a20: 74 6f 20 69 6e 69 74 69 61 6c 69 7a 61 74 69 6f  to initializatio
6a30: 6e 20 74 6f 20 72 65 63 6f 76 65 72 2e 0d 0a 20  n to recover... 
6a40: 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
6a50: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
6a60: 6d 20 6e 61 6d 65 3d 22 64 69 72 65 63 74 6f 72  m name="director
6a70: 69 65 73 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4e  ies">..    /// N
6a80: 6f 6e 2d 7a 65 72 6f 20 74 6f 20 72 65 73 65 74  on-zero to reset
6a90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 61 6e   the database an
6aa0: 64 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  d temporary dire
6ab0: 63 74 6f 72 69 65 73 20 74 6f 20 74 68 65 69 72  ctories to their
6ac0: 0d 0a 20 20 20 20 2f 2f 2f 20 64 65 66 61 75 6c  ..    /// defaul
6ad0: 74 20 76 61 6c 75 65 73 2c 20 77 68 69 63 68 20  t values, which 
6ae0: 73 68 6f 75 6c 64 20 62 65 20 6e 75 6c 6c 20 66  should be null f
6af0: 6f 72 20 62 6f 74 68 2e 20 20 54 68 69 73 20 70  or both.  This p
6b00: 61 72 61 6d 65 74 65 72 20 68 61 73 20 6e 6f 0d  arameter has no.
6b10: 0a 20 20 20 20 2f 2f 2f 20 65 66 66 65 63 74 20  .    /// effect 
6b20: 6f 6e 20 6e 6f 6e 2d 57 69 6e 64 6f 77 73 20 6f  on non-Windows o
6b30: 70 65 72 61 74 69 6e 67 20 73 79 73 74 65 6d 73  perating systems
6b40: 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72  ...    /// </par
6b50: 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65  am>..    /// <re
6b60: 74 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 61 20  turns>Returns a 
6b70: 73 74 61 6e 64 61 72 64 20 53 51 4c 69 74 65 20  standard SQLite 
6b80: 72 65 73 75 6c 74 20 63 6f 64 65 2e 3c 2f 72 65  result code.</re
6b90: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65  turns>..    inte
6ba0: 72 6e 61 6c 20 73 74 61 74 69 63 20 53 51 4c 69  rnal static SQLi
6bb0: 74 65 45 72 72 6f 72 43 6f 64 65 20 53 74 61 74  teErrorCode Stat
6bc0: 69 63 53 68 75 74 64 6f 77 6e 28 0d 0a 20 20 20  icShutdown(..   
6bd0: 20 20 20 20 20 62 6f 6f 6c 20 64 69 72 65 63 74       bool direct
6be0: 6f 72 69 65 73 0d 0a 20 20 20 20 20 20 20 20 29  ories..        )
6bf0: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
6c00: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
6c10: 20 72 63 20 3d 20 53 51 4c 69 74 65 45 72 72 6f   rc = SQLiteErro
6c20: 72 43 6f 64 65 2e 4f 6b 3b 0d 0a 0d 0a 20 20 20  rCode.Ok;....   
6c30: 20 20 20 20 20 69 66 20 28 64 69 72 65 63 74 6f       if (directo
6c40: 72 69 65 73 29 0d 0a 20 20 20 20 20 20 20 20 7b  ries)..        {
6c50: 0d 0a 23 69 66 20 57 49 4e 44 4f 57 53 0d 0a 20  ..#if WINDOWS.. 
6c60: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 48             if (H
6c70: 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57  elperMethods.IsW
6c80: 69 6e 64 6f 77 73 28 29 29 0d 0a 20 20 20 20 20  indows())..     
6c90: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
6ca0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72 63            if (rc
6cb0: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
6cc0: 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20  ode.Ok)..       
6cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 72 63 20               rc 
6ce0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
6cf0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 77 69  thods.sqlite3_wi
6d00: 6e 33 32 5f 73 65 74 5f 64 69 72 65 63 74 6f 72  n32_set_director
6d10: 79 28 31 2c 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20  y(1, null);.... 
6d20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69                 i
6d30: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
6d40: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
6d50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d60: 20 20 72 63 20 3d 20 55 6e 73 61 66 65 4e 61 74    rc = UnsafeNat
6d70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
6d80: 65 33 5f 77 69 6e 33 32 5f 73 65 74 5f 64 69 72  e3_win32_set_dir
6d90: 65 63 74 6f 72 79 28 32 2c 20 6e 75 6c 6c 29 3b  ectory(2, null);
6da0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
6db0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73  .            els
6dc0: 65 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  e..#endif..     
6dd0: 20 20 20 20 20 20 20 7b 0d 0a 23 69 66 20 21 4e         {..#if !N
6de0: 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30 20 26 26  ET_COMPACT_20 &&
6df0: 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f   TRACE_CONNECTIO
6e00: 4e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  N..             
6e10: 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69     Trace.WriteLi
6e20: 6e 65 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ne(..           
6e30: 20 20 20 20 20 20 20 20 20 22 53 68 75 74 64 6f           "Shutdo
6e40: 77 6e 3a 20 43 61 6e 6e 6f 74 20 72 65 73 65 74  wn: Cannot reset
6e50: 20 64 69 72 65 63 74 6f 72 69 65 73 20 6f 6e 20   directories on 
6e60: 74 68 69 73 20 70 6c 61 74 66 6f 72 6d 2e 22 29  this platform.")
6e70: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
6e80: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
6e90: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
6ea0: 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65 45  f (rc == SQLiteE
6eb0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
6ec0: 20 20 20 20 20 20 20 20 20 20 72 63 20 3d 20 55            rc = U
6ed0: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
6ee0: 64 73 2e 73 71 6c 69 74 65 33 5f 73 68 75 74 64  ds.sqlite3_shutd
6ef0: 6f 77 6e 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  own();....      
6f00: 20 20 72 65 74 75 72 6e 20 72 63 3b 0d 0a 20 20    return rc;..  
6f10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
6f20: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
6f30: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
6f40: 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20 6e  the associated n
6f50: 61 74 69 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  ative connection
6f60: 20 68 61 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e   handle is open.
6f70: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
6f80: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
6f90: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
6fa0: 20 4e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68 65   Non-zero if the
6fb0: 20 61 73 73 6f 63 69 61 74 65 64 20 6e 61 74 69   associated nati
6fc0: 76 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  ve connection ha
6fd0: 6e 64 6c 65 20 69 73 20 6f 70 65 6e 2e 0d 0a 20  ndle is open... 
6fe0: 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e 73     /// </returns
6ff0: 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  >..    internal 
7000: 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73  override bool Is
7010: 4f 70 65 6e 28 29 0d 0a 20 20 20 20 7b 0d 0a 20  Open()..    {.. 
7020: 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 5f         return (_
7030: 73 71 6c 20 21 3d 20 6e 75 6c 6c 29 20 26 26 20  sql != null) && 
7040: 21 5f 73 71 6c 2e 49 73 49 6e 76 61 6c 69 64 20  !_sql.IsInvalid 
7050: 26 26 20 21 5f 73 71 6c 2e 49 73 43 6c 6f 73 65  && !_sql.IsClose
7060: 64 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  d;..    }....   
7070: 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
7080: 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20      /// Returns 
7090: 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66  the fully qualif
70a0: 69 65 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c  ied path and fil
70b0: 65 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63  e name for the c
70c0: 75 72 72 65 6e 74 6c 79 20 6f 70 65 6e 0d 0a 20  urrently open.. 
70d0: 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65 2c     /// database,
70e0: 20 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f   if any...    //
70f0: 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
7100: 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
7110: 65 3d 22 64 62 4e 61 6d 65 22 3e 0d 0a 20 20 20  e="dbName">..   
7120: 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
7130: 20 74 68 65 20 61 74 74 61 63 68 65 64 20 64 61   the attached da
7140: 74 61 62 61 73 65 20 74 6f 20 71 75 65 72 79 2e  tabase to query.
7150: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
7160: 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
7170: 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54  urns>..    /// T
7180: 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69  he fully qualifi
7190: 65 64 20 70 61 74 68 20 61 6e 64 20 66 69 6c 65  ed path and file
71a0: 20 6e 61 6d 65 20 66 6f 72 20 74 68 65 20 63 75   name for the cu
71b0: 72 72 65 6e 74 6c 79 20 6f 70 65 6e 20 64 61 74  rrently open dat
71c0: 61 62 61 73 65 2c 0d 0a 20 20 20 20 2f 2f 2f 20  abase,..    /// 
71d0: 69 66 20 61 6e 79 2e 0d 0a 20 20 20 20 2f 2f 2f  if any...    ///
71e0: 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
71f0: 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
7200: 64 65 20 73 74 72 69 6e 67 20 47 65 74 46 69 6c  de string GetFil
7210: 65 4e 61 6d 65 28 73 74 72 69 6e 67 20 64 62 4e  eName(string dbN
7220: 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ame)..    {..   
7230: 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d       if (_sql ==
7240: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
7250: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
7260: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75  ....        retu
7270: 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
7280: 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
7290: 6f 64 73 2e 73 71 6c 69 74 65 33 5f 64 62 5f 66  ods.sqlite3_db_f
72a0: 69 6c 65 6e 61 6d 65 5f 62 79 74 65 73 28 0d 0a  ilename_bytes(..
72b0: 20 20 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c              _sql
72c0: 2c 20 54 6f 55 54 46 38 28 64 62 4e 61 6d 65 29  , ToUTF8(dbName)
72d0: 29 2c 20 2d 31 29 3b 0d 0a 20 20 20 20 7d 0d 0a  ), -1);..    }..
72e0: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
72f0: 76 65 72 72 69 64 65 20 76 6f 69 64 20 4f 70 65  verride void Ope
7300: 6e 28 73 74 72 69 6e 67 20 73 74 72 46 69 6c 65  n(string strFile
7310: 6e 61 6d 65 2c 20 73 74 72 69 6e 67 20 76 66 73  name, string vfs
7320: 4e 61 6d 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  Name, SQLiteConn
7330: 65 63 74 69 6f 6e 46 6c 61 67 73 20 63 6f 6e 6e  ectionFlags conn
7340: 65 63 74 69 6f 6e 46 6c 61 67 73 2c 20 53 51 4c  ectionFlags, SQL
7350: 69 74 65 4f 70 65 6e 46 6c 61 67 73 45 6e 75 6d  iteOpenFlagsEnum
7360: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 69 6e 74 20   openFlags, int 
7370: 6d 61 78 50 6f 6f 6c 53 69 7a 65 2c 20 62 6f 6f  maxPoolSize, boo
7380: 6c 20 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20  l usePool)..    
7390: 7b 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20  {..      //..   
73a0: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 49 66 20 74     // NOTE: If t
73b0: 68 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  he database conn
73c0: 65 63 74 69 6f 6e 20 69 73 20 63 75 72 72 65 6e  ection is curren
73d0: 74 6c 79 20 6f 70 65 6e 2c 20 61 74 74 65 6d 70  tly open, attemp
73e0: 74 20 74 6f 0d 0a 20 20 20 20 20 20 2f 2f 20 20  t to..      //  
73f0: 20 20 20 20 20 63 6c 6f 73 65 20 69 74 20 6e 6f       close it no
7400: 77 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62 65  w.  This must be
7410: 20 64 6f 6e 65 20 62 65 63 61 75 73 65 20 74 68   done because th
7420: 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 72 0d 0a  e file name or..
7430: 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 6f        //       o
7440: 74 68 65 72 20 70 61 72 61 6d 65 74 65 72 73 20  ther parameters 
7450: 74 68 61 74 20 6d 61 79 20 69 6d 70 61 63 74 20  that may impact 
7460: 74 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 64  the underlying d
7470: 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20 2f  atabase..      /
7480: 2f 20 20 20 20 20 20 20 63 6f 6e 6e 65 63 74 69  /       connecti
7490: 6f 6e 20 6d 61 79 20 68 61 76 65 20 63 68 61 6e  on may have chan
74a0: 67 65 64 2e 0d 0a 20 20 20 20 20 20 2f 2f 0d 0a  ged...      //..
74b0: 20 20 20 20 20 20 69 66 20 28 5f 73 71 6c 20 21        if (_sql !
74c0: 3d 20 6e 75 6c 6c 29 20 43 6c 6f 73 65 28 74 72  = null) Close(tr
74d0: 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f  ue);....      //
74e0: 0d 0a 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a  ..      // NOTE:
74f0: 20 49 66 20 74 68 65 20 63 6f 6e 6e 65 63 74 69   If the connecti
7500: 6f 6e 20 77 61 73 20 6e 6f 74 20 63 6c 6f 73 65  on was not close
7510: 64 20 73 75 63 63 65 73 73 66 75 6c 6c 79 2c 20  d successfully, 
7520: 74 68 72 6f 77 20 61 6e 0d 0a 20 20 20 20 20 20  throw an..      
7530: 2f 2f 20 20 20 20 20 20 20 65 78 63 65 70 74 69  //       excepti
7540: 6f 6e 20 6e 6f 77 2e 0d 0a 20 20 20 20 20 20 2f  on now...      /
7550: 2f 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 73 71  /..      if (_sq
7560: 6c 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  l != null)..    
7570: 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
7580: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
7590: 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64  "connection hand
75a0: 6c 65 20 69 73 20 73 74 69 6c 6c 20 61 63 74 69  le is still acti
75b0: 76 65 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 5f  ve");....      _
75c0: 75 73 65 50 6f 6f 6c 20 3d 20 75 73 65 50 6f 6f  usePool = usePoo
75d0: 6c 3b 0d 0a 20 20 20 20 20 20 5f 66 69 6c 65 4e  l;..      _fileN
75e0: 61 6d 65 20 3d 20 73 74 72 46 69 6c 65 6e 61 6d  ame = strFilenam
75f0: 65 3b 0d 0a 20 20 20 20 20 20 5f 66 6c 61 67 73  e;..      _flags
7600: 20 3d 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61   = connectionFla
7610: 67 73 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20  gs;....      if 
7620: 28 75 73 65 50 6f 6f 6c 29 0d 0a 20 20 20 20 20  (usePool)..     
7630: 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f 73 71 6c   {..        _sql
7640: 20 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   = SQLiteConnect
7650: 69 6f 6e 50 6f 6f 6c 2e 52 65 6d 6f 76 65 28 73  ionPool.Remove(s
7660: 74 72 46 69 6c 65 6e 61 6d 65 2c 20 6d 61 78 50  trFilename, maxP
7670: 6f 6f 6c 53 69 7a 65 2c 20 6f 75 74 20 5f 70 6f  oolSize, out _po
7680: 6f 6c 56 65 72 73 69 6f 6e 29 3b 0d 0a 0d 0a 20  olVersion);.... 
7690: 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
76a0: 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
76b0: 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e  d(null, new Conn
76c0: 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
76d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
76e0: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
76f0: 65 6e 74 54 79 70 65 2e 4f 70 65 6e 65 64 46 72  entType.OpenedFr
7700: 6f 6d 50 6f 6f 6c 2c 20 6e 75 6c 6c 2c 20 6e 75  omPool, null, nu
7710: 6c 6c 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll,..           
7720: 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20 5f 73 71   null, null, _sq
7730: 6c 2c 20 73 74 72 46 69 6c 65 6e 61 6d 65 2c 20  l, strFilename, 
7740: 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a  new object[] {..
7750: 20 20 20 20 20 20 20 20 20 20 20 20 74 79 70 65              type
7760: 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 73 74 72  of(SQLite3), str
7770: 46 69 6c 65 6e 61 6d 65 2c 20 76 66 73 4e 61 6d  Filename, vfsNam
7780: 65 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  e, connectionFla
7790: 67 73 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs,..           
77a0: 20 6f 70 65 6e 46 6c 61 67 73 2c 20 6d 61 78 50   openFlags, maxP
77b0: 6f 6f 6c 53 69 7a 65 2c 20 75 73 65 50 6f 6f 6c  oolSize, usePool
77c0: 2c 20 5f 70 6f 6f 6c 56 65 72 73 69 6f 6e 20 7d  , _poolVersion }
77d0: 29 29 3b 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f  ));....#if !NET_
77e0: 43 4f 4d 50 41 43 54 5f 32 30 20 26 26 20 54 52  COMPACT_20 && TR
77f0: 41 43 45 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a  ACE_CONNECTION..
7800: 20 20 20 20 20 20 20 20 54 72 61 63 65 2e 57 72          Trace.Wr
7810: 69 74 65 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65  iteLine(HelperMe
7820: 74 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d  thods.StringForm
7830: 61 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  at(..           
7840: 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72   CultureInfo.Cur
7850: 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20  rentCulture,..  
7860: 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 20            "Open 
7870: 28 50 6f 6f 6c 29 3a 20 7b 30 7d 22 2c 20 48 61  (Pool): {0}", Ha
7880: 6e 64 6c 65 54 6f 53 74 72 69 6e 67 28 29 29 29  ndleToString()))
7890: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20  ;..#endif..     
78a0: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28   }....      if (
78b0: 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  _sql == null).. 
78c0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
78d0: 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  try..        {..
78e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 64              // d
78f0: 6f 20 6e 6f 74 68 69 6e 67 2e 0d 0a 20 20 20 20  o nothing...    
7900: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66      }..        f
7910: 69 6e 61 6c 6c 79 20 2f 2a 20 4e 4f 54 45 3a 20  inally /* NOTE: 
7920: 54 68 72 65 61 64 2e 41 62 6f 72 74 28 29 20 70  Thread.Abort() p
7930: 72 6f 74 65 63 74 69 6f 6e 2e 20 2a 2f 0d 0a 20  rotection. */.. 
7940: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
7950: 20 20 20 20 49 6e 74 50 74 72 20 64 62 20 3d 20      IntPtr db = 
7960: 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
7970: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
7980: 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69  rorCode n;....#i
7990: 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
79a0: 52 44 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  RD..          in
79b0: 74 20 65 78 74 46 75 6e 63 73 20 3d 20 28 28 63  t extFuncs = ((c
79c0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 26  onnectionFlags &
79d0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
79e0: 6e 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69  nFlags.NoExtensi
79f0: 6f 6e 46 75 6e 63 74 69 6f 6e 73 29 20 21 3d 20  onFunctions) != 
7a00: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
7a10: 46 6c 61 67 73 2e 4e 6f 45 78 74 65 6e 73 69 6f  Flags.NoExtensio
7a20: 6e 46 75 6e 63 74 69 6f 6e 73 29 20 3f 20 31 20  nFunctions) ? 1 
7a30: 3a 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  : 0;....        
7a40: 20 20 69 66 20 28 65 78 74 46 75 6e 63 73 20 21    if (extFuncs !
7a50: 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0)..          
7a60: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
7a70: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7a80: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
7a90: 70 65 6e 5f 69 6e 74 65 72 6f 70 28 54 6f 55 54  pen_interop(ToUT
7aa0: 46 38 28 73 74 72 46 69 6c 65 6e 61 6d 65 29 2c  F8(strFilename),
7ab0: 20 54 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29   ToUTF8(vfsName)
7ac0: 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 65 78 74  , openFlags, ext
7ad0: 46 75 6e 63 73 2c 20 72 65 66 20 64 62 29 3b 0d  Funcs, ref db);.
7ae0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  .          }..  
7af0: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23 65          else..#e
7b00: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
7b10: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e  {..            n
7b20: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
7b30: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6f  ethods.sqlite3_o
7b40: 70 65 6e 5f 76 32 28 54 6f 55 54 46 38 28 73 74  pen_v2(ToUTF8(st
7b50: 72 46 69 6c 65 6e 61 6d 65 29 2c 20 72 65 66 20  rFilename), ref 
7b60: 64 62 2c 20 6f 70 65 6e 46 6c 61 67 73 2c 20 54  db, openFlags, T
7b70: 6f 55 54 46 38 28 76 66 73 4e 61 6d 65 29 29 3b  oUTF8(vfsName));
7b80: 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d  ..          }...
7b90: 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43  .#if !NET_COMPAC
7ba0: 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43 4f  T_20 && TRACE_CO
7bb0: 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20 20  NNECTION..      
7bc0: 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c      Trace.WriteL
7bd0: 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64  ine(HelperMethod
7be0: 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d  s.StringFormat(.
7bf0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43  .              C
7c00: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
7c10: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
7c20: 20 20 20 20 20 20 20 20 20 20 22 4f 70 65 6e 3a            "Open:
7c30: 20 7b 30 7d 22 2c 20 64 62 29 29 3b 0d 0a 23 65   {0}", db));..#e
7c40: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
7c50: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
7c60: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
7c70: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
7c80: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c  xception(n, null
7c90: 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 5f 73  );..          _s
7ca0: 71 6c 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 43  ql = new SQLiteC
7cb0: 6f 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 28  onnectionHandle(
7cc0: 64 62 2c 20 74 72 75 65 29 3b 0d 0a 20 20 20 20  db, true);..    
7cd0: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 6c      }..        l
7ce0: 6f 63 6b 20 28 5f 73 71 6c 29 20 7b 20 2f 2a 20  ock (_sql) { /* 
7cf0: 48 41 43 4b 3a 20 46 6f 72 63 65 20 74 68 65 20  HACK: Force the 
7d00: 53 79 6e 63 42 6c 6f 63 6b 20 74 6f 20 62 65 20  SyncBlock to be 
7d10: 22 63 72 65 61 74 65 64 22 20 6e 6f 77 2e 20 2a  "created" now. *
7d20: 2f 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53  / }....        S
7d30: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 2e  QLiteConnection.
7d40: 4f 6e 43 68 61 6e 67 65 64 28 6e 75 6c 6c 2c 20  OnChanged(null, 
7d50: 6e 65 77 20 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  new ConnectionEv
7d60: 65 6e 74 41 72 67 73 28 0d 0a 20 20 20 20 20 20  entArgs(..      
7d70: 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e        SQLiteConn
7d80: 65 63 74 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e  ectionEventType.
7d90: 4e 65 77 43 72 69 74 69 63 61 6c 48 61 6e 64 6c  NewCriticalHandl
7da0: 65 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20 20 20 20  e, null,..      
7db0: 20 20 20 20 20 20 6e 75 6c 6c 2c 20 6e 75 6c 6c        null, null
7dc0: 2c 20 6e 75 6c 6c 2c 20 5f 73 71 6c 2c 20 73 74  , null, _sql, st
7dd0: 72 46 69 6c 65 6e 61 6d 65 2c 20 6e 65 77 20 6f  rFilename, new o
7de0: 62 6a 65 63 74 5b 5d 20 7b 0d 0a 20 20 20 20 20  bject[] {..     
7df0: 20 20 20 20 20 20 20 74 79 70 65 6f 66 28 53 51         typeof(SQ
7e00: 4c 69 74 65 33 29 2c 20 73 74 72 46 69 6c 65 6e  Lite3), strFilen
7e10: 61 6d 65 2c 20 76 66 73 4e 61 6d 65 2c 20 63 6f  ame, vfsName, co
7e20: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2c 0d 0a  nnectionFlags,..
7e30: 20 20 20 20 20 20 20 20 20 20 20 20 6f 70 65 6e              open
7e40: 46 6c 61 67 73 2c 20 6d 61 78 50 6f 6f 6c 53 69  Flags, maxPoolSi
7e50: 7a 65 2c 20 75 73 65 50 6f 6f 6c 20 7d 29 29 3b  ze, usePool }));
7e60: 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  ..      }....   
7e70: 20 20 20 2f 2f 20 42 69 6e 64 20 66 75 6e 63 74     // Bind funct
7e80: 69 6f 6e 73 20 74 6f 20 74 68 69 73 20 63 6f 6e  ions to this con
7e90: 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 61 6e 79  nection.  If any
7ea0: 20 70 72 65 76 69 6f 75 73 20 66 75 6e 63 74 69   previous functi
7eb0: 6f 6e 73 20 6f 66 20 74 68 65 20 73 61 6d 65 20  ons of the same 
7ec0: 6e 61 6d 65 0d 0a 20 20 20 20 20 20 2f 2f 20 77  name..      // w
7ed0: 65 72 65 20 61 6c 72 65 61 64 79 20 62 6f 75 6e  ere already boun
7ee0: 64 2c 20 74 68 65 6e 20 74 68 65 20 6e 65 77 20  d, then the new 
7ef0: 62 69 6e 64 69 6e 67 73 20 72 65 70 6c 61 63 65  bindings replace
7f00: 20 74 68 65 20 6f 6c 64 2e 0d 0a 20 20 20 20 20   the old...     
7f10: 20 69 66 20 28 28 63 6f 6e 6e 65 63 74 69 6f 6e   if ((connection
7f20: 46 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  Flags & SQLiteCo
7f30: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e 6f  nnectionFlags.No
7f40: 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 29 20 21  BindFunctions) !
7f50: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
7f60: 6f 6e 46 6c 61 67 73 2e 4e 6f 42 69 6e 64 46 75  onFlags.NoBindFu
7f70: 6e 63 74 69 6f 6e 73 29 0d 0a 20 20 20 20 20 20  nctions)..      
7f80: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  {..          if 
7f90: 28 5f 66 75 6e 63 74 69 6f 6e 73 20 3d 3d 20 6e  (_functions == n
7fa0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
7fb0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 20 3d      _functions =
7fc0: 20 6e 65 77 20 44 69 63 74 69 6f 6e 61 72 79 3c   new Dictionary<
7fd0: 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74  SQLiteFunctionAt
7fe0: 74 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46  tribute, SQLiteF
7ff0: 75 6e 63 74 69 6f 6e 3e 28 29 3b 0d 0a 0d 0a 20  unction>();.... 
8000: 20 20 20 20 20 20 20 20 20 66 6f 72 65 61 63 68           foreach
8010: 20 28 4b 65 79 56 61 6c 75 65 50 61 69 72 3c 53   (KeyValuePair<S
8020: 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e 41 74 74  QLiteFunctionAtt
8030: 72 69 62 75 74 65 2c 20 53 51 4c 69 74 65 46 75  ribute, SQLiteFu
8040: 6e 63 74 69 6f 6e 3e 20 70 61 69 72 0d 0a 20 20  nction> pair..  
8050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8060: 69 6e 20 53 51 4c 69 74 65 46 75 6e 63 74 69 6f  in SQLiteFunctio
8070: 6e 2e 42 69 6e 64 46 75 6e 63 74 69 6f 6e 73 28  n.BindFunctions(
8080: 74 68 69 73 2c 20 63 6f 6e 6e 65 63 74 69 6f 6e  this, connection
8090: 46 6c 61 67 73 29 29 0d 0a 20 20 20 20 20 20 20  Flags))..       
80a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
80b0: 20 20 20 20 5f 66 75 6e 63 74 69 6f 6e 73 5b 70      _functions[p
80c0: 61 69 72 2e 4b 65 79 5d 20 3d 20 70 61 69 72 2e  air.Key] = pair.
80d0: 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20 20 20  Value;..        
80e0: 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a    }..      }....
80f0: 20 20 20 20 20 20 53 65 74 54 69 6d 65 6f 75 74        SetTimeout
8100: 28 30 29 3b 0d 0a 20 20 20 20 20 20 47 43 2e 4b  (0);..      GC.K
8110: 65 65 70 41 6c 69 76 65 28 5f 73 71 6c 29 3b 0d  eepAlive(_sql);.
8120: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8130: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8140: 76 6f 69 64 20 43 6c 65 61 72 50 6f 6f 6c 28 29  void ClearPool()
8150: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53  ..    {..      S
8160: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 50  QLiteConnectionP
8170: 6f 6f 6c 2e 43 6c 65 61 72 50 6f 6f 6c 28 5f 66  ool.ClearPool(_f
8180: 69 6c 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d  ileName);..    }
8190: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
81a0: 20 6f 76 65 72 72 69 64 65 20 69 6e 74 20 43 6f   override int Co
81b0: 75 6e 74 50 6f 6f 6c 28 29 0d 0a 20 20 20 20 7b  untPool()..    {
81c0: 0d 0a 20 20 20 20 20 20 20 20 44 69 63 74 69 6f  ..        Dictio
81d0: 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 69 6e 74  nary<string, int
81e0: 3e 20 63 6f 75 6e 74 73 20 3d 20 6e 75 6c 6c 3b  > counts = null;
81f0: 0d 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6f 70  ..        int op
8200: 65 6e 43 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20  enCount = 0;..  
8210: 20 20 20 20 20 20 69 6e 74 20 63 6c 6f 73 65 43        int closeC
8220: 6f 75 6e 74 20 3d 20 30 3b 0d 0a 20 20 20 20 20  ount = 0;..     
8230: 20 20 20 69 6e 74 20 74 6f 74 61 6c 43 6f 75 6e     int totalCoun
8240: 74 20 3d 20 30 3b 0d 0a 0d 0a 20 20 20 20 20 20  t = 0;....      
8250: 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69    SQLiteConnecti
8260: 6f 6e 50 6f 6f 6c 2e 47 65 74 43 6f 75 6e 74 73  onPool.GetCounts
8270: 28 5f 66 69 6c 65 4e 61 6d 65 2c 0d 0a 20 20 20  (_fileName,..   
8280: 20 20 20 20 20 20 20 20 20 72 65 66 20 63 6f 75           ref cou
8290: 6e 74 73 2c 20 72 65 66 20 6f 70 65 6e 43 6f 75  nts, ref openCou
82a0: 6e 74 2c 20 72 65 66 20 63 6c 6f 73 65 43 6f 75  nt, ref closeCou
82b0: 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  nt,..           
82c0: 20 72 65 66 20 74 6f 74 61 6c 43 6f 75 6e 74 29   ref totalCount)
82d0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74  ;....        ret
82e0: 75 72 6e 20 74 6f 74 61 6c 43 6f 75 6e 74 3b 0d  urn totalCount;.
82f0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
8300: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
8310: 76 6f 69 64 20 53 65 74 54 69 6d 65 6f 75 74 28  void SetTimeout(
8320: 69 6e 74 20 6e 54 69 6d 65 6f 75 74 4d 53 29 0d  int nTimeoutMS).
8330: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 49 6e  .    {..      In
8340: 74 50 74 72 20 64 62 20 3d 20 5f 73 71 6c 3b 0d  tPtr db = _sql;.
8350: 0a 20 20 20 20 20 20 69 66 20 28 64 62 20 3d 3d  .      if (db ==
8360: 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 20 74 68   IntPtr.Zero) th
8370: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8380: 63 65 70 74 69 6f 6e 28 22 6e 6f 20 63 6f 6e 6e  ception("no conn
8390: 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65 20 61 76  ection handle av
83a0: 61 69 6c 61 62 6c 65 22 29 3b 0d 0a 20 20 20 20  ailable");..    
83b0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
83c0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
83d0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
83e0: 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64  3_busy_timeout(d
83f0: 62 2c 20 6e 54 69 6d 65 6f 75 74 4d 53 29 3b 0d  b, nTimeoutMS);.
8400: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
8410: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
8420: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
8430: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
8440: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
8450: 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
8460: 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
8470: 65 20 62 6f 6f 6c 20 53 74 65 70 28 53 51 4c 69  e bool Step(SQLi
8480: 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
8490: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
84a0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
84b0: 6e 3b 0d 0a 20 20 20 20 20 20 52 61 6e 64 6f 6d  n;..      Random
84c0: 20 72 6e 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20   rnd = null;..  
84d0: 20 20 20 20 75 69 6e 74 20 73 74 61 72 74 74 69      uint startti
84e0: 63 6b 20 3d 20 28 75 69 6e 74 29 45 6e 76 69 72  ck = (uint)Envir
84f0: 6f 6e 6d 65 6e 74 2e 54 69 63 6b 43 6f 75 6e 74  onment.TickCount
8500: 3b 0d 0a 20 20 20 20 20 20 75 69 6e 74 20 74 69  ;..      uint ti
8510: 6d 65 6f 75 74 20 3d 20 28 75 69 6e 74 29 28 73  meout = (uint)(s
8520: 74 6d 74 2e 5f 63 6f 6d 6d 61 6e 64 2e 5f 63 6f  tmt._command._co
8530: 6d 6d 61 6e 64 54 69 6d 65 6f 75 74 20 2a 20 31  mmandTimeout * 1
8540: 30 30 30 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 52  000);....      R
8550: 65 73 65 74 43 61 6e 63 65 6c 43 6f 75 6e 74 28  esetCancelCount(
8560: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 77 68 69 6c  );....      whil
8570: 65 20 28 74 72 75 65 29 0d 0a 20 20 20 20 20 20  e (true)..      
8580: 7b 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d 0a  {..        try..
8590: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
85a0: 20 20 20 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74         // do not
85b0: 68 69 6e 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d  hing...        }
85c0: 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c  ..        finall
85d0: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
85e0: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
85f0: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
8600: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 6e    {..          n
8610: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
8620: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 73  ethods.sqlite3_s
8630: 74 65 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  tep(stmt._sqlite
8640: 5f 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20 20 20  _stmt);..       
8650: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
8660: 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72   (ShouldThrowFor
8670: 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20  Cancel())..     
8680: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
8690: 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69    if ((n == SQLi
86a0: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
86b0: 7c 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ||..            
86c0: 20 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65      (n == SQLite
86d0: 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c  ErrorCode.Row) |
86e0: 7c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  |..             
86f0: 20 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45     (n == SQLiteE
8700: 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d  rrorCode.Done)).
8710: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8730: 6e 20 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43  n = SQLiteErrorC
8740: 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a  ode.Interrupt;..
8750: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
8760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
8770: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
8780: 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b  eption(n, null);
8790: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
87a0: 20 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20         if (n == 
87b0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
87c0: 49 6e 74 65 72 72 75 70 74 29 20 72 65 74 75 72  Interrupt) retur
87d0: 6e 20 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20  n false;..      
87e0: 20 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74    if (n == SQLit
87f0: 65 45 72 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20  eErrorCode.Row) 
8800: 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a 20 20  return true;..  
8810: 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53        if (n == S
8820: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 44  QLiteErrorCode.D
8830: 6f 6e 65 29 20 72 65 74 75 72 6e 20 66 61 6c 73  one) return fals
8840: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  e;....        if
8850: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
8860: 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20 20 20  orCode.Ok)..    
8870: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8880: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
8890: 20 72 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20   r;....         
88a0: 20 2f 2f 20 41 6e 20 65 72 72 6f 72 20 6f 63 63   // An error occ
88b0: 75 72 72 65 64 2c 20 61 74 74 65 6d 70 74 20 74  urred, attempt t
88c0: 6f 20 72 65 73 65 74 20 74 68 65 20 73 74 61 74  o reset the stat
88d0: 65 6d 65 6e 74 2e 20 20 49 66 20 74 68 65 20 72  ement.  If the r
88e0: 65 73 65 74 20 77 6f 72 6b 65 64 20 62 65 63 61  eset worked beca
88f0: 75 73 65 20 74 68 65 0d 0a 20 20 20 20 20 20 20  use the..       
8900: 20 20 20 2f 2f 20 73 63 68 65 6d 61 20 68 61 73     // schema has
8910: 20 63 68 61 6e 67 65 64 2c 20 72 65 2d 74 72 79   changed, re-try
8920: 20 74 68 65 20 73 74 65 70 20 61 67 61 69 6e 2e   the step again.
8930: 20 20 49 66 20 69 74 20 65 72 72 6f 72 65 64 20    If it errored 
8940: 6f 75 72 20 62 65 63 61 75 73 65 20 74 68 65 20  our because the 
8950: 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20 20 20  database..      
8960: 20 20 20 20 2f 2f 20 69 73 20 6c 6f 63 6b 65 64      // is locked
8970: 2c 20 74 68 65 6e 20 6b 65 65 70 20 72 65 74 72  , then keep retr
8980: 79 69 6e 67 20 75 6e 74 69 6c 20 74 68 65 20 63  ying until the c
8990: 6f 6d 6d 61 6e 64 20 74 69 6d 65 6f 75 74 20 6f  ommand timeout o
89a0: 63 63 75 72 73 2e 0d 0a 20 20 20 20 20 20 20 20  ccurs...        
89b0: 20 20 72 20 3d 20 52 65 73 65 74 28 73 74 6d 74    r = Reset(stmt
89c0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
89d0: 69 66 20 28 72 20 3d 3d 20 53 51 4c 69 74 65 45  if (r == SQLiteE
89e0: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 0d 0a 20 20  rrorCode.Ok)..  
89f0: 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
8a00: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
8a10: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
8a20: 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20  ror());....     
8a30: 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 28 72       else if ((r
8a40: 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   == SQLiteErrorC
8a50: 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20 72 20  ode.Locked || r 
8a60: 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  == SQLiteErrorCo
8a70: 64 65 2e 42 75 73 79 29 20 26 26 20 73 74 6d 74  de.Busy) && stmt
8a80: 2e 5f 63 6f 6d 6d 61 6e 64 20 21 3d 20 6e 75 6c  ._command != nul
8a90: 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 7b 0d  l)..          {.
8aa0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20  .            // 
8ab0: 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20 20 20  Keep trying..   
8ac0: 20 20 20 20 20 20 20 20 20 69 66 20 28 72 6e 64           if (rnd
8ad0: 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46 69 72   == null) // Fir
8ae0: 73 74 20 74 69 6d 65 20 77 65 27 76 65 20 65 6e  st time we've en
8af0: 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20 6c 6f  countered the lo
8b00: 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ck..            
8b10: 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61 6e 64    rnd = new Rand
8b20: 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  om();....       
8b30: 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27 76 65       // If we've
8b40: 20 65 78 63 65 65 64 65 64 20 74 68 65 20 63 6f   exceeded the co
8b50: 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75 74 2c  mmand's timeout,
8b60: 20 67 69 76 65 20 75 70 20 61 6e 64 20 74 68 72   give up and thr
8b70: 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20 20 20  ow an error..   
8b80: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 75 69           if ((ui
8b90: 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74 2e 54  nt)Environment.T
8ba0: 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61 72 74  ickCount - start
8bb0: 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74 29 0d  tick > timeout).
8bc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
8bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
8be0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
8bf0: 63 65 70 74 69 6f 6e 28 72 2c 20 47 65 74 4c 61  ception(r, GetLa
8c00: 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20  stError());..   
8c10: 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20           }..    
8c20: 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20          else..  
8c30: 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
8c40: 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20 4f 74             // Ot
8c50: 68 65 72 77 69 73 65 20 73 6c 65 65 70 20 66 6f  herwise sleep fo
8c60: 72 20 61 20 72 61 6e 64 6f 6d 20 61 6d 6f 75 6e  r a random amoun
8c70: 74 20 6f 66 20 74 69 6d 65 20 75 70 20 74 6f 20  t of time up to 
8c80: 31 35 30 6d 73 0d 0a 20 20 20 20 20 20 20 20 20  150ms..         
8c90: 20 20 20 20 20 53 79 73 74 65 6d 2e 54 68 72 65       System.Thre
8ca0: 61 64 69 6e 67 2e 54 68 72 65 61 64 2e 53 6c 65  ading.Thread.Sle
8cb0: 65 70 28 72 6e 64 2e 4e 65 78 74 28 31 2c 20 31  ep(rnd.Next(1, 1
8cc0: 35 30 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  50));..         
8cd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
8ce0: 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
8cf0: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a      }..    }....
8d00: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
8d10: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61 73 20 74  >..    /// Has t
8d20: 68 65 20 73 71 6c 69 74 65 33 5f 65 72 72 73 74  he sqlite3_errst
8d30: 72 28 29 20 63 6f 72 65 20 6c 69 62 72 61 72 79  r() core library
8d40: 20 41 50 49 20 62 65 65 6e 20 63 68 65 63 6b 65   API been checke
8d50: 64 20 66 6f 72 20 79 65 74 3f 0d 0a 20 20 20 20  d for yet?..    
8d60: 2f 2f 2f 20 49 66 20 73 6f 2c 20 69 73 20 69 74  /// If so, is it
8d70: 20 70 72 65 73 65 6e 74 3f 0d 0a 20 20 20 20 2f   present?..    /
8d80: 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20  // </summary>.. 
8d90: 20 20 20 70 72 69 76 61 74 65 20 73 74 61 74 69     private stati
8da0: 63 20 62 6f 6f 6c 3f 20 68 61 76 65 5f 65 72 72  c bool? have_err
8db0: 73 74 72 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20  str = null;.... 
8dc0: 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e     /// <summary>
8dd0: 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e  ..    /// Return
8de0: 73 20 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73  s the error mess
8df0: 61 67 65 20 66 6f 72 20 74 68 65 20 73 70 65 63  age for the spec
8e00: 69 66 69 65 64 20 53 51 4c 69 74 65 20 72 65 74  ified SQLite ret
8e10: 75 72 6e 20 63 6f 64 65 20 75 73 69 6e 67 0d 0a  urn code using..
8e20: 20 20 20 20 2f 2f 2f 20 74 68 65 20 73 71 6c 69      /// the sqli
8e30: 74 65 33 5f 65 72 72 73 74 72 28 29 20 66 75 6e  te3_errstr() fun
8e40: 63 74 69 6f 6e 2c 20 66 61 6c 6c 69 6e 67 20 62  ction, falling b
8e50: 61 63 6b 20 74 6f 20 74 68 65 20 69 6e 74 65 72  ack to the inter
8e60: 6e 61 6c 20 6c 6f 6f 6b 75 70 0d 0a 20 20 20 20  nal lookup..    
8e70: 2f 2f 2f 20 74 61 62 6c 65 20 69 66 20 6e 65 63  /// table if nec
8e80: 65 73 73 61 72 79 2e 0d 0a 20 20 20 20 2f 2f 2f  essary...    ///
8e90: 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20   </summary>..   
8ea0: 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
8eb0: 3d 22 72 63 22 3e 54 68 65 20 53 51 4c 69 74 65  ="rc">The SQLite
8ec0: 20 72 65 74 75 72 6e 20 63 6f 64 65 2e 3c 2f 70   return code.</p
8ed0: 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
8ee0: 72 65 74 75 72 6e 73 3e 54 68 65 20 65 72 72 6f  returns>The erro
8ef0: 72 20 6d 65 73 73 61 67 65 20 6f 72 20 6e 75 6c  r message or nul
8f00: 6c 20 69 66 20 69 74 20 63 61 6e 6e 6f 74 20 62  l if it cannot b
8f10: 65 20 66 6f 75 6e 64 2e 3c 2f 72 65 74 75 72 6e  e found.</return
8f20: 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
8f30: 20 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 47   static string G
8f40: 65 74 45 72 72 6f 72 53 74 72 69 6e 67 28 53 51  etErrorString(SQ
8f50: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63  LiteErrorCode rc
8f60: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
8f70: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
8f80: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
8f90: 20 28 68 61 76 65 5f 65 72 72 73 74 72 20 3d 3d   (have_errstr ==
8fa0: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
8fb0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
8fc0: 20 20 20 20 20 20 20 69 6e 74 20 76 65 72 73 69         int versi
8fd0: 6f 6e 4e 75 6d 62 65 72 20 3d 20 53 51 4c 69 74  onNumber = SQLit
8fe0: 65 56 65 72 73 69 6f 6e 4e 75 6d 62 65 72 3b 0d  eVersionNumber;.
8ff0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
9000: 20 68 61 76 65 5f 65 72 72 73 74 72 20 3d 20 28   have_errstr = (
9010: 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d  versionNumber >=
9020: 20 33 30 30 37 30 31 35 29 3b 0d 0a 20 20 20 20   3007015);..    
9030: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
9040: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 62 6f           if ((bo
9050: 6f 6c 29 68 61 76 65 5f 65 72 72 73 74 72 29 0d  ol)have_errstr).
9060: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a  .            {..
9070: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9080: 49 6e 74 50 74 72 20 70 74 72 20 3d 20 55 6e 73  IntPtr ptr = Uns
9090: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
90a0: 2e 73 71 6c 69 74 65 33 5f 65 72 72 73 74 72 28  .sqlite3_errstr(
90b0: 72 63 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  rc);....        
90c0: 20 20 20 20 20 20 20 20 69 66 20 28 70 74 72 20          if (ptr 
90d0: 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 0d  != IntPtr.Zero).
90e0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
90f0: 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
9100: 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
9110: 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
9120: 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 4d          return M
9130: 61 72 73 68 61 6c 2e 50 74 72 54 6f 53 74 72 69  arshal.PtrToStri
9140: 6e 67 41 6e 73 69 28 70 74 72 29 3b 0d 0a 23 65  ngAnsi(ptr);..#e
9150: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20  lse..           
9160: 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
9170: 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74 72  UTF8ToString(ptr
9180: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
9190: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
91a0: 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d  }..            }
91b0: 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
91c0: 20 20 20 20 20 63 61 74 63 68 20 28 45 6e 74 72       catch (Entr
91d0: 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e 64 45 78  yPointNotFoundEx
91e0: 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20 20 20 20  ception)..      
91f0: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9200: 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e 0d   // do nothing..
9210: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20  .        }....  
9220: 20 20 20 20 20 20 72 65 74 75 72 6e 20 46 61 6c        return Fal
9230: 6c 62 61 63 6b 47 65 74 45 72 72 6f 72 53 74 72  lbackGetErrorStr
9240: 69 6e 67 28 72 63 29 3b 0d 0a 20 20 20 20 7d 0d  ing(rc);..    }.
9250: 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
9260: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 48 61  ary>..    /// Ha
9270: 73 20 74 68 65 20 73 71 6c 69 74 65 33 5f 73 74  s the sqlite3_st
9280: 6d 74 5f 72 65 61 64 6f 6e 6c 79 28 29 20 63 6f  mt_readonly() co
9290: 72 65 20 6c 69 62 72 61 72 79 20 41 50 49 20 62  re library API b
92a0: 65 65 6e 20 63 68 65 63 6b 65 64 20 66 6f 72 20  een checked for 
92b0: 79 65 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 49 66  yet?..    /// If
92c0: 20 73 6f 2c 20 69 73 20 69 74 20 70 72 65 73 65   so, is it prese
92d0: 6e 74 3f 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  nt?..    /// </s
92e0: 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 70 72 69  ummary>..    pri
92f0: 76 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c  vate static bool
9300: 3f 20 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64  ? have_stmt_read
9310: 6f 6e 6c 79 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  only = null;....
9320: 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
9330: 3e 0d 0a 20 20 20 20 2f 2f 2f 20 52 65 74 75 72  >..    /// Retur
9340: 6e 73 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74  ns non-zero if t
9350: 68 65 20 73 70 65 63 69 66 69 65 64 20 73 74 61  he specified sta
9360: 74 65 6d 65 6e 74 20 69 73 20 72 65 61 64 2d 6f  tement is read-o
9370: 6e 6c 79 20 69 6e 20 6e 61 74 75 72 65 2e 0d 0a  nly in nature...
9380: 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
9390: 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
93a0: 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
93b0: 68 65 20 73 74 61 74 65 6d 65 6e 74 20 74 6f 20  he statement to 
93c0: 63 68 65 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a  check.</param>..
93d0: 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
93e0: 3e 54 72 75 65 20 69 66 20 74 68 65 20 6f 75 74  >True if the out
93f0: 65 72 20 71 75 65 72 79 20 69 73 20 72 65 61 64  er query is read
9400: 2d 6f 6e 6c 79 2e 3c 2f 72 65 74 75 72 6e 73 3e  -only.</returns>
9410: 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
9420: 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49 73 52  verride bool IsR
9430: 65 61 64 4f 6e 6c 79 28 0d 0a 20 20 20 20 20 20  eadOnly(..      
9440: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
9450: 74 20 73 74 6d 74 0d 0a 20 20 20 20 20 20 20 20  t stmt..        
9460: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
9470: 20 20 74 72 79 0d 0a 20 20 20 20 20 20 20 20 7b    try..        {
9480: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
9490: 20 28 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64   (have_stmt_read
94a0: 6f 6e 6c 79 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  only == null).. 
94b0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
94c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e                in
94d0: 74 20 76 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20  t versionNumber 
94e0: 3d 20 53 51 4c 69 74 65 56 65 72 73 69 6f 6e 4e  = SQLiteVersionN
94f0: 75 6d 62 65 72 3b 0d 0a 20 20 20 20 20 20 20 20  umber;..        
9500: 20 20 20 20 20 20 20 20 68 61 76 65 5f 73 74 6d          have_stm
9510: 74 5f 72 65 61 64 6f 6e 6c 79 20 3d 20 28 76 65  t_readonly = (ve
9520: 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20 33  rsionNumber >= 3
9530: 30 30 37 30 30 34 29 3b 0d 0a 20 20 20 20 20 20  007004);..      
9540: 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
9550: 20 20 20 20 20 20 20 69 66 20 28 28 62 6f 6f 6c         if ((bool
9560: 29 68 61 76 65 5f 73 74 6d 74 5f 72 65 61 64 6f  )have_stmt_reado
9570: 6e 6c 79 29 0d 0a 20 20 20 20 20 20 20 20 20 20  nly)..          
9580: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
9590: 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
95a0: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
95b0: 73 71 6c 69 74 65 33 5f 73 74 6d 74 5f 72 65 61  sqlite3_stmt_rea
95c0: 64 6f 6e 6c 79 28 0d 0a 20 20 20 20 20 20 20 20  donly(..        
95d0: 20 20 20 20 20 20 20 20 20 20 20 20 73 74 6d 74              stmt
95e0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 20 21  ._sqlite_stmt) !
95f0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
9600: 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a    }..        }..
9610: 20 20 20 20 20 20 20 20 63 61 74 63 68 20 28 45          catch (E
9620: 6e 74 72 79 50 6f 69 6e 74 4e 6f 74 46 6f 75 6e  ntryPointNotFoun
9630: 64 45 78 63 65 70 74 69 6f 6e 29 0d 0a 20 20 20  dException)..   
9640: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
9650: 20 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e      // do nothin
9660: 67 2e 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  g...        }...
9670: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
9680: 66 61 6c 73 65 3b 20 2f 2a 20 4e 4f 54 45 3a 20  false; /* NOTE: 
9690: 55 6e 6b 6e 6f 77 6e 2c 20 61 73 73 75 6d 65 20  Unknown, assume 
96a0: 66 61 6c 73 65 2e 20 2a 2f 0d 0a 20 20 20 20 7d  false. */..    }
96b0: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
96c0: 20 6f 76 65 72 72 69 64 65 20 53 51 4c 69 74 65   override SQLite
96d0: 45 72 72 6f 72 43 6f 64 65 20 52 65 73 65 74 28  ErrorCode Reset(
96e0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
96f0: 73 74 6d 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  stmt)..    {..  
9700: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
9710: 6f 64 65 20 6e 3b 0d 0a 0d 0a 23 69 66 20 21 53  ode n;....#if !S
9720: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
9730: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9740: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
9750: 6c 69 74 65 33 5f 72 65 73 65 74 5f 69 6e 74 65  lite3_reset_inte
9760: 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
9770: 5f 73 74 6d 74 29 3b 0d 0a 23 65 6c 73 65 0d 0a  _stmt);..#else..
9780: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
9790: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
97a0: 6c 69 74 65 33 5f 72 65 73 65 74 28 73 74 6d 74  lite3_reset(stmt
97b0: 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d  ._sqlite_stmt);.
97c0: 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20  .#endif....     
97d0: 20 2f 2f 20 49 66 20 74 68 65 20 73 63 68 65 6d   // If the schem
97e0: 61 20 63 68 61 6e 67 65 64 2c 20 74 72 79 20 61  a changed, try a
97f0: 6e 64 20 72 65 2d 70 72 65 70 61 72 65 20 69 74  nd re-prepare it
9800: 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d  ..      if (n ==
9810: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
9820: 2e 53 63 68 65 6d 61 29 0d 0a 20 20 20 20 20 20  .Schema)..      
9830: 7b 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20 52 65  {..        // Re
9840: 63 72 65 61 74 65 20 61 20 64 75 6d 6d 79 20 73  create a dummy s
9850: 74 61 74 65 6d 65 6e 74 0d 0a 20 20 20 20 20 20  tatement..      
9860: 20 20 73 74 72 69 6e 67 20 73 74 72 20 3d 20 6e    string str = n
9870: 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 75 73  ull;..        us
9880: 69 6e 67 20 28 53 51 4c 69 74 65 53 74 61 74 65  ing (SQLiteState
9890: 6d 65 6e 74 20 74 6d 70 20 3d 20 50 72 65 70 61  ment tmp = Prepa
98a0: 72 65 28 6e 75 6c 6c 2c 20 73 74 6d 74 2e 5f 73  re(null, stmt._s
98b0: 71 6c 53 74 61 74 65 6d 65 6e 74 2c 20 6e 75 6c  qlStatement, nul
98c0: 6c 2c 20 28 75 69 6e 74 29 28 73 74 6d 74 2e 5f  l, (uint)(stmt._
98d0: 63 6f 6d 6d 61 6e 64 2e 5f 63 6f 6d 6d 61 6e 64  command._command
98e0: 54 69 6d 65 6f 75 74 20 2a 20 31 30 30 30 29 2c  Timeout * 1000),
98f0: 20 72 65 66 20 73 74 72 29 29 0d 0a 20 20 20 20   ref str))..    
9900: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
9910: 20 2f 2f 20 46 69 6e 61 6c 69 7a 65 20 74 68 65   // Finalize the
9920: 20 65 78 69 73 74 69 6e 67 20 73 74 61 74 65 6d   existing statem
9930: 65 6e 74 0d 0a 20 20 20 20 20 20 20 20 20 20 73  ent..          s
9940: 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
9950: 2e 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20  .Dispose();..   
9960: 20 20 20 20 20 20 20 2f 2f 20 52 65 61 73 73 69         // Reassi
9970: 67 6e 20 61 20 6e 65 77 20 73 74 61 74 65 6d 65  gn a new stateme
9980: 6e 74 20 70 6f 69 6e 74 65 72 20 74 6f 20 74 68  nt pointer to th
9990: 65 20 6f 6c 64 20 73 74 61 74 65 6d 65 6e 74 20  e old statement 
99a0: 61 6e 64 20 63 6c 65 61 72 20 74 68 65 20 74 65  and clear the te
99b0: 6d 70 6f 72 61 72 79 20 6f 6e 65 0d 0a 20 20 20  mporary one..   
99c0: 20 20 20 20 20 20 20 69 66 20 28 74 6d 70 20 21         if (tmp !
99d0: 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
99e0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
99f0: 20 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73    stmt._sqlite_s
9a00: 74 6d 74 20 3d 20 74 6d 70 2e 5f 73 71 6c 69 74  tmt = tmp._sqlit
9a10: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
9a20: 20 20 20 20 20 74 6d 70 2e 5f 73 71 6c 69 74 65       tmp._sqlite
9a30: 5f 73 74 6d 74 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  _stmt = null;.. 
9a40: 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20           }....  
9a50: 20 20 20 20 20 20 20 20 2f 2f 20 52 65 61 70 70          // Reapp
9a60: 6c 79 20 70 61 72 61 6d 65 74 65 72 73 0d 0a 20  ly parameters.. 
9a70: 20 20 20 20 20 20 20 20 20 73 74 6d 74 2e 42 69           stmt.Bi
9a80: 6e 64 50 61 72 61 6d 65 74 65 72 73 28 29 3b 0d  ndParameters();.
9a90: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
9aa0: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
9ab0: 65 45 72 72 6f 72 43 6f 64 65 2e 55 6e 6b 6e 6f  eErrorCode.Unkno
9ac0: 77 6e 3b 20 2f 2f 20 52 65 73 65 74 20 77 61 73  wn; // Reset was
9ad0: 20 4f 4b 2c 20 77 69 74 68 20 73 63 68 65 6d 61   OK, with schema
9ae0: 20 63 68 61 6e 67 65 0d 0a 20 20 20 20 20 20 7d   change..      }
9af0: 0d 0a 20 20 20 20 20 20 65 6c 73 65 20 69 66 20  ..      else if 
9b00: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
9b10: 72 43 6f 64 65 2e 4c 6f 63 6b 65 64 20 7c 7c 20  rCode.Locked || 
9b20: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
9b30: 43 6f 64 65 2e 42 75 73 79 29 0d 0a 20 20 20 20  Code.Busy)..    
9b40: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 0d      return n;...
9b50: 0a 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20  .      if (n != 
9b60: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
9b70: 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20 74 68 72  Ok)..        thr
9b80: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
9b90: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
9ba0: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20  tError());....  
9bb0: 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 20 2f 2f      return n; //
9bc0: 20 57 65 20 72 65 73 65 74 20 4f 4b 2c 20 6e 6f   We reset OK, no
9bd0: 20 73 63 68 65 6d 61 20 63 68 61 6e 67 65 73 0d   schema changes.
9be0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
9bf0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
9c00: 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45 72  string GetLastEr
9c10: 72 6f 72 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ror()..    {..  
9c20: 20 20 20 20 20 20 72 65 74 75 72 6e 20 47 65 74        return Get
9c30: 4c 61 73 74 45 72 72 6f 72 28 6e 75 6c 6c 29 3b  LastError(null);
9c40: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
9c50: 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
9c60: 20 73 74 72 69 6e 67 20 47 65 74 4c 61 73 74 45   string GetLastE
9c70: 72 72 6f 72 28 73 74 72 69 6e 67 20 64 65 66 56  rror(string defV
9c80: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
9c90: 20 20 20 20 20 20 73 74 72 69 6e 67 20 72 65 73        string res
9ca0: 75 6c 74 20 3d 20 53 51 4c 69 74 65 42 61 73 65  ult = SQLiteBase
9cb0: 2e 47 65 74 4c 61 73 74 45 72 72 6f 72 28 5f 73  .GetLastError(_s
9cc0: 71 6c 2c 20 5f 73 71 6c 29 3b 0d 0a 20 20 20 20  ql, _sql);..    
9cd0: 20 20 20 20 69 66 20 28 53 74 72 69 6e 67 2e 49      if (String.I
9ce0: 73 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 72 65 73  sNullOrEmpty(res
9cf0: 75 6c 74 29 29 20 72 65 73 75 6c 74 20 3d 20 64  ult)) result = d
9d00: 65 66 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  efValue;..      
9d10: 20 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 3b    return result;
9d20: 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
9d30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d40: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d50: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d60: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d70: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9d80: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a  //////////////..
9d90: 0d 0a 20 20 20 20 23 72 65 67 69 6f 6e 20 51 75  ..    #region Qu
9da0: 65 72 79 20 44 69 61 67 6e 6f 73 74 69 63 73 20  ery Diagnostics 
9db0: 53 75 70 70 6f 72 74 0d 0a 23 69 66 20 21 50 4c  Support..#if !PL
9dc0: 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52  ATFORM_COMPACTFR
9dd0: 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 2f 2f 2f  AMEWORK..    ///
9de0: 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
9df0: 2f 2f 2f 20 54 68 69 73 20 66 69 65 6c 64 20 69  /// This field i
9e00: 73 20 75 73 65 64 20 74 6f 20 6b 65 65 70 20 74  s used to keep t
9e10: 72 61 63 6b 20 6f 66 20 77 68 65 74 68 65 72 20  rack of whether 
9e20: 6f 72 20 6e 6f 74 20 74 68 65 0d 0a 20 20 20 20  or not the..    
9e30: 2f 2f 2f 20 22 53 51 4c 69 74 65 5f 46 6f 72 63  /// "SQLite_Forc
9e40: 65 4c 6f 67 50 72 65 70 61 72 65 22 20 65 6e 76  eLogPrepare" env
9e50: 69 72 6f 6e 6d 65 6e 74 20 76 61 72 69 61 62 6c  ironment variabl
9e60: 65 20 68 61 73 20 62 65 65 6e 20 71 75 65 72 69  e has been queri
9e70: 65 64 2e 20 20 49 66 20 73 6f 2c 0d 0a 20 20 20  ed.  If so,..   
9e80: 20 2f 2f 2f 20 69 74 20 77 69 6c 6c 20 6f 6e 6c   /// it will onl
9e90: 79 20 62 65 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66  y be non-zero if
9ea0: 20 74 68 65 20 65 6e 76 69 72 6f 6e 6d 65 6e 74   the environment
9eb0: 20 76 61 72 69 61 62 6c 65 20 77 61 73 20 70 72   variable was pr
9ec0: 65 73 65 6e 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20  esent...    /// 
9ed0: 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
9ee0: 70 72 69 76 61 74 65 20 73 74 61 74 69 63 20 62  private static b
9ef0: 6f 6f 6c 3f 20 66 6f 72 63 65 4c 6f 67 50 72 65  ool? forceLogPre
9f00: 70 61 72 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a  pare = null;....
9f10: 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
9f20: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
9f30: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
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 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
9f80: 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
9f90: 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
9fa0: 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72 65  all calls to pre
9fb0: 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72 79  pare a SQL query
9fc0: 20 77 69 6c 6c 20 62 65 20 6c 6f 67 67 65 64 2c   will be logged,
9fd0: 0d 0a 20 20 20 20 2f 2f 2f 20 72 65 67 61 72 64  ..    /// regard
9fe0: 6c 65 73 73 20 6f 66 20 74 68 65 20 66 6c 61 67  less of the flag
9ff0: 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69  s for the associ
a000: 61 74 65 64 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  ated connection.
a010: 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d  ..    /// </summ
a020: 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72  ary>..    /// <r
a030: 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f  eturns>..    ///
a040: 20 4e 6f 6e 2d 7a 65 72 6f 20 74 6f 20 6c 6f 67   Non-zero to log
a050: 20 61 6c 6c 20 63 61 6c 6c 73 20 74 6f 20 70 72   all calls to pr
a060: 65 70 61 72 65 20 61 20 53 51 4c 20 71 75 65 72  epare a SQL quer
a070: 79 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65  y...    /// </re
a080: 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70 72 69 76  turns>..    priv
a090: 61 74 65 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  ate static bool 
a0a0: 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65 28  ForceLogPrepare(
a0b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a0c0: 20 20 6c 6f 63 6b 20 28 73 79 6e 63 52 6f 6f 74    lock (syncRoot
a0d0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
a0e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 66 6f            if (fo
a0f0: 72 63 65 4c 6f 67 50 72 65 70 61 72 65 20 3d 3d  rceLogPrepare ==
a100: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
a110: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
a120: 20 20 20 20 20 20 20 69 66 20 28 55 6e 73 61 66         if (Unsaf
a130: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47  eNativeMethods.G
a140: 65 74 53 65 74 74 69 6e 67 56 61 6c 75 65 28 0d  etSettingValue(.
a150: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
a160: 20 20 20 20 20 20 20 20 20 22 53 51 4c 69 74 65           "SQLite
a170: 5f 46 6f 72 63 65 4c 6f 67 50 72 65 70 61 72 65  _ForceLogPrepare
a180: 22 2c 20 6e 75 6c 6c 29 20 21 3d 20 6e 75 6c 6c  ", null) != null
a190: 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  )..             
a1a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
a1b0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 63 65 4c            forceL
a1c0: 6f 67 50 72 65 70 61 72 65 20 3d 20 74 72 75 65  ogPrepare = true
a1d0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
a1e0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
a1f0: 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
a200: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
a210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
a220: 20 20 20 66 6f 72 63 65 4c 6f 67 50 72 65 70 61     forceLogPrepa
a230: 72 65 20 3d 20 66 61 6c 73 65 3b 0d 0a 20 20 20  re = false;..   
a240: 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a               }..
a250: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
a260: 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74  .            ret
a270: 75 72 6e 20 28 62 6f 6f 6c 29 66 6f 72 63 65 4c  urn (bool)forceL
a280: 6f 67 50 72 65 70 61 72 65 3b 0d 0a 20 20 20 20  ogPrepare;..    
a290: 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 23 65      }..    }..#e
a2a0: 6e 64 69 66 0d 0a 20 20 20 20 23 65 6e 64 72 65  ndif..    #endre
a2b0: 67 69 6f 6e 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 2f  gion....    ////
a2c0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2d0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2e0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a2f0: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a300: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
a310: 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 0d 0a 0d 0a 20  ///////////.... 
a320: 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
a330: 72 69 64 65 20 53 51 4c 69 74 65 53 74 61 74 65  ride SQLiteState
a340: 6d 65 6e 74 20 50 72 65 70 61 72 65 28 53 51 4c  ment Prepare(SQL
a350: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 63 6e  iteConnection cn
a360: 6e 2c 20 73 74 72 69 6e 67 20 73 74 72 53 71 6c  n, string strSql
a370: 2c 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  , SQLiteStatemen
a380: 74 20 70 72 65 76 69 6f 75 73 2c 20 75 69 6e 74  t previous, uint
a390: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
a3a0: 73 74 72 69 6e 67 20 73 74 72 52 65 6d 61 69 6e  string strRemain
a3b0: 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
a3c0: 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e 75  if (!String.IsNu
a3d0: 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53 71 6c  llOrEmpty(strSql
a3e0: 29 29 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53  )) strSql = strS
a3f0: 71 6c 2e 54 72 69 6d 28 29 3b 0d 0a 20 20 20 20  ql.Trim();..    
a400: 20 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73    if (!String.Is
a410: 4e 75 6c 6c 4f 72 45 6d 70 74 79 28 73 74 72 53  NullOrEmpty(strS
a420: 71 6c 29 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  ql))..      {.. 
a430: 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20         //..     
a440: 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 51 4c 69     // NOTE: SQLi
a450: 74 65 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70  te does not supp
a460: 6f 72 74 20 74 68 65 20 63 6f 6e 63 65 70 74 20  ort the concept 
a470: 6f 66 20 73 65 70 61 72 61 74 65 20 73 63 68 65  of separate sche
a480: 6d 61 73 0d 0a 20 20 20 20 20 20 20 20 2f 2f 20  mas..        // 
a490: 20 20 20 20 20 20 69 6e 20 6f 6e 65 20 64 61 74        in one dat
a4a0: 61 62 61 73 65 3b 20 74 68 65 72 65 66 6f 72 65  abase; therefore
a4b0: 2c 20 72 65 6d 6f 76 65 20 74 68 65 20 62 61 73  , remove the bas
a4c0: 65 20 73 63 68 65 6d 61 20 6e 61 6d 65 0d 0a 20  e schema name.. 
a4d0: 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20         //       
a4e0: 75 73 65 64 20 74 6f 20 73 6d 6f 6f 74 68 20 69  used to smooth i
a4f0: 6e 74 65 67 72 61 74 69 6f 6e 20 77 69 74 68 20  ntegration with 
a500: 74 68 65 20 62 61 73 65 20 2e 4e 45 54 20 46 72  the base .NET Fr
a510: 61 6d 65 77 6f 72 6b 0d 0a 20 20 20 20 20 20 20  amework..       
a520: 20 2f 2f 20 20 20 20 20 20 20 64 61 74 61 20 63   //       data c
a530: 6c 61 73 73 65 73 2e 0d 0a 20 20 20 20 20 20 20  lasses...       
a540: 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 73 74 72   //..        str
a550: 69 6e 67 20 62 61 73 65 53 63 68 65 6d 61 4e 61  ing baseSchemaNa
a560: 6d 65 20 3d 20 28 63 6e 6e 20 21 3d 20 6e 75 6c  me = (cnn != nul
a570: 6c 29 20 3f 20 63 6e 6e 2e 5f 62 61 73 65 53 63  l) ? cnn._baseSc
a580: 68 65 6d 61 4e 61 6d 65 20 3a 20 6e 75 6c 6c 3b  hemaName : null;
a590: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
a5a0: 21 53 74 72 69 6e 67 2e 49 73 4e 75 6c 6c 4f 72  !String.IsNullOr
a5b0: 45 6d 70 74 79 28 62 61 73 65 53 63 68 65 6d 61  Empty(baseSchema
a5c0: 4e 61 6d 65 29 29 0d 0a 20 20 20 20 20 20 20 20  Name))..        
a5d0: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 73 74 72  {..          str
a5e0: 53 71 6c 20 3d 20 73 74 72 53 71 6c 2e 52 65 70  Sql = strSql.Rep
a5f0: 6c 61 63 65 28 0d 0a 20 20 20 20 20 20 20 20 20  lace(..         
a600: 20 20 20 20 20 48 65 6c 70 65 72 4d 65 74 68 6f       HelperMetho
a610: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
a620: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61  CultureInfo.Inva
a630: 72 69 61 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20  riantCulture,.. 
a640: 20 20 20 20 20 20 20 20 20 20 20 20 20 22 5b 7b               "[{
a650: 30 7d 5d 2e 22 2c 20 62 61 73 65 53 63 68 65 6d  0}].", baseSchem
a660: 61 4e 61 6d 65 29 2c 20 53 74 72 69 6e 67 2e 45  aName), String.E
a670: 6d 70 74 79 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  mpty);....      
a680: 20 20 20 20 73 74 72 53 71 6c 20 3d 20 73 74 72      strSql = str
a690: 53 71 6c 2e 52 65 70 6c 61 63 65 28 0d 0a 20 20  Sql.Replace(..  
a6a0: 20 20 20 20 20 20 20 20 20 20 20 20 48 65 6c 70              Help
a6b0: 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67  erMethods.String
a6c0: 46 6f 72 6d 61 74 28 43 75 6c 74 75 72 65 49 6e  Format(CultureIn
a6d0: 66 6f 2e 49 6e 76 61 72 69 61 6e 74 43 75 6c 74  fo.InvariantCult
a6e0: 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  ure,..          
a6f0: 20 20 20 20 22 7b 30 7d 2e 22 2c 20 62 61 73 65      "{0}.", base
a700: 53 63 68 65 6d 61 4e 61 6d 65 29 2c 20 53 74 72  SchemaName), Str
a710: 69 6e 67 2e 45 6d 70 74 79 29 3b 0d 0a 20 20 20  ing.Empty);..   
a720: 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 7d 0d       }..      }.
a730: 0a 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 43  ...      SQLiteC
a740: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66  onnectionFlags f
a750: 6c 61 67 73 20 3d 0d 0a 20 20 20 20 20 20 20 20  lags =..        
a760: 20 20 28 63 6e 6e 20 21 3d 20 6e 75 6c 6c 29 20    (cnn != null) 
a770: 3f 20 63 6e 6e 2e 46 6c 61 67 73 20 3a 20 53 51  ? cnn.Flags : SQ
a780: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
a790: 61 67 73 2e 44 65 66 61 75 6c 74 3b 0d 0a 0d 0a  ags.Default;....
a7a0: 20 20 20 20 20 20 69 66 20 28 0d 0a 23 69 66 20        if (..#if 
a7b0: 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43  !PLATFORM_COMPAC
a7c0: 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20  TFRAMEWORK..    
a7d0: 20 20 20 20 20 20 46 6f 72 63 65 4c 6f 67 50 72        ForceLogPr
a7e0: 65 70 61 72 65 28 29 20 7c 7c 0d 0a 23 65 6e 64  epare() ||..#end
a7f0: 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 28 28  if..          ((
a800: 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f  flags & SQLiteCo
a810: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
a820: 67 50 72 65 70 61 72 65 29 20 3d 3d 20 53 51 4c  gPrepare) == SQL
a830: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
a840: 67 73 2e 4c 6f 67 50 72 65 70 61 72 65 29 29 0d  gs.LogPrepare)).
a850: 0a 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  .      {..      
a860: 20 20 20 20 69 66 20 28 28 73 74 72 53 71 6c 20      if ((strSql 
a870: 3d 3d 20 6e 75 6c 6c 29 20 7c 7c 20 28 73 74 72  == null) || (str
a880: 53 71 6c 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29  Sql.Length == 0)
a890: 20 7c 7c 20 28 73 74 72 53 71 6c 2e 54 72 69 6d   || (strSql.Trim
a8a0: 28 29 2e 4c 65 6e 67 74 68 20 3d 3d 20 30 29 29  ().Length == 0))
a8b0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
a8c0: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
a8d0: 73 61 67 65 28 22 50 72 65 70 61 72 69 6e 67 20  sage("Preparing 
a8e0: 7b 3c 6e 6f 74 68 69 6e 67 3e 7d 2e 2e 2e 22 29  {<nothing>}...")
a8f0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65 6c 73  ;..          els
a900: 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e..             
a910: 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65   SQLiteLog.LogMe
a920: 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68  ssage(HelperMeth
a930: 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74  ods.StringFormat
a940: 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  (..             
a950: 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
a960: 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
a970: 20 22 50 72 65 70 61 72 69 6e 67 20 7b 7b 7b 30   "Preparing {{{0
a980: 7d 7d 7d 2e 2e 2e 22 2c 20 73 74 72 53 71 6c 29  }}}...", strSql)
a990: 29 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  );..      }.... 
a9a0: 20 20 20 20 20 49 6e 74 50 74 72 20 73 74 6d 74       IntPtr stmt
a9b0: 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d   = IntPtr.Zero;.
a9c0: 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 74  .      IntPtr pt
a9d0: 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
a9e0: 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
a9f0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
aa00: 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20  teErrorCode n = 
aa10: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
aa20: 53 63 68 65 6d 61 3b 0d 0a 20 20 20 20 20 20 69  Schema;..      i
aa30: 6e 74 20 72 65 74 72 69 65 73 20 3d 20 30 3b 0d  nt retries = 0;.
aa40: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 78 69 6d  .      int maxim
aa50: 75 6d 52 65 74 72 69 65 73 20 3d 20 28 63 6e 6e  umRetries = (cnn
aa60: 20 21 3d 20 6e 75 6c 6c 29 20 3f 20 63 6e 6e 2e   != null) ? cnn.
aa70: 5f 70 72 65 70 61 72 65 52 65 74 72 69 65 73 20  _prepareRetries 
aa80: 3a 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  : SQLiteConnecti
aa90: 6f 6e 2e 44 65 66 61 75 6c 74 50 72 65 70 61 72  on.DefaultPrepar
aaa0: 65 52 65 74 72 69 65 73 3b 0d 0a 20 20 20 20 20  eRetries;..     
aab0: 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54   byte[] b = ToUT
aac0: 46 38 28 73 74 72 53 71 6c 29 3b 0d 0a 20 20 20  F8(strSql);..   
aad0: 20 20 20 73 74 72 69 6e 67 20 74 79 70 65 64 65     string typede
aae0: 66 73 20 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20  fs = null;..    
aaf0: 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e    SQLiteStatemen
ab00: 74 20 63 6d 64 20 3d 20 6e 75 6c 6c 3b 0d 0a 20  t cmd = null;.. 
ab10: 20 20 20 20 20 52 61 6e 64 6f 6d 20 72 6e 64 20       Random rnd 
ab20: 3d 20 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 75  = null;..      u
ab30: 69 6e 74 20 73 74 61 72 74 74 69 63 6b 20 3d 20  int starttick = 
ab40: 28 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e  (uint)Environmen
ab50: 74 2e 54 69 63 6b 43 6f 75 6e 74 3b 0d 0a 0d 0a  t.TickCount;....
ab60: 20 20 20 20 20 20 52 65 73 65 74 43 61 6e 63 65        ResetCance
ab70: 6c 43 6f 75 6e 74 28 29 3b 0d 0a 0d 0a 20 20 20  lCount();....   
ab80: 20 20 20 47 43 48 61 6e 64 6c 65 20 68 61 6e 64     GCHandle hand
ab90: 6c 65 20 3d 20 47 43 48 61 6e 64 6c 65 2e 41 6c  le = GCHandle.Al
aba0: 6c 6f 63 28 62 2c 20 47 43 48 61 6e 64 6c 65 54  loc(b, GCHandleT
abb0: 79 70 65 2e 50 69 6e 6e 65 64 29 3b 0d 0a 20 20  ype.Pinned);..  
abc0: 20 20 20 20 49 6e 74 50 74 72 20 70 73 71 6c 20      IntPtr psql 
abd0: 3d 20 68 61 6e 64 6c 65 2e 41 64 64 72 4f 66 50  = handle.AddrOfP
abe0: 69 6e 6e 65 64 4f 62 6a 65 63 74 28 29 3b 0d 0a  innedObject();..
abf0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
ac00: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 73 74 61 74  ementHandle stat
ac10: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 3d 20 6e 75  ementHandle = nu
ac20: 6c 6c 3b 0d 0a 20 20 20 20 20 20 74 72 79 0d 0a  ll;..      try..
ac30: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
ac40: 20 77 68 69 6c 65 20 28 28 6e 20 3d 3d 20 53 51   while ((n == SQ
ac50: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63  LiteErrorCode.Sc
ac60: 68 65 6d 61 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  hema || n == SQL
ac70: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f 63  iteErrorCode.Loc
ac80: 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c 69  ked || n == SQLi
ac90: 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73 79  teErrorCode.Busy
aca0: 29 20 26 26 20 72 65 74 72 69 65 73 20 3c 20 6d  ) && retries < m
acb0: 61 78 69 6d 75 6d 52 65 74 72 69 65 73 29 0d 0a  aximumRetries)..
acc0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
acd0: 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20 20       try..      
ace0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
acf0: 20 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67     // do nothing
ad00: 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ...          }..
ad10: 20 20 20 20 20 20 20 20 20 20 66 69 6e 61 6c 6c            finall
ad20: 79 20 2f 2a 20 4e 4f 54 45 3a 20 54 68 72 65 61  y /* NOTE: Threa
ad30: 64 2e 41 62 6f 72 74 28 29 20 70 72 6f 74 65 63  d.Abort() protec
ad40: 74 69 6f 6e 2e 20 2a 2f 0d 0a 20 20 20 20 20 20  tion. */..      
ad50: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
ad60: 20 20 20 73 74 6d 74 20 3d 20 49 6e 74 50 74 72     stmt = IntPtr
ad70: 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20  .Zero;..        
ad80: 20 20 20 20 70 74 72 20 3d 20 49 6e 74 50 74 72      ptr = IntPtr
ad90: 2e 5a 65 72 6f 3b 0d 0a 0d 0a 23 69 66 20 21 53  .Zero;....#if !S
ada0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
adb0: 20 20 20 20 20 20 20 20 20 20 20 20 6c 65 6e 20              len 
adc0: 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  = 0;..          
add0: 20 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69    n = UnsafeNati
ade0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
adf0: 33 5f 70 72 65 70 61 72 65 5f 69 6e 74 65 72 6f  3_prepare_intero
ae00: 70 28 5f 73 71 6c 2c 20 70 73 71 6c 2c 20 62 2e  p(_sql, psql, b.
ae10: 4c 65 6e 67 74 68 20 2d 20 31 2c 20 72 65 66 20  Length - 1, ref 
ae20: 73 74 6d 74 2c 20 72 65 66 20 70 74 72 2c 20 72  stmt, ref ptr, r
ae30: 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ef len);..#else.
ae40: 0a 23 69 66 20 55 53 45 5f 50 52 45 50 41 52 45  .#if USE_PREPARE
ae50: 5f 56 32 0d 0a 20 20 20 20 20 20 20 20 20 20 20  _V2..           
ae60: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
ae70: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
ae80: 5f 70 72 65 70 61 72 65 5f 76 32 28 5f 73 71 6c  _prepare_v2(_sql
ae90: 2c 20 70 73 71 6c 2c 20 62 2e 4c 65 6e 67 74 68  , psql, b.Length
aea0: 20 2d 20 31 2c 20 72 65 66 20 73 74 6d 74 2c 20   - 1, ref stmt, 
aeb0: 72 65 66 20 70 74 72 29 3b 0d 0a 23 65 6c 73 65  ref ptr);..#else
aec0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
aed0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
aee0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 70 72  thods.sqlite3_pr
aef0: 65 70 61 72 65 28 5f 73 71 6c 2c 20 70 73 71 6c  epare(_sql, psql
af00: 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31 2c 20  , b.Length - 1, 
af10: 72 65 66 20 73 74 6d 74 2c 20 72 65 66 20 70 74  ref stmt, ref pt
af20: 72 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  r);..#endif..   
af30: 20 20 20 20 20 20 20 20 20 6c 65 6e 20 3d 20 2d           len = -
af40: 31 3b 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 23 69  1;..#endif....#i
af50: 66 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32  f !NET_COMPACT_2
af60: 30 20 26 26 20 54 52 41 43 45 5f 53 54 41 54 45  0 && TRACE_STATE
af70: 4d 45 4e 54 0d 0a 20 20 20 20 20 20 20 20 20 20  MENT..          
af80: 20 20 54 72 61 63 65 2e 57 72 69 74 65 4c 69 6e    Trace.WriteLin
af90: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
afa0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
afb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
afc0: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
afd0: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 22 50 72 65              "Pre
aff0: 70 61 72 65 20 28 7b 30 7d 29 3a 20 7b 31 7d 22  pare ({0}): {1}"
b000: 2c 20 6e 2c 20 73 74 6d 74 29 29 3b 0d 0a 23 65  , n, stmt));..#e
b010: 6e 64 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20  ndif....        
b020: 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53 51      if ((n == SQ
b030: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
b040: 29 20 26 26 20 28 73 74 6d 74 20 21 3d 20 49 6e  ) && (stmt != In
b050: 74 50 74 72 2e 5a 65 72 6f 29 29 0d 0a 20 20 20  tPtr.Zero))..   
b060: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b070: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 73 74            if (st
b080: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 21 3d  atementHandle !=
b090: 20 6e 75 6c 6c 29 20 73 74 61 74 65 6d 65 6e 74   null) statement
b0a0: 48 61 6e 64 6c 65 2e 44 69 73 70 6f 73 65 28 29  Handle.Dispose()
b0b0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b0c0: 20 73 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65   statementHandle
b0d0: 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 53 74 61   = new SQLiteSta
b0e0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 28 5f 73 71  tementHandle(_sq
b0f0: 6c 2c 20 73 74 6d 74 29 3b 0d 0a 20 20 20 20 20  l, stmt);..     
b100: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
b110: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20      }....       
b120: 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e 74     if (statement
b130: 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29 0d  Handle != null).
b140: 0a 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  .          {..  
b150: 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
b160: 43 6f 6e 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61  Connection.OnCha
b170: 6e 67 65 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43  nged(null, new C
b180: 6f 6e 6e 65 63 74 69 6f 6e 45 76 65 6e 74 41 72  onnectionEventAr
b190: 67 73 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  gs(..           
b1a0: 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74     SQLiteConnect
b1b0: 69 6f 6e 45 76 65 6e 74 54 79 70 65 2e 4e 65 77  ionEventType.New
b1c0: 43 72 69 74 69 63 61 6c 48 61 6e 64 6c 65 2c 20  CriticalHandle, 
b1d0: 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 0d 0a 20 20 20  null, null,..   
b1e0: 20 20 20 20 20 20 20 20 20 20 20 6e 75 6c 6c 2c             null,
b1f0: 20 6e 75 6c 6c 2c 20 73 74 61 74 65 6d 65 6e 74   null, statement
b200: 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2c 20  Handle, strSql, 
b210: 6e 65 77 20 6f 62 6a 65 63 74 5b 5d 20 7b 0d 0a  new object[] {..
b220: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 79                ty
b230: 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c 20 63  peof(SQLite3), c
b240: 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70 72 65 76  nn, strSql, prev
b250: 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74 4d 53 20  ious, timeoutMS 
b260: 7d 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  }));..          
b270: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  }....          i
b280: 66 20 28 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f  f (ShouldThrowFo
b290: 72 43 61 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20  rCancel())..    
b2a0: 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
b2b0: 20 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d         if ((n ==
b2c0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b2d0: 2e 4f 6b 29 20 7c 7c 0d 0a 20 20 20 20 20 20 20  .Ok) ||..       
b2e0: 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d 3d             (n ==
b2f0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b300: 2e 52 6f 77 29 20 7c 7c 0d 0a 20 20 20 20 20 20  .Row) ||..      
b310: 20 20 20 20 20 20 20 20 20 20 20 20 28 6e 20 3d              (n =
b320: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
b330: 65 2e 44 6f 6e 65 29 29 0d 0a 20 20 20 20 20 20  e.Done))..      
b340: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b350: 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20 3d               n =
b360: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
b370: 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20 20  .Interrupt;..   
b380: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
b390: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
b3a0: 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
b3b0: 63 65 70 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29  ception(n, null)
b3c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  ;..          }..
b3d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28  ..          if (
b3e0: 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
b3f0: 43 6f 64 65 2e 49 6e 74 65 72 72 75 70 74 29 0d  Code.Interrupt).
b400: 0a 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65  .            bre
b410: 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 65  ak;..          e
b420: 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c  lse if (n == SQL
b430: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 53 63 68  iteErrorCode.Sch
b440: 65 6d 61 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ema)..          
b450: 20 20 72 65 74 72 69 65 73 2b 2b 3b 0d 0a 20 20    retries++;..  
b460: 20 20 20 20 20 20 20 20 65 6c 73 65 20 69 66 20          else if 
b470: 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
b480: 72 43 6f 64 65 2e 45 72 72 6f 72 29 0d 0a 20 20  rCode.Error)..  
b490: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
b4a0: 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69 6e         if (Strin
b4b0: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
b4c0: 74 45 72 72 6f 72 28 29 2c 20 22 6e 65 61 72 20  tError(), "near 
b4d0: 5c 22 54 59 50 45 53 5c 22 3a 20 73 79 6e 74 61  \"TYPES\": synta
b4e0: 78 20 65 72 72 6f 72 22 2c 20 53 74 72 69 6e 67  x error", String
b4f0: 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64 69 6e  Comparison.Ordin
b500: 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20 3d 3d  alIgnoreCase) ==
b510: 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20   0)..           
b520: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
b530: 20 20 69 6e 74 20 70 6f 73 20 3d 20 73 74 72 53    int pos = strS
b540: 71 6c 2e 49 6e 64 65 78 4f 66 28 27 3b 27 29 3b  ql.IndexOf(';');
b550: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b560: 69 66 20 28 70 6f 73 20 3d 3d 20 2d 31 29 20 70  if (pos == -1) p
b570: 6f 73 20 3d 20 73 74 72 53 71 6c 2e 4c 65 6e 67  os = strSql.Leng
b580: 74 68 20 2d 20 31 3b 0d 0a 0d 0a 20 20 20 20 20  th - 1;....     
b590: 20 20 20 20 20 20 20 20 20 74 79 70 65 64 65 66           typedef
b5a0: 73 20 3d 20 73 74 72 53 71 6c 2e 53 75 62 73 74  s = strSql.Subst
b5b0: 72 69 6e 67 28 30 2c 20 70 6f 73 20 2b 20 31 29  ring(0, pos + 1)
b5c0: 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ;..             
b5d0: 20 73 74 72 53 71 6c 20 3d 20 73 74 72 53 71 6c   strSql = strSql
b5e0: 2e 53 75 62 73 74 72 69 6e 67 28 70 6f 73 20 2b  .Substring(pos +
b5f0: 20 31 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20   1);....        
b600: 20 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20        strRemain 
b610: 3d 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d  = String.Empty;.
b620: 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ...             
b630: 20 77 68 69 6c 65 20 28 63 6d 64 20 3d 3d 20 6e   while (cmd == n
b640: 75 6c 6c 20 26 26 20 73 74 72 53 71 6c 2e 4c 65  ull && strSql.Le
b650: 6e 67 74 68 20 3e 20 30 29 0d 0a 20 20 20 20 20  ngth > 0)..     
b660: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b670: 20 20 20 20 20 20 20 20 20 20 20 20 63 6d 64 20              cmd 
b680: 3d 20 50 72 65 70 61 72 65 28 63 6e 6e 2c 20 73  = Prepare(cnn, s
b690: 74 72 53 71 6c 2c 20 70 72 65 76 69 6f 75 73 2c  trSql, previous,
b6a0: 20 74 69 6d 65 6f 75 74 4d 53 2c 20 72 65 66 20   timeoutMS, ref 
b6b0: 73 74 72 52 65 6d 61 69 6e 29 3b 0d 0a 20 20 20  strRemain);..   
b6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 73 74 72               str
b6d0: 53 71 6c 20 3d 20 73 74 72 52 65 6d 61 69 6e 3b  Sql = strRemain;
b6e0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
b6f0: 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  }....           
b700: 20 20 20 69 66 20 28 63 6d 64 20 21 3d 20 6e 75     if (cmd != nu
b710: 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
b720: 20 20 20 20 20 63 6d 64 2e 53 65 74 54 79 70 65       cmd.SetType
b730: 73 28 74 79 70 65 64 65 66 73 29 3b 0d 0a 0d 0a  s(typedefs);....
b740: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 72 65                re
b750: 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20 20 20 20  turn cmd;..     
b760: 20 20 20 20 20 20 20 7d 0d 0a 23 69 66 20 28 4e         }..#if (N
b770: 45 54 5f 33 35 20 7c 7c 20 4e 45 54 5f 34 30 20  ET_35 || NET_40 
b780: 7c 7c 20 4e 45 54 5f 34 35 20 7c 7c 20 4e 45 54  || NET_45 || NET
b790: 5f 34 35 31 20 7c 7c 20 4e 45 54 5f 34 35 32 20  _451 || NET_452 
b7a0: 7c 7c 20 4e 45 54 5f 34 36 20 7c 7c 20 4e 45 54  || NET_46 || NET
b7b0: 5f 34 36 31 20 7c 7c 20 4e 45 54 5f 34 36 32 20  _461 || NET_462 
b7c0: 7c 7c 20 4e 45 54 5f 34 37 29 20 26 26 20 21 50  || NET_47) && !P
b7d0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
b7e0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
b7f0: 20 20 20 20 20 20 65 6c 73 65 20 69 66 20 28 5f        else if (_
b800: 62 75 69 6c 64 69 6e 67 53 63 68 65 6d 61 20 3d  buildingSchema =
b810: 3d 20 66 61 6c 73 65 20 26 26 20 53 74 72 69 6e  = false && Strin
b820: 67 2e 43 6f 6d 70 61 72 65 28 47 65 74 4c 61 73  g.Compare(GetLas
b830: 74 45 72 72 6f 72 28 29 2c 20 30 2c 20 22 6e 6f  tError(), 0, "no
b840: 20 73 75 63 68 20 74 61 62 6c 65 3a 20 54 45 4d   such table: TEM
b850: 50 2e 53 43 48 45 4d 41 22 2c 20 30 2c 20 32 36  P.SCHEMA", 0, 26
b860: 2c 20 53 74 72 69 6e 67 43 6f 6d 70 61 72 69 73  , StringComparis
b870: 6f 6e 2e 4f 72 64 69 6e 61 6c 49 67 6e 6f 72 65  on.OrdinalIgnore
b880: 43 61 73 65 29 20 3d 3d 20 30 29 0d 0a 20 20 20  Case) == 0)..   
b890: 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
b8a0: 20 20 20 20 20 20 20 20 20 20 73 74 72 52 65 6d            strRem
b8b0: 61 69 6e 20 3d 20 53 74 72 69 6e 67 2e 45 6d 70  ain = String.Emp
b8c0: 74 79 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ty;..           
b8d0: 20 20 20 5f 62 75 69 6c 64 69 6e 67 53 63 68 65     _buildingSche
b8e0: 6d 61 20 3d 20 74 72 75 65 3b 0d 0a 20 20 20 20  ma = true;..    
b8f0: 20 20 20 20 20 20 20 20 20 20 74 72 79 0d 0a 20            try.. 
b900: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b920: 49 53 51 4c 69 74 65 53 63 68 65 6d 61 45 78 74  ISQLiteSchemaExt
b930: 65 6e 73 69 6f 6e 73 20 65 78 74 20 3d 20 28 28  ensions ext = ((
b940: 49 53 65 72 76 69 63 65 50 72 6f 76 69 64 65 72  IServiceProvider
b950: 29 53 51 4c 69 74 65 46 61 63 74 6f 72 79 2e 49  )SQLiteFactory.I
b960: 6e 73 74 61 6e 63 65 29 2e 47 65 74 53 65 72 76  nstance).GetServ
b970: 69 63 65 28 74 79 70 65 6f 66 28 49 53 51 4c 69  ice(typeof(ISQLi
b980: 74 65 53 63 68 65 6d 61 45 78 74 65 6e 73 69 6f  teSchemaExtensio
b990: 6e 73 29 29 20 61 73 20 49 53 51 4c 69 74 65 53  ns)) as ISQLiteS
b9a0: 63 68 65 6d 61 45 78 74 65 6e 73 69 6f 6e 73 3b  chemaExtensions;
b9b0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
b9c0: 20 20 20 20 69 66 20 28 65 78 74 20 21 3d 20 6e      if (ext != n
b9d0: 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
b9e0: 20 20 20 20 20 20 20 20 65 78 74 2e 42 75 69 6c          ext.Buil
b9f0: 64 54 65 6d 70 53 63 68 65 6d 61 28 63 6e 6e 29  dTempSchema(cnn)
ba00: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ba10: 20 20 20 20 20 77 68 69 6c 65 20 28 63 6d 64 20       while (cmd 
ba20: 3d 3d 20 6e 75 6c 6c 20 26 26 20 73 74 72 53 71  == null && strSq
ba30: 6c 2e 4c 65 6e 67 74 68 20 3e 20 30 29 0d 0a 20  l.Length > 0).. 
ba40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
ba50: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
ba60: 20 20 20 20 63 6d 64 20 3d 20 50 72 65 70 61 72      cmd = Prepar
ba70: 65 28 63 6e 6e 2c 20 73 74 72 53 71 6c 2c 20 70  e(cnn, strSql, p
ba80: 72 65 76 69 6f 75 73 2c 20 74 69 6d 65 6f 75 74  revious, timeout
ba90: 4d 53 2c 20 72 65 66 20 73 74 72 52 65 6d 61 69  MS, ref strRemai
baa0: 6e 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  n);..           
bab0: 20 20 20 20 20 20 20 73 74 72 53 71 6c 20 3d 20         strSql = 
bac0: 73 74 72 52 65 6d 61 69 6e 3b 0d 0a 20 20 20 20  strRemain;..    
bad0: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
bae0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
baf0: 20 72 65 74 75 72 6e 20 63 6d 64 3b 0d 0a 20 20   return cmd;..  
bb00: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20              }.. 
bb10: 20 20 20 20 20 20 20 20 20 20 20 20 20 66 69 6e               fin
bb20: 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 20 20  ally..          
bb30: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
bb40: 20 20 20 20 20 20 20 5f 62 75 69 6c 64 69 6e 67         _building
bb50: 53 63 68 65 6d 61 20 3d 20 66 61 6c 73 65 3b 0d  Schema = false;.
bb60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d  .              }
bb70: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d  ..            }.
bb80: 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20  .#endif..       
bb90: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
bba0: 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d 20 53 51  else if (n == SQ
bbb0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4c 6f  LiteErrorCode.Lo
bbc0: 63 6b 65 64 20 7c 7c 20 6e 20 3d 3d 20 53 51 4c  cked || n == SQL
bbd0: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 42 75 73  iteErrorCode.Bus
bbe0: 79 29 20 2f 2f 20 4c 6f 63 6b 65 64 20 2d 2d 20  y) // Locked -- 
bbf0: 64 65 6c 61 79 20 61 20 73 6d 61 6c 6c 20 61 6d  delay a small am
bc00: 6f 75 6e 74 20 62 65 66 6f 72 65 20 72 65 74 72  ount before retr
bc10: 79 69 6e 67 0d 0a 20 20 20 20 20 20 20 20 20 20  ying..          
bc20: 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 2f  {..            /
bc30: 2f 20 4b 65 65 70 20 74 72 79 69 6e 67 0d 0a 20  / Keep trying.. 
bc40: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 72             if (r
bc50: 6e 64 20 3d 3d 20 6e 75 6c 6c 29 20 2f 2f 20 46  nd == null) // F
bc60: 69 72 73 74 20 74 69 6d 65 20 77 65 27 76 65 20  irst time we've 
bc70: 65 6e 63 6f 75 6e 74 65 72 65 64 20 74 68 65 20  encountered the 
bc80: 6c 6f 63 6b 0d 0a 20 20 20 20 20 20 20 20 20 20  lock..          
bc90: 20 20 20 20 72 6e 64 20 3d 20 6e 65 77 20 52 61      rnd = new Ra
bca0: 6e 64 6f 6d 28 29 3b 0d 0a 0d 0a 20 20 20 20 20  ndom();....     
bcb0: 20 20 20 20 20 20 20 2f 2f 20 49 66 20 77 65 27         // If we'
bcc0: 76 65 20 65 78 63 65 65 64 65 64 20 74 68 65 20  ve exceeded the 
bcd0: 63 6f 6d 6d 61 6e 64 27 73 20 74 69 6d 65 6f 75  command's timeou
bce0: 74 2c 20 67 69 76 65 20 75 70 20 61 6e 64 20 74  t, give up and t
bcf0: 68 72 6f 77 20 61 6e 20 65 72 72 6f 72 0d 0a 20  hrow an error.. 
bd00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28             if ((
bd10: 75 69 6e 74 29 45 6e 76 69 72 6f 6e 6d 65 6e 74  uint)Environment
bd20: 2e 54 69 63 6b 43 6f 75 6e 74 20 2d 20 73 74 61  .TickCount - sta
bd30: 72 74 74 69 63 6b 20 3e 20 74 69 6d 65 6f 75 74  rttick > timeout
bd40: 4d 53 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  MS)..           
bd50: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
bd60: 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
bd70: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
bd80: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
bd90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a  .            }..
bda0: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
bdb0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d  ..            {.
bdc0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  .              /
bdd0: 2f 20 4f 74 68 65 72 77 69 73 65 20 73 6c 65 65  / Otherwise slee
bde0: 70 20 66 6f 72 20 61 20 72 61 6e 64 6f 6d 20 61  p for a random a
bdf0: 6d 6f 75 6e 74 20 6f 66 20 74 69 6d 65 20 75 70  mount of time up
be00: 20 74 6f 20 31 35 30 6d 73 0d 0a 20 20 20 20 20   to 150ms..     
be10: 20 20 20 20 20 20 20 20 20 53 79 73 74 65 6d 2e           System.
be20: 54 68 72 65 61 64 69 6e 67 2e 54 68 72 65 61 64  Threading.Thread
be30: 2e 53 6c 65 65 70 28 72 6e 64 2e 4e 65 78 74 28  .Sleep(rnd.Next(
be40: 31 2c 20 31 35 30 29 29 3b 0d 0a 20 20 20 20 20  1, 150));..     
be50: 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
be60: 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d      }..        }
be70: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
be80: 53 68 6f 75 6c 64 54 68 72 6f 77 46 6f 72 43 61  ShouldThrowForCa
be90: 6e 63 65 6c 28 29 29 0d 0a 20 20 20 20 20 20 20  ncel())..       
bea0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
beb0: 69 66 20 28 28 6e 20 3d 3d 20 53 51 4c 69 74 65  if ((n == SQLite
bec0: 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 7c 7c  ErrorCode.Ok) ||
bed0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
bee0: 20 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72    (n == SQLiteEr
bef0: 72 6f 72 43 6f 64 65 2e 52 6f 77 29 20 7c 7c 0d  rorCode.Row) ||.
bf00: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
bf10: 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72   (n == SQLiteErr
bf20: 6f 72 43 6f 64 65 2e 44 6f 6e 65 29 29 0d 0a 20  orCode.Done)).. 
bf30: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
bf40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6e 20                n 
bf50: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
bf60: 65 2e 49 6e 74 65 72 72 75 70 74 3b 0d 0a 20 20  e.Interrupt;..  
bf70: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20            }.... 
bf80: 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
bf90: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
bfa0: 74 69 6f 6e 28 6e 2c 20 6e 75 6c 6c 29 3b 0d 0a  tion(n, null);..
bfb0: 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20          }....   
bfc0: 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
bfd0: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 49 6e  LiteErrorCode.In
bfe0: 74 65 72 72 75 70 74 29 20 72 65 74 75 72 6e 20  terrupt) return 
bff0: 6e 75 6c 6c 3b 0d 0a 20 20 20 20 20 20 20 20 69  null;..        i
c000: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
c010: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
c020: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
c030: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
c040: 45 72 72 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20  Error());....   
c050: 20 20 20 20 20 73 74 72 52 65 6d 61 69 6e 20 3d       strRemain =
c060: 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 70 74   UTF8ToString(pt
c070: 72 2c 20 6c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20  r, len);....    
c080: 20 20 20 20 69 66 20 28 73 74 61 74 65 6d 65 6e      if (statemen
c090: 74 48 61 6e 64 6c 65 20 21 3d 20 6e 75 6c 6c 29  tHandle != null)
c0a0: 20 63 6d 64 20 3d 20 6e 65 77 20 53 51 4c 69 74   cmd = new SQLit
c0b0: 65 53 74 61 74 65 6d 65 6e 74 28 74 68 69 73 2c  eStatement(this,
c0c0: 20 66 6c 61 67 73 2c 20 73 74 61 74 65 6d 65 6e   flags, statemen
c0d0: 74 48 61 6e 64 6c 65 2c 20 73 74 72 53 71 6c 2e  tHandle, strSql.
c0e0: 53 75 62 73 74 72 69 6e 67 28 30 2c 20 73 74 72  Substring(0, str
c0f0: 53 71 6c 2e 4c 65 6e 67 74 68 20 2d 20 73 74 72  Sql.Length - str
c100: 52 65 6d 61 69 6e 2e 4c 65 6e 67 74 68 29 2c 20  Remain.Length), 
c110: 70 72 65 76 69 6f 75 73 29 3b 0d 0a 0d 0a 20 20  previous);....  
c120: 20 20 20 20 20 20 72 65 74 75 72 6e 20 63 6d 64        return cmd
c130: 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
c140: 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20    finally..     
c150: 20 7b 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64   {..        hand
c160: 6c 65 2e 46 72 65 65 28 29 3b 0d 0a 20 20 20 20  le.Free();..    
c170: 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
c180: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
c190: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
c1a0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
c1b0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
c1c0: 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
c1d0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
c1e0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c1f0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c200: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
c210: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
c220: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
c230: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
c240: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
c250: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
c260: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
c270: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
c280: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
c290: 20 4e 55 4c 4c 2e 2e 2e 22 2c 0d 0a 20 20 20 20   NULL...",..    
c2a0: 20 20 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e          handleIn
c2b0: 74 50 74 72 2c 20 69 6e 64 65 78 29 29 3b 0d 0a  tPtr, index));..
c2c0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f      }....    pro
c2d0: 74 65 63 74 65 64 20 73 74 61 74 69 63 20 76 6f  tected static vo
c2e0: 69 64 20 4c 6f 67 42 69 6e 64 28 53 51 4c 69 74  id LogBind(SQLit
c2f0: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
c300: 20 68 61 6e 64 6c 65 2c 20 69 6e 74 20 69 6e 64   handle, int ind
c310: 65 78 2c 20 56 61 6c 75 65 54 79 70 65 20 76 61  ex, ValueType va
c320: 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
c330: 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
c340: 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e 64 6c  leIntPtr = handl
c350: 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51  e;....        SQ
c360: 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61  LiteLog.LogMessa
c370: 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73  ge(HelperMethods
c380: 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a  .StringFormat(..
c390: 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
c3a0: 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
c3b0: 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
c3c0: 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20 73 74       "Binding st
c3d0: 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61  atement {0} para
c3e0: 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74 79 70  mter #{1} as typ
c3f0: 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c 75 65  e {2} with value
c400: 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20   {{{3}}}...",.. 
c410: 20 20 20 20 20 20 20 20 20 20 20 68 61 6e 64 6c             handl
c420: 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78 2c 20  eIntPtr, index, 
c430: 76 61 6c 75 65 2e 47 65 74 54 79 70 65 28 29 2c  value.GetType(),
c440: 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d   value));..    }
c450: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
c460: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 46 6f  static string Fo
c470: 72 6d 61 74 44 61 74 65 54 69 6d 65 28 44 61 74  rmatDateTime(Dat
c480: 65 54 69 6d 65 20 76 61 6c 75 65 29 0d 0a 20 20  eTime value)..  
c490: 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 74 72    {..        Str
c4a0: 69 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c  ingBuilder resul
c4b0: 74 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75  t = new StringBu
c4c0: 69 6c 64 65 72 28 29 3b 0d 0a 0d 0a 20 20 20 20  ilder();....    
c4d0: 20 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e      result.Appen
c4e0: 64 28 76 61 6c 75 65 2e 54 6f 53 74 72 69 6e 67  d(value.ToString
c4f0: 28 22 79 79 79 79 2d 4d 4d 2d 64 64 54 48 48 3a  ("yyyy-MM-ddTHH:
c500: 6d 6d 3a 73 73 2e 46 46 46 46 46 46 46 4b 22 29  mm:ss.FFFFFFFK")
c510: 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75  );..        resu
c520: 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b 0d  lt.Append(' ');.
c530: 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74 2e  .        result.
c540: 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 4b 69 6e  Append(value.Kin
c550: 64 29 3b 0d 0a 20 20 20 20 20 20 20 20 72 65 73  d);..        res
c560: 75 6c 74 2e 41 70 70 65 6e 64 28 27 20 27 29 3b  ult.Append(' ');
c570: 0d 0a 20 20 20 20 20 20 20 20 72 65 73 75 6c 74  ..        result
c580: 2e 41 70 70 65 6e 64 28 76 61 6c 75 65 2e 54 69  .Append(value.Ti
c590: 63 6b 73 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  cks);....       
c5a0: 20 72 65 74 75 72 6e 20 72 65 73 75 6c 74 2e 54   return result.T
c5b0: 6f 53 74 72 69 6e 67 28 29 3b 0d 0a 20 20 20 20  oString();..    
c5c0: 7d 0d 0a 0d 0a 20 20 20 20 70 72 6f 74 65 63 74  }....    protect
c5d0: 65 64 20 73 74 61 74 69 63 20 76 6f 69 64 20 4c  ed static void L
c5e0: 6f 67 42 69 6e 64 28 53 51 4c 69 74 65 53 74 61  ogBind(SQLiteSta
c5f0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
c600: 64 6c 65 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20  dle, int index, 
c610: 44 61 74 65 54 69 6d 65 20 76 61 6c 75 65 29 0d  DateTime value).
c620: 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
c630: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
c640: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
c650: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c  .        SQLiteL
c660: 6f 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65  og.LogMessage(He
c670: 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
c680: 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
c690: 20 20 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e         CultureIn
c6a0: 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72  fo.CurrentCultur
c6b0: 65 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e,..            
c6c0: 22 42 69 6e 64 69 6e 67 20 73 74 61 74 65 6d 65  "Binding stateme
c6d0: 6e 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20  nt {0} paramter 
c6e0: 23 7b 31 7d 20 61 73 20 74 79 70 65 20 7b 32 7d  #{1} as type {2}
c6f0: 20 77 69 74 68 20 76 61 6c 75 65 20 7b 7b 7b 33   with value {{{3
c700: 7d 7d 7d 2e 2e 2e 22 2c 0d 0a 20 20 20 20 20 20  }}}...",..      
c710: 20 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50        handleIntP
c720: 74 72 2c 20 69 6e 64 65 78 2c 20 74 79 70 65 6f  tr, index, typeo
c730: 66 28 44 61 74 65 54 69 6d 65 29 2c 20 46 6f 72  f(DateTime), For
c740: 6d 61 74 44 61 74 65 54 69 6d 65 28 76 61 6c 75  matDateTime(valu
c750: 65 29 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  e)));..    }....
c760: 20 20 20 20 70 72 6f 74 65 63 74 65 64 20 73 74      protected st
c770: 61 74 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e  atic void LogBin
c780: 64 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  d(SQLiteStatemen
c790: 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20  tHandle handle, 
c7a0: 69 6e 74 20 69 6e 64 65 78 2c 20 73 74 72 69 6e  int index, strin
c7b0: 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  g value)..    {.
c7c0: 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20  .        IntPtr 
c7d0: 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68  handleIntPtr = h
c7e0: 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20  andle;....      
c7f0: 20 20 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d    SQLiteLog.LogM
c800: 65 73 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74  essage(HelperMet
c810: 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
c820: 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
c830: 43 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72  CultureInfo.Curr
c840: 65 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20  entCulture,..   
c850: 20 20 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e           "Bindin
c860: 67 20 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20  g statement {0} 
c870: 70 61 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73  paramter #{1} as
c880: 20 74 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76   type {2} with v
c890: 61 6c 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22  alue {{{3}}}..."
c8a0: 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 68  ,..            h
c8b0: 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64  andleIntPtr, ind
c8c0: 65 78 2c 20 74 79 70 65 6f 66 28 53 74 72 69 6e  ex, typeof(Strin
c8d0: 67 29 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75  g), (value != nu
c8e0: 6c 6c 29 20 3f 20 76 61 6c 75 65 20 3a 20 22 3c  ll) ? value : "<
c8f0: 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20 20 20 7d  null>"));..    }
c900: 0d 0a 0d 0a 20 20 20 20 70 72 69 76 61 74 65 20  ....    private 
c910: 73 74 61 74 69 63 20 73 74 72 69 6e 67 20 54 6f  static string To
c920: 48 65 78 61 64 65 63 69 6d 61 6c 53 74 72 69 6e  HexadecimalStrin
c930: 67 28 0d 0a 20 20 20 20 20 20 20 20 62 79 74 65  g(..        byte
c940: 5b 5d 20 61 72 72 61 79 0d 0a 20 20 20 20 20 20  [] array..      
c950: 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20    )..    {..    
c960: 20 20 20 20 69 66 20 28 61 72 72 61 79 20 3d 3d      if (array ==
c970: 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
c980: 20 20 20 20 72 65 74 75 72 6e 20 6e 75 6c 6c 3b      return null;
c990: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 74 72 69  ....        Stri
c9a0: 6e 67 42 75 69 6c 64 65 72 20 72 65 73 75 6c 74  ngBuilder result
c9b0: 20 3d 20 6e 65 77 20 53 74 72 69 6e 67 42 75 69   = new StringBui
c9c0: 6c 64 65 72 28 61 72 72 61 79 2e 4c 65 6e 67 74  lder(array.Lengt
c9d0: 68 20 2a 20 32 29 3b 0d 0a 0d 0a 20 20 20 20 20  h * 2);....     
c9e0: 20 20 20 69 6e 74 20 6c 65 6e 67 74 68 20 3d 20     int length = 
c9f0: 61 72 72 61 79 2e 4c 65 6e 67 74 68 3b 0d 0a 0d  array.Length;...
ca00: 0a 20 20 20 20 20 20 20 20 66 6f 72 20 28 69 6e  .        for (in
ca10: 74 20 69 6e 64 65 78 20 3d 20 30 3b 20 69 6e 64  t index = 0; ind
ca20: 65 78 20 3c 20 6c 65 6e 67 74 68 3b 20 69 6e 64  ex < length; ind
ca30: 65 78 2b 2b 29 0d 0a 20 20 20 20 20 20 20 20 20  ex++)..         
ca40: 20 20 20 72 65 73 75 6c 74 2e 41 70 70 65 6e 64     result.Append
ca50: 28 61 72 72 61 79 5b 69 6e 64 65 78 5d 2e 54 6f  (array[index].To
ca60: 53 74 72 69 6e 67 28 22 78 32 22 29 29 3b 0d 0a  String("x2"));..
ca70: 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
ca80: 20 72 65 73 75 6c 74 2e 54 6f 53 74 72 69 6e 67   result.ToString
ca90: 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  ();..    }....  
caa0: 20 20 70 72 6f 74 65 63 74 65 64 20 73 74 61 74    protected stat
cab0: 69 63 20 76 6f 69 64 20 4c 6f 67 42 69 6e 64 28  ic void LogBind(
cac0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48  SQLiteStatementH
cad0: 61 6e 64 6c 65 20 68 61 6e 64 6c 65 2c 20 69 6e  andle handle, in
cae0: 74 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20  t index, byte[] 
caf0: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
cb00: 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 68 61         IntPtr ha
cb10: 6e 64 6c 65 49 6e 74 50 74 72 20 3d 20 68 61 6e  ndleIntPtr = han
cb20: 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  dle;....        
cb30: 53 51 4c 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73  SQLiteLog.LogMes
cb40: 73 61 67 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  sage(HelperMetho
cb50: 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
cb60: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 43 75  ..            Cu
cb70: 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e  ltureInfo.Curren
cb80: 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20  tCulture,..     
cb90: 20 20 20 20 20 20 20 22 42 69 6e 64 69 6e 67 20         "Binding 
cba0: 73 74 61 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61  statement {0} pa
cbb0: 72 61 6d 74 65 72 20 23 7b 31 7d 20 61 73 20 74  ramter #{1} as t
cbc0: 79 70 65 20 7b 32 7d 20 77 69 74 68 20 76 61 6c  ype {2} with val
cbd0: 75 65 20 7b 7b 7b 33 7d 7d 7d 2e 2e 2e 22 2c 0d  ue {{{3}}}...",.
cbe0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e  .            han
cbf0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
cc00: 2c 20 74 79 70 65 6f 66 28 42 79 74 65 5b 5d 29  , typeof(Byte[])
cc10: 2c 20 28 76 61 6c 75 65 20 21 3d 20 6e 75 6c 6c  , (value != null
cc20: 29 20 3f 20 54 6f 48 65 78 61 64 65 63 69 6d 61  ) ? ToHexadecima
cc30: 6c 53 74 72 69 6e 67 28 76 61 6c 75 65 29 20 3a  lString(value) :
cc40: 20 22 3c 6e 75 6c 6c 3e 22 29 29 3b 0d 0a 20 20   "<null>"));..  
cc50: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
cc60: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
cc70: 64 20 42 69 6e 64 5f 44 6f 75 62 6c 65 28 53 51  d Bind_Double(SQ
cc80: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
cc90: 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  mt, SQLiteConnec
cca0: 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c  tionFlags flags,
ccb0: 20 69 6e 74 20 69 6e 64 65 78 2c 20 64 6f 75 62   int index, doub
ccc0: 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  le value)..    {
ccd0: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cce0: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
ccf0: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
cd00: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
cd10: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
cd20: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
cd30: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
cd40: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
cd50: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
cd60: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
cd70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
cd80: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
cd90: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
cda0: 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50       }....#if !P
cdb0: 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
cdc0: 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
cdd0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
cde0: 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69  e n = UnsafeNati
cdf0: 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
ce00: 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 28 68 61  3_bind_double(ha
ce10: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
ce20: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66  ue);..        if
ce30: 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
ce40: 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
ce50: 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
ce60: 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
ce70: 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66 20  rror());..#elif 
ce80: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
ce90: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
cea0: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
ceb0: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
cec0: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 64  s.sqlite3_bind_d
ced0: 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 68 61  ouble_interop(ha
cee0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65 66  ndle, index, ref
cef0: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
cf00: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
cf10: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
cf20: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
cf30: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
cf40: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65  astError());..#e
cf50: 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68 72  lse..        thr
cf60: 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
cf70: 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
cf80: 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
cf90: 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
cfa0: 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 42   override void B
cfb0: 69 6e 64 5f 49 6e 74 33 32 28 53 51 4c 69 74 65  ind_Int32(SQLite
cfc0: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
cfd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
cfe0: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
cff0: 20 69 6e 64 65 78 2c 20 69 6e 74 20 76 61 6c 75   index, int valu
d000: 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
d010: 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65     SQLiteStateme
d020: 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  ntHandle handle 
d030: 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  = stmt._sqlite_s
d040: 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  tmt;....        
d050: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
d060: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d070: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
d080: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
d090: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
d0a0: 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
d0b0: 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61        LogBind(ha
d0c0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c  ndle, index, val
d0d0: 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ue);..        }.
d0e0: 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  ...        SQLit
d0f0: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
d100: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
d110: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
d120: 69 6e 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  int(handle, inde
d130: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
d140: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
d150: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
d160: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d170: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
d180: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
d190: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d1a0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d1b0: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 33 32 28  oid Bind_UInt32(
d1c0: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
d1d0: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
d1e0: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
d1f0: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 69  s, int index, ui
d200: 6e 74 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b  nt value)..    {
d210: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
d220: 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20  StatementHandle 
d230: 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73  handle = stmt._s
d240: 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20  qlite_stmt;.... 
d250: 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67         if ((flag
d260: 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63  s & SQLiteConnec
d270: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
d280: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
d290: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
d2a0: 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ind)..        {.
d2b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67  .            Log
d2c0: 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64  Bind(handle, ind
d2d0: 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20  ex, value);..   
d2e0: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
d2f0: 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64    SQLiteErrorCod
d300: 65 20 6e 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  e n;....        
d310: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
d320: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d330: 67 73 2e 42 69 6e 64 55 49 6e 74 33 32 41 73 49  gs.BindUInt32AsI
d340: 6e 74 36 34 29 20 3d 3d 20 53 51 4c 69 74 65 43  nt64) == SQLiteC
d350: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42  onnectionFlags.B
d360: 69 6e 64 55 49 6e 74 33 32 41 73 49 6e 74 36 34  indUInt32AsInt64
d370: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
d380: 20 20 20 20 20 20 20 20 20 20 6c 6f 6e 67 20 76            long v
d390: 61 6c 75 65 32 20 3d 20 76 61 6c 75 65 3b 0d 0a  alue2 = value;..
d3a0: 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f  ..#if !PLATFORM_
d3b0: 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b  COMPACTFRAMEWORK
d3c0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 20  ..            n 
d3d0: 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
d3e0: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
d3f0: 6e 64 5f 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c  nd_int64(handle,
d400: 20 69 6e 64 65 78 2c 20 76 61 6c 75 65 32 29 3b   index, value2);
d410: 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
d420: 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
d430: 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
d440: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
d450: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
d460: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
d470: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
d480: 65 32 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20  e2);..#else..   
d490: 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e           throw n
d4a0: 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
d4b0: 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
d4c0: 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 7d  endif..        }
d4d0: 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a  ..        else..
d4e0: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
d4f0: 20 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66         n = Unsaf
d500: 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
d510: 71 6c 69 74 65 33 5f 62 69 6e 64 5f 75 69 6e 74  qlite3_bind_uint
d520: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
d530: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
d540: 20 7d 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   }..        if (
d550: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
d560: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
d570: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
d580: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
d590: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
d5a0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
d5b0: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
d5c0: 5f 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  _Int64(SQLiteSta
d5d0: 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c  tement stmt, SQL
d5e0: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d5f0: 67 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e  gs flags, int in
d600: 64 65 78 2c 20 6c 6f 6e 67 20 76 61 6c 75 65 29  dex, long value)
d610: 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
d620: 20 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74   SQLiteStatement
d630: 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
d640: 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
d650: 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  t;....        if
d660: 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74   ((flags & SQLit
d670: 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
d680: 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53 51 4c  .LogBind) == SQL
d690: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
d6a0: 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20 20 20  gs.LogBind)..   
d6b0: 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
d6c0: 20 20 20 20 4c 6f 67 42 69 6e 64 28 68 61 6e 64      LogBind(hand
d6d0: 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61 6c 75 65  le, index, value
d6e0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
d6f0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
d700: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
d710: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
d720: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
d730: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
d740: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e  .sqlite3_bind_in
d750: 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  t64(handle, inde
d760: 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20  x, value);..    
d770: 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
d780: 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
d790: 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
d7a0: 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
d7b0: 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
d7c0: 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f 53 54  #elif !SQLITE_ST
d7d0: 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20  ANDARD..        
d7e0: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
d7f0: 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
d800: 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
d810: 62 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72  bind_int64_inter
d820: 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  op(handle, index
d830: 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
d840: 20 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20         if (n != 
d850: 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
d860: 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51  Ok) throw new SQ
d870: 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c  LiteException(n,
d880: 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29   GetLastError())
d890: 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
d8a0: 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
d8b0: 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
d8c0: 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ion();..#endif..
d8d0: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
d8e0: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
d8f0: 6f 69 64 20 42 69 6e 64 5f 55 49 6e 74 36 34 28  oid Bind_UInt64(
d900: 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
d910: 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e  stmt, SQLiteConn
d920: 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67  ectionFlags flag
d930: 73 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 75 6c  s, int index, ul
d940: 6f 6e 67 20 76 61 6c 75 65 29 0d 0a 20 20 20 20  ong value)..    
d950: 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
d960: 65 53 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65  eStatementHandle
d970: 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f   handle = stmt._
d980: 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a  sqlite_stmt;....
d990: 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c 61          if ((fla
d9a0: 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
d9b0: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
d9c0: 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e  nd) == SQLiteCon
d9d0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
d9e0: 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b  Bind)..        {
d9f0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f  ..            Lo
da00: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
da10: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
da20: 20 20 20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 21        }....#if !
da30: 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54  PLATFORM_COMPACT
da40: 46 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20  FRAMEWORK..     
da50: 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
da60: 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  de n = UnsafeNat
da70: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
da80: 65 33 5f 62 69 6e 64 5f 75 69 6e 74 36 34 28 68  e3_bind_uint64(h
da90: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
daa0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 69  lue);..        i
dab0: 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72  f (n != SQLiteEr
dac0: 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f  rorCode.Ok) thro
dad0: 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
dae0: 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74  ption(n, GetLast
daf0: 45 72 72 6f 72 28 29 29 3b 0d 0a 23 65 6c 69 66  Error());..#elif
db00: 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
db10: 44 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  D..        SQLit
db20: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
db30: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
db40: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
db50: 75 69 6e 74 36 34 5f 69 6e 74 65 72 6f 70 28 68  uint64_interop(h
db60: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
db70: 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
db80: 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69     if (n != SQLi
db90: 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20  teErrorCode.Ok) 
dba0: 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
dbb0: 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
dbc0: 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 23  LastError());..#
dbd0: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 74 68  else..        th
dbe0: 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
dbf0: 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
dc00: 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
dc10: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
dc20: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
dc30: 42 69 6e 64 5f 42 6f 6f 6c 65 61 6e 28 53 51 4c  Bind_Boolean(SQL
dc40: 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
dc50: 74 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  t, SQLiteConnect
dc60: 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73 2c 20  ionFlags flags, 
dc70: 69 6e 74 20 69 6e 64 65 78 2c 20 62 6f 6f 6c 20  int index, bool 
dc80: 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20  value)..    {.. 
dc90: 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61         SQLiteSta
dca0: 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e  tementHandle han
dcb0: 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69  dle = stmt._sqli
dcc0: 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20  te_stmt;....    
dcd0: 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26      if ((flags &
dce0: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
dcf0: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20  nFlags.LogBind) 
dd00: 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74  == SQLiteConnect
dd10: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
dd20: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
dd30: 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e            LogBin
dd40: 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  d(handle, index,
dd50: 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20   value);..      
dd60: 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69    }....        i
dd70: 6e 74 20 76 61 6c 75 65 32 20 3d 20 76 61 6c 75  nt value2 = valu
dd80: 65 20 3f 20 31 20 3a 20 30 3b 0d 0a 0d 0a 20 20  e ? 1 : 0;....  
dd90: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
dda0: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
ddb0: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
ddc0: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 28 68  lite3_bind_int(h
ddd0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
dde0: 6c 75 65 32 29 3b 0d 0a 20 20 20 20 20 20 20 20  lue2);..        
ddf0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
de00: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
de10: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
de20: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
de30: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
de40: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
de50: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
de60: 42 69 6e 64 5f 54 65 78 74 28 53 51 4c 69 74 65  Bind_Text(SQLite
de70: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
de80: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
de90: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
dea0: 20 69 6e 64 65 78 2c 20 73 74 72 69 6e 67 20 76   index, string v
deb0: 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  alue)..    {..  
dec0: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
ded0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
dee0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
def0: 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20  e_stmt;....     
df00: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
df10: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
df20: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
df30: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
df40: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
df50: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
df60: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
df70: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
df80: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
df90: 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 79   }....        by
dfa0: 74 65 5b 5d 20 62 20 3d 20 54 6f 55 54 46 38 28  te[] b = ToUTF8(
dfb0: 76 61 6c 75 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  value);....     
dfc0: 20 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20     if ((flags & 
dfd0: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
dfe0: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d  Flags.LogBind) =
dff0: 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
e000: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
e010: 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
e020: 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64           LogBind
e030: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
e040: 62 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  b);..        }..
e050: 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65  ..        SQLite
e060: 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
e070: 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
e080: 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74  s.sqlite3_bind_t
e090: 65 78 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ext(handle, inde
e0a0: 78 2c 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d  x, b, b.Length -
e0b0: 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29   1, (IntPtr)(-1)
e0c0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
e0d0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
e0e0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
e0f0: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
e100: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
e110: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
e120: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
e130: 65 72 72 69 64 65 20 76 6f 69 64 20 42 69 6e 64  erride void Bind
e140: 5f 44 61 74 65 54 69 6d 65 28 53 51 4c 69 74 65  _DateTime(SQLite
e150: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
e160: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
e170: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
e180: 20 69 6e 64 65 78 2c 20 44 61 74 65 54 69 6d 65   index, DateTime
e190: 20 64 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20   dt)..    {..   
e1a0: 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65       SQLiteState
e1b0: 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c  mentHandle handl
e1c0: 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65  e = stmt._sqlite
e1d0: 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20 20 20 20  _stmt;....      
e1e0: 20 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53    if ((flags & S
e1f0: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e200: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d  lags.LogBind) ==
e210: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
e220: 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d  nFlags.LogBind).
e230: 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
e240: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
e250: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 64  handle, index, d
e260: 74 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  t);..        }..
e270: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
e280: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
e290: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e  nectionFlags.Bin
e2a0: 64 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e  dDateTimeWithKin
e2b0: 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e  d) == SQLiteConn
e2c0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 42 69 6e 64  ectionFlags.Bind
e2d0: 44 61 74 65 54 69 6d 65 57 69 74 68 4b 69 6e 64  DateTimeWithKind
e2e0: 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
e2f0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 5f            if ((_
e300: 64 61 74 65 74 69 6d 65 4b 69 6e 64 20 21 3d 20  datetimeKind != 
e310: 44 61 74 65 54 69 6d 65 4b 69 6e 64 2e 55 6e 73  DateTimeKind.Uns
e320: 70 65 63 69 66 69 65 64 29 20 26 26 0d 0a 20 20  pecified) &&..  
e330: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
e340: 74 2e 4b 69 6e 64 20 21 3d 20 44 61 74 65 54 69  t.Kind != DateTi
e350: 6d 65 4b 69 6e 64 2e 55 6e 73 70 65 63 69 66 69  meKind.Unspecifi
e360: 65 64 29 20 26 26 0d 0a 20 20 20 20 20 20 20 20  ed) &&..        
e370: 20 20 20 20 20 20 20 20 28 64 74 2e 4b 69 6e 64          (dt.Kind
e380: 20 21 3d 20 5f 64 61 74 65 74 69 6d 65 4b 69 6e   != _datetimeKin
e390: 64 29 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  d))..           
e3a0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
e3b0: 20 20 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d      if (_datetim
e3c0: 65 4b 69 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d  eKind == DateTim
e3d0: 65 4b 69 6e 64 2e 55 74 63 29 0d 0a 20 20 20 20  eKind.Utc)..    
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e3f0: 64 74 20 3d 20 64 74 2e 54 6f 55 6e 69 76 65 72  dt = dt.ToUniver
e400: 73 61 6c 54 69 6d 65 28 29 3b 0d 0a 20 20 20 20  salTime();..    
e410: 20 20 20 20 20 20 20 20 20 20 20 20 65 6c 73 65              else
e420: 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 4b 69   if (_datetimeKi
e430: 6e 64 20 3d 3d 20 44 61 74 65 54 69 6d 65 4b 69  nd == DateTimeKi
e440: 6e 64 2e 4c 6f 63 61 6c 29 0d 0a 20 20 20 20 20  nd.Local)..     
e450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 64                 d
e460: 74 20 3d 20 64 74 2e 54 6f 4c 6f 63 61 6c 54 69  t = dt.ToLocalTi
e470: 6d 65 28 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  me();..         
e480: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
e490: 0a 0d 0a 20 20 20 20 20 20 20 20 73 77 69 74 63  ...        switc
e4a0: 68 20 28 5f 64 61 74 65 74 69 6d 65 46 6f 72 6d  h (_datetimeForm
e4b0: 61 74 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  at)..        {..
e4c0: 20 20 20 20 20 20 20 20 20 20 20 20 63 61 73 65              case
e4d0: 20 53 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61   SQLiteDateForma
e4e0: 74 73 2e 54 69 63 6b 73 3a 0d 0a 20 20 20 20 20  ts.Ticks:..     
e4f0: 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20             {..  
e500: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e510: 20 20 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 64    long value = d
e520: 74 2e 54 69 63 6b 73 3b 0d 0a 0d 0a 20 20 20 20  t.Ticks;....    
e530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e540: 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
e550: 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
e560: 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20 53  gs.LogBind) == S
e570: 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
e580: 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a 20  lags.LogBind).. 
e590: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5a0: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
e5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f                Lo
e5c0: 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e  gBind(handle, in
e5d0: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
e5e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e5f0: 20 20 7d 0d 0a 0d 0a 23 69 66 20 21 50 4c 41 54    }....#if !PLAT
e600: 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
e610: 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 20 20 20  EWORK..         
e620: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
e630: 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
e640: 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
e650: 64 73 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f  ds.sqlite3_bind_
e660: 69 6e 74 36 34 28 68 61 6e 64 6c 65 2c 20 69 6e  int64(handle, in
e670: 64 65 78 2c 20 76 61 6c 75 65 29 3b 0d 0a 20 20  dex, value);..  
e680: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e690: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
e6a0: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
e6b0: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
e6c0: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
e6d0: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
e6e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e6f0: 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 69 66 20    break;..#elif 
e700: 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
e710: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
e720: 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f        SQLiteErro
e730: 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65  rCode n = Unsafe
e740: 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
e750: 6c 69 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34  lite3_bind_int64
e760: 5f 69 6e 74 65 72 6f 70 28 68 61 6e 64 6c 65 2c  _interop(handle,
e770: 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c 75   index, ref valu
e780: 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  e);..           
e790: 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20 21           if (n !
e7a0: 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64  = SQLiteErrorCod
e7b0: 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65 77 20  e.Ok) throw new 
e7c0: 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28  SQLiteException(
e7d0: 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28  n, GetLastError(
e7e0: 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ));..           
e7f0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
e800: 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
e810: 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
e820: 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65  w new NotImpleme
e830: 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b  ntedException();
e840: 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20  ..#endif..      
e850: 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
e860: 20 20 20 20 20 20 20 20 20 63 61 73 65 20 53 51           case SQ
e870: 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e  LiteDateFormats.
e880: 4a 75 6c 69 61 6e 44 61 79 3a 0d 0a 20 20 20 20  JulianDay:..    
e890: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
e8a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e8b0: 20 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20     double value 
e8c0: 3d 20 54 6f 4a 75 6c 69 61 6e 44 61 79 28 64 74  = ToJulianDay(dt
e8d0: 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20  );....          
e8e0: 20 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66            if ((f
e8f0: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
e900: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
e910: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
e920: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
e930: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
e940: 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
e950: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e960: 20 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28          LogBind(
e970: 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76  handle, index, v
e980: 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20  alue);..        
e990: 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d              }...
e9a0: 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
e9b0: 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
e9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e9d0: 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
e9e0: 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
e9f0: 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
ea00: 69 74 65 33 5f 62 69 6e 64 5f 64 6f 75 62 6c 65  ite3_bind_double
ea10: 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20  (handle, index, 
ea20: 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20  value);..       
ea30: 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20               if 
ea40: 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
ea50: 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20  rCode.Ok) throw 
ea60: 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
ea70: 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72  ion(n, GetLastEr
ea80: 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20  ror());..       
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
eaa0: 61 6b 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49  ak;..#elif !SQLI
eab0: 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
eac0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ead0: 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
eae0: 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
eaf0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
eb00: 5f 62 69 6e 64 5f 64 6f 75 62 6c 65 5f 69 6e 74  _bind_double_int
eb10: 65 72 6f 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64  erop(handle, ind
eb20: 65 78 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d  ex, ref value);.
eb30: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eb40: 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51       if (n != SQ
eb50: 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
eb60: 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69  ) throw new SQLi
eb70: 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47  teException(n, G
eb80: 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d  etLastError());.
eb90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
eba0: 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c       break;..#el
ebb0: 73 65 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  se..            
ebc0: 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
ebd0: 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
ebe0: 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
ebf0: 6e 64 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20  ndif..          
ec00: 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
ec10: 20 20 20 20 20 63 61 73 65 20 53 51 4c 69 74 65       case SQLite
ec20: 44 61 74 65 46 6f 72 6d 61 74 73 2e 55 6e 69 78  DateFormats.Unix
ec30: 45 70 6f 63 68 3a 0d 0a 20 20 20 20 20 20 20 20  Epoch:..        
ec40: 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
ec50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 6c                 l
ec60: 6f 6e 67 20 76 61 6c 75 65 20 3d 20 43 6f 6e 76  ong value = Conv
ec70: 65 72 74 2e 54 6f 49 6e 74 36 34 28 64 74 2e 53  ert.ToInt64(dt.S
ec80: 75 62 74 72 61 63 74 28 55 6e 69 78 45 70 6f 63  ubtract(UnixEpoc
ec90: 68 29 2e 54 6f 74 61 6c 53 65 63 6f 6e 64 73 29  h).TotalSeconds)
eca0: 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
ecb0: 20 20 20 20 20 20 20 20 20 69 66 20 28 28 66 6c           if ((fl
ecc0: 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e  ags & SQLiteConn
ecd0: 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42  ectionFlags.LogB
ece0: 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f  ind) == SQLiteCo
ecf0: 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f  nnectionFlags.Lo
ed00: 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20 20  gBind)..        
ed10: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ed30: 20 20 20 20 20 20 20 4c 6f 67 42 69 6e 64 28 68         LogBind(h
ed40: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
ed50: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
ed60: 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a             }....
ed70: 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
ed80: 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
ed90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eda0: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
edb0: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
edc0: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
edd0: 74 65 33 5f 62 69 6e 64 5f 69 6e 74 36 34 28 68  te3_bind_int64(h
ede0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 76 61  andle, index, va
edf0: 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  lue);..         
ee00: 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e             if (n
ee10: 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
ee20: 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
ee30: 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
ee40: 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
ee50: 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  r());..         
ee60: 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b             break
ee70: 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
ee80: 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
ee90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
eea0: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e  QLiteErrorCode n
eeb0: 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d   = UnsafeNativeM
eec0: 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62  ethods.sqlite3_b
eed0: 69 6e 64 5f 69 6e 74 36 34 5f 69 6e 74 65 72 6f  ind_int64_intero
eee0: 70 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  p(handle, index,
eef0: 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20   ref value);..  
ef00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef10: 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74    if (n != SQLit
ef20: 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74  eErrorCode.Ok) t
ef30: 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45  hrow new SQLiteE
ef40: 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c  xception(n, GetL
ef50: 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20  astError());..  
ef60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef70: 20 20 62 72 65 61 6b 3b 0d 0a 23 65 6c 73 65 0d    break;..#else.
ef80: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
ef90: 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 4e       throw new N
efa0: 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63  otImplementedExc
efb0: 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69  eption();..#endi
efc0: 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  f..             
efd0: 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 20 20     }..          
efe0: 20 20 64 65 66 61 75 6c 74 3a 0d 0a 20 20 20 20    default:..    
eff0: 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20              {.. 
f000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f010: 20 20 20 62 79 74 65 5b 5d 20 62 20 3d 20 54 6f     byte[] b = To
f020: 55 54 46 38 28 64 74 29 3b 0d 0a 0d 0a 20 20 20  UTF8(dt);....   
f030: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f040: 20 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51   if ((flags & SQ
f050: 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c  LiteConnectionFl
f060: 61 67 73 2e 4c 6f 67 42 69 6e 64 29 20 3d 3d 20  ags.LogBind) == 
f070: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f080: 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29 0d 0a  Flags.LogBind)..
f090: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f0a0: 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
f0b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4c                 L
f0c0: 6f 67 42 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69  ogBind(handle, i
f0d0: 6e 64 65 78 2c 20 62 29 3b 0d 0a 20 20 20 20 20  ndex, b);..     
f0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
f0f0: 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ....            
f100: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72          SQLiteEr
f110: 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61  rorCode n = Unsa
f120: 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
f130: 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 74 65 78  sqlite3_bind_tex
f140: 74 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c  t(handle, index,
f150: 20 62 2c 20 62 2e 4c 65 6e 67 74 68 20 2d 20 31   b, b.Length - 1
f160: 2c 20 28 49 6e 74 50 74 72 29 28 2d 31 29 29 3b  , (IntPtr)(-1));
f170: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f180: 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
f190: 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
f1a0: 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
f1b0: 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
f1c0: 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
f1d0: 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
f1e0: 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
f1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d 0d                }.
f200: 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  .        }..    
f210: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f220: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f230: 42 69 6e 64 5f 42 6c 6f 62 28 53 51 4c 69 74 65  Bind_Blob(SQLite
f240: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f250: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f260: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
f270: 20 69 6e 64 65 78 2c 20 62 79 74 65 5b 5d 20 62   index, byte[] b
f280: 6c 6f 62 44 61 74 61 29 0d 0a 20 20 20 20 7b 0d  lobData)..    {.
f290: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53  .        SQLiteS
f2a0: 74 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68  tatementHandle h
f2b0: 61 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71  andle = stmt._sq
f2c0: 6c 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20  lite_stmt;....  
f2d0: 20 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73        if ((flags
f2e0: 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74   & SQLiteConnect
f2f0: 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64  ionFlags.LogBind
f300: 29 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ) == SQLiteConne
f310: 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69  ctionFlags.LogBi
f320: 6e 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  nd)..        {..
f330: 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42              LogB
f340: 69 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65  ind(handle, inde
f350: 78 2c 20 62 6c 6f 62 44 61 74 61 29 3b 0d 0a 20  x, blobData);.. 
f360: 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
f370: 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43      SQLiteErrorC
f380: 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  ode n = UnsafeNa
f390: 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
f3a0: 74 65 33 5f 62 69 6e 64 5f 62 6c 6f 62 28 68 61  te3_bind_blob(ha
f3b0: 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 62 6c 6f  ndle, index, blo
f3c0: 62 44 61 74 61 2c 20 62 6c 6f 62 44 61 74 61 2e  bData, blobData.
f3d0: 4c 65 6e 67 74 68 2c 20 28 49 6e 74 50 74 72 29  Length, (IntPtr)
f3e0: 28 2d 31 29 29 3b 0d 0a 20 20 20 20 20 20 20 20  (-1));..        
f3f0: 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45  if (n != SQLiteE
f400: 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72  rrorCode.Ok) thr
f410: 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
f420: 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73  eption(n, GetLas
f430: 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20  tError());..    
f440: 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
f450: 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
f460: 42 69 6e 64 5f 4e 75 6c 6c 28 53 51 4c 69 74 65  Bind_Null(SQLite
f470: 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20  Statement stmt, 
f480: 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
f490: 46 6c 61 67 73 20 66 6c 61 67 73 2c 20 69 6e 74  Flags flags, int
f4a0: 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
f4b0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 53 74          SQLiteSt
f4c0: 61 74 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61  atementHandle ha
f4d0: 6e 64 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c  ndle = stmt._sql
f4e0: 69 74 65 5f 73 74 6d 74 3b 0d 0a 0d 0a 20 20 20  ite_stmt;....   
f4f0: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
f500: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
f510: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
f520: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
f530: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
f540: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
f550: 20 20 20 20 20 20 20 20 20 20 20 4c 6f 67 42 69             LogBi
f560: 6e 64 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  nd(handle, index
f570: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
f580: 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 45  .        SQLiteE
f590: 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e 73  rrorCode n = Uns
f5a0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
f5b0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 6e 75  .sqlite3_bind_nu
f5c0: 6c 6c 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78  ll(handle, index
f5d0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  );..        if (
f5e0: 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
f5f0: 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
f600: 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
f610: 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
f620: 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  or());..    }...
f630: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
f640: 65 72 72 69 64 65 20 69 6e 74 20 42 69 6e 64 5f  erride int Bind_
f650: 50 61 72 61 6d 43 6f 75 6e 74 28 53 51 4c 69 74  ParamCount(SQLit
f660: 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
f670: 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f   SQLiteConnectio
f680: 6e 46 6c 61 67 73 20 66 6c 61 67 73 29 0d 0a 20  nFlags flags).. 
f690: 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 53 51     {..        SQ
f6a0: 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 48 61 6e  LiteStatementHan
f6b0: 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20 73 74 6d  dle handle = stm
f6c0: 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 3b 0d  t._sqlite_stmt;.
f6d0: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 76 61 6c  .        int val
f6e0: 75 65 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76  ue = UnsafeNativ
f6f0: 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
f700: 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f  _bind_parameter_
f710: 63 6f 75 6e 74 28 68 61 6e 64 6c 65 29 3b 0d 0a  count(handle);..
f720: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
f730: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
f740: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
f750: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
f760: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
f770: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
f780: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
f790: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
f7a0: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
f7b0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
f7c0: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
f7d0: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
f7e0: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
f7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
f800: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
f810: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
f820: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
f830: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
f840: 74 65 72 20 63 6f 75 6e 74 20 69 73 20 7b 31 7d  ter count is {1}
f850: 2e 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20  .",..           
f860: 20 20 20 20 20 68 61 6e 64 6c 65 49 6e 74 50 74       handleIntPt
f870: 72 2c 20 76 61 6c 75 65 29 29 3b 0d 0a 20 20 20  r, value));..   
f880: 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
f890: 20 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d    return value;.
f8a0: 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
f8b0: 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
f8c0: 73 74 72 69 6e 67 20 42 69 6e 64 5f 50 61 72 61  string Bind_Para
f8d0: 6d 4e 61 6d 65 28 53 51 4c 69 74 65 53 74 61 74  mName(SQLiteStat
f8e0: 65 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69  ement stmt, SQLi
f8f0: 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67  teConnectionFlag
f900: 73 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64  s flags, int ind
f910: 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
f920: 20 20 20 20 53 51 4c 69 74 65 53 74 61 74 65 6d      SQLiteStatem
f930: 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65  entHandle handle
f940: 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f   = stmt._sqlite_
f950: 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20 20 73  stmt;..        s
f960: 74 72 69 6e 67 20 6e 61 6d 65 3b 0d 0a 0d 0a 23  tring name;....#
f970: 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
f980: 41 52 44 0d 0a 20 20 20 20 20 20 20 20 69 6e 74  ARD..        int
f990: 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20   len = 0;..     
f9a0: 20 20 20 6e 61 6d 65 20 3d 20 55 54 46 38 54 6f     name = UTF8To
f9b0: 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74  String(UnsafeNat
f9c0: 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
f9d0: 65 33 5f 62 69 6e 64 5f 70 61 72 61 6d 65 74 65  e3_bind_paramete
f9e0: 72 5f 6e 61 6d 65 5f 69 6e 74 65 72 6f 70 28 68  r_name_interop(h
f9f0: 61 6e 64 6c 65 2c 20 69 6e 64 65 78 2c 20 72 65  andle, index, re
fa00: 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
fa10: 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20 6e 61  else..        na
fa20: 6d 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  me = UTF8ToStrin
fa30: 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
fa40: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 69  thods.sqlite3_bi
fa50: 6e 64 5f 70 61 72 61 6d 65 74 65 72 5f 6e 61 6d  nd_parameter_nam
fa60: 65 28 68 61 6e 64 6c 65 2c 20 69 6e 64 65 78 29  e(handle, index)
fa70: 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  , -1);..#endif..
fa80: 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 28 66  ..        if ((f
fa90: 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
faa0: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
fab0: 42 69 6e 64 29 20 3d 3d 20 53 51 4c 69 74 65 43  Bind) == SQLiteC
fac0: 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c  onnectionFlags.L
fad0: 6f 67 42 69 6e 64 29 0d 0a 20 20 20 20 20 20 20  ogBind)..       
fae0: 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
faf0: 49 6e 74 50 74 72 20 68 61 6e 64 6c 65 49 6e 74  IntPtr handleInt
fb00: 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d  Ptr = handle;...
fb10: 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c  .            SQL
fb20: 69 74 65 4c 6f 67 2e 4c 6f 67 4d 65 73 73 61 67  iteLog.LogMessag
fb30: 65 28 48 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e  e(HelperMethods.
fb40: 53 74 72 69 6e 67 46 6f 72 6d 61 74 28 0d 0a 20  StringFormat(.. 
fb50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 43                 C
fb60: 75 6c 74 75 72 65 49 6e 66 6f 2e 43 75 72 72 65  ultureInfo.Curre
fb70: 6e 74 43 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20  ntCulture,..    
fb80: 20 20 20 20 20 20 20 20 20 20 20 20 22 53 74 61              "Sta
fb90: 74 65 6d 65 6e 74 20 7b 30 7d 20 70 61 72 61 6d  tement {0} param
fba0: 74 65 72 20 23 7b 31 7d 20 6e 61 6d 65 20 69 73  ter #{1} name is
fbb0: 20 7b 7b 7b 32 7d 7d 7d 2e 22 2c 0d 0a 20 20 20   {{{2}}}.",..   
fbc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 68 61 6e               han
fbd0: 64 6c 65 49 6e 74 50 74 72 2c 20 69 6e 64 65 78  dleIntPtr, index
fbe0: 2c 20 6e 61 6d 65 29 29 3b 0d 0a 20 20 20 20 20  , name));..     
fbf0: 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20     }....        
fc00: 72 65 74 75 72 6e 20 6e 61 6d 65 3b 0d 0a 20 20  return name;..  
fc10: 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
fc20: 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69 6e 74  nal override int
fc30: 20 42 69 6e 64 5f 50 61 72 61 6d 49 6e 64 65 78   Bind_ParamIndex
fc40: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
fc50: 20 73 74 6d 74 2c 20 53 51 4c 69 74 65 43 6f 6e   stmt, SQLiteCon
fc60: 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61  nectionFlags fla
fc70: 67 73 2c 20 73 74 72 69 6e 67 20 70 61 72 61 6d  gs, string param
fc80: 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  Name)..    {..  
fc90: 20 20 20 20 20 20 53 51 4c 69 74 65 53 74 61 74        SQLiteStat
fca0: 65 6d 65 6e 74 48 61 6e 64 6c 65 20 68 61 6e 64  ementHandle hand
fcb0: 6c 65 20 3d 20 73 74 6d 74 2e 5f 73 71 6c 69 74  le = stmt._sqlit
fcc0: 65 5f 73 74 6d 74 3b 0d 0a 20 20 20 20 20 20 20  e_stmt;..       
fcd0: 20 69 6e 74 20 69 6e 64 65 78 20 3d 20 55 6e 73   int index = Uns
fce0: 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
fcf0: 2e 73 71 6c 69 74 65 33 5f 62 69 6e 64 5f 70 61  .sqlite3_bind_pa
fd00: 72 61 6d 65 74 65 72 5f 69 6e 64 65 78 28 68 61  rameter_index(ha
fd10: 6e 64 6c 65 2c 20 54 6f 55 54 46 38 28 70 61 72  ndle, ToUTF8(par
fd20: 61 6d 4e 61 6d 65 29 29 3b 0d 0a 0d 0a 20 20 20  amName));....   
fd30: 20 20 20 20 20 69 66 20 28 28 66 6c 61 67 73 20       if ((flags 
fd40: 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  & SQLiteConnecti
fd50: 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e 64 29  onFlags.LogBind)
fd60: 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
fd70: 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 42 69 6e  tionFlags.LogBin
fd80: 64 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  d)..        {.. 
fd90: 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50 74             IntPt
fda0: 72 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 20 3d  r handleIntPtr =
fdb0: 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
fdc0: 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f          SQLiteLo
fdd0: 67 2e 4c 6f 67 4d 65 73 73 61 67 65 28 48 65 6c  g.LogMessage(Hel
fde0: 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e  perMethods.Strin
fdf0: 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20  gFormat(..      
fe00: 20 20 20 20 20 20 20 20 20 20 43 75 6c 74 75 72            Cultur
fe10: 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43 75 6c  eInfo.CurrentCul
fe20: 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20 20 20  ture,..         
fe30: 20 20 20 20 20 20 20 22 53 74 61 74 65 6d 65 6e         "Statemen
fe40: 74 20 7b 30 7d 20 70 61 72 61 6d 74 65 72 20 69  t {0} paramter i
fe50: 6e 64 65 78 20 6f 66 20 6e 61 6d 65 20 7b 7b 7b  ndex of name {{{
fe60: 31 7d 7d 7d 20 69 73 20 23 7b 32 7d 2e 22 2c 0d  1}}} is #{2}.",.
fe70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
fe80: 20 68 61 6e 64 6c 65 49 6e 74 50 74 72 2c 20 70   handleIntPtr, p
fe90: 61 72 61 6d 4e 61 6d 65 2c 20 69 6e 64 65 78 29  aramName, index)
fea0: 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d  );..        }...
feb0: 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20  .        return 
fec0: 69 6e 64 65 78 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  index;..    }...
fed0: 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
fee0: 65 72 72 69 64 65 20 69 6e 74 20 43 6f 6c 75 6d  erride int Colum
fef0: 6e 43 6f 75 6e 74 28 53 51 4c 69 74 65 53 74 61  nCount(SQLiteSta
ff00: 74 65 6d 65 6e 74 20 73 74 6d 74 29 0d 0a 20 20  tement stmt)..  
ff10: 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72    {..      retur
ff20: 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  n UnsafeNativeMe
ff30: 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
ff40: 6c 75 6d 6e 5f 63 6f 75 6e 74 28 73 74 6d 74 2e  lumn_count(stmt.
ff50: 5f 73 71 6c 69 74 65 5f 73 74 6d 74 29 3b 0d 0a  _sqlite_stmt);..
ff60: 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
ff70: 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73  ernal override s
ff80: 74 72 69 6e 67 20 43 6f 6c 75 6d 6e 4e 61 6d 65  tring ColumnName
ff90: 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
ffa0: 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
ffb0: 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
ffc0: 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
ffd0: 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
ffe0: 30 3b 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72  0;..      IntPtr
fff0: 20 70 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   p = UnsafeNativ
10000 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10010 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 5f 69 6e 74  _column_name_int
10020 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
10030 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72  e_stmt, index, r
10040 65 66 20 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d  ef len);..#else.
10050 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 20  .      IntPtr p 
10060 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
10070 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10080 6c 75 6d 6e 5f 6e 61 6d 65 28 73 74 6d 74 2e 5f  lumn_name(stmt._
10090 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
100a0 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20  ex);..#endif..  
100b0 20 20 20 20 69 66 20 28 70 20 3d 3d 20 49 6e 74      if (p == Int
100c0 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20  Ptr.Zero)..     
100d0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
100e0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 53 51 4c  iteException(SQL
100f0 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4e 6f 4d  iteErrorCode.NoM
10100 65 6d 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72  em, GetLastError
10110 28 29 29 3b 0d 0a 23 69 66 20 21 53 51 4c 49 54  ());..#if !SQLIT
10120 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
10130 20 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53    return UTF8ToS
10140 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a  tring(p, len);..
10150 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
10160 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
10170 28 70 2c 20 2d 31 29 3b 0d 0a 23 65 6e 64 69 66  (p, -1);..#endif
10180 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
10190 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
101a0 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 43 6f   TypeAffinity Co
101b0 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 53 51 4c  lumnAffinity(SQL
101c0 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
101d0 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20  t, int index).. 
101e0 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75     {..      retu
101f0 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  rn UnsafeNativeM
10200 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
10210 6f 6c 75 6d 6e 5f 74 79 70 65 28 73 74 6d 74 2e  olumn_type(stmt.
10220 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
10230 64 65 78 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  dex);..    }....
10240 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10250 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
10260 75 6d 6e 54 79 70 65 28 53 51 4c 69 74 65 53 74  umnType(SQLiteSt
10270 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
10280 74 20 69 6e 64 65 78 2c 20 72 65 66 20 54 79 70  t index, ref Typ
10290 65 41 66 66 69 6e 69 74 79 20 6e 41 66 66 69 6e  eAffinity nAffin
102a0 69 74 79 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ity)..    {..   
102b0 20 20 20 20 20 69 6e 74 20 6c 65 6e 3b 0d 0a 23       int len;..#
102c0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
102d0 41 52 44 0d 0a 20 20 20 20 20 20 20 20 6c 65 6e  ARD..        len
102e0 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 20 20 49   = 0;..        I
102f0 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66 65  ntPtr p = Unsafe
10300 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
10310 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 64 65 63  lite3_column_dec
10320 6c 74 79 70 65 5f 69 6e 74 65 72 6f 70 28 73 74  ltype_interop(st
10330 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
10340 20 69 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29   index, ref len)
10350 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
10360 20 20 6c 65 6e 20 3d 20 2d 31 3b 0d 0a 20 20 20    len = -1;..   
10370 20 20 20 20 20 49 6e 74 50 74 72 20 70 20 3d 20       IntPtr p = 
10380 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10390 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
103a0 6d 6e 5f 64 65 63 6c 74 79 70 65 28 73 74 6d 74  mn_decltype(stmt
103b0 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
103c0 6e 64 65 78 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  ndex);..#endif..
103d0 20 20 20 20 20 20 20 20 6e 41 66 66 69 6e 69 74          nAffinit
103e0 79 20 3d 20 43 6f 6c 75 6d 6e 41 66 66 69 6e 69  y = ColumnAffini
103f0 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  ty(stmt, index);
10400 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
10410 28 70 20 21 3d 20 49 6e 74 50 74 72 2e 5a 65 72  (p != IntPtr.Zer
10420 6f 29 20 26 26 20 28 28 6c 65 6e 20 3e 20 30 29  o) && ((len > 0)
10430 20 7c 7c 20 28 6c 65 6e 20 3d 3d 20 2d 31 29 29   || (len == -1))
10440 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
10450 20 20 20 20 20 20 20 20 20 20 73 74 72 69 6e 67            string
10460 20 64 65 63 6c 54 79 70 65 20 3d 20 55 54 46 38   declType = UTF8
10470 54 6f 53 74 72 69 6e 67 28 70 2c 20 6c 65 6e 29  ToString(p, len)
10480 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
10490 20 69 66 20 28 21 53 74 72 69 6e 67 2e 49 73 4e   if (!String.IsN
104a0 75 6c 6c 4f 72 45 6d 70 74 79 28 64 65 63 6c 54  ullOrEmpty(declT
104b0 79 70 65 29 29 0d 0a 20 20 20 20 20 20 20 20 20  ype))..         
104c0 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 64 65         return de
104d0 63 6c 54 79 70 65 3b 0d 0a 20 20 20 20 20 20 20  clType;..       
104e0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74   }....        st
104f0 72 69 6e 67 5b 5d 20 61 72 20 3d 20 73 74 6d 74  ring[] ar = stmt
10500 2e 54 79 70 65 44 65 66 69 6e 69 74 69 6f 6e 73  .TypeDefinitions
10510 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
10520 28 61 72 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20  (ar != null)..  
10530 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
10540 20 20 20 20 20 69 66 20 28 69 6e 64 65 78 20 3c       if (index <
10550 20 61 72 2e 4c 65 6e 67 74 68 20 26 26 20 61 72   ar.Length && ar
10560 5b 69 6e 64 65 78 5d 20 21 3d 20 6e 75 6c 6c 29  [index] != null)
10570 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
10580 20 20 72 65 74 75 72 6e 20 61 72 5b 69 6e 64 65    return ar[inde
10590 78 5d 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a  x];..        }..
105a0 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72 6e  ..        return
105b0 20 53 74 72 69 6e 67 2e 45 6d 70 74 79 3b 0d 0a   String.Empty;..
105c0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
105d0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
105e0 6e 74 20 43 6f 6c 75 6d 6e 49 6e 64 65 78 28 53  nt ColumnIndex(S
105f0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
10600 74 6d 74 2c 20 73 74 72 69 6e 67 20 63 6f 6c 75  tmt, string colu
10610 6d 6e 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d 0a  mnName)..    {..
10620 20 20 20 20 20 20 69 6e 74 20 78 20 3d 20 43 6f        int x = Co
10630 6c 75 6d 6e 43 6f 75 6e 74 28 73 74 6d 74 29 3b  lumnCount(stmt);
10640 0d 0a 0d 0a 20 20 20 20 20 20 66 6f 72 20 28 69  ....      for (i
10650 6e 74 20 6e 20 3d 20 30 3b 20 6e 20 3c 20 78 3b  nt n = 0; n < x;
10660 20 6e 2b 2b 29 0d 0a 20 20 20 20 20 20 7b 0d 0a   n++)..      {..
10670 20 20 20 20 20 20 20 20 69 66 20 28 53 74 72 69          if (Stri
10680 6e 67 2e 43 6f 6d 70 61 72 65 28 63 6f 6c 75 6d  ng.Compare(colum
10690 6e 4e 61 6d 65 2c 20 43 6f 6c 75 6d 6e 4e 61 6d  nName, ColumnNam
106a0 65 28 73 74 6d 74 2c 20 6e 29 2c 20 53 74 72 69  e(stmt, n), Stri
106b0 6e 67 43 6f 6d 70 61 72 69 73 6f 6e 2e 4f 72 64  ngComparison.Ord
106c0 69 6e 61 6c 49 67 6e 6f 72 65 43 61 73 65 29 20  inalIgnoreCase) 
106d0 3d 3d 20 30 29 0d 0a 20 20 20 20 20 20 20 20 20  == 0)..         
106e0 20 72 65 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20   return n;..    
106f0 20 20 7d 0d 0a 20 20 20 20 20 20 72 65 74 75 72    }..      retur
10700 6e 20 2d 31 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n -1;..    }....
10710 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
10720 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f 6c  rride string Col
10730 75 6d 6e 4f 72 69 67 69 6e 61 6c 4e 61 6d 65 28  umnOriginalName(
10740 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
10750 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
10760 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
10770 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
10780 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30       int len = 0
10790 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ;..      return 
107a0 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73  UTF8ToString(Uns
107b0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
107c0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
107d0 6f 72 69 67 69 6e 5f 6e 61 6d 65 5f 69 6e 74 65  origin_name_inte
107e0 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  rop(stmt._sqlite
107f0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 72 65  _stmt, index, re
10800 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a 23  f len), len);..#
10810 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74 75  else..      retu
10820 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10830 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10840 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10850 6d 6e 5f 6f 72 69 67 69 6e 5f 6e 61 6d 65 28 73  mn_origin_name(s
10860 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
10870 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d 0a  , index), -1);..
10880 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
10890 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
108a0 65 72 72 69 64 65 20 73 74 72 69 6e 67 20 43 6f  erride string Co
108b0 6c 75 6d 6e 44 61 74 61 62 61 73 65 4e 61 6d 65  lumnDatabaseName
108c0 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
108d0 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
108e0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53  )..    {..#if !S
108f0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
10900 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
10910 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
10920 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28 55 6e   UTF8ToString(Un
10930 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
10940 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
10950 5f 64 61 74 61 62 61 73 65 5f 6e 61 6d 65 5f 69  _database_name_i
10960 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c  nterop(stmt._sql
10970 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c  ite_stmt, index,
10980 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b   ref len), len);
10990 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72  ..#else..      r
109a0 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69  eturn UTF8ToStri
109b0 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d  ng(UnsafeNativeM
109c0 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63  ethods.sqlite3_c
109d0 6f 6c 75 6d 6e 5f 64 61 74 61 62 61 73 65 5f 6e  olumn_database_n
109e0 61 6d 65 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65  ame(stmt._sqlite
109f0 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 2d  _stmt, index), -
10a00 31 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20  1);..#endif..   
10a10 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
10a20 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72 69  al override stri
10a30 6e 67 20 43 6f 6c 75 6d 6e 54 61 62 6c 65 4e 61  ng ColumnTableNa
10a40 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
10a50 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
10a60 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20  ex)..    {..#if 
10a70 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44  !SQLITE_STANDARD
10a80 0d 0a 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20  ..      int len 
10a90 3d 20 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  = 0;..      retu
10aa0 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67 28  rn UTF8ToString(
10ab0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
10ac0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75  ods.sqlite3_colu
10ad0 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 5f 69 6e  mn_table_name_in
10ae0 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69  terop(stmt._sqli
10af0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20  te_stmt, index, 
10b00 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d  ref len), len);.
10b10 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65  .#else..      re
10b20 74 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e  turn UTF8ToStrin
10b30 67 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  g(UnsafeNativeMe
10b40 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
10b50 6c 75 6d 6e 5f 74 61 62 6c 65 5f 6e 61 6d 65 28  lumn_table_name(
10b60 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d  stmt._sqlite_stm
10b70 74 2c 20 69 6e 64 65 78 29 2c 20 2d 31 29 3b 0d  t, index), -1);.
10b80 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
10b90 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
10ba0 76 65 72 72 69 64 65 20 76 6f 69 64 20 43 6f 6c  verride void Col
10bb0 75 6d 6e 4d 65 74 61 44 61 74 61 28 73 74 72 69  umnMetaData(stri
10bc0 6e 67 20 64 61 74 61 42 61 73 65 2c 20 73 74 72  ng dataBase, str
10bd0 69 6e 67 20 74 61 62 6c 65 2c 20 73 74 72 69 6e  ing table, strin
10be0 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66 20 73 74  g column, ref st
10bf0 72 69 6e 67 20 64 61 74 61 54 79 70 65 2c 20 72  ring dataType, r
10c00 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61 74  ef string collat
10c10 65 53 65 71 75 65 6e 63 65 2c 20 72 65 66 20 62  eSequence, ref b
10c20 6f 6f 6c 20 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66  ool notNull, ref
10c30 20 62 6f 6f 6c 20 70 72 69 6d 61 72 79 4b 65 79   bool primaryKey
10c40 2c 20 72 65 66 20 62 6f 6f 6c 20 61 75 74 6f 49  , ref bool autoI
10c50 6e 63 72 65 6d 65 6e 74 29 0d 0a 20 20 20 20 7b  ncrement)..    {
10c60 0d 0a 20 20 20 20 20 20 49 6e 74 50 74 72 20 64  ..      IntPtr d
10c70 61 74 61 54 79 70 65 50 74 72 20 3d 20 49 6e 74  ataTypePtr = Int
10c80 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
10c90 20 49 6e 74 50 74 72 20 63 6f 6c 6c 53 65 71 50   IntPtr collSeqP
10ca0 74 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  tr = IntPtr.Zero
10cb0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6e 6f  ;..      int nno
10cc0 74 4e 75 6c 6c 20 3d 20 30 3b 0d 0a 20 20 20 20  tNull = 0;..    
10cd0 20 20 69 6e 74 20 6e 70 72 69 6d 61 72 79 4b 65    int nprimaryKe
10ce0 79 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e  y = 0;..      in
10cf0 74 20 6e 61 75 74 6f 49 6e 63 20 3d 20 30 3b 0d  t nautoInc = 0;.
10d00 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72  .      SQLiteErr
10d10 6f 72 43 6f 64 65 20 6e 3b 0d 0a 20 20 20 20 20  orCode n;..     
10d20 20 69 6e 74 20 64 74 4c 65 6e 3b 0d 0a 20 20 20   int dtLen;..   
10d30 20 20 20 69 6e 74 20 63 73 4c 65 6e 3b 0d 0a 0d     int csLen;...
10d40 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
10d50 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 64 74 4c  NDARD..      dtL
10d60 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 63  en = 0;..      c
10d70 73 4c 65 6e 20 3d 20 30 3b 0d 0a 20 20 20 20 20  sLen = 0;..     
10d80 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
10d90 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10da0 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
10db0 74 61 64 61 74 61 5f 69 6e 74 65 72 6f 70 28 5f  tadata_interop(_
10dc0 73 71 6c 2c 20 54 6f 55 54 46 38 28 64 61 74 61  sql, ToUTF8(data
10dd0 42 61 73 65 29 2c 20 54 6f 55 54 46 38 28 74 61  Base), ToUTF8(ta
10de0 62 6c 65 29 2c 20 54 6f 55 54 46 38 28 63 6f 6c  ble), ToUTF8(col
10df0 75 6d 6e 29 2c 20 72 65 66 20 64 61 74 61 54 79  umn), ref dataTy
10e00 70 65 50 74 72 2c 20 72 65 66 20 63 6f 6c 6c 53  pePtr, ref collS
10e10 65 71 50 74 72 2c 20 72 65 66 20 6e 6e 6f 74 4e  eqPtr, ref nnotN
10e20 75 6c 6c 2c 20 72 65 66 20 6e 70 72 69 6d 61 72  ull, ref nprimar
10e30 79 4b 65 79 2c 20 72 65 66 20 6e 61 75 74 6f 49  yKey, ref nautoI
10e40 6e 63 2c 20 72 65 66 20 64 74 4c 65 6e 2c 20 72  nc, ref dtLen, r
10e50 65 66 20 63 73 4c 65 6e 29 3b 0d 0a 23 65 6c 73  ef csLen);..#els
10e60 65 0d 0a 20 20 20 20 20 20 64 74 4c 65 6e 20 3d  e..      dtLen =
10e70 20 2d 31 3b 0d 0a 20 20 20 20 20 20 63 73 4c 65   -1;..      csLe
10e80 6e 20 3d 20 2d 31 3b 0d 0a 0d 0a 20 20 20 20 20  n = -1;....     
10e90 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
10ea0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
10eb0 5f 74 61 62 6c 65 5f 63 6f 6c 75 6d 6e 5f 6d 65  _table_column_me
10ec0 74 61 64 61 74 61 28 5f 73 71 6c 2c 20 54 6f 55  tadata(_sql, ToU
10ed0 54 46 38 28 64 61 74 61 42 61 73 65 29 2c 20 54  TF8(dataBase), T
10ee0 6f 55 54 46 38 28 74 61 62 6c 65 29 2c 20 54 6f  oUTF8(table), To
10ef0 55 54 46 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65  UTF8(column), re
10f00 66 20 64 61 74 61 54 79 70 65 50 74 72 2c 20 72  f dataTypePtr, r
10f10 65 66 20 63 6f 6c 6c 53 65 71 50 74 72 2c 20 72  ef collSeqPtr, r
10f20 65 66 20 6e 6e 6f 74 4e 75 6c 6c 2c 20 72 65 66  ef nnotNull, ref
10f30 20 6e 70 72 69 6d 61 72 79 4b 65 79 2c 20 72 65   nprimaryKey, re
10f40 66 20 6e 61 75 74 6f 49 6e 63 29 3b 0d 0a 23 65  f nautoInc);..#e
10f50 6e 64 69 66 0d 0a 20 20 20 20 20 20 69 66 20 28  ndif..      if (
10f60 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n != SQLiteError
10f70 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e  Code.Ok) throw n
10f80 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69  ew SQLiteExcepti
10f90 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72  on(n, GetLastErr
10fa0 6f 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  or());....      
10fb0 64 61 74 61 54 79 70 65 20 3d 20 55 54 46 38 54  dataType = UTF8T
10fc0 6f 53 74 72 69 6e 67 28 64 61 74 61 54 79 70 65  oString(dataType
10fd0 50 74 72 2c 20 64 74 4c 65 6e 29 3b 0d 0a 20 20  Ptr, dtLen);..  
10fe0 20 20 20 20 63 6f 6c 6c 61 74 65 53 65 71 75 65      collateSeque
10ff0 6e 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69  nce = UTF8ToStri
11000 6e 67 28 63 6f 6c 6c 53 65 71 50 74 72 2c 20 63  ng(collSeqPtr, c
11010 73 4c 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  sLen);....      
11020 6e 6f 74 4e 75 6c 6c 20 3d 20 28 6e 6e 6f 74 4e  notNull = (nnotN
11030 75 6c 6c 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  ull == 1);..    
11040 20 20 70 72 69 6d 61 72 79 4b 65 79 20 3d 20 28    primaryKey = (
11050 6e 70 72 69 6d 61 72 79 4b 65 79 20 3d 3d 20 31  nprimaryKey == 1
11060 29 3b 0d 0a 20 20 20 20 20 20 61 75 74 6f 49 6e  );..      autoIn
11070 63 72 65 6d 65 6e 74 20 3d 20 28 6e 61 75 74 6f  crement = (nauto
11080 49 6e 63 20 3d 3d 20 31 29 3b 0d 0a 20 20 20 20  Inc == 1);..    
11090 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
110a0 6c 20 6f 76 65 72 72 69 64 65 20 6f 62 6a 65 63  l override objec
110b0 74 20 47 65 74 4f 62 6a 65 63 74 28 53 51 4c 69  t GetObject(SQLi
110c0 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
110d0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
110e0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 73 77 69    {..        swi
110f0 74 63 68 20 28 43 6f 6c 75 6d 6e 41 66 66 69 6e  tch (ColumnAffin
11100 69 74 79 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ity(stmt, index)
11110 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
11120 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
11130 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e 74 36  ypeAffinity.Int6
11140 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  4:..            
11150 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
11160 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
11170 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  n GetInt64(stmt,
11180 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20   index);..      
11190 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
111a0 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79           case Ty
111b0 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
111c0 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  e:..            
111d0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
111e0 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72             retur
111f0 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74  n GetDouble(stmt
11200 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
11210 20 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20             }..  
11220 20 20 20 20 20 20 20 20 20 20 63 61 73 65 20 54            case T
11230 79 70 65 41 66 66 69 6e 69 74 79 2e 54 65 78 74  ypeAffinity.Text
11240 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  :..             
11250 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
11260 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
11270 20 47 65 74 54 65 78 74 28 73 74 6d 74 2c 20 69   GetText(stmt, i
11280 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
11290 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
112a0 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70 65         case Type
112b0 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d 0a  Affinity.Blob:..
112c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112d0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
112e0 20 20 20 20 20 20 20 6c 6f 6e 67 20 73 69 7a 65         long size
112f0 20 3d 20 47 65 74 42 79 74 65 73 28 73 74 6d 74   = GetBytes(stmt
11300 2c 20 69 6e 64 65 78 2c 20 30 2c 20 6e 75 6c 6c  , index, 0, null
11310 2c 20 30 2c 20 30 29 3b 0d 0a 0d 0a 20 20 20 20  , 0, 0);....    
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 69 66 20 28 28 73 69 7a 65 20 3e 20 30 29 20 26  if ((size > 0) &
11340 26 20 28 73 69 7a 65 20 3c 3d 20 69 6e 74 2e 4d  & (size <= int.M
11350 61 78 56 61 6c 75 65 29 29 0d 0a 20 20 20 20 20  axValue))..     
11360 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7b                 {
11370 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11380 20 20 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d            byte[]
11390 20 62 79 74 65 73 20 3d 20 6e 65 77 20 62 79 74   bytes = new byt
113a0 65 5b 28 69 6e 74 29 73 69 7a 65 5d 3b 0d 0a 0d  e[(int)size];...
113b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
113c0 20 20 20 20 20 20 20 20 20 47 65 74 42 79 74 65           GetByte
113d0 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c 20 30  s(stmt, index, 0
113e0 2c 20 62 79 74 65 73 2c 20 30 2c 20 28 69 6e 74  , bytes, 0, (int
113f0 29 73 69 7a 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  )size);....     
11400 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11410 20 20 20 72 65 74 75 72 6e 20 62 79 74 65 73 3b     return bytes;
11420 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
11430 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
11440 20 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65               bre
11450 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ak;..           
11460 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20       }..        
11470 20 20 20 20 63 61 73 65 20 54 79 70 65 41 66 66      case TypeAff
11480 69 6e 69 74 79 2e 4e 75 6c 6c 3a 0d 0a 20 20 20  inity.Null:..   
11490 20 20 20 20 20 20 20 20 20 20 20 20 20 7b 0d 0a               {..
114a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114b0 20 20 20 20 72 65 74 75 72 6e 20 44 42 4e 75 6c      return DBNul
114c0 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20 20 20 20  l.Value;..      
114d0 20 20 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20            }..   
114e0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
114f0 20 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49    throw new NotI
11500 6d 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74  mplementedExcept
11510 69 6f 6e 28 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  ion();..    }...
11520 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11530 65 72 72 69 64 65 20 64 6f 75 62 6c 65 20 47 65  erride double Ge
11540 74 44 6f 75 62 6c 65 28 53 51 4c 69 74 65 53 74  tDouble(SQLiteSt
11550 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e  atement stmt, in
11560 74 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d  t index)..    {.
11570 0a 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43  .#if !PLATFORM_C
11580 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d  OMPACTFRAMEWORK.
11590 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
115a0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
115b0 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e  s.sqlite3_column
115c0 5f 64 6f 75 62 6c 65 28 73 74 6d 74 2e 5f 73 71  _double(stmt._sq
115d0 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
115e0 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54  );..#elif !SQLIT
115f0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
11600 20 20 64 6f 75 62 6c 65 20 76 61 6c 75 65 20 3d    double value =
11610 20 30 2e 30 3b 0d 0a 20 20 20 20 20 20 55 6e 73   0.0;..      Uns
11620 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11630 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11640 64 6f 75 62 6c 65 5f 69 6e 74 65 72 6f 70 28 73  double_interop(s
11650 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
11660 2c 20 69 6e 64 65 78 2c 20 72 65 66 20 76 61 6c  , index, ref val
11670 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65 74 75  ue);..      retu
11680 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c 73 65  rn value;..#else
11690 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
116a0 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
116b0 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
116c0 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
116d0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
116e0 72 69 64 65 20 62 6f 6f 6c 20 47 65 74 42 6f 6f  ride bool GetBoo
116f0 6c 65 61 6e 28 53 51 4c 69 74 65 53 74 61 74 65  lean(SQLiteState
11700 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
11710 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
11720 20 20 20 20 72 65 74 75 72 6e 20 54 6f 42 6f 6f      return ToBoo
11730 6c 65 61 6e 28 47 65 74 4f 62 6a 65 63 74 28 73  lean(GetObject(s
11740 74 6d 74 2c 20 69 6e 64 65 78 29 2c 20 43 75 6c  tmt, index), Cul
11750 74 75 72 65 49 6e 66 6f 2e 49 6e 76 61 72 69 61  tureInfo.Invaria
11760 6e 74 43 75 6c 74 75 72 65 2c 20 66 61 6c 73 65  ntCulture, false
11770 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11780 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11790 64 65 20 73 62 79 74 65 20 47 65 74 53 42 79 74  de sbyte GetSByt
117a0 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e  e(SQLiteStatemen
117b0 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65  t stmt, int inde
117c0 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  x)..    {..     
117d0 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65   return unchecke
117e0 64 28 28 73 62 79 74 65 29 28 47 65 74 49 6e 74  d((sbyte)(GetInt
117f0 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 20  32(stmt, index) 
11800 26 20 62 79 74 65 2e 4d 61 78 56 61 6c 75 65 29  & byte.MaxValue)
11810 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
11820 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
11830 64 65 20 62 79 74 65 20 47 65 74 42 79 74 65 28  de byte GetByte(
11840 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20  SQLiteStatement 
11850 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29  stmt, int index)
11860 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72  ..    {..      r
11870 65 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28  eturn unchecked(
11880 28 62 79 74 65 29 28 47 65 74 49 6e 74 33 32 28  (byte)(GetInt32(
11890 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 62  stmt, index) & b
118a0 79 74 65 2e 4d 61 78 56 61 6c 75 65 29 29 3b 0d  yte.MaxValue));.
118b0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
118c0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
118d0 73 68 6f 72 74 20 47 65 74 49 6e 74 31 36 28 53  short GetInt16(S
118e0 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
118f0 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d  tmt, int index).
11900 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
11910 74 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28  turn unchecked((
11920 73 68 6f 72 74 29 28 47 65 74 49 6e 74 33 32 28  short)(GetInt32(
11930 73 74 6d 74 2c 20 69 6e 64 65 78 29 20 26 20 75  stmt, index) & u
11940 73 68 6f 72 74 2e 4d 61 78 56 61 6c 75 65 29 29  short.MaxValue))
11950 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
11960 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
11970 65 20 75 73 68 6f 72 74 20 47 65 74 55 49 6e 74  e ushort GetUInt
11980 31 36 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  16(SQLiteStateme
11990 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
119a0 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
119b0 20 20 72 65 74 75 72 6e 20 75 6e 63 68 65 63 6b    return uncheck
119c0 65 64 28 28 75 73 68 6f 72 74 29 28 47 65 74 49  ed((ushort)(GetI
119d0 6e 74 33 32 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt32(stmt, index
119e0 29 20 26 20 75 73 68 6f 72 74 2e 4d 61 78 56 61  ) & ushort.MaxVa
119f0 6c 75 65 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d  lue));..    }...
11a00 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
11a10 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 49 6e  erride int GetIn
11a20 74 33 32 28 53 51 4c 69 74 65 53 74 61 74 65 6d  t32(SQLiteStatem
11a30 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e  ent stmt, int in
11a40 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  dex)..    {..   
11a50 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
11a60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
11a70 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74  lite3_column_int
11a80 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74  (stmt._sqlite_st
11a90 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
11aa0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
11ab0 61 6c 20 6f 76 65 72 72 69 64 65 20 75 69 6e 74  al override uint
11ac0 20 47 65 74 55 49 6e 74 33 32 28 53 51 4c 69 74   GetUInt32(SQLit
11ad0 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74 2c  eStatement stmt,
11ae0 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20 20   int index)..   
11af0 20 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e   {..      return
11b00 20 75 6e 63 68 65 63 6b 65 64 28 28 75 69 6e 74   unchecked((uint
11b10 29 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20  )GetInt32(stmt, 
11b20 69 6e 64 65 78 29 29 3b 0d 0a 20 20 20 20 7d 0d  index));..    }.
11b30 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20  ...    internal 
11b40 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65  override long Ge
11b50 74 49 6e 74 36 34 28 53 51 4c 69 74 65 53 74 61  tInt64(SQLiteSta
11b60 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
11b70 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
11b80 23 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f  #if !PLATFORM_CO
11b90 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a  MPACTFRAMEWORK..
11ba0 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73        return Uns
11bb0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
11bc0 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f  .sqlite3_column_
11bd0 69 6e 74 36 34 28 73 74 6d 74 2e 5f 73 71 6c 69  int64(stmt._sqli
11be0 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b  te_stmt, index);
11bf0 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45 5f  ..#elif !SQLITE_
11c00 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20  STANDARD..      
11c10 6c 6f 6e 67 20 76 61 6c 75 65 20 3d 20 30 3b 0d  long value = 0;.
11c20 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
11c30 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
11c40 65 33 5f 63 6f 6c 75 6d 6e 5f 69 6e 74 36 34 5f  e3_column_int64_
11c50 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71  interop(stmt._sq
11c60 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
11c70 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a 20  , ref value);.. 
11c80 20 20 20 20 20 72 65 74 75 72 6e 20 76 61 6c 75       return valu
11c90 65 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  e;..#else..     
11ca0 20 74 68 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d   throw new NotIm
11cb0 70 6c 65 6d 65 6e 74 65 64 45 78 63 65 70 74 69  plementedExcepti
11cc0 6f 6e 28 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  on();..#endif.. 
11cd0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11ce0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 75 6c  rnal override ul
11cf0 6f 6e 67 20 47 65 74 55 49 6e 74 36 34 28 53 51  ong GetUInt64(SQ
11d00 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74  LiteStatement st
11d10 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a  mt, int index)..
11d20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65 74      {..      ret
11d30 75 72 6e 20 75 6e 63 68 65 63 6b 65 64 28 28 75  urn unchecked((u
11d40 6c 6f 6e 67 29 47 65 74 49 6e 74 36 34 28 73 74  long)GetInt64(st
11d50 6d 74 2c 20 69 6e 64 65 78 29 29 3b 0d 0a 20 20  mt, index));..  
11d60 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72    }....    inter
11d70 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 73 74 72  nal override str
11d80 69 6e 67 20 47 65 74 54 65 78 74 28 53 51 4c 69  ing GetText(SQLi
11d90 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d 74  teStatement stmt
11da0 2c 20 69 6e 74 20 69 6e 64 65 78 29 0d 0a 20 20  , int index)..  
11db0 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54 45    {..#if !SQLITE
11dc0 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
11dd0 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d 0a 20   int len = 0;.. 
11de0 20 20 20 20 20 72 65 74 75 72 6e 20 55 54 46 38       return UTF8
11df0 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66 65 4e  ToString(UnsafeN
11e00 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
11e10 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74  ite3_column_text
11e20 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74 2e 5f 73  _interop(stmt._s
11e30 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65  qlite_stmt, inde
11e40 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20 6c 65 6e  x, ref len), len
11e50 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20  );..#else..     
11e60 20 72 65 74 75 72 6e 20 55 54 46 38 54 6f 53 74   return UTF8ToSt
11e70 72 69 6e 67 28 55 6e 73 61 66 65 4e 61 74 69 76  ring(UnsafeNativ
11e80 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
11e90 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74 6d  _column_text(stm
11ea0 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20  t._sqlite_stmt, 
11eb0 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20 20  index),..       
11ec0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
11ed0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c  hods.sqlite3_col
11ee0 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f  umn_bytes(stmt._
11ef0 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64  sqlite_stmt, ind
11f00 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  ex));..#endif.. 
11f10 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
11f20 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 44 61  rnal override Da
11f30 74 65 54 69 6d 65 20 47 65 74 44 61 74 65 54 69  teTime GetDateTi
11f40 6d 65 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65  me(SQLiteStateme
11f50 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64  nt stmt, int ind
11f60 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  ex)..    {..    
11f70 20 20 69 66 20 28 5f 64 61 74 65 74 69 6d 65 46    if (_datetimeF
11f80 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69 74 65 44  ormat == SQLiteD
11f90 61 74 65 46 6f 72 6d 61 74 73 2e 54 69 63 6b 73  ateFormats.Ticks
11fa0 29 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  )..        retur
11fb0 6e 20 54 69 63 6b 73 54 6f 44 61 74 65 54 69 6d  n TicksToDateTim
11fc0 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c  e(GetInt64(stmt,
11fd0 20 69 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69   index), _dateti
11fe0 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20 20 20 20  meKind);..      
11ff0 65 6c 73 65 20 69 66 20 28 5f 64 61 74 65 74 69  else if (_dateti
12000 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53 51 4c 69  meFormat == SQLi
12010 74 65 44 61 74 65 46 6f 72 6d 61 74 73 2e 4a 75  teDateFormats.Ju
12020 6c 69 61 6e 44 61 79 29 0d 0a 20 20 20 20 20 20  lianDay)..      
12030 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74 65 54    return ToDateT
12040 69 6d 65 28 47 65 74 44 6f 75 62 6c 65 28 73 74  ime(GetDouble(st
12050 6d 74 2c 20 69 6e 64 65 78 29 2c 20 5f 64 61 74  mt, index), _dat
12060 65 74 69 6d 65 4b 69 6e 64 29 3b 0d 0a 20 20 20  etimeKind);..   
12070 20 20 20 65 6c 73 65 20 69 66 20 28 5f 64 61 74     else if (_dat
12080 65 74 69 6d 65 46 6f 72 6d 61 74 20 3d 3d 20 53  etimeFormat == S
12090 51 4c 69 74 65 44 61 74 65 46 6f 72 6d 61 74 73  QLiteDateFormats
120a0 2e 55 6e 69 78 45 70 6f 63 68 29 0d 0a 20 20 20  .UnixEpoch)..   
120b0 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 69 78       return Unix
120c0 45 70 6f 63 68 54 6f 44 61 74 65 54 69 6d 65 28  EpochToDateTime(
120d0 47 65 74 49 6e 74 36 34 28 73 74 6d 74 2c 20 69  GetInt64(stmt, i
120e0 6e 64 65 78 29 2c 20 5f 64 61 74 65 74 69 6d 65  ndex), _datetime
120f0 4b 69 6e 64 29 3b 0d 0a 0d 0a 23 69 66 20 21 53  Kind);....#if !S
12100 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a  QLITE_STANDARD..
12110 20 20 20 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20        int len = 
12120 30 3b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e  0;..      return
12130 20 54 6f 44 61 74 65 54 69 6d 65 28 55 6e 73 61   ToDateTime(Unsa
12140 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
12150 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d 6e 5f 74  sqlite3_column_t
12160 65 78 74 5f 69 6e 74 65 72 6f 70 28 73 74 6d 74  ext_interop(stmt
12170 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69  ._sqlite_stmt, i
12180 6e 64 65 78 2c 20 72 65 66 20 6c 65 6e 29 2c 20  ndex, ref len), 
12190 6c 65 6e 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20  len);..#else..  
121a0 20 20 20 20 72 65 74 75 72 6e 20 54 6f 44 61 74      return ToDat
121b0 65 54 69 6d 65 28 55 6e 73 61 66 65 4e 61 74 69  eTime(UnsafeNati
121c0 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65  veMethods.sqlite
121d0 33 5f 63 6f 6c 75 6d 6e 5f 74 65 78 74 28 73 74  3_column_text(st
121e0 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c  mt._sqlite_stmt,
121f0 20 69 6e 64 65 78 29 2c 0d 0a 20 20 20 20 20 20   index),..      
12200 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65    UnsafeNativeMe
12210 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
12220 6c 75 6d 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e  lumn_bytes(stmt.
12230 5f 73 71 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e  _sqlite_stmt, in
12240 64 65 78 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  dex));..#endif..
12250 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12260 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 6c  ernal override l
12270 6f 6e 67 20 47 65 74 42 79 74 65 73 28 53 51 4c  ong GetBytes(SQL
12280 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
12290 74 2c 20 69 6e 74 20 69 6e 64 65 78 2c 20 69 6e  t, int index, in
122a0 74 20 6e 44 61 74 61 4f 66 66 73 65 74 2c 20 62  t nDataOffset, b
122b0 79 74 65 5b 5d 20 62 44 65 73 74 2c 20 69 6e 74  yte[] bDest, int
122c0 20 6e 53 74 61 72 74 2c 20 69 6e 74 20 6e 4c 65   nStart, int nLe
122d0 6e 67 74 68 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ngth)..    {..  
122e0 20 20 20 20 69 6e 74 20 6e 6c 65 6e 20 3d 20 55      int nlen = U
122f0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12300 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6c 75 6d  ds.sqlite3_colum
12310 6e 5f 62 79 74 65 73 28 73 74 6d 74 2e 5f 73 71  n_bytes(stmt._sq
12320 6c 69 74 65 5f 73 74 6d 74 2c 20 69 6e 64 65 78  lite_stmt, index
12330 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
12340 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
12350 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
12360 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
12370 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
12380 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
12390 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
123a0 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
123b0 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
123c0 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
123d0 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
123e0 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
123f0 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
12400 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
12410 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
12420 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
12430 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
12440 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
12450 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
12460 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
12470 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
12480 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = UnsafeNat
12490 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
124a0 65 33 5f 63 6f 6c 75 6d 6e 5f 62 6c 6f 62 28 73  e3_column_blob(s
124b0 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73 74 6d 74  tmt._sqlite_stmt
124c0 2c 20 69 6e 64 65 78 29 3b 0d 0a 0d 0a 20 20 20  , index);....   
124d0 20 20 20 20 20 4d 61 72 73 68 61 6c 2e 43 6f 70       Marshal.Cop
124e0 79 28 28 49 6e 74 50 74 72 29 28 70 74 72 2e 54  y((IntPtr)(ptr.T
124f0 6f 49 6e 74 36 34 28 29 20 2b 20 6e 44 61 74 61  oInt64() + nData
12500 4f 66 66 73 65 74 29 2c 20 62 44 65 73 74 2c 20  Offset), bDest, 
12510 6e 53 74 61 72 74 2c 20 6e 43 6f 70 69 65 64 29  nStart, nCopied)
12520 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20  ;..      }..    
12530 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20 7b 0d    else..      {.
12540 0a 20 20 20 20 20 20 20 20 6e 43 6f 70 69 65 64  .        nCopied
12550 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20 7d 0d 0a   = 0;..      }..
12560 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e  ..      return n
12570 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20 7d 0d 0a  Copied;..    }..
12580 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
12590 76 65 72 72 69 64 65 20 63 68 61 72 20 47 65 74  verride char Get
125a0 43 68 61 72 28 53 51 4c 69 74 65 53 74 61 74 65  Char(SQLiteState
125b0 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74 20 69  ment stmt, int i
125c0 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  ndex)..    {..  
125d0 20 20 20 20 72 65 74 75 72 6e 20 43 6f 6e 76 65      return Conve
125e0 72 74 2e 54 6f 43 68 61 72 28 47 65 74 55 49 6e  rt.ToChar(GetUIn
125f0 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  t16(stmt, index)
12600 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
12610 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
12620 64 65 20 6c 6f 6e 67 20 47 65 74 43 68 61 72 73  de long GetChars
12630 28 53 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74  (SQLiteStatement
12640 20 73 74 6d 74 2c 20 69 6e 74 20 69 6e 64 65 78   stmt, int index
12650 2c 20 69 6e 74 20 6e 44 61 74 61 4f 66 66 73 65  , int nDataOffse
12660 74 2c 20 63 68 61 72 5b 5d 20 62 44 65 73 74 2c  t, char[] bDest,
12670 20 69 6e 74 20 6e 53 74 61 72 74 2c 20 69 6e 74   int nStart, int
12680 20 6e 4c 65 6e 67 74 68 29 0d 0a 20 20 20 20 7b   nLength)..    {
12690 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 6c 65 6e  ..      int nlen
126a0 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20 6e 43 6f  ;..      int nCo
126b0 70 69 65 64 20 3d 20 6e 4c 65 6e 67 74 68 3b 0d  pied = nLength;.
126c0 0a 0d 0a 20 20 20 20 20 20 73 74 72 69 6e 67 20  ...      string 
126d0 73 74 72 20 3d 20 47 65 74 54 65 78 74 28 73 74  str = GetText(st
126e0 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
126f0 20 20 20 6e 6c 65 6e 20 3d 20 73 74 72 2e 4c 65     nlen = str.Le
12700 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  ngth;....      i
12710 66 20 28 62 44 65 73 74 20 3d 3d 20 6e 75 6c 6c  f (bDest == null
12720 29 20 72 65 74 75 72 6e 20 6e 6c 65 6e 3b 0d 0a  ) return nlen;..
12730 0d 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70  ..      if (nCop
12740 69 65 64 20 2b 20 6e 53 74 61 72 74 20 3e 20 62  ied + nStart > b
12750 44 65 73 74 2e 4c 65 6e 67 74 68 29 20 6e 43 6f  Dest.Length) nCo
12760 70 69 65 64 20 3d 20 62 44 65 73 74 2e 4c 65 6e  pied = bDest.Len
12770 67 74 68 20 2d 20 6e 53 74 61 72 74 3b 0d 0a 20  gth - nStart;.. 
12780 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69 65 64       if (nCopied
12790 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 20 3e   + nDataOffset >
127a0 20 6e 6c 65 6e 29 20 6e 43 6f 70 69 65 64 20 3d   nlen) nCopied =
127b0 20 6e 6c 65 6e 20 2d 20 6e 44 61 74 61 4f 66 66   nlen - nDataOff
127c0 73 65 74 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  set;....      if
127d0 20 28 6e 43 6f 70 69 65 64 20 3e 20 30 29 0d 0a   (nCopied > 0)..
127e0 20 20 20 20 20 20 20 20 73 74 72 2e 43 6f 70 79          str.Copy
127f0 54 6f 28 6e 44 61 74 61 4f 66 66 73 65 74 2c 20  To(nDataOffset, 
12800 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20 6e  bDest, nStart, n
12810 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20 20  Copied);..      
12820 65 6c 73 65 20 6e 43 6f 70 69 65 64 20 3d 20 30  else nCopied = 0
12830 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72  ;....      retur
12840 6e 20 6e 43 6f 70 69 65 64 3b 0d 0a 20 20 20 20  n nCopied;..    
12850 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
12860 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20  l override bool 
12870 49 73 4e 75 6c 6c 28 53 51 4c 69 74 65 53 74 61  IsNull(SQLiteSta
12880 74 65 6d 65 6e 74 20 73 74 6d 74 2c 20 69 6e 74  tement stmt, int
12890 20 69 6e 64 65 78 29 0d 0a 20 20 20 20 7b 0d 0a   index)..    {..
128a0 20 20 20 20 20 20 72 65 74 75 72 6e 20 28 43 6f        return (Co
128b0 6c 75 6d 6e 41 66 66 69 6e 69 74 79 28 73 74 6d  lumnAffinity(stm
128c0 74 2c 20 69 6e 64 65 78 29 20 3d 3d 20 54 79 70  t, index) == Typ
128d0 65 41 66 66 69 6e 69 74 79 2e 4e 75 6c 6c 29 3b  eAffinity.Null);
128e0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69  ..    }....    i
128f0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
12900 20 69 6e 74 20 41 67 67 72 65 67 61 74 65 43 6f   int AggregateCo
12910 75 6e 74 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  unt(IntPtr conte
12920 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20  xt)..    {..    
12930 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
12940 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
12950 69 74 65 33 5f 61 67 67 72 65 67 61 74 65 5f 63  ite3_aggregate_c
12960 6f 75 6e 74 28 63 6f 6e 74 65 78 74 29 3b 0d 0a  ount(context);..
12970 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12980 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
12990 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 43  QLiteErrorCode C
129a0 72 65 61 74 65 46 75 6e 63 74 69 6f 6e 28 73 74  reateFunction(st
129b0 72 69 6e 67 20 73 74 72 46 75 6e 63 74 69 6f 6e  ring strFunction
129c0 2c 20 69 6e 74 20 6e 41 72 67 73 2c 20 62 6f 6f  , int nArgs, boo
129d0 6c 20 6e 65 65 64 43 6f 6c 6c 53 65 71 2c 20 53  l needCollSeq, S
129e0 51 4c 69 74 65 43 61 6c 6c 62 61 63 6b 20 66 75  QLiteCallback fu
129f0 6e 63 2c 20 53 51 4c 69 74 65 43 61 6c 6c 62 61  nc, SQLiteCallba
12a00 63 6b 20 66 75 6e 63 73 74 65 70 2c 20 53 51 4c  ck funcstep, SQL
12a10 69 74 65 46 69 6e 61 6c 43 61 6c 6c 62 61 63 6b  iteFinalCallback
12a20 20 66 75 6e 63 66 69 6e 61 6c 2c 20 62 6f 6f 6c   funcfinal, bool
12a30 20 63 61 6e 54 68 72 6f 77 29 0d 0a 20 20 20 20   canThrow)..    
12a40 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74 65 45  {..      SQLiteE
12a50 72 72 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 23  rrorCode n;....#
12a60 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
12a70 41 52 44 0d 0a 20 20 20 20 20 20 6e 20 3d 20 55  ARD..      n = U
12a80 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
12a90 64 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74  ds.sqlite3_creat
12aa0 65 5f 66 75 6e 63 74 69 6f 6e 5f 69 6e 74 65 72  e_function_inter
12ab0 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28  op(_sql, ToUTF8(
12ac0 73 74 72 46 75 6e 63 74 69 6f 6e 29 2c 20 6e 41  strFunction), nA
12ad0 72 67 73 2c 20 34 2c 20 49 6e 74 50 74 72 2e 5a  rgs, 4, IntPtr.Z
12ae0 65 72 6f 2c 20 66 75 6e 63 2c 20 66 75 6e 63 73  ero, func, funcs
12af0 74 65 70 2c 20 66 75 6e 63 66 69 6e 61 6c 2c 20  tep, funcfinal, 
12b00 28 6e 65 65 64 43 6f 6c 6c 53 65 71 20 3d 3d 20  (needCollSeq == 
12b10 74 72 75 65 29 20 3f 20 31 20 3a 20 30 29 3b 0d  true) ? 1 : 0);.
12b20 0a 20 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20  .      if (n == 
12b30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
12b40 4f 6b 29 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61  Ok) n = UnsafeNa
12b50 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
12b60 74 65 33 5f 63 72 65 61 74 65 5f 66 75 6e 63 74  te3_create_funct
12b70 69 6f 6e 5f 69 6e 74 65 72 6f 70 28 5f 73 71 6c  ion_interop(_sql
12b80 2c 20 54 6f 55 54 46 38 28 73 74 72 46 75 6e 63  , ToUTF8(strFunc
12b90 74 69 6f 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c  tion), nArgs, 1,
12ba0 20 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75   IntPtr.Zero, fu
12bb0 6e 63 2c 20 66 75 6e 63 73 74 65 70 2c 20 66 75  nc, funcstep, fu
12bc0 6e 63 66 69 6e 61 6c 2c 20 28 6e 65 65 64 43 6f  ncfinal, (needCo
12bd0 6c 6c 53 65 71 20 3d 3d 20 74 72 75 65 29 20 3f  llSeq == true) ?
12be0 20 31 20 3a 20 30 29 3b 0d 0a 23 65 6c 73 65 0d   1 : 0);..#else.
12bf0 0a 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66  .      n = Unsaf
12c00 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
12c10 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f 66 75  qlite3_create_fu
12c20 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54 6f 55  nction(_sql, ToU
12c30 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f 6e 29  TF8(strFunction)
12c40 2c 20 6e 41 72 67 73 2c 20 34 2c 20 49 6e 74 50  , nArgs, 4, IntP
12c50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c 20 66  tr.Zero, func, f
12c60 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66 69 6e  uncstep, funcfin
12c70 61 6c 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28  al);..      if (
12c80 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f 72  n == SQLiteError
12c90 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e 73  Code.Ok) n = Uns
12ca0 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
12cb0 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65 5f  .sqlite3_create_
12cc0 66 75 6e 63 74 69 6f 6e 28 5f 73 71 6c 2c 20 54  function(_sql, T
12cd0 6f 55 54 46 38 28 73 74 72 46 75 6e 63 74 69 6f  oUTF8(strFunctio
12ce0 6e 29 2c 20 6e 41 72 67 73 2c 20 31 2c 20 49 6e  n), nArgs, 1, In
12cf0 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e 63 2c  tPtr.Zero, func,
12d00 20 66 75 6e 63 73 74 65 70 2c 20 66 75 6e 63 66   funcstep, funcf
12d10 69 6e 61 6c 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a  inal);..#endif..
12d20 20 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72        if (canThr
12d30 6f 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69  ow && (n != SQLi
12d40 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29  teErrorCode.Ok))
12d50 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
12d60 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
12d70 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
12d80 20 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d        return n;.
12d90 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
12da0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
12db0 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12dc0 43 72 65 61 74 65 43 6f 6c 6c 61 74 69 6f 6e 28  CreateCollation(
12dd0 73 74 72 69 6e 67 20 73 74 72 43 6f 6c 6c 61 74  string strCollat
12de0 69 6f 6e 2c 20 53 51 4c 69 74 65 43 6f 6c 6c 61  ion, SQLiteColla
12df0 74 69 6f 6e 20 66 75 6e 63 2c 20 53 51 4c 69 74  tion func, SQLit
12e00 65 43 6f 6c 6c 61 74 69 6f 6e 20 66 75 6e 63 31  eCollation func1
12e10 36 2c 20 62 6f 6f 6c 20 63 61 6e 54 68 72 6f 77  6, bool canThrow
12e20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
12e30 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
12e40 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
12e50 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
12e60 63 72 65 61 74 65 5f 63 6f 6c 6c 61 74 69 6f 6e  create_collation
12e70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38 28 73 74  (_sql, ToUTF8(st
12e80 72 43 6f 6c 6c 61 74 69 6f 6e 29 2c 20 32 2c 20  rCollation), 2, 
12e90 49 6e 74 50 74 72 2e 5a 65 72 6f 2c 20 66 75 6e  IntPtr.Zero, fun
12ea0 63 31 36 29 3b 0d 0a 20 20 20 20 20 20 69 66 20  c16);..      if 
12eb0 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n == SQLiteErro
12ec0 72 43 6f 64 65 2e 4f 6b 29 20 6e 20 3d 20 55 6e  rCode.Ok) n = Un
12ed0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
12ee0 73 2e 73 71 6c 69 74 65 33 5f 63 72 65 61 74 65  s.sqlite3_create
12ef0 5f 63 6f 6c 6c 61 74 69 6f 6e 28 5f 73 71 6c 2c  _collation(_sql,
12f00 20 54 6f 55 54 46 38 28 73 74 72 43 6f 6c 6c 61   ToUTF8(strColla
12f10 74 69 6f 6e 29 2c 20 31 2c 20 49 6e 74 50 74 72  tion), 1, IntPtr
12f20 2e 5a 65 72 6f 2c 20 66 75 6e 63 29 3b 0d 0a 20  .Zero, func);.. 
12f30 20 20 20 20 20 69 66 20 28 63 61 6e 54 68 72 6f       if (canThro
12f40 77 20 26 26 20 28 6e 20 21 3d 20 53 51 4c 69 74  w && (n != SQLit
12f50 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 29 20  eErrorCode.Ok)) 
12f60 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65  throw new SQLite
12f70 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65 74  Exception(n, Get
12f80 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
12f90 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
12fa0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
12fb0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 69  ernal override i
12fc0 6e 74 20 43 6f 6e 74 65 78 74 43 6f 6c 6c 61 74  nt ContextCollat
12fd0 65 43 6f 6d 70 61 72 65 28 43 6f 6c 6c 61 74 69  eCompare(Collati
12fe0 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 20 65  onEncodingEnum e
12ff0 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f 6e 74 65  nc, IntPtr conte
13000 78 74 2c 20 73 74 72 69 6e 67 20 73 31 2c 20 73  xt, string s1, s
13010 74 72 69 6e 67 20 73 32 29 0d 0a 20 20 20 20 7b  tring s2)..    {
13020 0d 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54  ..#if !SQLITE_ST
13030 41 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 62 79  ANDARD..      by
13040 74 65 5b 5d 20 62 31 3b 0d 0a 20 20 20 20 20 20  te[] b1;..      
13050 62 79 74 65 5b 5d 20 62 32 3b 0d 0a 20 20 20 20  byte[] b2;..    
13060 20 20 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e    System.Text.En
13070 63 6f 64 69 6e 67 20 63 6f 6e 76 65 72 74 65 72  coding converter
13080 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20 20 20   = null;....    
13090 20 20 73 77 69 74 63 68 20 28 65 6e 63 29 0d 0a    switch (enc)..
130a0 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
130b0 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45   case CollationE
130c0 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 38  ncodingEnum.UTF8
130d0 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  :..          con
130e0 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d 2e  verter = System.
130f0 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55 54  Text.Encoding.UT
13100 46 38 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 62  F8;..          b
13110 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 20 20 63  reak;..        c
13120 61 73 65 20 43 6f 6c 6c 61 74 69 6f 6e 45 6e 63  ase CollationEnc
13130 6f 64 69 6e 67 45 6e 75 6d 2e 55 54 46 31 36 4c  odingEnum.UTF16L
13140 45 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 63 6f  E:..          co
13150 6e 76 65 72 74 65 72 20 3d 20 53 79 73 74 65 6d  nverter = System
13160 2e 54 65 78 74 2e 45 6e 63 6f 64 69 6e 67 2e 55  .Text.Encoding.U
13170 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20  nicode;..       
13180 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20     break;..     
13190 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74 69 6f     case Collatio
131a0 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e 55 54  nEncodingEnum.UT
131b0 46 31 36 42 45 3a 0d 0a 20 20 20 20 20 20 20 20  F16BE:..        
131c0 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53 79    converter = Sy
131d0 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64 69  stem.Text.Encodi
131e0 6e 67 2e 42 69 67 45 6e 64 69 61 6e 55 6e 69 63  ng.BigEndianUnic
131f0 6f 64 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ode;..          
13200 62 72 65 61 6b 3b 0d 0a 20 20 20 20 20 20 7d 0d  break;..      }.
13210 0a 0d 0a 20 20 20 20 20 20 62 31 20 3d 20 63 6f  ...      b1 = co
13220 6e 76 65 72 74 65 72 2e 47 65 74 42 79 74 65 73  nverter.GetBytes
13230 28 73 31 29 3b 0d 0a 20 20 20 20 20 20 62 32 20  (s1);..      b2 
13240 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65 74 42  = converter.GetB
13250 79 74 65 73 28 73 32 29 3b 0d 0a 0d 0a 20 20 20  ytes(s2);....   
13260 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
13270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
13280 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63 6f  lite3_context_co
13290 6c 6c 63 6f 6d 70 61 72 65 5f 69 6e 74 65 72 6f  llcompare_intero
132a0 70 28 63 6f 6e 74 65 78 74 2c 20 62 31 2c 20 62  p(context, b1, b
132b0 31 2e 4c 65 6e 67 74 68 2c 20 62 32 2c 20 62 32  1.Length, b2, b2
132c0 2e 4c 65 6e 67 74 68 29 3b 0d 0a 23 65 6c 73 65  .Length);..#else
132d0 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65  ..      throw ne
132e0 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64  w NotImplemented
132f0 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65  Exception();..#e
13300 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ndif..    }.... 
13310 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
13320 72 69 64 65 20 69 6e 74 20 43 6f 6e 74 65 78 74  ride int Context
13330 43 6f 6c 6c 61 74 65 43 6f 6d 70 61 72 65 28 43  CollateCompare(C
13340 6f 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67  ollationEncoding
13350 45 6e 75 6d 20 65 6e 63 2c 20 49 6e 74 50 74 72  Enum enc, IntPtr
13360 20 63 6f 6e 74 65 78 74 2c 20 63 68 61 72 5b 5d   context, char[]
13370 20 63 31 2c 20 63 68 61 72 5b 5d 20 63 32 29 0d   c1, char[] c2).
13380 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c  .    {..#if !SQL
13390 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
133a0 20 20 20 20 62 79 74 65 5b 5d 20 62 31 3b 0d 0a      byte[] b1;..
133b0 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 32 3b        byte[] b2;
133c0 0d 0a 20 20 20 20 20 20 53 79 73 74 65 6d 2e 54  ..      System.T
133d0 65 78 74 2e 45 6e 63 6f 64 69 6e 67 20 63 6f 6e  ext.Encoding con
133e0 76 65 72 74 65 72 20 3d 20 6e 75 6c 6c 3b 0d 0a  verter = null;..
133f0 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20 28  ..      switch (
13400 65 6e 63 29 0d 0a 20 20 20 20 20 20 7b 0d 0a 20  enc)..      {.. 
13410 20 20 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c         case Coll
13420 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75  ationEncodingEnu
13430 6d 2e 55 54 46 38 3a 0d 0a 20 20 20 20 20 20 20  m.UTF8:..       
13440 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20 53     converter = S
13450 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f 64  ystem.Text.Encod
13460 69 6e 67 2e 55 54 46 38 3b 0d 0a 20 20 20 20 20  ing.UTF8;..     
13470 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20 20       break;..   
13480 20 20 20 20 20 63 61 73 65 20 43 6f 6c 6c 61 74       case Collat
13490 69 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 2e  ionEncodingEnum.
134a0 55 54 46 31 36 4c 45 3a 0d 0a 20 20 20 20 20 20  UTF16LE:..      
134b0 20 20 20 20 63 6f 6e 76 65 72 74 65 72 20 3d 20      converter = 
134c0 53 79 73 74 65 6d 2e 54 65 78 74 2e 45 6e 63 6f  System.Text.Enco
134d0 64 69 6e 67 2e 55 6e 69 63 6f 64 65 3b 0d 0a 20  ding.Unicode;.. 
134e0 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0d           break;.
134f0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 43 6f  .        case Co
13500 6c 6c 61 74 69 6f 6e 45 6e 63 6f 64 69 6e 67 45  llationEncodingE
13510 6e 75 6d 2e 55 54 46 31 36 42 45 3a 0d 0a 20 20  num.UTF16BE:..  
13520 20 20 20 20 20 20 20 20 63 6f 6e 76 65 72 74 65          converte
13530 72 20 3d 20 53 79 73 74 65 6d 2e 54 65 78 74 2e  r = System.Text.
13540 45 6e 63 6f 64 69 6e 67 2e 42 69 67 45 6e 64 69  Encoding.BigEndi
13550 61 6e 55 6e 69 63 6f 64 65 3b 0d 0a 20 20 20 20  anUnicode;..    
13560 20 20 20 20 20 20 62 72 65 61 6b 3b 0d 0a 20 20        break;..  
13570 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 62      }....      b
13580 31 20 3d 20 63 6f 6e 76 65 72 74 65 72 2e 47 65  1 = converter.Ge
13590 74 42 79 74 65 73 28 63 31 29 3b 0d 0a 20 20 20  tBytes(c1);..   
135a0 20 20 20 62 32 20 3d 20 63 6f 6e 76 65 72 74 65     b2 = converte
135b0 72 2e 47 65 74 42 79 74 65 73 28 63 32 29 3b 0d  r.GetBytes(c2);.
135c0 0a 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ...      return 
135d0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
135e0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 74  ods.sqlite3_cont
135f0 65 78 74 5f 63 6f 6c 6c 63 6f 6d 70 61 72 65 5f  ext_collcompare_
13600 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c  interop(context,
13610 20 62 31 2c 20 62 31 2e 4c 65 6e 67 74 68 2c 20   b1, b1.Length, 
13620 62 32 2c 20 62 32 2e 4c 65 6e 67 74 68 29 3b 0d  b2, b2.Length);.
13630 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68  .#else..      th
13640 72 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65  row new NotImple
13650 6d 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28  mentedException(
13660 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20  );..#endif..    
13670 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13680 6c 20 6f 76 65 72 72 69 64 65 20 43 6f 6c 6c 61  l override Colla
13690 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 47 65 74  tionSequence Get
136a0 43 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e 63  CollationSequenc
136b0 65 28 53 51 4c 69 74 65 46 75 6e 63 74 69 6f 6e  e(SQLiteFunction
136c0 20 66 75 6e 63 2c 20 49 6e 74 50 74 72 20 63 6f   func, IntPtr co
136d0 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b 0d 0a 23  ntext)..    {..#
136e0 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44  if !SQLITE_STAND
136f0 41 52 44 0d 0a 20 20 20 20 20 20 43 6f 6c 6c 61  ARD..      Colla
13700 74 69 6f 6e 53 65 71 75 65 6e 63 65 20 73 65 71  tionSequence seq
13710 20 3d 20 6e 65 77 20 43 6f 6c 6c 61 74 69 6f 6e   = new Collation
13720 53 65 71 75 65 6e 63 65 28 29 3b 0d 0a 20 20 20  Sequence();..   
13730 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
13740 0a 20 20 20 20 20 20 69 6e 74 20 74 79 70 65 20  .      int type 
13750 3d 20 30 3b 0d 0a 20 20 20 20 20 20 69 6e 74 20  = 0;..      int 
13760 65 6e 63 20 3d 20 30 3b 0d 0a 20 20 20 20 20 20  enc = 0;..      
13770 49 6e 74 50 74 72 20 70 20 3d 20 55 6e 73 61 66  IntPtr p = Unsaf
13780 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13790 71 6c 69 74 65 33 5f 63 6f 6e 74 65 78 74 5f 63  qlite3_context_c
137a0 6f 6c 6c 73 65 71 5f 69 6e 74 65 72 6f 70 28 63  ollseq_interop(c
137b0 6f 6e 74 65 78 74 2c 20 72 65 66 20 74 79 70 65  ontext, ref type
137c0 2c 20 72 65 66 20 65 6e 63 2c 20 72 65 66 20 6c  , ref enc, ref l
137d0 65 6e 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66  en);....      if
137e0 20 28 70 20 21 3d 20 6e 75 6c 6c 29 20 73 65 71   (p != null) seq
137f0 2e 4e 61 6d 65 20 3d 20 55 54 46 38 54 6f 53 74  .Name = UTF8ToSt
13800 72 69 6e 67 28 70 2c 20 6c 65 6e 29 3b 0d 0a 20  ring(p, len);.. 
13810 20 20 20 20 20 73 65 71 2e 54 79 70 65 20 3d 20       seq.Type = 
13820 28 43 6f 6c 6c 61 74 69 6f 6e 54 79 70 65 45 6e  (CollationTypeEn
13830 75 6d 29 74 79 70 65 3b 0d 0a 20 20 20 20 20 20  um)type;..      
13840 73 65 71 2e 5f 66 75 6e 63 20 3d 20 66 75 6e 63  seq._func = func
13850 3b 0d 0a 20 20 20 20 20 20 73 65 71 2e 45 6e 63  ;..      seq.Enc
13860 6f 64 69 6e 67 20 3d 20 28 43 6f 6c 6c 61 74 69  oding = (Collati
13870 6f 6e 45 6e 63 6f 64 69 6e 67 45 6e 75 6d 29 65  onEncodingEnum)e
13880 6e 63 3b 0d 0a 0d 0a 20 20 20 20 20 20 72 65 74  nc;....      ret
13890 75 72 6e 20 73 65 71 3b 0d 0a 23 65 6c 73 65 0d  urn seq;..#else.
138a0 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77  .      throw new
138b0 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65 64 45   NotImplementedE
138c0 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23 65 6e  xception();..#en
138d0 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  dif..    }....  
138e0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
138f0 69 64 65 20 6c 6f 6e 67 20 47 65 74 50 61 72 61  ide long GetPara
13900 6d 56 61 6c 75 65 42 79 74 65 73 28 49 6e 74 50  mValueBytes(IntP
13910 74 72 20 70 2c 20 69 6e 74 20 6e 44 61 74 61 4f  tr p, int nDataO
13920 66 66 73 65 74 2c 20 62 79 74 65 5b 5d 20 62 44  ffset, byte[] bD
13930 65 73 74 2c 20 69 6e 74 20 6e 53 74 61 72 74 2c  est, int nStart,
13940 20 69 6e 74 20 6e 4c 65 6e 67 74 68 29 0d 0a 20   int nLength).. 
13950 20 20 20 7b 0d 0a 20 20 20 20 20 20 69 6e 74 20     {..      int 
13960 6e 6c 65 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74  nlen = UnsafeNat
13970 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
13980 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
13990 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 2f 2f 20 49  );....      // I
139a0 66 20 6e 6f 20 64 65 73 74 69 6e 61 74 69 6f 6e  f no destination
139b0 20 62 75 66 66 65 72 2c 20 72 65 74 75 72 6e 20   buffer, return 
139c0 74 68 65 20 73 69 7a 65 20 6e 65 65 64 65 64 2e  the size needed.
139d0 0d 0a 20 20 20 20 20 20 69 66 20 28 62 44 65 73  ..      if (bDes
139e0 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74 75 72  t == null) retur
139f0 6e 20 6e 6c 65 6e 3b 0d 0a 0d 0a 20 20 20 20 20  n nlen;....     
13a00 20 69 6e 74 20 6e 43 6f 70 69 65 64 20 3d 20 6e   int nCopied = n
13a10 4c 65 6e 67 74 68 3b 0d 0a 0d 0a 20 20 20 20 20  Length;....     
13a20 20 69 66 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e   if (nCopied + n
13a30 53 74 61 72 74 20 3e 20 62 44 65 73 74 2e 4c 65  Start > bDest.Le
13a40 6e 67 74 68 29 20 6e 43 6f 70 69 65 64 20 3d 20  ngth) nCopied = 
13a50 62 44 65 73 74 2e 4c 65 6e 67 74 68 20 2d 20 6e  bDest.Length - n
13a60 53 74 61 72 74 3b 0d 0a 20 20 20 20 20 20 69 66  Start;..      if
13a70 20 28 6e 43 6f 70 69 65 64 20 2b 20 6e 44 61 74   (nCopied + nDat
13a80 61 4f 66 66 73 65 74 20 3e 20 6e 6c 65 6e 29 20  aOffset > nlen) 
13a90 6e 43 6f 70 69 65 64 20 3d 20 6e 6c 65 6e 20 2d  nCopied = nlen -
13aa0 20 6e 44 61 74 61 4f 66 66 73 65 74 3b 0d 0a 0d   nDataOffset;...
13ab0 0a 20 20 20 20 20 20 69 66 20 28 6e 43 6f 70 69  .      if (nCopi
13ac0 65 64 20 3e 20 30 29 0d 0a 20 20 20 20 20 20 7b  ed > 0)..      {
13ad0 0d 0a 20 20 20 20 20 20 20 20 49 6e 74 50 74 72  ..        IntPtr
13ae0 20 70 74 72 20 3d 20 55 6e 73 61 66 65 4e 61 74   ptr = 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 62 6c 6f 62 28 70 29  e3_value_blob(p)
13b10 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 4d 61 72  ;....        Mar
13b20 73 68 61 6c 2e 43 6f 70 79 28 28 49 6e 74 50 74  shal.Copy((IntPt
13b30 72 29 28 70 74 72 2e 54 6f 49 6e 74 36 34 28 29  r)(ptr.ToInt64()
13b40 20 2b 20 6e 44 61 74 61 4f 66 66 73 65 74 29 2c   + nDataOffset),
13b50 20 62 44 65 73 74 2c 20 6e 53 74 61 72 74 2c 20   bDest, nStart, 
13b60 6e 43 6f 70 69 65 64 29 3b 0d 0a 20 20 20 20 20  nCopied);..     
13b70 20 7d 0d 0a 20 20 20 20 20 20 65 6c 73 65 0d 0a   }..      else..
13b80 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
13b90 20 6e 43 6f 70 69 65 64 20 3d 20 30 3b 0d 0a 20   nCopied = 0;.. 
13ba0 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
13bb0 72 65 74 75 72 6e 20 6e 43 6f 70 69 65 64 3b 0d  return nCopied;.
13bc0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
13bd0 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
13be0 64 6f 75 62 6c 65 20 47 65 74 50 61 72 61 6d 56  double GetParamV
13bf0 61 6c 75 65 44 6f 75 62 6c 65 28 49 6e 74 50 74  alueDouble(IntPt
13c00 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d 0a 23  r ptr)..    {..#
13c10 69 66 20 21 50 4c 41 54 46 4f 52 4d 5f 43 4f 4d  if !PLATFORM_COM
13c20 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 0d 0a 20  PACTFRAMEWORK.. 
13c30 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61       return Unsa
13c40 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
13c50 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 64 6f  sqlite3_value_do
13c60 75 62 6c 65 28 70 74 72 29 3b 0d 0a 23 65 6c 69  uble(ptr);..#eli
13c70 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  f !SQLITE_STANDA
13c80 52 44 0d 0a 20 20 20 20 20 20 64 6f 75 62 6c 65  RD..      double
13c90 20 76 61 6c 75 65 20 3d 20 30 2e 30 3b 0d 0a 20   value = 0.0;.. 
13ca0 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76       UnsafeNativ
13cb0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
13cc0 5f 76 61 6c 75 65 5f 64 6f 75 62 6c 65 5f 69 6e  _value_double_in
13cd0 74 65 72 6f 70 28 70 74 72 2c 20 72 65 66 20 76  terop(ptr, ref v
13ce0 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20 20 72 65  alue);..      re
13cf0 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a 23 65 6c  turn value;..#el
13d00 73 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20  se..      throw 
13d10 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74  new NotImplement
13d20 65 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a  edException();..
13d30 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d  #endif..    }...
13d40 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
13d50 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 50 61  erride int GetPa
13d60 72 61 6d 56 61 6c 75 65 49 6e 74 33 32 28 49 6e  ramValueInt32(In
13d70 74 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b  tPtr ptr)..    {
13d80 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
13d90 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
13da0 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65  ds.sqlite3_value
13db0 5f 69 6e 74 28 70 74 72 29 3b 0d 0a 20 20 20 20  _int(ptr);..    
13dc0 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
13dd0 6c 20 6f 76 65 72 72 69 64 65 20 6c 6f 6e 67 20  l override long 
13de0 47 65 74 50 61 72 61 6d 56 61 6c 75 65 49 6e 74  GetParamValueInt
13df0 36 34 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  64(IntPtr ptr)..
13e00 20 20 20 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54      {..#if !PLAT
13e10 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d  FORM_COMPACTFRAM
13e20 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20 72 65 74  EWORK..      ret
13e30 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
13e40 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
13e50 76 61 6c 75 65 5f 69 6e 74 36 34 28 70 74 72 29  value_int64(ptr)
13e60 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c 49 54 45  ;..#elif !SQLITE
13e70 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20 20  _STANDARD..     
13e80 20 49 6e 74 36 34 20 76 61 6c 75 65 20 3d 20 30   Int64 value = 0
13e90 3b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  ;..      UnsafeN
13ea0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
13eb0 69 74 65 33 5f 76 61 6c 75 65 5f 69 6e 74 36 34  ite3_value_int64
13ec0 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72 65  _interop(ptr, re
13ed0 66 20 76 61 6c 75 65 29 3b 0d 0a 20 20 20 20 20  f value);..     
13ee0 20 72 65 74 75 72 6e 20 76 61 6c 75 65 3b 0d 0a   return value;..
13ef0 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
13f00 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
13f10 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
13f20 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
13f30 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
13f40 20 6f 76 65 72 72 69 64 65 20 73 74 72 69 6e 67   override string
13f50 20 47 65 74 50 61 72 61 6d 56 61 6c 75 65 54 65   GetParamValueTe
13f60 78 74 28 49 6e 74 50 74 72 20 70 74 72 29 0d 0a  xt(IntPtr ptr)..
13f70 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49      {..#if !SQLI
13f80 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20  TE_STANDARD..   
13f90 20 20 20 69 6e 74 20 6c 65 6e 20 3d 20 30 3b 0d     int len = 0;.
13fa0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 54  .      return UT
13fb0 46 38 54 6f 53 74 72 69 6e 67 28 55 6e 73 61 66  F8ToString(Unsaf
13fc0 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73  eNativeMethods.s
13fd0 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f 74 65 78  qlite3_value_tex
13fe0 74 5f 69 6e 74 65 72 6f 70 28 70 74 72 2c 20 72  t_interop(ptr, r
13ff0 65 66 20 6c 65 6e 29 2c 20 6c 65 6e 29 3b 0d 0a  ef len), len);..
14000 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
14010 75 72 6e 20 55 54 46 38 54 6f 53 74 72 69 6e 67  urn UTF8ToString
14020 28 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74  (UnsafeNativeMet
14030 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c  hods.sqlite3_val
14040 75 65 5f 74 65 78 74 28 70 74 72 29 2c 0d 0a 20  ue_text(ptr),.. 
14050 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74         UnsafeNat
14060 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14070 65 33 5f 76 61 6c 75 65 5f 62 79 74 65 73 28 70  e3_value_bytes(p
14080 74 72 29 29 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20  tr));..#endif.. 
14090 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65     }....    inte
140a0 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 54 79  rnal override Ty
140b0 70 65 41 66 66 69 6e 69 74 79 20 47 65 74 50 61  peAffinity GetPa
140c0 72 61 6d 56 61 6c 75 65 54 79 70 65 28 49 6e 74  ramValueType(Int
140d0 50 74 72 20 70 74 72 29 0d 0a 20 20 20 20 7b 0d  Ptr ptr)..    {.
140e0 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55 6e  .      return Un
140f0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
14100 73 2e 73 71 6c 69 74 65 33 5f 76 61 6c 75 65 5f  s.sqlite3_value_
14110 74 79 70 65 28 70 74 72 29 3b 0d 0a 20 20 20 20  type(ptr);..    
14120 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
14130 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
14140 52 65 74 75 72 6e 42 6c 6f 62 28 49 6e 74 50 74  ReturnBlob(IntPt
14150 72 20 63 6f 6e 74 65 78 74 2c 20 62 79 74 65 5b  r context, byte[
14160 5d 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d  ] value)..    {.
14170 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
14180 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
14190 65 33 5f 72 65 73 75 6c 74 5f 62 6c 6f 62 28 63  e3_result_blob(c
141a0 6f 6e 74 65 78 74 2c 20 76 61 6c 75 65 2c 20 76  ontext, value, v
141b0 61 6c 75 65 2e 4c 65 6e 67 74 68 2c 20 28 49 6e  alue.Length, (In
141c0 74 50 74 72 29 28 2d 31 29 29 3b 0d 0a 20 20 20  tPtr)(-1));..   
141d0 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e   }....    intern
141e0 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64  al override void
141f0 20 52 65 74 75 72 6e 44 6f 75 62 6c 65 28 49 6e   ReturnDouble(In
14200 74 50 74 72 20 63 6f 6e 74 65 78 74 2c 20 64 6f  tPtr context, do
14210 75 62 6c 65 20 76 61 6c 75 65 29 0d 0a 20 20 20  uble value)..   
14220 20 7b 0d 0a 23 69 66 20 21 50 4c 41 54 46 4f 52   {..#if !PLATFOR
14230 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
14240 52 4b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65  RK..      Unsafe
14250 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
14260 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f 64 6f 75  lite3_result_dou
14270 62 6c 65 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  ble(context, val
14280 75 65 29 3b 0d 0a 23 65 6c 69 66 20 21 53 51 4c  ue);..#elif !SQL
14290 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20  ITE_STANDARD..  
142a0 20 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65      UnsafeNative
142b0 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
142c0 72 65 73 75 6c 74 5f 64 6f 75 62 6c 65 5f 69 6e  result_double_in
142d0 74 65 72 6f 70 28 63 6f 6e 74 65 78 74 2c 20 72  terop(context, r
142e0 65 66 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 73  ef value);..#els
142f0 65 0d 0a 20 20 20 20 20 20 74 68 72 6f 77 20 6e  e..      throw n
14300 65 77 20 4e 6f 74 49 6d 70 6c 65 6d 65 6e 74 65  ew NotImplemente
14310 64 45 78 63 65 70 74 69 6f 6e 28 29 3b 0d 0a 23  dException();..#
14320 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  endif..    }....
14330 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65      internal ove
14340 72 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72  rride void Retur
14350 6e 45 72 72 6f 72 28 49 6e 74 50 74 72 20 63 6f  nError(IntPtr co
14360 6e 74 65 78 74 2c 20 73 74 72 69 6e 67 20 76 61  ntext, string va
14370 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  lue)..    {..   
14380 20 20 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d     UnsafeNativeM
14390 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72  ethods.sqlite3_r
143a0 65 73 75 6c 74 5f 65 72 72 6f 72 28 63 6f 6e 74  esult_error(cont
143b0 65 78 74 2c 20 54 6f 55 54 46 38 28 76 61 6c 75  ext, ToUTF8(valu
143c0 65 29 2c 20 76 61 6c 75 65 2e 4c 65 6e 67 74 68  e), value.Length
143d0 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
143e0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
143f0 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e 49 6e  de void ReturnIn
14400 74 33 32 28 49 6e 74 50 74 72 20 63 6f 6e 74 65  t32(IntPtr conte
14410 78 74 2c 20 69 6e 74 20 76 61 6c 75 65 29 0d 0a  xt, int value)..
14420 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73      {..      Uns
14430 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73  afeNativeMethods
14440 2e 73 71 6c 69 74 65 33 5f 72 65 73 75 6c 74 5f  .sqlite3_result_
14450 69 6e 74 28 63 6f 6e 74 65 78 74 2c 20 76 61 6c  int(context, val
14460 75 65 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20  ue);..    }.... 
14470 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
14480 72 69 64 65 20 76 6f 69 64 20 52 65 74 75 72 6e  ride void Return
14490 49 6e 74 36 34 28 49 6e 74 50 74 72 20 63 6f 6e  Int64(IntPtr con
144a0 74 65 78 74 2c 20 6c 6f 6e 67 20 76 61 6c 75 65  text, long value
144b0 29 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 50  )..    {..#if !P
144c0 4c 41 54 46 4f 52 4d 5f 43 4f 4d 50 41 43 54 46  LATFORM_COMPACTF
144d0 52 41 4d 45 57 4f 52 4b 0d 0a 20 20 20 20 20 20  RAMEWORK..      
144e0 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
144f0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 73 75  ods.sqlite3_resu
14500 6c 74 5f 69 6e 74 36 34 28 63 6f 6e 74 65 78 74  lt_int64(context
14510 2c 20 76 61 6c 75 65 29 3b 0d 0a 23 65 6c 69 66  , value);..#elif
14520 20 21 53 51 4c 49 54 45 5f 53 54 41 4e 44 41 52   !SQLITE_STANDAR
14530 44 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e  D..      UnsafeN
14540 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
14550 69 74 65 33 5f 72 65 73 75 6c 74 5f 69 6e 74 36  ite3_result_int6
14560 34 5f 69 6e 74 65 72 6f 70 28 63 6f 6e 74 65 78  4_interop(contex
14570 74 2c 20 72 65 66 20 76 61 6c 75 65 29 3b 0d 0a  t, ref value);..
14580 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 74 68 72  #else..      thr
14590 6f 77 20 6e 65 77 20 4e 6f 74 49 6d 70 6c 65 6d  ow new NotImplem
145a0 65 6e 74 65 64 45 78 63 65 70 74 69 6f 6e 28 29  entedException()
145b0 3b 0d 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d  ;..#endif..    }
145c0 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
145d0 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
145e0 65 74 75 72 6e 4e 75 6c 6c 28 49 6e 74 50 74 72  eturnNull(IntPtr
145f0 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20 7b   context)..    {
14600 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61  ..      UnsafeNa
14610 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
14620 74 65 33 5f 72 65 73 75 6c 74 5f 6e 75 6c 6c 28  te3_result_null(
14630 63 6f 6e 74 65 78 74 29 3b 0d 0a 20 20 20 20 7d  context);..    }
14640 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
14650 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 52   override void R
14660 65 74 75 72 6e 54 65 78 74 28 49 6e 74 50 74 72  eturnText(IntPtr
14670 20 63 6f 6e 74 65 78 74 2c 20 73 74 72 69 6e 67   context, string
14680 20 76 61 6c 75 65 29 0d 0a 20 20 20 20 7b 0d 0a   value)..    {..
14690 20 20 20 20 20 20 62 79 74 65 5b 5d 20 62 20 3d        byte[] b =
146a0 20 54 6f 55 54 46 38 28 76 61 6c 75 65 29 3b 0d   ToUTF8(value);.
146b0 0a 20 20 20 20 20 20 55 6e 73 61 66 65 4e 61 74  .      UnsafeNat
146c0 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74  iveMethods.sqlit
146d0 65 33 5f 72 65 73 75 6c 74 5f 74 65 78 74 28 63  e3_result_text(c
146e0 6f 6e 74 65 78 74 2c 20 54 6f 55 54 46 38 28 76  ontext, ToUTF8(v
146f0 61 6c 75 65 29 2c 20 62 2e 4c 65 6e 67 74 68 20  alue), b.Length 
14700 2d 20 31 2c 20 28 49 6e 74 50 74 72 29 28 2d 31  - 1, (IntPtr)(-1
14710 29 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 23 69  ));..    }....#i
14720 66 20 49 4e 54 45 52 4f 50 5f 56 49 52 54 55 41  f INTEROP_VIRTUA
14730 4c 5f 54 41 42 4c 45 0d 0a 20 20 20 20 2f 2f 2f  L_TABLE..    ///
14740 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20   <summary>..    
14750 2f 2f 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 74  /// Determines t
14760 68 65 20 66 69 6c 65 20 6e 61 6d 65 20 6f 66 20  he file name of 
14770 74 68 65 20 6e 61 74 69 76 65 20 6c 69 62 72 61  the native libra
14780 72 79 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68  ry containing th
14790 65 20 6e 61 74 69 76 65 0d 0a 20 20 20 20 2f 2f  e native..    //
147a0 2f 20 22 76 74 73 68 69 6d 22 20 65 78 74 65 6e  / "vtshim" exten
147b0 73 69 6f 6e 20 2d 41 4e 44 2d 20 77 68 65 74 68  sion -AND- wheth
147c0 65 72 20 69 74 20 73 68 6f 75 6c 64 20 62 65 20  er it should be 
147d0 64 79 6e 61 6d 69 63 61 6c 6c 79 20 6c 6f 61 64  dynamically load
147e0 65 64 20 62 79 0d 0a 20 20 20 20 2f 2f 2f 20 74  ed by..    /// t
147f0 68 69 73 20 63 6c 61 73 73 2e 0d 0a 20 20 20 20  his class...    
14800 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
14810 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
14820 61 6d 65 3d 22 69 73 4c 6f 61 64 4e 65 65 64 65  ame="isLoadNeede
14830 64 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 69  d">..    /// Thi
14840 73 20 6f 75 74 70 75 74 20 70 61 72 61 6d 65 74  s output paramet
14850 65 72 20 77 69 6c 6c 20 62 65 20 73 65 74 20 74  er will be set t
14860 6f 20 6e 6f 6e 2d 7a 65 72 6f 20 69 66 20 74 68  o non-zero if th
14870 65 20 72 65 74 75 72 6e 65 64 20 6e 61 74 69 76  e returned nativ
14880 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c 69 62 72 61  e..    /// libra
14890 72 79 20 66 69 6c 65 20 6e 61 6d 65 20 73 68 6f  ry file name sho
148a0 75 6c 64 20 62 65 20 64 79 6e 61 6d 69 63 61 6c  uld be dynamical
148b0 6c 79 20 6c 6f 61 64 65 64 20 70 72 69 6f 72 20  ly loaded prior 
148c0 74 6f 20 61 74 74 65 6d 70 74 69 6e 67 0d 0a 20  to attempting.. 
148d0 20 20 20 2f 2f 2f 20 74 68 65 20 63 72 65 61 74     /// the creat
148e0 69 6f 6e 20 6f 66 20 6e 61 74 69 76 65 20 64 69  ion of native di
148f0 73 70 6f 73 61 62 6c 65 20 65 78 74 65 6e 73 69  sposable extensi
14900 6f 6e 20 6d 6f 64 75 6c 65 73 2e 0d 0a 20 20 20  on modules...   
14910 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
14920 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e     /// <returns>
14930 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 69  ..    /// The fi
14940 6c 65 20 6e 61 6d 65 20 6f 66 20 74 68 65 20 6e  le name of the n
14950 61 74 69 76 65 20 6c 69 62 72 61 72 79 20 63 6f  ative library co
14960 6e 74 61 69 6e 69 6e 67 20 74 68 65 20 6e 61 74  ntaining the nat
14970 69 76 65 20 22 76 74 73 68 69 6d 22 0d 0a 20 20  ive "vtshim"..  
14980 20 20 2f 2f 2f 20 65 78 74 65 6e 73 69 6f 6e 20    /// extension 
14990 2d 4f 52 2d 20 6e 75 6c 6c 20 69 66 20 69 74 20  -OR- null if it 
149a0 63 61 6e 6e 6f 74 20 62 65 20 64 65 74 65 72 6d  cannot be determ
149b0 69 6e 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ined...    /// <
149c0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 70  /returns>..    p
149d0 72 69 76 61 74 65 20 73 74 72 69 6e 67 20 47 65  rivate string Ge
149e0 74 53 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69  tShimExtensionFi
149f0 6c 65 4e 61 6d 65 28 0d 0a 20 20 20 20 20 20 20  leName(..       
14a00 20 72 65 66 20 62 6f 6f 6c 20 69 73 4c 6f 61 64   ref bool isLoad
14a10 4e 65 65 64 65 64 20 2f 2a 20 6f 75 74 20 2a 2f  Needed /* out */
14a20 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
14a30 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
14a40 5f 73 68 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65  _shimIsLoadNeede
14a50 64 20 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  d != null)..    
14a60 20 20 20 20 20 20 20 20 69 73 4c 6f 61 64 4e 65          isLoadNe
14a70 65 64 65 64 20 3d 20 28 62 6f 6f 6c 29 5f 73 68  eded = (bool)_sh
14a80 69 6d 49 73 4c 6f 61 64 4e 65 65 64 65 64 3b 0d  imIsLoadNeeded;.
14a90 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 23  .        else..#
14aa0 69 66 20 53 51 4c 49 54 45 5f 53 54 41 4e 44 41  if SQLITE_STANDA
14ab0 52 44 20 7c 7c 20 55 53 45 5f 49 4e 54 45 52 4f  RD || USE_INTERO
14ac0 50 5f 44 4c 4c 20 7c 7c 20 50 4c 41 54 46 4f 52  P_DLL || PLATFOR
14ad0 4d 5f 43 4f 4d 50 41 43 54 46 52 41 4d 45 57 4f  M_COMPACTFRAMEWO
14ae0 52 4b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  RK..            
14af0 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20 48  isLoadNeeded = H
14b00 65 6c 70 65 72 4d 65 74 68 6f 64 73 2e 49 73 57  elperMethods.IsW
14b10 69 6e 64 6f 77 73 28 29 3b 20 2f 2a 20 43 4f 4d  indows(); /* COM
14b20 50 41 54 20 2a 2f 0d 0a 23 65 6c 73 65 0d 0a 20  PAT */..#else.. 
14b30 20 20 20 20 20 20 20 20 20 20 20 69 73 4c 6f 61             isLoa
14b40 64 4e 65 65 64 65 64 20 3d 20 66 61 6c 73 65 3b  dNeeded = false;
14b50 20 2f 2a 20 6d 69 78 65 64 2d 6d 6f 64 65 20 61   /* mixed-mode a
14b60 73 73 65 6d 62 6c 79 20 2a 2f 0d 0a 23 65 6e 64  ssembly */..#end
14b70 69 66 0d 0a 0d 0a 20 20 20 20 20 20 20 20 73 74  if....        st
14b80 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20 3d 20  ring fileName = 
14b90 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 46 69  _shimExtensionFi
14ba0 6c 65 4e 61 6d 65 3b 0d 0a 0d 0a 20 20 20 20 20  leName;....     
14bb0 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
14bc0 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
14bd0 20 20 20 20 20 20 72 65 74 75 72 6e 20 66 69 6c        return fil
14be0 65 4e 61 6d 65 3b 0d 0a 0d 0a 23 69 66 20 28 53  eName;....#if (S
14bf0 51 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 20 7c  QLITE_STANDARD |
14c00 7c 20 55 53 45 5f 49 4e 54 45 52 4f 50 5f 44 4c  | USE_INTEROP_DL
14c10 4c 20 7c 7c 20 50 4c 41 54 46 4f 52 4d 5f 43 4f  L || PLATFORM_CO
14c20 4d 50 41 43 54 46 52 41 4d 45 57 4f 52 4b 29 20  MPACTFRAMEWORK) 
14c30 26 26 20 50 52 45 4c 4f 41 44 5f 4e 41 54 49 56  && PRELOAD_NATIV
14c40 45 5f 4c 49 42 52 41 52 59 0d 0a 20 20 20 20 20  E_LIBRARY..     
14c50 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
14c60 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 47 65  NativeMethods.Ge
14c70 74 4e 61 74 69 76 65 4c 69 62 72 61 72 79 46 69  tNativeLibraryFi
14c80 6c 65 4e 61 6d 65 4f 6e 6c 79 28 29 3b 20 2f 2a  leNameOnly(); /*
14c90 20 43 4f 4d 50 41 54 20 2a 2f 0d 0a 23 65 6c 73   COMPAT */..#els
14ca0 65 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  e..        retur
14cb0 6e 20 6e 75 6c 6c 3b 0d 0a 23 65 6e 64 69 66 0d  n null;..#endif.
14cc0 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f  .    }....    //
14cd0 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20  / <summary>..   
14ce0 20 2f 2f 2f 20 43 61 6c 6c 73 20 74 68 65 20 6e   /// Calls the n
14cf0 61 74 69 76 65 20 53 51 4c 69 74 65 20 63 6f 72  ative SQLite cor
14d00 65 20 6c 69 62 72 61 72 79 20 69 6e 20 6f 72 64  e library in ord
14d10 65 72 20 74 6f 20 63 72 65 61 74 65 20 61 20 64  er to create a d
14d20 69 73 70 6f 73 61 62 6c 65 0d 0a 20 20 20 20 2f  isposable..    /
14d30 2f 2f 20 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69  // module contai
14d40 6e 69 6e 67 20 74 68 65 20 69 6d 70 6c 65 6d 65  ning the impleme
14d50 6e 74 61 74 69 6f 6e 20 6f 66 20 61 20 76 69 72  ntation of a vir
14d60 74 75 61 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20  tual table...   
14d70 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
14d80 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
14d90 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a  name="module">..
14da0 20 20 20 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75      /// The modu
14db0 6c 65 20 6f 62 6a 65 63 74 20 74 6f 20 62 65 20  le object to be 
14dc0 75 73 65 64 20 77 68 65 6e 20 63 72 65 61 74 69  used when creati
14dd0 6e 67 20 74 68 65 20 6e 61 74 69 76 65 20 64 69  ng the native di
14de0 73 70 6f 73 61 62 6c 65 20 6d 6f 64 75 6c 65 2e  sposable module.
14df0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61  ..    /// </para
14e00 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  m>..    /// <par
14e10 61 6d 20 6e 61 6d 65 3d 22 66 6c 61 67 73 22 3e  am name="flags">
14e20 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 66 6c  ..    /// The fl
14e30 61 67 73 20 66 6f 72 20 74 68 65 20 61 73 73 6f  ags for the asso
14e40 63 69 61 74 65 64 20 3c 73 65 65 20 63 72 65 66  ciated <see cref
14e50 3d 22 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  ="SQLiteConnecti
14e60 6f 6e 22 20 2f 3e 20 6f 62 6a 65 63 74 20 69 6e  on" /> object in
14e70 73 74 61 6e 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f  stance...    ///
14e80 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 69   </param>..    i
14e90 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
14ea0 20 76 6f 69 64 20 43 72 65 61 74 65 4d 6f 64 75   void CreateModu
14eb0 6c 65 28 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20  le(SQLiteModule 
14ec0 6d 6f 64 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f  module, SQLiteCo
14ed0 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c  nnectionFlags fl
14ee0 61 67 73 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  ags)..    {..   
14ef0 20 20 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 20       if (module 
14f00 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
14f10 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
14f20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
14f30 70 74 69 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b  ption("module");
14f40 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
14f50 28 66 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43  (flags & SQLiteC
14f60 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4e  onnectionFlags.N
14f70 6f 4c 6f 67 4d 6f 64 75 6c 65 29 20 21 3d 20 53  oLogModule) != S
14f80 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46  QLiteConnectionF
14f90 6c 61 67 73 2e 4e 6f 4c 6f 67 4d 6f 64 75 6c 65  lags.NoLogModule
14fa0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
14fb0 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
14fc0 2e 4c 6f 67 45 72 72 6f 72 73 20 3d 20 28 28 66  .LogErrors = ((f
14fd0 6c 61 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e  lags & SQLiteCon
14fe0 6e 65 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67  nectionFlags.Log
14ff0 4d 6f 64 75 6c 65 45 72 72 6f 72 29 20 3d 3d 20  ModuleError) == 
15000 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e  SQLiteConnection
15010 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c 65 45  Flags.LogModuleE
15020 72 72 6f 72 29 3b 0d 0a 20 20 20 20 20 20 20 20  rror);..        
15030 20 20 20 20 6d 6f 64 75 6c 65 2e 4c 6f 67 45 78      module.LogEx
15040 63 65 70 74 69 6f 6e 73 20 3d 20 28 28 66 6c 61  ceptions = ((fla
15050 67 73 20 26 20 53 51 4c 69 74 65 43 6f 6e 6e 65  gs & SQLiteConne
15060 63 74 69 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f  ctionFlags.LogMo
15070 64 75 6c 65 45 78 63 65 70 74 69 6f 6e 29 20 3d  duleException) =
15080 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63 74 69  = SQLiteConnecti
15090 6f 6e 46 6c 61 67 73 2e 4c 6f 67 4d 6f 64 75 6c  onFlags.LogModul
150a0 65 45 78 63 65 70 74 69 6f 6e 29 3b 0d 0a 20 20  eException);..  
150b0 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
150c0 20 20 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e     if (_sql == n
150d0 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20  ull)..          
150e0 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
150f0 74 65 45 78 63 65 70 74 69 6f 6e 28 22 63 6f 6e  teException("con
15100 6e 65 63 74 69 6f 6e 20 68 61 73 20 61 6e 20 69  nection has an i
15110 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 22 29 3b  nvalid handle");
15120 0d 0a 0d 0a 20 20 20 20 20 20 20 20 62 6f 6f 6c  ....        bool
15130 20 69 73 4c 6f 61 64 4e 65 65 64 65 64 20 3d 20   isLoadNeeded = 
15140 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
15150 73 74 72 69 6e 67 20 66 69 6c 65 4e 61 6d 65 20  string fileName 
15160 3d 20 47 65 74 53 68 69 6d 45 78 74 65 6e 73 69  = GetShimExtensi
15170 6f 6e 46 69 6c 65 4e 61 6d 65 28 72 65 66 20 69  onFileName(ref i
15180 73 4c 6f 61 64 4e 65 65 64 65 64 29 3b 0d 0a 0d  sLoadNeeded);...
15190 0a 20 20 20 20 20 20 20 20 69 66 20 28 69 73 4c  .        if (isL
151a0 6f 61 64 4e 65 65 64 65 64 29 0d 0a 20 20 20 20  oadNeeded)..    
151b0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
151c0 20 20 20 69 66 20 28 66 69 6c 65 4e 61 6d 65 20     if (fileName 
151d0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
151e0 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77 20            throw 
151f0 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70 74  new SQLiteExcept
15200 69 6f 6e 28 22 74 68 65 20 66 69 6c 65 20 6e 61  ion("the file na
15210 6d 65 20 66 6f 72 20 74 68 65 20 5c 22 76 74 73  me for the \"vts
15220 68 69 6d 5c 22 20 65 78 74 65 6e 73 69 6f 6e 20  him\" extension 
15230 69 73 20 75 6e 6b 6e 6f 77 6e 22 29 3b 0d 0a 0d  is unknown");...
15240 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20  .            if 
15250 28 5f 73 68 69 6d 45 78 74 65 6e 73 69 6f 6e 50  (_shimExtensionP
15260 72 6f 63 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  rocName == null)
15270 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
15280 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
15290 74 65 45 78 63 65 70 74 69 6f 6e 28 22 74 68 65  teException("the
152a0 20 65 6e 74 72 79 20 70 6f 69 6e 74 20 66 6f 72   entry point for
152b0 20 74 68 65 20 5c 22 76 74 73 68 69 6d 5c 22 20   the \"vtshim\" 
152c0 65 78 74 65 6e 73 69 6f 6e 20 69 73 20 75 6e 6b  extension is unk
152d0 6e 6f 77 6e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20  nown");....     
152e0 20 20 20 20 20 20 20 53 65 74 4c 6f 61 64 45 78         SetLoadEx
152f0 74 65 6e 73 69 6f 6e 28 74 72 75 65 29 3b 0d 0a  tension(true);..
15300 20 20 20 20 20 20 20 20 20 20 20 20 4c 6f 61 64              Load
15310 45 78 74 65 6e 73 69 6f 6e 28 66 69 6c 65 4e 61  Extension(fileNa
15320 6d 65 2c 20 5f 73 68 69 6d 45 78 74 65 6e 73 69  me, _shimExtensi
15330 6f 6e 50 72 6f 63 4e 61 6d 65 29 3b 0d 0a 20 20  onProcName);..  
15340 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20        }....     
15350 20 20 20 69 66 20 28 6d 6f 64 75 6c 65 2e 43 72     if (module.Cr
15360 65 61 74 65 44 69 73 70 6f 73 61 62 6c 65 4d 6f  eateDisposableMo
15370 64 75 6c 65 28 5f 73 71 6c 29 29 0d 0a 20 20 20  dule(_sql))..   
15380 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20       {..        
15390 20 20 20 20 69 66 20 28 5f 6d 6f 64 75 6c 65 73      if (_modules
153a0 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
153b0 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f 64 75             _modu
153c0 6c 65 73 20 3d 20 6e 65 77 20 44 69 63 74 69 6f  les = new Dictio
153d0 6e 61 72 79 3c 73 74 72 69 6e 67 2c 20 53 51 4c  nary<string, SQL
153e0 69 74 65 4d 6f 64 75 6c 65 3e 28 29 3b 0d 0a 0d  iteModule>();...
153f0 0a 20 20 20 20 20 20 20 20 20 20 20 20 5f 6d 6f  .            _mo
15400 64 75 6c 65 73 2e 41 64 64 28 6d 6f 64 75 6c 65  dules.Add(module
15410 2e 4e 61 6d 65 2c 20 6d 6f 64 75 6c 65 29 3b 0d  .Name, module);.
15420 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69  ...            i
15430 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
15440 20 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20            {..   
15450 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 75 73               _us
15460 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b 0d 0a  ePool = false;..
15470 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d 50 41  ..#if !NET_COMPA
15480 43 54 5f 32 30 20 26 26 20 54 52 41 43 45 5f 43  CT_20 && TRACE_C
15490 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20 20 20  ONNECTION..     
154a0 20 20 20 20 20 20 20 20 20 20 20 54 72 61 63 65             Trace
154b0 2e 57 72 69 74 65 4c 69 6e 65 28 48 65 6c 70 65  .WriteLine(Helpe
154c0 72 4d 65 74 68 6f 64 73 2e 53 74 72 69 6e 67 46  rMethods.StringF
154d0 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20 20 20 20  ormat(..        
154e0 20 20 20 20 20 20 20 20 20 20 20 20 43 75 6c 74              Cult
154f0 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
15500 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
15510 20 20 20 20 20 20 20 20 20 20 20 20 20 22 43 72               "Cr
15520 65 61 74 65 4d 6f 64 75 6c 65 20 28 50 6f 6f 6c  eateModule (Pool
15530 29 20 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22  ) Disabled: {0}"
15540 2c 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ,..             
15550 20 20 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53         HandleToS
15560 74 72 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64  tring()));..#end
15570 69 66 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  if..            
15580 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20  }..        }..  
15590 20 20 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20        else..    
155a0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
155b0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c     throw new SQL
155c0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 47 65 74  iteException(Get
155d0 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a 20  LastError());.. 
155e0 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d         }..    }.
155f0 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
15600 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61  ary>..    /// Ca
15610 6c 6c 73 20 74 68 65 20 6e 61 74 69 76 65 20 53  lls the native S
15620 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62 72 61  QLite core libra
15630 72 79 20 69 6e 20 6f 72 64 65 72 20 74 6f 20 63  ry in order to c
15640 6c 65 61 6e 75 70 20 74 68 65 20 72 65 73 6f 75  leanup the resou
15650 72 63 65 73 0d 0a 20 20 20 20 2f 2f 2f 20 61 73  rces..    /// as
15660 73 6f 63 69 61 74 65 64 20 77 69 74 68 20 61 20  sociated with a 
15670 6d 6f 64 75 6c 65 20 63 6f 6e 74 61 69 6e 69 6e  module containin
15680 67 20 74 68 65 20 69 6d 70 6c 65 6d 65 6e 74 61  g the implementa
15690 74 69 6f 6e 20 6f 66 20 61 20 76 69 72 74 75 61  tion of a virtua
156a0 6c 20 74 61 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f  l table...    //
156b0 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  / </summary>..  
156c0 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
156d0 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20  e="module">..   
156e0 20 2f 2f 2f 20 54 68 65 20 6d 6f 64 75 6c 65 20   /// The module 
156f0 6f 62 6a 65 63 74 20 70 72 65 76 69 6f 75 73 6c  object previousl
15700 79 20 70 61 73 73 65 64 20 74 6f 20 74 68 65 20  y passed to the 
15710 3c 73 65 65 20 63 72 65 66 3d 22 43 72 65 61 74  <see cref="Creat
15720 65 4d 6f 64 75 6c 65 22 20 2f 3e 0d 0a 20 20 20  eModule" />..   
15730 20 2f 2f 2f 20 6d 65 74 68 6f 64 2e 0d 0a 20 20   /// method...  
15740 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
15750 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
15760 61 6d 65 3d 22 66 6c 61 67 73 22 3e 0d 0a 20 20  ame="flags">..  
15770 20 20 2f 2f 2f 20 54 68 65 20 66 6c 61 67 73 20    /// The flags 
15780 66 6f 72 20 74 68 65 20 61 73 73 6f 63 69 61 74  for the associat
15790 65 64 20 3c 73 65 65 20 63 72 65 66 3d 22 53 51  ed <see cref="SQ
157a0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 22 20  LiteConnection" 
157b0 2f 3e 20 6f 62 6a 65 63 74 20 69 6e 73 74 61 6e  /> object instan
157c0 63 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ce...    /// </p
157d0 61 72 61 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72  aram>..    inter
157e0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69  nal override voi
157f0 64 20 44 69 73 70 6f 73 65 4d 6f 64 75 6c 65 28  d DisposeModule(
15800 53 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64  SQLiteModule mod
15810 75 6c 65 2c 20 53 51 4c 69 74 65 43 6f 6e 6e 65  ule, SQLiteConne
15820 63 74 69 6f 6e 46 6c 61 67 73 20 66 6c 61 67 73  ctionFlags flags
15830 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
15840 20 20 69 66 20 28 6d 6f 64 75 6c 65 20 3d 3d 20    if (module == 
15850 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
15860 20 20 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67     throw new Arg
15870 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69  umentNullExcepti
15880 6f 6e 28 22 6d 6f 64 75 6c 65 22 29 3b 0d 0a 0d  on("module");...
15890 0a 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65 2e  .        module.
158a0 44 69 73 70 6f 73 65 28 29 3b 0d 0a 20 20 20 20  Dispose();..    
158b0 7d 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20  }..#endif....   
158c0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
158d0 64 65 20 49 6e 74 50 74 72 20 41 67 67 72 65 67  de IntPtr Aggreg
158e0 61 74 65 43 6f 6e 74 65 78 74 28 49 6e 74 50 74  ateContext(IntPt
158f0 72 20 63 6f 6e 74 65 78 74 29 0d 0a 20 20 20 20  r context)..    
15900 7b 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  {..      return 
15910 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
15920 6f 64 73 2e 73 71 6c 69 74 65 33 5f 61 67 67 72  ods.sqlite3_aggr
15930 65 67 61 74 65 5f 63 6f 6e 74 65 78 74 28 63 6f  egate_context(co
15940 6e 74 65 78 74 2c 20 31 29 3b 0d 0a 20 20 20 20  ntext, 1);..    
15950 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45 52 4f 50  }....#if INTEROP
15960 5f 56 49 52 54 55 41 4c 5f 54 41 42 4c 45 0d 0a  _VIRTUAL_TABLE..
15970 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79      /// <summary
15980 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73  >..    /// Calls
15990 20 74 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69   the native SQLi
159a0 74 65 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20  te core library 
159b0 69 6e 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c  in order to decl
159c0 61 72 65 20 61 20 76 69 72 74 75 61 6c 20 74 61  are a virtual ta
159d0 62 6c 65 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 20  ble..    /// in 
159e0 72 65 73 70 6f 6e 73 65 20 74 6f 20 61 20 63 61  response to a ca
159f0 6c 6c 20 69 6e 74 6f 20 74 68 65 20 3c 73 65 65  ll into the <see
15a00 20 63 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61   cref="ISQLiteNa
15a10 74 69 76 65 4d 6f 64 75 6c 65 2e 78 43 72 65 61  tiveModule.xCrea
15a20 74 65 22 20 2f 3e 0d 0a 20 20 20 20 2f 2f 2f 20  te" />..    /// 
15a30 6f 72 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  or <see cref="IS
15a40 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
15a50 65 2e 78 43 6f 6e 6e 65 63 74 22 20 2f 3e 20 76  e.xConnect" /> v
15a60 69 72 74 75 61 6c 20 74 61 62 6c 65 20 6d 65 74  irtual table met
15a70 68 6f 64 73 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  hods...    /// <
15a80 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
15a90 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
15aa0 6d 6f 64 75 6c 65 22 3e 0d 0a 20 20 20 20 2f 2f  module">..    //
15ab0 2f 20 54 68 65 20 76 69 72 74 75 61 6c 20 74 61  / The virtual ta
15ac0 62 6c 65 20 6d 6f 64 75 6c 65 20 74 68 61 74 20  ble module that 
15ad0 69 73 20 74 6f 20 62 65 20 72 65 73 70 6f 6e 73  is to be respons
15ae0 69 62 6c 65 20 66 6f 72 20 74 68 65 20 76 69 72  ible for the vir
15af0 74 75 61 6c 20 74 61 62 6c 65 0d 0a 20 20 20 20  tual table..    
15b00 2f 2f 2f 20 62 65 69 6e 67 20 64 65 63 6c 61 72  /// being declar
15b10 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
15b20 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
15b30 70 61 72 61 6d 20 6e 61 6d 65 3d 22 73 74 72 53  param name="strS
15b40 71 6c 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68  ql">..    /// Th
15b50 65 20 73 74 72 69 6e 67 20 63 6f 6e 74 61 69 6e  e string contain
15b60 69 6e 67 20 74 68 65 20 53 51 4c 20 73 74 61 74  ing the SQL stat
15b70 65 6d 65 6e 74 20 64 65 73 63 72 69 62 69 6e 67  ement describing
15b80 20 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62   the virtual tab
15b90 6c 65 20 74 6f 0d 0a 20 20 20 20 2f 2f 2f 20 62  le to..    /// b
15ba0 65 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20 20  e declared...   
15bb0 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
15bc0 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
15bd0 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20 20 20  me="error">..   
15be0 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63 65 73   /// Upon succes
15bf0 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74 73 20  s, the contents 
15c00 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  of this paramete
15c10 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65 64 2e  r are undefined.
15c20 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65 2c 0d    Upon failure,.
15c30 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68 6f 75  .    /// it shou
15c40 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20 61 70  ld contain an ap
15c50 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f 72 20  propriate error 
15c60 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20 2f 2f  message...    //
15c70 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  / </param>..    
15c80 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20  /// <returns>.. 
15c90 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64 61 72     /// A standar
15ca0 64 20 53 51 4c 69 74 65 20 72 65 74 75 72 6e 20  d SQLite return 
15cb0 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  code...    /// <
15cc0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
15cd0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
15ce0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
15cf0 20 44 65 63 6c 61 72 65 56 69 72 74 75 61 6c 54   DeclareVirtualT
15d00 61 62 6c 65 28 0d 0a 20 20 20 20 20 20 20 20 53  able(..        S
15d10 51 4c 69 74 65 4d 6f 64 75 6c 65 20 6d 6f 64 75  QLiteModule modu
15d20 6c 65 2c 0d 0a 20 20 20 20 20 20 20 20 73 74 72  le,..        str
15d30 69 6e 67 20 73 74 72 53 71 6c 2c 0d 0a 20 20 20  ing strSql,..   
15d40 20 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20       ref string 
15d50 65 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29  error..        )
15d60 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20  ..    {..       
15d70 20 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c   if (_sql == nul
15d80 6c 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20  l)..        {.. 
15d90 20 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72             error
15da0 20 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68   = "connection h
15db0 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61  as an invalid ha
15dc0 6e 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20  ndle";..        
15dd0 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74      return SQLit
15de0 65 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72  eErrorCode.Error
15df0 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a  ;..        }....
15e00 20 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70          IntPtr p
15e10 53 71 6c 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  Sql = IntPtr.Zer
15e20 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
15e30 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
15e40 20 20 20 20 20 20 20 20 20 20 70 53 71 6c 20 3d            pSql =
15e50 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55 74   SQLiteString.Ut
15e60 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72 69  f8IntPtrFromStri
15e70 6e 67 28 73 74 72 53 71 6c 29 3b 0d 0a 0d 0a 20  ng(strSql);.... 
15e80 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74             SQLit
15e90 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
15ea0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
15eb0 64 73 2e 73 71 6c 69 74 65 33 5f 64 65 63 6c 61  ds.sqlite3_decla
15ec0 72 65 5f 76 74 61 62 28 0d 0a 20 20 20 20 20 20  re_vtab(..      
15ed0 20 20 20 20 20 20 20 20 20 20 5f 73 71 6c 2c 20            _sql, 
15ee0 70 53 71 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  pSql);....      
15ef0 20 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20        if ((n == 
15f00 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e  SQLiteErrorCode.
15f10 4f 6b 29 20 26 26 20 28 6d 6f 64 75 6c 65 20 21  Ok) && (module !
15f20 3d 20 6e 75 6c 6c 29 29 0d 0a 20 20 20 20 20 20  = null))..      
15f30 20 20 20 20 20 20 20 20 20 20 6d 6f 64 75 6c 65            module
15f40 2e 44 65 63 6c 61 72 65 64 20 3d 20 74 72 75 65  .Declared = true
15f50 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ;....           
15f60 20 69 66 20 28 6e 20 21 3d 20 53 51 4c 69 74 65   if (n != SQLite
15f70 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 65 72  ErrorCode.Ok) er
15f80 72 6f 72 20 3d 20 47 65 74 4c 61 73 74 45 72 72  ror = GetLastErr
15f90 6f 72 28 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  or();....       
15fa0 20 20 20 20 20 72 65 74 75 72 6e 20 6e 3b 0d 0a       return n;..
15fb0 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
15fc0 20 20 20 66 69 6e 61 6c 6c 79 0d 0a 20 20 20 20     finally..    
15fd0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
15fe0 20 20 20 69 66 20 28 70 53 71 6c 20 21 3d 20 49     if (pSql != I
15ff0 6e 74 50 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20  ntPtr.Zero)..   
16000 20 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20           {..    
16010 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 69              SQLi
16020 74 65 4d 65 6d 6f 72 79 2e 46 72 65 65 28 70 53  teMemory.Free(pS
16030 71 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  ql);..          
16040 20 20 20 20 20 20 70 53 71 6c 20 3d 20 49 6e 74        pSql = Int
16050 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
16060 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
16070 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
16080 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d    /// <summary>.
16090 0a 20 20 20 20 2f 2f 2f 20 43 61 6c 6c 73 20 74  .    /// Calls t
160a0 68 65 20 6e 61 74 69 76 65 20 53 51 4c 69 74 65  he native SQLite
160b0 20 63 6f 72 65 20 6c 69 62 72 61 72 79 20 69 6e   core library in
160c0 20 6f 72 64 65 72 20 74 6f 20 64 65 63 6c 61 72   order to declar
160d0 65 20 61 20 76 69 72 74 75 61 6c 20 74 61 62 6c  e a virtual tabl
160e0 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
160f0 69 6f 6e 20 69 6e 20 72 65 73 70 6f 6e 73 65 20  ion in response 
16100 74 6f 20 61 20 63 61 6c 6c 20 69 6e 74 6f 20 74  to a call into t
16110 68 65 20 3c 73 65 65 20 63 72 65 66 3d 22 49 53  he <see cref="IS
16120 51 4c 69 74 65 4e 61 74 69 76 65 4d 6f 64 75 6c  QLiteNativeModul
16130 65 2e 78 43 72 65 61 74 65 22 20 2f 3e 0d 0a 20  e.xCreate" />.. 
16140 20 20 20 2f 2f 2f 20 6f 72 20 3c 73 65 65 20 63     /// or <see c
16150 72 65 66 3d 22 49 53 51 4c 69 74 65 4e 61 74 69  ref="ISQLiteNati
16160 76 65 4d 6f 64 75 6c 65 2e 78 43 6f 6e 6e 65 63  veModule.xConnec
16170 74 22 20 2f 3e 20 76 69 72 74 75 61 6c 20 74 61  t" /> virtual ta
16180 62 6c 65 20 6d 65 74 68 6f 64 73 2e 0d 0a 20 20  ble methods...  
16190 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
161a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
161b0 20 6e 61 6d 65 3d 22 6d 6f 64 75 6c 65 22 3e 0d   name="module">.
161c0 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 76 69 72  .    /// The vir
161d0 74 75 61 6c 20 74 61 62 6c 65 20 6d 6f 64 75 6c  tual table modul
161e0 65 20 74 68 61 74 20 69 73 20 74 6f 20 62 65 20  e that is to be 
161f0 72 65 73 70 6f 6e 73 69 62 6c 65 20 66 6f 72 20  responsible for 
16200 74 68 65 20 76 69 72 74 75 61 6c 20 74 61 62 6c  the virtual tabl
16210 65 0d 0a 20 20 20 20 2f 2f 2f 20 66 75 6e 63 74  e..    /// funct
16220 69 6f 6e 20 62 65 69 6e 67 20 64 65 63 6c 61 72  ion being declar
16230 65 64 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70  ed...    /// </p
16240 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  aram>..    /// <
16250 70 61 72 61 6d 20 6e 61 6d 65 3d 22 61 72 67 75  param name="argu
16260 6d 65 6e 74 43 6f 75 6e 74 22 3e 0d 0a 20 20 20  mentCount">..   
16270 20 2f 2f 2f 20 54 68 65 20 6e 75 6d 62 65 72 20   /// The number 
16280 6f 66 20 61 72 67 75 6d 65 6e 74 73 20 74 6f 20  of arguments to 
16290 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65 69  the function bei
162a0 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20 20  ng declared...  
162b0 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a    /// </param>..
162c0 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
162d0 61 6d 65 3d 22 6e 61 6d 65 22 3e 0d 0a 20 20 20  ame="name">..   
162e0 20 2f 2f 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66   /// The name of
162f0 20 74 68 65 20 66 75 6e 63 74 69 6f 6e 20 62 65   the function be
16300 69 6e 67 20 64 65 63 6c 61 72 65 64 2e 0d 0a 20  ing declared... 
16310 20 20 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d     /// </param>.
16320 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20  .    /// <param 
16330 6e 61 6d 65 3d 22 65 72 72 6f 72 22 3e 0d 0a 20  name="error">.. 
16340 20 20 20 2f 2f 2f 20 55 70 6f 6e 20 73 75 63 63     /// Upon succ
16350 65 73 73 2c 20 74 68 65 20 63 6f 6e 74 65 6e 74  ess, the content
16360 73 20 6f 66 20 74 68 69 73 20 70 61 72 61 6d 65  s of this parame
16370 74 65 72 20 61 72 65 20 75 6e 64 65 66 69 6e 65  ter are undefine
16380 64 2e 20 20 55 70 6f 6e 20 66 61 69 6c 75 72 65  d.  Upon failure
16390 2c 0d 0a 20 20 20 20 2f 2f 2f 20 69 74 20 73 68  ,..    /// it sh
163a0 6f 75 6c 64 20 63 6f 6e 74 61 69 6e 20 61 6e 20  ould contain an 
163b0 61 70 70 72 6f 70 72 69 61 74 65 20 65 72 72 6f  appropriate erro
163c0 72 20 6d 65 73 73 61 67 65 2e 0d 0a 20 20 20 20  r message...    
163d0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
163e0 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d    /// <returns>.
163f0 0a 20 20 20 20 2f 2f 2f 20 41 20 73 74 61 6e 64  .    /// A stand
16400 61 72 64 20 53 51 4c 69 74 65 20 72 65 74 75 72  ard SQLite retur
16410 6e 20 63 6f 64 65 2e 0d 0a 20 20 20 20 2f 2f 2f  n code...    ///
16420 20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20   </returns>..   
16430 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
16440 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  de SQLiteErrorCo
16450 64 65 20 44 65 63 6c 61 72 65 56 69 72 74 75 61  de DeclareVirtua
16460 6c 46 75 6e 63 74 69 6f 6e 28 0d 0a 20 20 20 20  lFunction(..    
16470 20 20 20 20 53 51 4c 69 74 65 4d 6f 64 75 6c 65      SQLiteModule
16480 20 6d 6f 64 75 6c 65 2c 0d 0a 20 20 20 20 20 20   module,..      
16490 20 20 69 6e 74 20 61 72 67 75 6d 65 6e 74 43 6f    int argumentCo
164a0 75 6e 74 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  unt,..        st
164b0 72 69 6e 67 20 6e 61 6d 65 2c 0d 0a 20 20 20 20  ring name,..    
164c0 20 20 20 20 72 65 66 20 73 74 72 69 6e 67 20 65      ref string e
164d0 72 72 6f 72 0d 0a 20 20 20 20 20 20 20 20 29 0d  rror..        ).
164e0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20  .    {..        
164f0 69 66 20 28 5f 73 71 6c 20 3d 3d 20 6e 75 6c 6c  if (_sql == null
16500 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
16510 20 20 20 20 20 20 20 20 20 20 65 72 72 6f 72 20            error 
16520 3d 20 22 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  = "connection ha
16530 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e  s an invalid han
16540 64 6c 65 22 3b 0d 0a 20 20 20 20 20 20 20 20 20  dle";..         
16550 20 20 20 72 65 74 75 72 6e 20 53 51 4c 69 74 65     return SQLite
16560 45 72 72 6f 72 43 6f 64 65 2e 45 72 72 6f 72 3b  ErrorCode.Error;
16570 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
16580 20 20 20 20 20 20 20 49 6e 74 50 74 72 20 70 4e         IntPtr pN
16590 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72  ame = IntPtr.Zer
165a0 6f 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72  o;....        tr
165b0 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  y..        {..  
165c0 20 20 20 20 20 20 20 20 20 20 70 4e 61 6d 65 20            pName 
165d0 3d 20 53 51 4c 69 74 65 53 74 72 69 6e 67 2e 55  = SQLiteString.U
165e0 74 66 38 49 6e 74 50 74 72 46 72 6f 6d 53 74 72  tf8IntPtrFromStr
165f0 69 6e 67 28 6e 61 6d 65 29 3b 0d 0a 0d 0a 20 20  ing(name);....  
16600 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16610 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55 6e  ErrorCode n = Un
16620 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
16630 73 2e 73 71 6c 69 74 65 33 5f 6f 76 65 72 6c 6f  s.sqlite3_overlo
16640 61 64 5f 66 75 6e 63 74 69 6f 6e 28 0d 0a 20 20  ad_function(..  
16650 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
16660 71 6c 2c 20 70 4e 61 6d 65 2c 20 61 72 67 75 6d  ql, pName, argum
16670 65 6e 74 43 6f 75 6e 74 29 3b 0d 0a 0d 0a 20 20  entCount);....  
16680 20 20 20 20 20 20 20 20 20 20 69 66 20 28 6e 20            if (n 
16690 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
166a0 64 65 2e 4f 6b 29 20 65 72 72 6f 72 20 3d 20 47  de.Ok) error = G
166b0 65 74 4c 61 73 74 45 72 72 6f 72 28 29 3b 0d 0a  etLastError();..
166c0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 72 65  ..            re
166d0 74 75 72 6e 20 6e 3b 0d 0a 20 20 20 20 20 20 20  turn n;..       
166e0 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69 6e 61   }..        fina
166f0 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a  lly..        {..
16700 20 20 20 20 20 20 20 20 20 20 20 20 69 66 20 28              if (
16710 70 4e 61 6d 65 20 21 3d 20 49 6e 74 50 74 72 2e  pName != IntPtr.
16720 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20 20 20 20  Zero)..         
16730 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
16740 20 20 20 20 20 20 53 51 4c 69 74 65 4d 65 6d 6f        SQLiteMemo
16750 72 79 2e 46 72 65 65 28 70 4e 61 6d 65 29 3b 0d  ry.Free(pName);.
16760 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16770 20 70 4e 61 6d 65 20 3d 20 49 6e 74 50 74 72 2e   pName = IntPtr.
16780 5a 65 72 6f 3b 0d 0a 20 20 20 20 20 20 20 20 20  Zero;..         
16790 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 7d 0d     }..        }.
167a0 0a 20 20 20 20 7d 0d 0a 23 65 6e 64 69 66 0d 0a  .    }..#endif..
167b0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d 61  ..    /// <summa
167c0 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 45 6e 61  ry>..    /// Ena
167d0 62 6c 65 73 20 6f 72 20 64 69 73 61 62 6c 65 73  bles or disables
167e0 20 61 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e   a configuration
167f0 20 6f 70 74 69 6f 6e 20 66 6f 72 20 74 68 65 20   option for the 
16800 64 61 74 61 62 61 73 65 2e 0d 0a 20 20 20 20 2f  database...    /
16810 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0d 0a  // connection...
16820 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
16830 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
16840 61 6d 20 6e 61 6d 65 3d 22 6f 70 74 69 6f 6e 22  am name="option"
16850 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 64  >..    /// The d
16860 61 74 61 62 61 73 65 20 63 6f 6e 66 69 67 75 72  atabase configur
16870 61 74 69 6f 6e 20 6f 70 74 69 6f 6e 20 74 6f 20  ation option to 
16880 65 6e 61 62 6c 65 20 6f 72 20 64 69 73 61 62 6c  enable or disabl
16890 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 70 61  e...    /// </pa
168a0 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70  ram>..    /// <p
168b0 61 72 61 6d 20 6e 61 6d 65 3d 22 62 4f 6e 4f 66  aram name="bOnOf
168c0 66 22 3e 0d 0a 20 20 20 20 2f 2f 2f 20 54 72 75  f">..    /// Tru
168d0 65 20 74 6f 20 65 6e 61 62 6c 65 20 6c 6f 61 64  e to enable load
168e0 69 6e 67 20 6f 66 20 65 78 74 65 6e 73 69 6f 6e  ing of extension
168f0 73 2c 20 66 61 6c 73 65 20 74 6f 20 64 69 73 61  s, false to disa
16900 62 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f  ble...    /// </
16910 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20  param>..    /// 
16920 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 2f  <returns>..    /
16930 2f 2f 20 41 20 73 74 61 6e 64 61 72 64 20 53 51  // A standard SQ
16940 4c 69 74 65 20 72 65 74 75 72 6e 20 63 6f 64 65  Lite return code
16950 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
16960 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
16970 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53 51 4c  nal override SQL
16980 69 74 65 45 72 72 6f 72 43 6f 64 65 20 53 65 74  iteErrorCode Set
16990 43 6f 6e 66 69 67 75 72 61 74 69 6f 6e 4f 70 74  ConfigurationOpt
169a0 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 53 51  ion(..        SQ
169b0 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
169c0 6e 75 6d 20 6f 70 74 69 6f 6e 2c 0d 0a 20 20 20  num option,..   
169d0 20 20 20 20 20 62 6f 6f 6c 20 62 4f 6e 4f 66 66       bool bOnOff
169e0 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20 20 20  ..        )..   
169f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28   {..        if (
16a00 28 6f 70 74 69 6f 6e 20 3c 20 53 51 4c 69 74 65  (option < SQLite
16a10 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
16a20 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
16a30 45 4e 41 42 4c 45 5f 46 4b 45 59 29 20 7c 7c 0d  ENABLE_FKEY) ||.
16a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 28 6f 70  .            (op
16a50 74 69 6f 6e 20 3e 20 53 51 4c 69 74 65 43 6f 6e  tion > SQLiteCon
16a60 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c  figDbOpsEnum.SQL
16a70 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41  ITE_DBCONFIG_ENA
16a80 42 4c 45 5f 4c 4f 41 44 5f 45 58 54 45 4e 53 49  BLE_LOAD_EXTENSI
16a90 4f 4e 29 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d  ON))..        {.
16aa0 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72  .            thr
16ab0 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63  ow new SQLiteExc
16ac0 65 70 74 69 6f 6e 28 48 65 6c 70 65 72 4d 65 74  eption(HelperMet
16ad0 68 6f 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61  hods.StringForma
16ae0 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  t(..            
16af0 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f 2e      CultureInfo.
16b00 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c 0d  CurrentCulture,.
16b10 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16b20 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20 63 6f   "unsupported co
16b30 6e 66 69 67 75 72 61 74 69 6f 6e 20 6f 70 74 69  nfiguration opti
16b40 6f 6e 2c 20 6d 75 73 74 20 62 65 3a 20 7b 30 7d  on, must be: {0}
16b50 2c 20 7b 31 7d 2c 20 7b 32 7d 2c 20 6f 72 20 7b  , {1}, {2}, or {
16b60 33 7d 22 2c 0d 0a 20 20 20 20 20 20 20 20 20 20  3}",..          
16b70 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66        SQLiteConf
16b80 69 67 44 62 4f 70 73 45 6e 75 6d 2e 53 51 4c 49  igDbOpsEnum.SQLI
16b90 54 45 5f 44 42 43 4f 4e 46 49 47 5f 45 4e 41 42  TE_DBCONFIG_ENAB
16ba0 4c 45 5f 46 4b 45 59 2c 0d 0a 20 20 20 20 20 20  LE_FKEY,..      
16bb0 20 20 20 20 20 20 20 20 20 20 53 51 4c 69 74 65            SQLite
16bc0 43 6f 6e 66 69 67 44 62 4f 70 73 45 6e 75 6d 2e  ConfigDbOpsEnum.
16bd0 53 51 4c 49 54 45 5f 44 42 43 4f 4e 46 49 47 5f  SQLITE_DBCONFIG_
16be0 45 4e 41 42 4c 45 5f 54 52 49 47 47 45 52 2c 0d  ENABLE_TRIGGER,.
16bf0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
16c00 20 53 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f   SQLiteConfigDbO
16c10 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42  psEnum.SQLITE_DB
16c20 43 4f 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 46 54  CONFIG_ENABLE_FT
16c30 53 33 5f 54 4f 4b 45 4e 49 5a 45 52 2c 0d 0a 20  S3_TOKENIZER,.. 
16c40 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
16c50 51 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73  QLiteConfigDbOps
16c60 45 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f  Enum.SQLITE_DBCO
16c70 4e 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44  NFIG_ENABLE_LOAD
16c80 5f 45 58 54 45 4e 53 49 4f 4e 29 29 3b 0d 0a 20  _EXTENSION));.. 
16c90 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20         }....    
16ca0 20 20 20 20 69 6e 74 20 72 65 73 75 6c 74 20 3d      int result =
16cb0 20 30 3b 20 2f 2a 20 4e 4f 54 20 55 53 45 44 20   0; /* NOT USED 
16cc0 2a 2f 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72 65  */....        re
16cd0 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
16ce0 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
16cf0 5f 64 62 5f 63 6f 6e 66 69 67 5f 69 6e 74 5f 72  _db_config_int_r
16d00 65 66 69 6e 74 28 0d 0a 20 20 20 20 20 20 20 20  efint(..        
16d10 20 20 20 20 5f 73 71 6c 2c 20 6f 70 74 69 6f 6e      _sql, option
16d20 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 31 20 3a 20  , (bOnOff ? 1 : 
16d30 30 29 2c 20 72 65 66 20 72 65 73 75 6c 74 29 3b  0), ref result);
16d40 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
16d50 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
16d60 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72    /// Enables or
16d70 20 64 69 73 61 62 6c 65 73 20 65 78 74 65 6e 73   disables extens
16d80 69 6f 6e 20 6c 6f 61 64 69 6e 67 20 62 79 20 53  ion loading by S
16d90 51 4c 69 74 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20  QLite...    /// 
16da0 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20  </summary>..    
16db0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
16dc0 22 62 4f 6e 4f 66 66 22 3e 0d 0a 20 20 20 20 2f  "bOnOff">..    /
16dd0 2f 2f 20 54 72 75 65 20 74 6f 20 65 6e 61 62 6c  // True to enabl
16de0 65 20 6c 6f 61 64 69 6e 67 20 6f 66 20 65 78 74  e loading of ext
16df0 65 6e 73 69 6f 6e 73 2c 20 66 61 6c 73 65 20 74  ensions, false t
16e00 6f 20 64 69 73 61 62 6c 65 2e 0d 0a 20 20 20 20  o disable...    
16e10 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
16e20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
16e30 69 64 65 20 76 6f 69 64 20 53 65 74 4c 6f 61 64  ide void SetLoad
16e40 45 78 74 65 6e 73 69 6f 6e 28 62 6f 6f 6c 20 62  Extension(bool b
16e50 4f 6e 4f 66 66 29 0d 0a 20 20 20 20 7b 0d 0a 20  OnOff)..    {.. 
16e60 20 20 20 20 20 20 20 53 51 4c 69 74 65 45 72 72         SQLiteErr
16e70 6f 72 43 6f 64 65 20 6e 3b 0d 0a 0d 0a 20 20 20  orCode n;....   
16e80 20 20 20 20 20 69 66 20 28 53 51 4c 69 74 65 56       if (SQLiteV
16e90 65 72 73 69 6f 6e 4e 75 6d 62 65 72 20 3e 3d 20  ersionNumber >= 
16ea0 33 30 31 33 30 30 30 29 0d 0a 20 20 20 20 20 20  3013000)..      
16eb0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
16ec0 20 6e 20 3d 20 53 65 74 43 6f 6e 66 69 67 75 72   n = SetConfigur
16ed0 61 74 69 6f 6e 4f 70 74 69 6f 6e 28 0d 0a 20 20  ationOption(..  
16ee0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51                SQ
16ef0 4c 69 74 65 43 6f 6e 66 69 67 44 62 4f 70 73 45  LiteConfigDbOpsE
16f00 6e 75 6d 2e 53 51 4c 49 54 45 5f 44 42 43 4f 4e  num.SQLITE_DBCON
16f10 46 49 47 5f 45 4e 41 42 4c 45 5f 4c 4f 41 44 5f  FIG_ENABLE_LOAD_
16f20 45 58 54 45 4e 53 49 4f 4e 2c 0d 0a 20 20 20 20  EXTENSION,..    
16f30 20 20 20 20 20 20 20 20 20 20 20 20 62 4f 6e 4f              bOnO
16f40 66 66 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d 0d  ff);..        }.
16f50 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d 0a 20  .        else.. 
16f60 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20         {..      
16f70 20 20 20 20 20 20 6e 20 3d 20 55 6e 73 61 66 65        n = Unsafe
16f80 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
16f90 6c 69 74 65 33 5f 65 6e 61 62 6c 65 5f 6c 6f 61  lite3_enable_loa
16fa0 64 5f 65 78 74 65 6e 73 69 6f 6e 28 0d 0a 20 20  d_extension(..  
16fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 5f 73                _s
16fc0 71 6c 2c 20 28 62 4f 6e 4f 66 66 20 3f 20 2d 31  ql, (bOnOff ? -1
16fd0 20 3a 20 30 29 29 3b 0d 0a 20 20 20 20 20 20 20   : 0));..       
16fe0 20 7d 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66   }....        if
16ff0 20 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72   (n != SQLiteErr
17000 6f 72 43 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77  orCode.Ok) throw
17010 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65 70   new SQLiteExcep
17020 74 69 6f 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45  tion(n, GetLastE
17030 72 72 6f 72 28 29 29 3b 0d 0a 20 20 20 20 7d 0d  rror());..    }.
17040 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
17050 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 4c 6f  ary>..    /// Lo
17060 61 64 73 20 61 20 53 51 4c 69 74 65 20 65 78 74  ads a SQLite ext
17070 65 6e 73 69 6f 6e 20 6c 69 62 72 61 72 79 20 66  ension library f
17080 72 6f 6d 20 74 68 65 20 6e 61 6d 65 64 20 66 69  rom the named fi
17090 6c 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  le...    /// </s
170a0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
170b0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 69   <param name="fi
170c0 6c 65 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  leName">..    //
170d0 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
170e0 65 20 64 79 6e 61 6d 69 63 20 6c 69 6e 6b 20 6c  e dynamic link l
170f0 69 62 72 61 72 79 20 66 69 6c 65 20 63 6f 6e 74  ibrary file cont
17100 61 69 6e 69 6e 67 20 74 68 65 20 65 78 74 65 6e  aining the exten
17110 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  sion...    /// <
17120 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f  /param>..    ///
17130 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 70 72   <param name="pr
17140 6f 63 4e 61 6d 65 22 3e 0d 0a 20 20 20 20 2f 2f  ocName">..    //
17150 2f 20 54 68 65 20 6e 61 6d 65 20 6f 66 20 74 68  / The name of th
17160 65 20 65 78 70 6f 72 74 65 64 20 66 75 6e 63 74  e exported funct
17170 69 6f 6e 20 75 73 65 64 20 74 6f 20 69 6e 69 74  ion used to init
17180 69 61 6c 69 7a 65 20 74 68 65 20 65 78 74 65 6e  ialize the exten
17190 73 69 6f 6e 2e 0d 0a 20 20 20 20 2f 2f 2f 20 49  sion...    /// I
171a0 66 20 6e 75 6c 6c 2c 20 74 68 65 20 64 65 66 61  f null, the defa
171b0 75 6c 74 20 22 73 71 6c 69 74 65 33 5f 65 78 74  ult "sqlite3_ext
171c0 65 6e 73 69 6f 6e 5f 69 6e 69 74 22 20 77 69 6c  ension_init" wil
171d0 6c 20 62 65 20 75 73 65 64 2e 0d 0a 20 20 20 20  l be used...    
171e0 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  /// </param>..  
171f0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
17200 69 64 65 20 76 6f 69 64 20 4c 6f 61 64 45 78 74  ide void LoadExt
17210 65 6e 73 69 6f 6e 28 73 74 72 69 6e 67 20 66 69  ension(string fi
17220 6c 65 4e 61 6d 65 2c 20 73 74 72 69 6e 67 20 70  leName, string p
17230 72 6f 63 4e 61 6d 65 29 0d 0a 20 20 20 20 7b 0d  rocName)..    {.
17240 0a 20 20 20 20 20 20 20 20 69 66 20 28 66 69 6c  .        if (fil
17250 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a  eName == null)..
17260 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
17270 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74 4e 75  w new ArgumentNu
17280 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 66 69 6c  llException("fil
17290 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a 20 20 20 20  eName");....    
172a0 20 20 20 20 49 6e 74 50 74 72 20 70 45 72 72 6f      IntPtr pErro
172b0 72 20 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 3b  r = IntPtr.Zero;
172c0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 74 72 79 0d  ....        try.
172d0 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
172e0 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75          byte[] u
172f0 74 66 38 46 69 6c 65 4e 61 6d 65 20 3d 20 55 54  tf8FileName = UT
17300 46 38 45 6e 63 6f 64 69 6e 67 2e 55 54 46 38 2e  F8Encoding.UTF8.
17310 47 65 74 42 79 74 65 73 28 66 69 6c 65 4e 61 6d  GetBytes(fileNam
17320 65 20 2b 20 27 5c 30 27 29 3b 0d 0a 20 20 20 20  e + '\0');..    
17330 20 20 20 20 20 20 20 20 62 79 74 65 5b 5d 20 75          byte[] u
17340 74 66 38 50 72 6f 63 4e 61 6d 65 20 3d 20 6e 75  tf8ProcName = nu
17350 6c 6c 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20  ll;....         
17360 20 20 20 69 66 20 28 70 72 6f 63 4e 61 6d 65 20     if (procName 
17370 21 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  != null)..      
17380 20 20 20 20 20 20 20 20 20 20 75 74 66 38 50 72            utf8Pr
17390 6f 63 4e 61 6d 65 20 3d 20 55 54 46 38 45 6e 63  ocName = UTF8Enc
173a0 6f 64 69 6e 67 2e 55 54 46 38 2e 47 65 74 42 79  oding.UTF8.GetBy
173b0 74 65 73 28 70 72 6f 63 4e 61 6d 65 20 2b 20 27  tes(procName + '
173c0 5c 30 27 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  \0');....       
173d0 20 20 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72       SQLiteError
173e0 43 6f 64 65 20 6e 20 3d 20 55 6e 73 61 66 65 4e  Code n = UnsafeN
173f0 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17400 69 74 65 33 5f 6c 6f 61 64 5f 65 78 74 65 6e 73  ite3_load_extens
17410 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
17420 20 20 20 20 20 20 5f 73 71 6c 2c 20 75 74 66 38        _sql, utf8
17430 46 69 6c 65 4e 61 6d 65 2c 20 75 74 66 38 50 72  FileName, utf8Pr
17440 6f 63 4e 61 6d 65 2c 20 72 65 66 20 70 45 72 72  ocName, ref pErr
17450 6f 72 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  or);....        
17460 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
17470 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
17480 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
17490 20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69    throw new SQLi
174a0 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 55  teException(n, U
174b0 54 46 38 54 6f 53 74 72 69 6e 67 28 70 45 72 72  TF8ToString(pErr
174c0 6f 72 2c 20 2d 31 29 29 3b 0d 0a 20 20 20 20 20  or, -1));..     
174d0 20 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 66 69     }..        fi
174e0 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20 7b  nally..        {
174f0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 66  ..            if
17500 20 28 70 45 72 72 6f 72 20 21 3d 20 49 6e 74 50   (pError != IntP
17510 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
17520 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20        {..       
17530 20 20 20 20 20 20 20 20 20 55 6e 73 61 66 65 4e           UnsafeN
17540 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
17550 69 74 65 33 5f 66 72 65 65 28 70 45 72 72 6f 72  ite3_free(pError
17560 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
17570 20 20 20 20 70 45 72 72 6f 72 20 3d 20 49 6e 74      pError = Int
17580 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20 20 20 20  Ptr.Zero;..     
17590 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20         }..      
175a0 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20    }..    }....  
175b0 20 20 2f 2f 2f 20 45 6e 61 62 6c 65 73 20 6f 72    /// Enables or
175c0 20 64 69 73 61 62 6c 65 64 20 65 78 74 65 6e 64   disabled extend
175d0 65 64 20 72 65 73 75 6c 74 20 63 6f 64 65 73 20  ed result codes 
175e0 72 65 74 75 72 6e 65 64 20 62 79 20 53 51 4c 69  returned by SQLi
175f0 74 65 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  te..    internal
17600 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
17610 65 74 45 78 74 65 6e 64 65 64 52 65 73 75 6c 74  etExtendedResult
17620 43 6f 64 65 73 28 62 6f 6f 6c 20 62 4f 6e 4f 66  Codes(bool bOnOf
17630 66 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  f)..    {..     
17640 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
17650 20 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76   n = UnsafeNativ
17660 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
17670 5f 65 78 74 65 6e 64 65 64 5f 72 65 73 75 6c 74  _extended_result
17680 5f 63 6f 64 65 73 28 0d 0a 20 20 20 20 20 20 20  _codes(..       
17690 20 20 20 5f 73 71 6c 2c 20 28 62 4f 6e 4f 66 66     _sql, (bOnOff
176a0 20 3f 20 2d 31 20 3a 20 30 29 29 3b 0d 0a 0d 0a   ? -1 : 0));....
176b0 20 20 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53        if (n != S
176c0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
176d0 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
176e0 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20  iteException(n, 
176f0 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b  GetLastError());
17700 0d 0a 20 20 20 20 7d 0d 0a 20 20 20 20 2f 2f 2f  ..    }..    ///
17710 20 47 65 74 73 20 74 68 65 20 6c 61 73 74 20 53   Gets the last S
17720 51 4c 69 74 65 20 65 72 72 6f 72 20 63 6f 64 65  QLite error code
17730 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
17740 76 65 72 72 69 64 65 20 53 51 4c 69 74 65 45 72  verride SQLiteEr
17750 72 6f 72 43 6f 64 65 20 52 65 73 75 6c 74 43 6f  rorCode ResultCo
17760 64 65 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20  de()..    {..   
17770 20 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65     return Unsafe
17780 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
17790 6c 69 74 65 33 5f 65 72 72 63 6f 64 65 28 5f 73  lite3_errcode(_s
177a0 71 6c 29 3b 0d 0a 20 20 20 20 7d 0d 0a 20 20 20  ql);..    }..   
177b0 20 2f 2f 2f 20 47 65 74 73 20 74 68 65 20 6c 61   /// Gets the la
177c0 73 74 20 53 51 4c 69 74 65 20 65 78 74 65 6e 64  st SQLite extend
177d0 65 64 20 65 72 72 6f 72 20 63 6f 64 65 0d 0a 20  ed error code.. 
177e0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
177f0 72 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72  ride SQLiteError
17800 43 6f 64 65 20 45 78 74 65 6e 64 65 64 52 65 73  Code ExtendedRes
17810 75 6c 74 43 6f 64 65 28 29 0d 0a 20 20 20 20 7b  ultCode()..    {
17820 0d 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 55  ..      return U
17830 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
17840 64 73 2e 73 71 6c 69 74 65 33 5f 65 78 74 65 6e  ds.sqlite3_exten
17850 64 65 64 5f 65 72 72 63 6f 64 65 28 5f 73 71 6c  ded_errcode(_sql
17860 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
17870 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d   /// Add a log m
17880 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53  essage via the S
17890 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f  QLite sqlite3_lo
178a0 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20  g interface...  
178b0 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
178c0 69 64 65 20 76 6f 69 64 20 4c 6f 67 4d 65 73 73  ide void LogMess
178d0 61 67 65 28 53 51 4c 69 74 65 45 72 72 6f 72 43  age(SQLiteErrorC
178e0 6f 64 65 20 69 45 72 72 43 6f 64 65 2c 20 73 74  ode iErrCode, st
178f0 72 69 6e 67 20 7a 4d 65 73 73 61 67 65 29 0d 0a  ring zMessage)..
17900 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 74 61      {..      Sta
17910 74 69 63 4c 6f 67 4d 65 73 73 61 67 65 28 69 45  ticLogMessage(iE
17920 72 72 43 6f 64 65 2c 20 7a 4d 65 73 73 61 67 65  rrCode, zMessage
17930 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
17940 20 2f 2f 2f 20 41 64 64 20 61 20 6c 6f 67 20 6d   /// Add a log m
17950 65 73 73 61 67 65 20 76 69 61 20 74 68 65 20 53  essage via the S
17960 51 4c 69 74 65 20 73 71 6c 69 74 65 33 5f 6c 6f  QLite sqlite3_lo
17970 67 20 69 6e 74 65 72 66 61 63 65 2e 0d 0a 20 20  g interface...  
17980 20 20 69 6e 74 65 72 6e 61 6c 20 73 74 61 74 69    internal stati
17990 63 20 76 6f 69 64 20 53 74 61 74 69 63 4c 6f 67  c void StaticLog
179a0 4d 65 73 73 61 67 65 28 53 51 4c 69 74 65 45 72  Message(SQLiteEr
179b0 72 6f 72 43 6f 64 65 20 69 45 72 72 43 6f 64 65  rorCode iErrCode
179c0 2c 20 73 74 72 69 6e 67 20 7a 4d 65 73 73 61 67  , string zMessag
179d0 65 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  e)..    {..     
179e0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
179f0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6c 6f 67  hods.sqlite3_log
17a00 28 69 45 72 72 43 6f 64 65 2c 20 54 6f 55 54 46  (iErrCode, ToUTF
17a10 38 28 7a 4d 65 73 73 61 67 65 29 29 3b 0d 0a 20  8(zMessage));.. 
17a20 20 20 20 7d 0d 0a 0d 0a 23 69 66 20 49 4e 54 45     }....#if INTE
17a30 52 4f 50 5f 43 4f 44 45 43 20 7c 7c 20 49 4e 54  ROP_CODEC || INT
17a40 45 52 4f 50 5f 49 4e 43 4c 55 44 45 5f 53 45 45  EROP_INCLUDE_SEE
17a50 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
17a60 76 65 72 72 69 64 65 20 76 6f 69 64 20 53 65 74  verride void Set
17a70 50 61 73 73 77 6f 72 64 28 62 79 74 65 5b 5d 20  Password(byte[] 
17a80 70 61 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a  passwordBytes)..
17a90 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c      {..      SQL
17aa0 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d  iteErrorCode n =
17ab0 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
17ac0 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 6b 65 79  hods.sqlite3_key
17ad0 28 5f 73 71 6c 2c 20 70 61 73 73 77 6f 72 64 42  (_sql, passwordB
17ae0 79 74 65 73 2c 20 70 61 73 73 77 6f 72 64 42 79  ytes, passwordBy
17af0 74 65 73 2e 4c 65 6e 67 74 68 29 3b 0d 0a 20 20  tes.Length);..  
17b00 20 20 20 20 69 66 20 28 6e 20 21 3d 20 53 51 4c      if (n != SQL
17b10 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29  iteErrorCode.Ok)
17b20 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c 69 74   throw new SQLit
17b30 65 45 78 63 65 70 74 69 6f 6e 28 6e 2c 20 47 65  eException(n, Ge
17b40 74 4c 61 73 74 45 72 72 6f 72 28 29 29 3b 0d 0a  tLastError());..
17b50 0d 0a 20 20 20 20 20 20 69 66 20 28 5f 75 73 65  ..      if (_use
17b60 50 6f 6f 6c 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  Pool)..      {..
17b70 20 20 20 20 20 20 20 20 5f 75 73 65 50 6f 6f 6c          _usePool
17b80 20 3d 20 66 61 6c 73 65 3b 0d 0a 0d 0a 23 69 66   = false;....#if
17b90 20 21 4e 45 54 5f 43 4f 4d 50 41 43 54 5f 32 30   !NET_COMPACT_20
17ba0 20 26 26 20 54 52 41 43 45 5f 43 4f 4e 4e 45 43   && TRACE_CONNEC
17bb0 54 49 4f 4e 0d 0a 20 20 20 20 20 20 20 20 54 72  TION..        Tr
17bc0 61 63 65 2e 57 72 69 74 65 4c 69 6e 65 28 48 65  ace.WriteLine(He
17bd0 6c 70 65 72 4d 65 74 68 6f 64 73 2e 53 74 72 69  lperMethods.Stri
17be0 6e 67 46 6f 72 6d 61 74 28 0d 0a 20 20 20 20 20  ngFormat(..     
17bf0 20 20 20 20 20 43 75 6c 74 75 72 65 49 6e 66 6f       CultureInfo
17c00 2e 43 75 72 72 65 6e 74 43 75 6c 74 75 72 65 2c  .CurrentCulture,
17c10 0d 0a 20 20 20 20 20 20 20 20 20 20 22 53 65 74  ..          "Set
17c20 50 61 73 73 77 6f 72 64 20 28 50 6f 6f 6c 29 20  Password (Pool) 
17c30 44 69 73 61 62 6c 65 64 3a 20 7b 30 7d 22 2c 0d  Disabled: {0}",.
17c40 0a 20 20 20 20 20 20 20 20 20 20 48 61 6e 64 6c  .          Handl
17c50 65 54 6f 53 74 72 69 6e 67 28 29 29 29 3b 0d 0a  eToString()));..
17c60 23 65 6e 64 69 66 0d 0a 20 20 20 20 20 20 7d 0d  #endif..      }.
17c70 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
17c80 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
17c90 76 6f 69 64 20 43 68 61 6e 67 65 50 61 73 73 77  void ChangePassw
17ca0 6f 72 64 28 62 79 74 65 5b 5d 20 6e 65 77 50 61  ord(byte[] newPa
17cb0 73 73 77 6f 72 64 42 79 74 65 73 29 0d 0a 20 20  sswordBytes)..  
17cc0 20 20 7b 0d 0a 20 20 20 20 20 20 53 51 4c 69 74    {..      SQLit
17cd0 65 45 72 72 6f 72 43 6f 64 65 20 6e 20 3d 20 55  eErrorCode n = U
17ce0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
17cf0 64 73 2e 73 71 6c 69 74 65 33 5f 72 65 6b 65 79  ds.sqlite3_rekey
17d00 28 5f 73 71 6c 2c 20 6e 65 77 50 61 73 73 77 6f  (_sql, newPasswo
17d10 72 64 42 79 74 65 73 2c 20 28 6e 65 77 50 61 73  rdBytes, (newPas
17d20 73 77 6f 72 64 42 79 74 65 73 20 3d 3d 20 6e 75  swordBytes == nu
17d30 6c 6c 29 20 3f 20 30 20 3a 20 6e 65 77 50 61 73  ll) ? 0 : newPas
17d40 73 77 6f 72 64 42 79 74 65 73 2e 4c 65 6e 67 74  swordBytes.Lengt
17d50 68 29 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 6e  h);..      if (n
17d60 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43   != SQLiteErrorC
17d70 6f 64 65 2e 4f 6b 29 20 74 68 72 6f 77 20 6e 65  ode.Ok) throw ne
17d80 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
17d90 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
17da0 72 28 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 69  r());....      i
17db0 66 20 28 5f 75 73 65 50 6f 6f 6c 29 0d 0a 20 20  f (_usePool)..  
17dc0 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 5f      {..        _
17dd0 75 73 65 50 6f 6f 6c 20 3d 20 66 61 6c 73 65 3b  usePool = false;
17de0 0d 0a 0d 0a 23 69 66 20 21 4e 45 54 5f 43 4f 4d  ....#if !NET_COM
17df0 50 41 43 54 5f 32 30 20 26 26 20 54 52 41 43 45  PACT_20 && TRACE
17e00 5f 43 4f 4e 4e 45 43 54 49 4f 4e 0d 0a 20 20 20  _CONNECTION..   
17e10 20 20 20 20 20 54 72 61 63 65 2e 57 72 69 74 65       Trace.Write
17e20 4c 69 6e 65 28 48 65 6c 70 65 72 4d 65 74 68 6f  Line(HelperMetho
17e30 64 73 2e 53 74 72 69 6e 67 46 6f 72 6d 61 74 28  ds.StringFormat(
17e40 0d 0a 20 20 20 20 20 20 20 20 20 20 43 75 6c 74  ..          Cult
17e50 75 72 65 49 6e 66 6f 2e 43 75 72 72 65 6e 74 43  ureInfo.CurrentC
17e60 75 6c 74 75 72 65 2c 0d 0a 20 20 20 20 20 20 20  ulture,..       
17e70 20 20 20 22 43 68 61 6e 67 65 50 61 73 73 77 6f     "ChangePasswo
17e80 72 64 20 28 50 6f 6f 6c 29 20 44 69 73 61 62 6c  rd (Pool) Disabl
17e90 65 64 3a 20 7b 30 7d 22 2c 0d 0a 20 20 20 20 20  ed: {0}",..     
17ea0 20 20 20 20 20 48 61 6e 64 6c 65 54 6f 53 74 72       HandleToStr
17eb0 69 6e 67 28 29 29 29 3b 0d 0a 23 65 6e 64 69 66  ing()));..#endif
17ec0 0d 0a 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d  ..      }..    }
17ed0 0d 0a 23 65 6e 64 69 66 0d 0a 0d 0a 20 20 20 20  ..#endif....    
17ee0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
17ef0 65 20 76 6f 69 64 20 53 65 74 50 72 6f 67 72 65  e void SetProgre
17f00 73 73 48 6f 6f 6b 28 69 6e 74 20 6e 4f 70 73 2c  ssHook(int nOps,
17f10 20 53 51 4c 69 74 65 50 72 6f 67 72 65 73 73 43   SQLiteProgressC
17f20 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20  allback func).. 
17f30 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 55 6e     {..        Un
17f40 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
17f50 73 2e 73 71 6c 69 74 65 33 5f 70 72 6f 67 72 65  s.sqlite3_progre
17f60 73 73 5f 68 61 6e 64 6c 65 72 28 5f 73 71 6c 2c  ss_handler(_sql,
17f70 20 6e 4f 70 73 2c 20 66 75 6e 63 2c 20 49 6e 74   nOps, func, Int
17f80 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20  Ptr.Zero);..    
17f90 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61  }....    interna
17fa0 6c 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20  l override void 
17fb0 53 65 74 41 75 74 68 6f 72 69 7a 65 72 48 6f 6f  SetAuthorizerHoo
17fc0 6b 28 53 51 4c 69 74 65 41 75 74 68 6f 72 69 7a  k(SQLiteAuthoriz
17fd0 65 72 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29  erCallback func)
17fe0 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55  ..    {..      U
17ff0 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f  nsafeNativeMetho
18000 64 73 2e 73 71 6c 69 74 65 33 5f 73 65 74 5f 61  ds.sqlite3_set_a
18010 75 74 68 6f 72 69 7a 65 72 28 5f 73 71 6c 2c 20  uthorizer(_sql, 
18020 66 75 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72  func, IntPtr.Zer
18030 6f 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20  o);..    }....  
18040 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
18050 69 64 65 20 76 6f 69 64 20 53 65 74 55 70 64 61  ide void SetUpda
18060 74 65 48 6f 6f 6b 28 53 51 4c 69 74 65 55 70 64  teHook(SQLiteUpd
18070 61 74 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63  ateCallback func
18080 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20  )..    {..      
18090 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
180a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 75 70 64 61  ods.sqlite3_upda
180b0 74 65 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75  te_hook(_sql, fu
180c0 6e 63 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29  nc, IntPtr.Zero)
180d0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
180e0 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
180f0 65 20 76 6f 69 64 20 53 65 74 43 6f 6d 6d 69 74  e void SetCommit
18100 48 6f 6f 6b 28 53 51 4c 69 74 65 43 6f 6d 6d 69  Hook(SQLiteCommi
18110 74 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  tCallback func).
18120 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
18130 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
18140 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6d 6d 69 74  s.sqlite3_commit
18150 5f 68 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63  _hook(_sql, func
18160 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
18170 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e  .    }....    in
18180 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20  ternal override 
18190 76 6f 69 64 20 53 65 74 54 72 61 63 65 43 61 6c  void SetTraceCal
181a0 6c 62 61 63 6b 28 53 51 4c 69 74 65 54 72 61 63  lback(SQLiteTrac
181b0 65 43 61 6c 6c 62 61 63 6b 20 66 75 6e 63 29 0d  eCallback func).
181c0 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 55 6e  .    {..      Un
181d0 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
181e0 73 2e 73 71 6c 69 74 65 33 5f 74 72 61 63 65 28  s.sqlite3_trace(
181f0 5f 73 71 6c 2c 20 66 75 6e 63 2c 20 49 6e 74 50  _sql, func, IntP
18200 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20 20 20 20 7d  tr.Zero);..    }
18210 0d 0a 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  ....    internal
18220 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 53   override void S
18230 65 74 52 6f 6c 6c 62 61 63 6b 48 6f 6f 6b 28 53  etRollbackHook(S
18240 51 4c 69 74 65 52 6f 6c 6c 62 61 63 6b 43 61 6c  QLiteRollbackCal
18250 6c 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20  lback func)..   
18260 20 7b 0d 0a 20 20 20 20 20 20 55 6e 73 61 66 65   {..      Unsafe
18270 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71  NativeMethods.sq
18280 6c 69 74 65 33 5f 72 6f 6c 6c 62 61 63 6b 5f 68  lite3_rollback_h
18290 6f 6f 6b 28 5f 73 71 6c 2c 20 66 75 6e 63 2c 20  ook(_sql, func, 
182a0 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d 0a 20  IntPtr.Zero);.. 
182b0 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20     }....    /// 
182c0 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  <summary>..    /
182d0 2f 2f 20 41 6c 6c 6f 77 73 20 74 68 65 20 73 65  // Allows the se
182e0 74 74 69 6e 67 20 6f 66 20 61 20 6c 6f 67 67 69  tting of a loggi
182f0 6e 67 20 63 61 6c 6c 62 61 63 6b 20 69 6e 76 6f  ng callback invo
18300 6b 65 64 20 62 79 20 53 51 4c 69 74 65 20 77 68  ked by SQLite wh
18310 65 6e 20 61 0d 0a 20 20 20 20 2f 2f 2f 20 6c 6f  en a..    /// lo
18320 67 20 65 76 65 6e 74 20 6f 63 63 75 72 73 2e 20  g event occurs. 
18330 20 4f 6e 6c 79 20 6f 6e 65 20 63 61 6c 6c 62 61   Only one callba
18340 63 6b 20 6d 61 79 20 62 65 20 73 65 74 2e 20 20  ck may be set.  
18350 49 66 20 4e 55 4c 4c 20 69 73 20 70 61 73 73 65  If NULL is passe
18360 64 2c 0d 0a 20 20 20 20 2f 2f 2f 20 74 68 65 20  d,..    /// the 
18370 6c 6f 67 67 69 6e 67 20 63 61 6c 6c 62 61 63 6b  logging callback
18380 20 69 73 20 75 6e 72 65 67 69 73 74 65 72 65 64   is unregistered
18390 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d  ...    /// </sum
183a0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  mary>..    /// <
183b0 70 61 72 61 6d 20 6e 61 6d 65 3d 22 66 75 6e 63  param name="func
183c0 22 3e 54 68 65 20 63 61 6c 6c 62 61 63 6b 20 66  ">The callback f
183d0 75 6e 63 74 69 6f 6e 20 74 6f 20 69 6e 76 6f 6b  unction to invok
183e0 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
183f0 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 52 65 74  /// <returns>Ret
18400 75 72 6e 73 20 61 20 72 65 73 75 6c 74 20 63 6f  urns a result co
18410 64 65 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20  de</returns>..  
18420 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72    internal overr
18430 69 64 65 20 53 51 4c 69 74 65 45 72 72 6f 72 43  ide SQLiteErrorC
18440 6f 64 65 20 53 65 74 4c 6f 67 43 61 6c 6c 62 61  ode SetLogCallba
18450 63 6b 28 53 51 4c 69 74 65 4c 6f 67 43 61 6c 6c  ck(SQLiteLogCall
18460 62 61 63 6b 20 66 75 6e 63 29 0d 0a 20 20 20 20  back func)..    
18470 7b 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  {..        SQLit
18480 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d 20  eErrorCode rc = 
18490 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68  UnsafeNativeMeth
184a0 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f 6e 66  ods.sqlite3_conf
184b0 69 67 5f 6c 6f 67 28 0d 0a 20 20 20 20 20 20 20  ig_log(..       
184c0 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 66 69       SQLiteConfi
184d0 67 4f 70 73 45 6e 75 6d 2e 53 51 4c 49 54 45 5f  gOpsEnum.SQLITE_
184e0 43 4f 4e 46 49 47 5f 4c 4f 47 2c 20 66 75 6e 63  CONFIG_LOG, func
184f0 2c 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29 3b 0d  , IntPtr.Zero);.
18500 0a 0d 0a 20 20 20 20 20 20 20 20 72 65 74 75 72  ...        retur
18510 6e 20 72 63 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a  n rc;..    }....
18520 20 20 20 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f      ////////////
18530 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18540 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18550 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18560 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18570 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
18580 2f 2f 2f 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ///....    /// <
18590 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
185a0 2f 20 43 72 65 61 74 65 73 20 61 20 6e 65 77 20  / Creates a new 
185b0 53 51 4c 69 74 65 20 62 61 63 6b 75 70 20 6f 62  SQLite backup ob
185c0 6a 65 63 74 20 62 61 73 65 64 20 6f 6e 20 74 68  ject based on th
185d0 65 20 70 72 6f 76 69 64 65 64 20 64 65 73 74 69  e provided desti
185e0 6e 61 74 69 6f 6e 0d 0a 20 20 20 20 2f 2f 2f 20  nation..    /// 
185f0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
18600 69 6f 6e 2e 20 20 54 68 65 20 73 6f 75 72 63 65  ion.  The source
18610 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
18620 74 69 6f 6e 20 69 73 20 74 68 65 20 6f 6e 65 0d  tion is the one.
18630 0a 20 20 20 20 2f 2f 2f 20 61 73 73 6f 63 69 61  .    /// associa
18640 74 65 64 20 77 69 74 68 20 74 68 69 73 20 6f 62  ted with this ob
18650 6a 65 63 74 2e 20 20 54 68 65 20 73 6f 75 72 63  ject.  The sourc
18660 65 20 61 6e 64 20 64 65 73 74 69 6e 61 74 69 6f  e and destinatio
18670 6e 20 64 61 74 61 62 61 73 65 0d 0a 20 20 20 20  n database..    
18680 2f 2f 2f 20 63 6f 6e 6e 65 63 74 69 6f 6e 73 20  /// connections 
18690 63 61 6e 6e 6f 74 20 62 65 20 74 68 65 20 73 61  cannot be the sa
186a0 6d 65 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 73  me...    /// </s
186b0 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f  ummary>..    ///
186c0 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22 64 65   <param name="de
186d0 73 74 43 6e 6e 22 3e 54 68 65 20 64 65 73 74 69  stCnn">The desti
186e0 6e 61 74 69 6f 6e 20 64 61 74 61 62 61 73 65 20  nation database 
186f0 63 6f 6e 6e 65 63 74 69 6f 6e 2e 3c 2f 70 61 72  connection.</par
18700 61 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61  am>..    /// <pa
18710 72 61 6d 20 6e 61 6d 65 3d 22 64 65 73 74 4e 61  ram name="destNa
18720 6d 65 22 3e 54 68 65 20 64 65 73 74 69 6e 61 74  me">The destinat
18730 69 6f 6e 20 64 61 74 61 62 61 73 65 20 6e 61 6d  ion database nam
18740 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  e.</param>..    
18750 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
18760 22 73 6f 75 72 63 65 4e 61 6d 65 22 3e 54 68 65  "sourceName">The
18770 20 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65   source database
18780 20 6e 61 6d 65 2e 3c 2f 70 61 72 61 6d 3e 0d 0a   name.</param>..
18790 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73      /// <returns
187a0 3e 54 68 65 20 6e 65 77 6c 79 20 63 72 65 61 74  >The newly creat
187b0 65 64 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  ed backup object
187c0 2e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20  .</returns>..   
187d0 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69   internal overri
187e0 64 65 20 53 51 4c 69 74 65 42 61 63 6b 75 70 20  de SQLiteBackup 
187f0 49 6e 69 74 69 61 6c 69 7a 65 42 61 63 6b 75 70  InitializeBackup
18800 28 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69 74  (..        SQLit
18810 65 43 6f 6e 6e 65 63 74 69 6f 6e 20 64 65 73 74  eConnection dest
18820 43 6e 6e 2c 0d 0a 20 20 20 20 20 20 20 20 73 74  Cnn,..        st
18830 72 69 6e 67 20 64 65 73 74 4e 61 6d 65 2c 0d 0a  ring destName,..
18840 20 20 20 20 20 20 20 20 73 74 72 69 6e 67 20 73          string s
18850 6f 75 72 63 65 4e 61 6d 65 0d 0a 20 20 20 20 20  ourceName..     
18860 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
18870 20 20 20 20 20 69 66 20 28 64 65 73 74 43 6e 6e       if (destCnn
18880 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20   == null)..     
18890 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77         throw new
188a0 20 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63   ArgumentNullExc
188b0 65 70 74 69 6f 6e 28 22 64 65 73 74 43 6e 6e 22  eption("destCnn"
188c0 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66  );....        if
188d0 20 28 64 65 73 74 4e 61 6d 65 20 3d 3d 20 6e 75   (destName == nu
188e0 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20  ll)..           
188f0 20 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d   throw new Argum
18900 65 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e  entNullException
18910 28 22 64 65 73 74 4e 61 6d 65 22 29 3b 0d 0a 0d  ("destName");...
18920 0a 20 20 20 20 20 20 20 20 69 66 20 28 73 6f 75  .        if (sou
18930 72 63 65 4e 61 6d 65 20 3d 3d 20 6e 75 6c 6c 29  rceName == null)
18940 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
18950 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
18960 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 73  NullException("s
18970 6f 75 72 63 65 4e 61 6d 65 22 29 3b 0d 0a 0d 0a  ourceName");....
18980 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 33 20          SQLite3 
18990 64 65 73 74 53 71 6c 69 74 65 33 20 3d 20 64 65  destSqlite3 = de
189a0 73 74 43 6e 6e 2e 5f 73 71 6c 20 61 73 20 53 51  stCnn._sql as SQ
189b0 4c 69 74 65 33 3b 0d 0a 0d 0a 20 20 20 20 20 20  Lite3;....      
189c0 20 20 69 66 20 28 64 65 73 74 53 71 6c 69 74 65    if (destSqlite
189d0 33 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20  3 == null)..    
189e0 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
189f0 77 20 41 72 67 75 6d 65 6e 74 45 78 63 65 70 74  w ArgumentExcept
18a00 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
18a10 20 20 20 20 20 20 22 44 65 73 74 69 6e 61 74 69        "Destinati
18a20 6f 6e 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61  on connection ha
18a30 73 20 6e 6f 20 77 72 61 70 70 65 72 2e 22 2c 0d  s no wrapper.",.
18a40 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18a50 20 22 64 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a   "destCnn");....
18a60 20 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f          SQLiteCo
18a70 6e 6e 65 63 74 69 6f 6e 48 61 6e 64 6c 65 20 64  nnectionHandle d
18a80 65 73 74 48 61 6e 64 6c 65 20 3d 20 64 65 73 74  estHandle = dest
18a90 53 71 6c 69 74 65 33 2e 5f 73 71 6c 3b 0d 0a 0d  Sqlite3._sql;...
18aa0 0a 20 20 20 20 20 20 20 20 69 66 20 28 64 65 73  .        if (des
18ab0 74 48 61 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29  tHandle == null)
18ac0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
18ad0 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
18ae0 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
18af0 20 20 20 20 20 20 20 20 20 20 20 20 22 44 65 73              "Des
18b00 74 69 6e 61 74 69 6f 6e 20 63 6f 6e 6e 65 63 74  tination connect
18b10 69 6f 6e 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ion has an inval
18b20 69 64 20 68 61 6e 64 6c 65 2e 22 2c 0d 0a 20 20  id handle.",..  
18b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 64                "d
18b40 65 73 74 43 6e 6e 22 29 3b 0d 0a 0d 0a 20 20 20  estCnn");....   
18b50 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e 6e 65       SQLiteConne
18b60 63 74 69 6f 6e 48 61 6e 64 6c 65 20 73 6f 75 72  ctionHandle sour
18b70 63 65 48 61 6e 64 6c 65 20 3d 20 5f 73 71 6c 3b  ceHandle = _sql;
18b80 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
18b90 73 6f 75 72 63 65 48 61 6e 64 6c 65 20 3d 3d 20  sourceHandle == 
18ba0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
18bb0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
18bc0 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
18bd0 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
18be0 20 20 20 20 20 20 20 20 20 22 53 6f 75 72 63 65           "Source
18bf0 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 73 20   connection has 
18c00 61 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c  an invalid handl
18c10 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  e.");....       
18c20 20 62 79 74 65 5b 5d 20 7a 44 65 73 74 4e 61 6d   byte[] zDestNam
18c30 65 20 3d 20 54 6f 55 54 46 38 28 64 65 73 74 4e  e = ToUTF8(destN
18c40 61 6d 65 29 3b 0d 0a 20 20 20 20 20 20 20 20 62  ame);..        b
18c50 79 74 65 5b 5d 20 7a 53 6f 75 72 63 65 4e 61 6d  yte[] zSourceNam
18c60 65 20 3d 20 54 6f 55 54 46 38 28 73 6f 75 72 63  e = ToUTF8(sourc
18c70 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20 20  eName);....     
18c80 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70 48     SQLiteBackupH
18c90 61 6e 64 6c 65 20 62 61 63 6b 75 70 48 61 6e 64  andle backupHand
18ca0 6c 65 20 3d 20 6e 75 6c 6c 3b 0d 0a 0d 0a 20 20  le = null;....  
18cb0 20 20 20 20 20 20 74 72 79 0d 0a 20 20 20 20 20        try..     
18cc0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
18cd0 20 20 2f 2f 20 64 6f 20 6e 6f 74 68 69 6e 67 2e    // do nothing.
18ce0 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20  ..        }..   
18cf0 20 20 20 20 20 66 69 6e 61 6c 6c 79 20 2f 2a 20       finally /* 
18d00 4e 4f 54 45 3a 20 54 68 72 65 61 64 2e 41 62 6f  NOTE: Thread.Abo
18d10 72 74 28 29 20 70 72 6f 74 65 63 74 69 6f 6e 2e  rt() protection.
18d20 20 2a 2f 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a   */..        {..
18d30 20 20 20 20 20 20 20 20 20 20 20 20 49 6e 74 50              IntP
18d40 74 72 20 62 61 63 6b 75 70 20 3d 20 55 6e 73 61  tr backup = Unsa
18d50 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64 73 2e  feNativeMethods.
18d60 73 71 6c 69 74 65 33 5f 62 61 63 6b 75 70 5f 69  sqlite3_backup_i
18d70 6e 69 74 28 0d 0a 20 20 20 20 20 20 20 20 20 20  nit(..          
18d80 20 20 20 20 20 20 64 65 73 74 48 61 6e 64 6c 65        destHandle
18d90 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20 73 6f 75  , zDestName, sou
18da0 72 63 65 48 61 6e 64 6c 65 2c 20 7a 53 6f 75 72  rceHandle, zSour
18db0 63 65 4e 61 6d 65 29 3b 0d 0a 0d 0a 20 20 20 20  ceName);....    
18dc0 20 20 20 20 20 20 20 20 69 66 20 28 62 61 63 6b          if (back
18dd0 75 70 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  up == IntPtr.Zer
18de0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
18df0 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  {..             
18e00 20 20 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f     SQLiteErrorCo
18e10 64 65 20 72 65 73 75 6c 74 43 6f 64 65 20 3d 20  de resultCode = 
18e20 52 65 73 75 6c 74 43 6f 64 65 28 29 3b 0d 0a 0d  ResultCode();...
18e30 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
18e40 20 69 66 20 28 72 65 73 75 6c 74 43 6f 64 65 20   if (resultCode 
18e50 21 3d 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f  != SQLiteErrorCo
18e60 64 65 2e 4f 6b 29 0d 0a 20 20 20 20 20 20 20 20  de.Ok)..        
18e70 20 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f              thro
18e80 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78 63 65  w new SQLiteExce
18e90 70 74 69 6f 6e 28 72 65 73 75 6c 74 43 6f 64 65  ption(resultCode
18ea0 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
18eb0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
18ec0 20 20 20 20 65 6c 73 65 0d 0a 20 20 20 20 20 20      else..      
18ed0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 74 68                th
18ee0 72 6f 77 20 6e 65 77 20 53 51 4c 69 74 65 45 78  row new SQLiteEx
18ef0 63 65 70 74 69 6f 6e 28 22 66 61 69 6c 65 64 20  ception("failed 
18f00 74 6f 20 69 6e 69 74 69 61 6c 69 7a 65 20 62 61  to initialize ba
18f10 63 6b 75 70 22 29 3b 0d 0a 20 20 20 20 20 20 20  ckup");..       
18f20 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
18f30 20 20 20 20 20 20 62 61 63 6b 75 70 48 61 6e 64        backupHand
18f40 6c 65 20 3d 20 6e 65 77 20 53 51 4c 69 74 65 42  le = new SQLiteB
18f50 61 63 6b 75 70 48 61 6e 64 6c 65 28 64 65 73 74  ackupHandle(dest
18f60 48 61 6e 64 6c 65 2c 20 62 61 63 6b 75 70 29 3b  Handle, backup);
18f70 0d 0a 20 20 20 20 20 20 20 20 7d 0d 0a 0d 0a 20  ..        }.... 
18f80 20 20 20 20 20 20 20 53 51 4c 69 74 65 43 6f 6e         SQLiteCon
18f90 6e 65 63 74 69 6f 6e 2e 4f 6e 43 68 61 6e 67 65  nection.OnChange
18fa0 64 28 6e 75 6c 6c 2c 20 6e 65 77 20 43 6f 6e 6e  d(null, new Conn
18fb0 65 63 74 69 6f 6e 45 76 65 6e 74 41 72 67 73 28  ectionEventArgs(
18fc0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 53 51  ..            SQ
18fd0 4c 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 45 76  LiteConnectionEv
18fe0 65 6e 74 54 79 70 65 2e 4e 65 77 43 72 69 74 69  entType.NewCriti
18ff0 63 61 6c 48 61 6e 64 6c 65 2c 20 6e 75 6c 6c 2c  calHandle, null,
19000 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6e 75  ..            nu
19010 6c 6c 2c 20 6e 75 6c 6c 2c 20 6e 75 6c 6c 2c 20  ll, null, null, 
19020 62 61 63 6b 75 70 48 61 6e 64 6c 65 2c 20 6e 75  backupHandle, nu
19030 6c 6c 2c 20 6e 65 77 20 6f 62 6a 65 63 74 5b 5d  ll, new object[]
19040 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20   {..            
19050 74 79 70 65 6f 66 28 53 51 4c 69 74 65 33 29 2c  typeof(SQLite3),
19060 20 64 65 73 74 43 6e 6e 2c 20 64 65 73 74 4e 61   destCnn, destNa
19070 6d 65 2c 20 73 6f 75 72 63 65 4e 61 6d 65 20 7d  me, sourceName }
19080 29 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 72  ));....        r
19090 65 74 75 72 6e 20 6e 65 77 20 53 51 4c 69 74 65  eturn new SQLite
190a0 42 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20  Backup(..       
190b0 20 20 20 20 20 74 68 69 73 2c 20 62 61 63 6b 75       this, backu
190c0 70 48 61 6e 64 6c 65 2c 20 64 65 73 74 48 61 6e  pHandle, destHan
190d0 64 6c 65 2c 20 7a 44 65 73 74 4e 61 6d 65 2c 20  dle, zDestName, 
190e0 73 6f 75 72 63 65 48 61 6e 64 6c 65 2c 0d 0a 20  sourceHandle,.. 
190f0 20 20 20 20 20 20 20 20 20 20 20 7a 53 6f 75 72             zSour
19100 63 65 4e 61 6d 65 29 3b 0d 0a 20 20 20 20 7d 0d  ceName);..    }.
19110 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d 6d  ...    /// <summ
19120 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 43 6f  ary>..    /// Co
19130 70 69 65 73 20 75 70 20 74 6f 20 4e 20 70 61 67  pies up to N pag
19140 65 73 20 66 72 6f 6d 20 74 68 65 20 73 6f 75 72  es from the sour
19150 63 65 20 64 61 74 61 62 61 73 65 20 74 6f 20 74  ce database to t
19160 68 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 0d 0a  he destination..
19170 20 20 20 20 2f 2f 2f 20 64 61 74 61 62 61 73 65      /// database
19180 20 61 73 73 6f 63 69 61 74 65 64 20 77 69 74 68   associated with
19190 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 62   the specified b
191a0 61 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20  ackup object... 
191b0 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79     /// </summary
191c0 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
191d0 6d 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e  m name="backup">
191e0 54 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63  The backup objec
191f0 74 20 74 6f 20 75 73 65 2e 3c 2f 70 61 72 61 6d  t to use.</param
19200 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61  >..    /// <para
19210 6d 20 6e 61 6d 65 3d 22 6e 50 61 67 65 22 3e 0d  m name="nPage">.
19220 0a 20 20 20 20 2f 2f 2f 20 54 68 65 20 6e 75 6d  .    /// The num
19230 62 65 72 20 6f 66 20 70 61 67 65 73 20 74 6f 20  ber of pages to 
19240 63 6f 70 79 2c 20 6e 65 67 61 74 69 76 65 20 74  copy, negative t
19250 6f 20 63 6f 70 79 20 61 6c 6c 20 72 65 6d 61 69  o copy all remai
19260 6e 69 6e 67 20 70 61 67 65 73 2e 0d 0a 20 20 20  ning pages...   
19270 20 2f 2f 2f 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20   /// </param>.. 
19280 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61     /// <param na
19290 6d 65 3d 22 72 65 74 72 79 22 3e 0d 0a 20 20 20  me="retry">..   
192a0 20 2f 2f 2f 20 53 65 74 20 74 6f 20 74 72 75 65   /// Set to true
192b0 20 69 66 20 74 68 65 20 6f 70 65 72 61 74 69 6f   if the operatio
192c0 6e 20 6e 65 65 64 73 20 74 6f 20 62 65 20 72 65  n needs to be re
192d0 74 72 69 65 64 20 64 75 65 20 74 6f 20 64 61 74  tried due to dat
192e0 61 62 61 73 65 0d 0a 20 20 20 20 2f 2f 2f 20 6c  abase..    /// l
192f0 6f 63 6b 69 6e 67 20 69 73 73 75 65 73 3b 20 6f  ocking issues; o
19300 74 68 65 72 77 69 73 65 2c 20 73 65 74 20 74 6f  therwise, set to
19310 20 66 61 6c 73 65 2e 0d 0a 20 20 20 20 2f 2f 2f   false...    ///
19320 20 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20 2f   </param>..    /
19330 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 0d 0a 20 20  // <returns>..  
19340 20 20 2f 2f 2f 20 54 72 75 65 20 69 66 20 74 68    /// True if th
19350 65 72 65 20 61 72 65 20 6d 6f 72 65 20 70 61 67  ere are more pag
19360 65 73 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2c  es to be copied,
19370 20 66 61 6c 73 65 20 6f 74 68 65 72 77 69 73 65   false otherwise
19380 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
19390 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
193a0 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 62 6f 6f  nal override boo
193b0 6c 20 53 74 65 70 42 61 63 6b 75 70 28 0d 0a 20  l StepBackup(.. 
193c0 20 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63         SQLiteBac
193d0 6b 75 70 20 62 61 63 6b 75 70 2c 0d 0a 20 20 20  kup backup,..   
193e0 20 20 20 20 20 69 6e 74 20 6e 50 61 67 65 2c 0d       int nPage,.
193f0 0a 20 20 20 20 20 20 20 20 72 65 66 20 62 6f 6f  .        ref boo
19400 6c 20 72 65 74 72 79 0d 0a 20 20 20 20 20 20 20  l retry..       
19410 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20   )..    {..     
19420 20 20 20 72 65 74 72 79 20 3d 20 66 61 6c 73 65     retry = false
19430 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20  ;....        if 
19440 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c 29  (backup == null)
19450 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
19460 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e 74  row new Argument
19470 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22 62  NullException("b
19480 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20 20  ackup");....    
19490 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75 70      SQLiteBackup
194a0 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d 20  Handle handle = 
194b0 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f 62  backup._sqlite_b
194c0 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20 20  ackup;....      
194d0 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d 20    if (handle == 
194e0 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20 20  null)..         
194f0 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e 76     throw new Inv
19500 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78 63  alidOperationExc
19510 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20  eption(..       
19520 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75 70           "Backup
19530 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20 69   object has an i
19540 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22 29  nvalid handle.")
19550 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e 74  ;....        Int
19560 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d 20  Ptr handlePtr = 
19570 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20 20  handle;....     
19580 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74 72     if (handlePtr
19590 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f 29   == IntPtr.Zero)
195a0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 68  ..            th
195b0 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f  row new InvalidO
195c0 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69 6f  perationExceptio
195d0 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  n(..            
195e0 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a 65      "Backup obje
195f0 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c 69  ct has an invali
19600 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65 72  d handle pointer
19610 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20  .");....        
19620 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
19630 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
19640 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
19650 62 61 63 6b 75 70 5f 73 74 65 70 28 68 61 6e 64  backup_step(hand
19660 6c 65 50 74 72 2c 20 6e 50 61 67 65 29 3b 0d 0a  lePtr, nPage);..
19670 20 20 20 20 20 20 20 20 62 61 63 6b 75 70 2e 5f          backup._
19680 73 74 65 70 52 65 73 75 6c 74 20 3d 20 6e 3b 20  stepResult = n; 
19690 2f 2a 20 4e 4f 54 45 3a 20 53 61 76 65 20 66 6f  /* NOTE: Save fo
196a0 72 20 75 73 65 20 62 79 20 46 69 6e 69 73 68 42  r use by FinishB
196b0 61 63 6b 75 70 2e 20 2a 2f 0d 0a 0d 0a 20 20 20  ackup. */....   
196c0 20 20 20 20 20 69 66 20 28 6e 20 3d 3d 20 53 51       if (n == SQ
196d0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f 6b  LiteErrorCode.Ok
196e0 29 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20  )..        {..  
196f0 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
19700 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20   true;..        
19710 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 20  }..        else 
19720 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74 65 45  if (n == SQLiteE
19730 72 72 6f 72 43 6f 64 65 2e 42 75 73 79 29 0d 0a  rrorCode.Busy)..
19740 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20 20          {..     
19750 20 20 20 20 20 20 20 72 65 74 72 79 20 3d 20 74         retry = t
19760 72 75 65 3b 0d 0a 20 20 20 20 20 20 20 20 20 20  rue;..          
19770 20 20 72 65 74 75 72 6e 20 74 72 75 65 3b 0d 0a    return true;..
19780 20 20 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20          }..     
19790 20 20 20 65 6c 73 65 20 69 66 20 28 6e 20 3d 3d     else if (n ==
197a0 20 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65   SQLiteErrorCode
197b0 2e 4c 6f 63 6b 65 64 29 0d 0a 20 20 20 20 20 20  .Locked)..      
197c0 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20 20    {..           
197d0 20 72 65 74 72 79 20 3d 20 74 72 75 65 3b 0d 0a   retry = true;..
197e0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
197f0 72 6e 20 74 72 75 65 3b 0d 0a 20 20 20 20 20 20  rn true;..      
19800 20 20 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73    }..        els
19810 65 20 69 66 20 28 6e 20 3d 3d 20 53 51 4c 69 74  e if (n == SQLit
19820 65 45 72 72 6f 72 43 6f 64 65 2e 44 6f 6e 65 29  eErrorCode.Done)
19830 0d 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20  ..        {..   
19840 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
19850 66 61 6c 73 65 3b 0d 0a 20 20 20 20 20 20 20 20  false;..        
19860 7d 0d 0a 20 20 20 20 20 20 20 20 65 6c 73 65 0d  }..        else.
19870 0a 20 20 20 20 20 20 20 20 7b 0d 0a 20 20 20 20  .        {..    
19880 20 20 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65          throw ne
19890 77 20 53 51 4c 69 74 65 45 78 63 65 70 74 69 6f  w SQLiteExceptio
198a0 6e 28 6e 2c 20 47 65 74 4c 61 73 74 45 72 72 6f  n(n, GetLastErro
198b0 72 28 29 29 3b 0d 0a 20 20 20 20 20 20 20 20 7d  r());..        }
198c0 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
198d0 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
198e0 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74 68    /// Returns th
198f0 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
19900 73 20 72 65 6d 61 69 6e 69 6e 67 20 74 6f 20 62  s remaining to b
19910 65 20 63 6f 70 69 65 64 20 66 72 6f 6d 20 74 68  e copied from th
19920 65 20 73 6f 75 72 63 65 0d 0a 20 20 20 20 2f 2f  e source..    //
19930 2f 20 64 61 74 61 62 61 73 65 20 74 6f 20 74 68  / database to th
19940 65 20 64 65 73 74 69 6e 61 74 69 6f 6e 20 64 61  e destination da
19950 74 61 62 61 73 65 20 61 73 73 6f 63 69 61 74 65  tabase associate
19960 64 20 77 69 74 68 20 74 68 65 20 73 70 65 63 69  d with the speci
19970 66 69 65 64 0d 0a 20 20 20 20 2f 2f 2f 20 62 61  fied..    /// ba
19980 63 6b 75 70 20 6f 62 6a 65 63 74 2e 0d 0a 20 20  ckup object...  
19990 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e    /// </summary>
199a0 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d  ..    /// <param
199b0 20 6e 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54   name="backup">T
199c0 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
199d0 20 74 6f 20 63 68 65 63 6b 2e 3c 2f 70 61 72 61   to check.</para
199e0 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
199f0 75 72 6e 73 3e 54 68 65 20 6e 75 6d 62 65 72 20  urns>The number 
19a00 6f 66 20 70 61 67 65 73 20 72 65 6d 61 69 6e 69  of pages remaini
19a10 6e 67 20 74 6f 20 62 65 20 63 6f 70 69 65 64 2e  ng to be copied.
19a20 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20  </returns>..    
19a30 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64  internal overrid
19a40 65 20 69 6e 74 20 52 65 6d 61 69 6e 69 6e 67 42  e int RemainingB
19a50 61 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20  ackup(..        
19a60 53 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63  SQLiteBackup bac
19a70 6b 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a  kup..        )..
19a80 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69      {..        i
19a90 66 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c  f (backup == nul
19aa0 6c 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  l)..            
19ab0 74 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65  throw new Argume
19ac0 6e 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28  ntNullException(
19ad0 22 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20  "backup");....  
19ae0 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
19af0 75 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20  upHandle handle 
19b00 3d 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65  = backup._sqlite
19b10 5f 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20  _backup;....    
19b20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d      if (handle =
19b30 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20  = null)..       
19b40 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49       throw new I
19b50 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45  nvalidOperationE
19b60 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20  xception(..     
19b70 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b             "Back
19b80 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e  up object has an
19b90 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e   invalid handle.
19ba0 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49  ");....        I
19bb0 6e 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20  ntPtr handlePtr 
19bc0 3d 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20  = handle;....   
19bd0 20 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50       if (handleP
19be0 74 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72  tr == IntPtr.Zer
19bf0 6f 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  o)..            
19c00 74 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69  throw new Invali
19c10 64 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74  dOperationExcept
19c20 69 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20  ion(..          
19c30 20 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62        "Backup ob
19c40 6a 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61  ject has an inva
19c50 6c 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74  lid handle point
19c60 65 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20  er.");....      
19c70 20 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e    return UnsafeN
19c80 61 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c  ativeMethods.sql
19c90 69 74 65 33 5f 62 61 63 6b 75 70 5f 72 65 6d 61  ite3_backup_rema
19ca0 69 6e 69 6e 67 28 68 61 6e 64 6c 65 50 74 72 29  ining(handlePtr)
19cb0 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20  ;..    }....    
19cc0 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20  /// <summary>.. 
19cd0 20 20 20 2f 2f 2f 20 52 65 74 75 72 6e 73 20 74     /// Returns t
19ce0 68 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20  he total number 
19cf0 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
19d00 73 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 20  source database 
19d10 61 73 73 6f 63 69 61 74 65 64 0d 0a 20 20 20 20  associated..    
19d20 2f 2f 2f 20 77 69 74 68 20 74 68 65 20 73 70 65  /// with the spe
19d30 63 69 66 69 65 64 20 62 61 63 6b 75 70 20 6f 62  cified backup ob
19d40 6a 65 63 74 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c  ject...    /// <
19d50 2f 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f  /summary>..    /
19d60 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d 22  // <param name="
19d70 62 61 63 6b 75 70 22 3e 54 68 65 20 62 61 63 6b  backup">The back
19d80 75 70 20 6f 62 6a 65 63 74 20 74 6f 20 63 68 65  up object to che
19d90 63 6b 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ck.</param>..   
19da0 20 2f 2f 2f 20 3c 72 65 74 75 72 6e 73 3e 54 68   /// <returns>Th
19db0 65 20 74 6f 74 61 6c 20 6e 75 6d 62 65 72 20 6f  e total number o
19dc0 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 73  f pages in the s
19dd0 6f 75 72 63 65 20 64 61 74 61 62 61 73 65 2e 3c  ource database.<
19de0 2f 72 65 74 75 72 6e 73 3e 0d 0a 20 20 20 20 69  /returns>..    i
19df0 6e 74 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65  nternal override
19e00 20 69 6e 74 20 50 61 67 65 43 6f 75 6e 74 42 61   int PageCountBa
19e10 63 6b 75 70 28 0d 0a 20 20 20 20 20 20 20 20 53  ckup(..        S
19e20 51 4c 69 74 65 42 61 63 6b 75 70 20 62 61 63 6b  QLiteBackup back
19e30 75 70 0d 0a 20 20 20 20 20 20 20 20 29 0d 0a 20  up..        ).. 
19e40 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 69 66     {..        if
19e50 20 28 62 61 63 6b 75 70 20 3d 3d 20 6e 75 6c 6c   (backup == null
19e60 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
19e70 68 72 6f 77 20 6e 65 77 20 41 72 67 75 6d 65 6e  hrow new Argumen
19e80 74 4e 75 6c 6c 45 78 63 65 70 74 69 6f 6e 28 22  tNullException("
19e90 62 61 63 6b 75 70 22 29 3b 0d 0a 0d 0a 20 20 20  backup");....   
19ea0 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b 75       SQLiteBacku
19eb0 70 48 61 6e 64 6c 65 20 68 61 6e 64 6c 65 20 3d  pHandle handle =
19ec0 20 62 61 63 6b 75 70 2e 5f 73 71 6c 69 74 65 5f   backup._sqlite_
19ed0 62 61 63 6b 75 70 3b 0d 0a 0d 0a 20 20 20 20 20  backup;....     
19ee0 20 20 20 69 66 20 28 68 61 6e 64 6c 65 20 3d 3d     if (handle ==
19ef0 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20 20 20   null)..        
19f00 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 49 6e      throw new In
19f10 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e 45 78  validOperationEx
19f20 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20 20 20  ception(..      
19f30 20 20 20 20 20 20 20 20 20 20 22 42 61 63 6b 75            "Backu
19f40 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61 6e 20  p object has an 
19f50 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65 2e 22  invalid handle."
19f60 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 49 6e  );....        In
19f70 74 50 74 72 20 68 61 6e 64 6c 65 50 74 72 20 3d  tPtr handlePtr =
19f80 20 68 61 6e 64 6c 65 3b 0d 0a 0d 0a 20 20 20 20   handle;....    
19f90 20 20 20 20 69 66 20 28 68 61 6e 64 6c 65 50 74      if (handlePt
19fa0 72 20 3d 3d 20 49 6e 74 50 74 72 2e 5a 65 72 6f  r == IntPtr.Zero
19fb0 29 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74  )..            t
19fc0 68 72 6f 77 20 6e 65 77 20 49 6e 76 61 6c 69 64  hrow new Invalid
19fd0 4f 70 65 72 61 74 69 6f 6e 45 78 63 65 70 74 69  OperationExcepti
19fe0 6f 6e 28 0d 0a 20 20 20 20 20 20 20 20 20 20 20  on(..           
19ff0 20 20 20 20 20 22 42 61 63 6b 75 70 20 6f 62 6a       "Backup obj
1a000 65 63 74 20 68 61 73 20 61 6e 20 69 6e 76 61 6c  ect has an inval
1a010 69 64 20 68 61 6e 64 6c 65 20 70 6f 69 6e 74 65  id handle pointe
1a020 72 2e 22 29 3b 0d 0a 0d 0a 20 20 20 20 20 20 20  r.");....       
1a030 20 72 65 74 75 72 6e 20 55 6e 73 61 66 65 4e 61   return UnsafeNa
1a040 74 69 76 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69  tiveMethods.sqli
1a050 74 65 33 5f 62 61 63 6b 75 70 5f 70 61 67 65 63  te3_backup_pagec
1a060 6f 75 6e 74 28 68 61 6e 64 6c 65 50 74 72 29 3b  ount(handlePtr);
1a070 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f  ..    }....    /
1a080 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a 20 20  // <summary>..  
1a090 20 20 2f 2f 2f 20 44 65 73 74 72 6f 79 73 20 74    /// Destroys t
1a0a0 68 65 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74  he backup object
1a0b0 2c 20 72 6f 6c 6c 69 6e 67 20 62 61 63 6b 20 61  , rolling back a
1a0c0 6e 79 20 62 61 63 6b 75 70 20 74 68 61 74 20 6d  ny backup that m
1a0d0 61 79 20 62 65 20 69 6e 0d 0a 20 20 20 20 2f 2f  ay be in..    //
1a0e0 2f 20 70 72 6f 67 65 73 73 2e 0d 0a 20 20 20 20  / progess...    
1a0f0 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d 0a  /// </summary>..
1a100 20 20 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e      /// <param n
1a110 61 6d 65 3d 22 62 61 63 6b 75 70 22 3e 54 68 65  ame="backup">The
1a120 20 62 61 63 6b 75 70 20 6f 62 6a 65 63 74 20 74   backup object t
1a130 6f 20 64 65 73 74 72 6f 79 2e 3c 2f 70 61 72 61  o destroy.</para
1a140 6d 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  m>..    internal
1a150 20 6f 76 65 72 72 69 64 65 20 76 6f 69 64 20 46   override void F
1a160 69 6e 69 73 68 42 61 63 6b 75 70 28 0d 0a 20 20  inishBackup(..  
1a170 20 20 20 20 20 20 53 51 4c 69 74 65 42 61 63 6b        SQLiteBack
1a180 75 70 20 62 61 63 6b 75 70 0d 0a 20 20 20 20 20  up backup..     
1a190 20 20 20 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20     )..    {..   
1a1a0 20 20 20 20 20 69 66 20 28 62 61 63 6b 75 70 20       if (backup 
1a1b0 3d 3d 20 6e 75 6c 6c 29 0d 0a 20 20 20 20 20 20  == null)..      
1a1c0 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1a1d0 41 72 67 75 6d 65 6e 74 4e 75 6c 6c 45 78 63 65  ArgumentNullExce
1a1e0 70 74 69 6f 6e 28 22 62 61 63 6b 75 70 22 29 3b  ption("backup");
1a1f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 53 51 4c 69  ....        SQLi
1a200 74 65 42 61 63 6b 75 70 48 61 6e 64 6c 65 20 68  teBackupHandle h
1a210 61 6e 64 6c 65 20 3d 20 62 61 63 6b 75 70 2e 5f  andle = backup._
1a220 73 71 6c 69 74 65 5f 62 61 63 6b 75 70 3b 0d 0a  sqlite_backup;..
1a230 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68 61  ..        if (ha
1a240 6e 64 6c 65 20 3d 3d 20 6e 75 6c 6c 29 0d 0a 20  ndle == null).. 
1a250 20 20 20 20 20 20 20 20 20 20 20 74 68 72 6f 77             throw
1a260 20 6e 65 77 20 49 6e 76 61 6c 69 64 4f 70 65 72   new InvalidOper
1a270 61 74 69 6f 6e 45 78 63 65 70 74 69 6f 6e 28 0d  ationException(.
1a280 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
1a290 20 22 42 61 63 6b 75 70 20 6f 62 6a 65 63 74 20   "Backup object 
1a2a0 68 61 73 20 61 6e 20 69 6e 76 61 6c 69 64 20 68  has an invalid h
1a2b0 61 6e 64 6c 65 2e 22 29 3b 0d 0a 0d 0a 20 20 20  andle.");....   
1a2c0 20 20 20 20 20 49 6e 74 50 74 72 20 68 61 6e 64       IntPtr hand
1a2d0 6c 65 50 74 72 20 3d 20 68 61 6e 64 6c 65 3b 0d  lePtr = handle;.
1a2e0 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28 68  ...        if (h
1a2f0 61 6e 64 6c 65 50 74 72 20 3d 3d 20 49 6e 74 50  andlePtr == IntP
1a300 74 72 2e 5a 65 72 6f 29 0d 0a 20 20 20 20 20 20  tr.Zero)..      
1a310 20 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20        throw new 
1a320 49 6e 76 61 6c 69 64 4f 70 65 72 61 74 69 6f 6e  InvalidOperation
1a330 45 78 63 65 70 74 69 6f 6e 28 0d 0a 20 20 20 20  Exception(..    
1a340 20 20 20 20 20 20 20 20 20 20 20 20 22 42 61 63              "Bac
1a350 6b 75 70 20 6f 62 6a 65 63 74 20 68 61 73 20 61  kup object has a
1a360 6e 20 69 6e 76 61 6c 69 64 20 68 61 6e 64 6c 65  n invalid handle
1a370 20 70 6f 69 6e 74 65 72 2e 22 29 3b 0d 0a 0d 0a   pointer.");....
1a380 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41 4e  #if !SQLITE_STAN
1a390 44 41 52 44 0d 0a 20 20 20 20 20 20 20 20 53 51  DARD..        SQ
1a3a0 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 6e 20  LiteErrorCode n 
1a3b0 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1a3c0 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 62 61  thods.sqlite3_ba
1a3d0 63 6b 75 70 5f 66 69 6e 69 73 68 5f 69 6e 74 65  ckup_finish_inte
1a3e0 72 6f 70 28 68 61 6e 64 6c 65 50 74 72 29 3b 0d  rop(handlePtr);.
1a3f0 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 20 20  .#else..        
1a400 53 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20  SQLiteErrorCode 
1a410 6e 20 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65  n = UnsafeNative
1a420 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1a430 62 61 63 6b 75 70 5f 66 69 6e 69 73 68 28 68 61  backup_finish(ha
1a440 6e 64 6c 65 50 74 72 29 3b 0d 0a 23 65 6e 64 69  ndlePtr);..#endi
1a450 66 0d 0a 20 20 20 20 20 20 20 20 68 61 6e 64 6c  f..        handl
1a460 65 2e 53 65 74 48 61 6e 64 6c 65 41 73 49 6e 76  e.SetHandleAsInv
1a470 61 6c 69 64 28 29 3b 0d 0a 0d 0a 23 69 66 20 43  alid();....#if C
1a480 4f 55 4e 54 5f 48 41 4e 44 4c 45 0d 0a 20 20 20  OUNT_HANDLE..   
1a490 20 20 20 20 20 69 66 20 28 28 6e 20 3d 3d 20 53       if ((n == S
1a4a0 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
1a4b0 6b 29 20 7c 7c 20 28 6e 20 3d 3d 20 62 61 63 6b  k) || (n == back
1a4c0 75 70 2e 5f 73 74 65 70 52 65 73 75 6c 74 29 29  up._stepResult))
1a4d0 20 68 61 6e 64 6c 65 2e 57 61 73 52 65 6c 65 61   handle.WasRelea
1a4e0 73 65 64 4f 6b 28 29 3b 0d 0a 23 65 6e 64 69 66  sedOk();..#endif
1a4f0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 69 66 20 28  ....        if (
1a500 28 6e 20 21 3d 20 53 51 4c 69 74 65 45 72 72 6f  (n != SQLiteErro
1a510 72 43 6f 64 65 2e 4f 6b 29 20 26 26 20 28 6e 20  rCode.Ok) && (n 
1a520 21 3d 20 62 61 63 6b 75 70 2e 5f 73 74 65 70 52  != backup._stepR
1a530 65 73 75 6c 74 29 29 0d 0a 20 20 20 20 20 20 20  esult))..       
1a540 20 20 20 20 20 74 68 72 6f 77 20 6e 65 77 20 53       throw new S
1a550 51 4c 69 74 65 45 78 63 65 70 74 69 6f 6e 28 6e  QLiteException(n
1a560 2c 20 47 65 74 4c 61 73 74 45 72 72 6f 72 28 29  , GetLastError()
1a570 29 3b 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20  );..    }....   
1a580 20 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f   ///////////////
1a590 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5a0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5b0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5c0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5d0 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f 2f  ////////////////
1a5e0 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c 73 75 6d  ....    /// <sum
1a5f0 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 44  mary>..    /// D
1a600 65 74 65 72 6d 69 6e 65 73 20 69 66 20 74 68 65  etermines if the
1a610 20 53 51 4c 69 74 65 20 63 6f 72 65 20 6c 69 62   SQLite core lib
1a620 72 61 72 79 20 68 61 73 20 62 65 65 6e 20 69 6e  rary has been in
1a630 69 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68  itialized for th
1a640 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75 72 72 65  e..    /// curre
1a650 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a 20 20 20  nt process...   
1a660 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72 79 3e 0d   /// </summary>.
1a670 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74 75 72 6e  .    /// <return
1a680 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41 20 62 6f  s>..    /// A bo
1a690 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74 69 6e 67  olean indicating
1a6a0 20 77 68 65 74 68 65 72 20 6f 72 20 6e 6f 74 20   whether or not 
1a6b0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1a6c0 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
1a6d0 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69 74 69 61  ..    /// initia
1a6e0 6c 69 7a 65 64 20 66 6f 72 20 74 68 65 20 63 75  lized for the cu
1a6f0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
1a700 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74 75 72 6e      /// </return
1a710 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c  s>..    internal
1a720 20 6f 76 65 72 72 69 64 65 20 62 6f 6f 6c 20 49   override bool I
1a730 73 49 6e 69 74 69 61 6c 69 7a 65 64 28 29 0d 0a  sInitialized()..
1a740 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 72      {..        r
1a750 65 74 75 72 6e 20 53 74 61 74 69 63 49 73 49 6e  eturn StaticIsIn
1a760 69 74 69 61 6c 69 7a 65 64 28 29 3b 0d 0a 20 20  itialized();..  
1a770 20 20 7d 0d 0a 0d 0a 20 20 20 20 2f 2f 2f 20 3c    }....    /// <
1a780 73 75 6d 6d 61 72 79 3e 0d 0a 20 20 20 20 2f 2f  summary>..    //
1a790 2f 20 44 65 74 65 72 6d 69 6e 65 73 20 69 66 20  / Determines if 
1a7a0 74 68 65 20 53 51 4c 69 74 65 20 63 6f 72 65 20  the SQLite core 
1a7b0 6c 69 62 72 61 72 79 20 68 61 73 20 62 65 65 6e  library has been
1a7c0 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 66 6f 72   initialized for
1a7d0 20 74 68 65 0d 0a 20 20 20 20 2f 2f 2f 20 63 75   the..    /// cu
1a7e0 72 72 65 6e 74 20 70 72 6f 63 65 73 73 2e 0d 0a  rrent process...
1a7f0 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1a800 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  y>..    /// <ret
1a810 75 72 6e 73 3e 0d 0a 20 20 20 20 2f 2f 2f 20 41  urns>..    /// A
1a820 20 62 6f 6f 6c 65 61 6e 20 69 6e 64 69 63 61 74   boolean indicat
1a830 69 6e 67 20 77 68 65 74 68 65 72 20 6f 72 20 6e  ing whether or n
1a840 6f 74 20 74 68 65 20 53 51 4c 69 74 65 20 63 6f  ot the SQLite co
1a850 72 65 20 6c 69 62 72 61 72 79 20 68 61 73 20 62  re library has b
1a860 65 65 6e 0d 0a 20 20 20 20 2f 2f 2f 20 69 6e 69  een..    /// ini
1a870 74 69 61 6c 69 7a 65 64 20 66 6f 72 20 74 68 65  tialized for the
1a880 20 63 75 72 72 65 6e 74 20 70 72 6f 63 65 73 73   current process
1a890 2e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 2f 72 65 74  ...    /// </ret
1a8a0 75 72 6e 73 3e 0d 0a 20 20 20 20 69 6e 74 65 72  urns>..    inter
1a8b0 6e 61 6c 20 73 74 61 74 69 63 20 62 6f 6f 6c 20  nal static bool 
1a8c0 53 74 61 74 69 63 49 73 49 6e 69 74 69 61 6c 69  StaticIsInitiali
1a8d0 7a 65 64 28 29 0d 0a 20 20 20 20 7b 0d 0a 20 20  zed()..    {..  
1a8e0 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20 20 20 20        //..      
1a8f0 20 20 2f 2f 20 42 55 47 46 49 58 3a 20 50 72 65    // BUGFIX: Pre
1a900 76 65 6e 74 20 72 61 63 65 73 20 77 69 74 68 20  vent races with 
1a910 6f 74 68 65 72 20 74 68 72 65 61 64 73 20 66 6f  other threads fo
1a920 72 20 74 68 69 73 20 65 6e 74 69 72 65 20 62 6c  r this entire bl
1a930 6f 63 6b 2c 20 64 75 65 0d 0a 20 20 20 20 20 20  ock, due..      
1a940 20 20 2f 2f 20 20 20 20 20 20 20 20 20 74 6f 20    //         to 
1a950 74 68 65 20 74 72 79 2f 66 69 6e 61 6c 6c 79 20  the try/finally 
1a960 73 65 6d 61 6e 74 69 63 73 2e 20 20 53 65 65 20  semantics.  See 
1a970 74 69 63 6b 65 74 20 5b 37 32 39 30 35 63 39 61  ticket [72905c9a
1a980 37 37 5d 2e 0d 0a 20 20 20 20 20 20 20 20 2f 2f  77]...        //
1a990 0d 0a 20 20 20 20 20 20 20 20 6c 6f 63 6b 20 28  ..        lock (
1a9a0 73 79 6e 63 52 6f 6f 74 29 0d 0a 20 20 20 20 20  syncRoot)..     
1a9b0 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20 20     {..          
1a9c0 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1a9d0 20 20 2f 2f 20 4e 4f 54 45 3a 20 53 61 76 65 20    // NOTE: Save 
1a9e0 74 68 65 20 73 74 61 74 65 20 6f 66 20 74 68 65  the state of the
1a9f0 20 6c 6f 67 67 69 6e 67 20 63 6c 61 73 73 20 61   logging class a
1aa00 6e 64 20 74 68 65 6e 20 72 65 73 74 6f 72 65 20  nd then restore 
1aa10 69 74 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  it..            
1aa20 2f 2f 20 20 20 20 20 20 20 61 66 74 65 72 20 77  //       after w
1aa30 65 20 61 72 65 20 64 6f 6e 65 20 74 6f 20 61 76  e are done to av
1aa40 6f 69 64 20 6c 6f 67 67 69 6e 67 20 74 6f 6f 20  oid logging too 
1aa50 6d 61 6e 79 20 66 61 6c 73 65 20 65 72 72 6f 72  many false error
1aa60 73 2e 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  s...            
1aa70 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  //..            
1aa80 62 6f 6f 6c 20 73 61 76 65 64 45 6e 61 62 6c 65  bool savedEnable
1aa90 64 20 3d 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e  d = SQLiteLog.En
1aaa0 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20 20 20  abled;..        
1aab0 20 20 20 20 53 51 4c 69 74 65 4c 6f 67 2e 45 6e      SQLiteLog.En
1aac0 61 62 6c 65 64 20 3d 20 66 61 6c 73 65 3b 0d 0a  abled = false;..
1aad0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 74 72  ..            tr
1aae0 79 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 7b  y..            {
1aaf0 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ..              
1ab00 20 20 2f 2f 0d 0a 20 20 20 20 20 20 20 20 20 20    //..          
1ab10 20 20 20 20 20 20 2f 2f 20 4e 4f 54 45 3a 20 54        // NOTE: T
1ab20 68 69 73 20 6d 65 74 68 6f 64 20 5b 61 62 5d 75  his method [ab]u
1ab30 73 65 73 20 74 68 65 20 66 61 63 74 20 74 68 61  ses the fact tha
1ab40 74 20 53 51 4c 69 74 65 20 77 69 6c 6c 20 61 6c  t SQLite will al
1ab50 77 61 79 73 0d 0a 20 20 20 20 20 20 20 20 20 20  ways..          
1ab60 20 20 20 20 20 20 2f 2f 20 20 20 20 20 20 20 72        //       r
1ab70 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
1ab80 4f 52 20 66 6f 72 20 61 6e 79 20 75 6e 6b 6e 6f  OR for any unkno
1ab90 77 6e 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e  wn configuration
1aba0 20 6f 70 74 69 6f 6e 0d 0a 20 20 20 20 20 20 20   option..       
1abb0 20 20 20 20 20 20 20 20 20 2f 2f 20 20 20 20 20           //     
1abc0 20 20 2a 75 6e 6c 65 73 73 2a 20 74 68 65 20 53    *unless* the S
1abd0 51 4c 69 74 65 20 6c 69 62 72 61 72 79 20 68 61  QLite library ha
1abe0 73 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  s already been i
1abf0 6e 69 74 69 61 6c 69 7a 65 64 2e 0d 0a 20 20 20  nitialized...   
1ac00 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2f 20               // 
1ac10 20 20 20 20 20 20 49 6e 20 74 68 61 74 20 63 61        In that ca
1ac20 73 65 20 69 74 20 77 69 6c 6c 20 61 6c 77 61 79  se it will alway
1ac30 73 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  s return SQLITE_
1ac40 4d 49 53 55 53 45 2e 0d 0a 20 20 20 20 20 20 20  MISUSE...       
1ac50 20 20 20 20 20 20 20 20 20 2f 2f 0d 0a 20 20 20           //..   
1ac60 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
1ac70 69 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20  iteErrorCode rc 
1ac80 3d 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65  = UnsafeNativeMe
1ac90 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 6f  thods.sqlite3_co
1aca0 6e 66 69 67 5f 6e 6f 6e 65 28 0d 0a 20 20 20 20  nfig_none(..    
1acb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
1acc0 53 51 4c 69 74 65 43 6f 6e 66 69 67 4f 70 73 45  SQLiteConfigOpsE
1acd0 6e 75 6d 2e 53 51 4c 49 54 45 5f 43 4f 4e 46 49  num.SQLITE_CONFI
1ace0 47 5f 4e 4f 4e 45 29 3b 0d 0a 0d 0a 20 20 20 20  G_NONE);....    
1acf0 20 20 20 20 20 20 20 20 20 20 20 20 72 65 74 75              retu
1ad00 72 6e 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  rn (rc == SQLite
1ad10 45 72 72 6f 72 43 6f 64 65 2e 4d 69 73 75 73 65  ErrorCode.Misuse
1ad20 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20  );..            
1ad30 7d 0d 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  }..            f
1ad40 69 6e 61 6c 6c 79 0d 0a 20 20 20 20 20 20 20 20  inally..        
1ad50 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 20 20 20      {..         
1ad60 20 20 20 20 20 20 20 53 51 4c 69 74 65 4c 6f 67         SQLiteLog
1ad70 2e 45 6e 61 62 6c 65 64 20 3d 20 73 61 76 65 64  .Enabled = saved
1ad80 45 6e 61 62 6c 65 64 3b 0d 0a 20 20 20 20 20 20  Enabled;..      
1ad90 20 20 20 20 20 20 7d 0d 0a 20 20 20 20 20 20 20        }..       
1ada0 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d 0a 20 20 20   }..    }....   
1adb0 20 2f 2f 2f 20 3c 73 75 6d 6d 61 72 79 3e 0d 0a   /// <summary>..
1adc0 20 20 20 20 2f 2f 2f 20 48 65 6c 70 65 72 20 66      /// Helper f
1add0 75 6e 63 74 69 6f 6e 20 74 6f 20 72 65 74 72 69  unction to retri
1ade0 65 76 65 20 61 20 63 6f 6c 75 6d 6e 20 6f 66 20  eve a column of 
1adf0 64 61 74 61 20 66 72 6f 6d 20 61 6e 20 61 63 74  data from an act
1ae00 69 76 65 20 73 74 61 74 65 6d 65 6e 74 2e 0d 0a  ive statement...
1ae10 20 20 20 20 2f 2f 2f 20 3c 2f 73 75 6d 6d 61 72      /// </summar
1ae20 79 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 70 61 72  y>..    /// <par
1ae30 61 6d 20 6e 61 6d 65 3d 22 73 74 6d 74 22 3e 54  am name="stmt">T
1ae40 68 65 20 73 74 61 74 65 6d 65 6e 74 20 62 65 69  he statement bei
1ae50 6e 67 20 73 74 65 70 28 29 27 64 20 74 68 72 6f  ng step()'d thro
1ae60 75 67 68 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20  ugh</param>..   
1ae70 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65   /// <param name
1ae80 3d 22 66 6c 61 67 73 22 3e 54 68 65 20 66 6c 61  ="flags">The fla
1ae90 67 73 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  gs associated wi
1aea0 74 68 20 74 68 65 20 63 6f 6e 6e 65 63 74 69 6f  th the connectio
1aeb0 6e 2e 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20 20 20  n.</param>..    
1aec0 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d 65 3d  /// <param name=
1aed0 22 69 6e 64 65 78 22 3e 54 68 65 20 63 6f 6c 75  "index">The colu
1aee0 6d 6e 20 69 6e 64 65 78 20 74 6f 20 72 65 74 72  mn index to retr
1aef0 69 65 76 65 3c 2f 70 61 72 61 6d 3e 0d 0a 20 20  ieve</param>..  
1af00 20 20 2f 2f 2f 20 3c 70 61 72 61 6d 20 6e 61 6d    /// <param nam
1af10 65 3d 22 74 79 70 22 3e 54 68 65 20 74 79 70 65  e="typ">The type
1af20 20 6f 66 20 64 61 74 61 20 63 6f 6e 74 61 69 6e   of data contain
1af30 65 64 20 69 6e 20 74 68 65 20 63 6f 6c 75 6d 6e  ed in the column
1af40 2e 20 20 49 66 20 55 6e 69 6e 69 74 69 61 6c 69  .  If Uninitiali
1af50 7a 65 64 2c 20 74 68 69 73 20 66 75 6e 63 74 69  zed, this functi
1af60 6f 6e 20 77 69 6c 6c 20 72 65 74 72 69 65 76 65  on will retrieve
1af70 20 74 68 65 20 64 61 74 61 74 79 70 65 20 69 6e   the datatype in
1af80 66 6f 72 6d 61 74 69 6f 6e 2e 3c 2f 70 61 72 61  formation.</para
1af90 6d 3e 0d 0a 20 20 20 20 2f 2f 2f 20 3c 72 65 74  m>..    /// <ret
1afa0 75 72 6e 73 3e 52 65 74 75 72 6e 73 20 74 68 65  urns>Returns the
1afb0 20 64 61 74 61 20 69 6e 20 74 68 65 20 63 6f 6c   data in the col
1afc0 75 6d 6e 3c 2f 72 65 74 75 72 6e 73 3e 0d 0a 20  umn</returns>.. 
1afd0 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76 65 72     internal over
1afe0 72 69 64 65 20 6f 62 6a 65 63 74 20 47 65 74 56  ride object GetV
1aff0 61 6c 75 65 28 53 51 4c 69 74 65 53 74 61 74 65  alue(SQLiteState
1b000 6d 65 6e 74 20 73 74 6d 74 2c 20 53 51 4c 69 74  ment stmt, SQLit
1b010 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61 67 73  eConnectionFlags
1b020 20 66 6c 61 67 73 2c 20 69 6e 74 20 69 6e 64 65   flags, int inde
1b030 78 2c 20 53 51 4c 69 74 65 54 79 70 65 20 74 79  x, SQLiteType ty
1b040 70 29 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20  p)..    {..     
1b050 20 54 79 70 65 41 66 66 69 6e 69 74 79 20 61 66   TypeAffinity af
1b060 66 20 3d 20 74 79 70 2e 41 66 66 69 6e 69 74 79  f = typ.Affinity
1b070 3b 0d 0a 20 20 20 20 20 20 69 66 20 28 61 66 66  ;..      if (aff
1b080 20 3d 3d 20 54 79 70 65 41 66 66 69 6e 69 74 79   == TypeAffinity
1b090 2e 4e 75 6c 6c 29 20 72 65 74 75 72 6e 20 44 42  .Null) return DB
1b0a0 4e 75 6c 6c 2e 56 61 6c 75 65 3b 0d 0a 20 20 20  Null.Value;..   
1b0b0 20 20 20 54 79 70 65 20 74 20 3d 20 6e 75 6c 6c     Type t = null
1b0c0 3b 0d 0a 0d 0a 20 20 20 20 20 20 69 66 20 28 74  ;....      if (t
1b0d0 79 70 2e 54 79 70 65 20 21 3d 20 44 62 54 79 70  yp.Type != DbTyp
1b0e0 65 2e 4f 62 6a 65 63 74 29 0d 0a 20 20 20 20 20  e.Object)..     
1b0f0 20 7b 0d 0a 20 20 20 20 20 20 20 20 74 20 3d 20   {..        t = 
1b100 53 51 4c 69 74 65 43 6f 6e 76 65 72 74 2e 53 51  SQLiteConvert.SQ
1b110 4c 69 74 65 54 79 70 65 54 6f 54 79 70 65 28 74  LiteTypeToType(t
1b120 79 70 29 3b 0d 0a 20 20 20 20 20 20 20 20 61 66  yp);..        af
1b130 66 20 3d 20 54 79 70 65 54 6f 41 66 66 69 6e 69  f = TypeToAffini
1b140 74 79 28 74 2c 20 66 6c 61 67 73 29 3b 0d 0a 20  ty(t, flags);.. 
1b150 20 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 20 20       }....      
1b160 69 66 20 28 28 66 6c 61 67 73 20 26 20 53 51 4c  if ((flags & SQL
1b170 69 74 65 43 6f 6e 6e 65 63 74 69 6f 6e 46 6c 61  iteConnectionFla
1b180 67 73 2e 47 65 74 41 6c 6c 41 73 54 65 78 74 29  gs.GetAllAsText)
1b190 20 3d 3d 20 53 51 4c 69 74 65 43 6f 6e 6e 65 63   == SQLiteConnec
1b1a0 74 69 6f 6e 46 6c 61 67 73 2e 47 65 74 41 6c 6c  tionFlags.GetAll
1b1b0 41 73 54 65 78 74 29 0d 0a 20 20 20 20 20 20 20  AsText)..       
1b1c0 20 20 20 72 65 74 75 72 6e 20 47 65 74 54 65 78     return GetTex
1b1d0 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  t(stmt, index);.
1b1e0 0a 0d 0a 20 20 20 20 20 20 73 77 69 74 63 68 20  ...      switch 
1b1f0 28 61 66 66 29 0d 0a 20 20 20 20 20 20 7b 0d 0a  (aff)..      {..
1b200 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
1b210 65 41 66 66 69 6e 69 74 79 2e 42 6c 6f 62 3a 0d  eAffinity.Blob:.
1b220 0a 20 20 20 20 20 20 20 20 20 20 69 66 20 28 74  .          if (t
1b230 79 70 2e 54 79 70 65 20 3d 3d 20 44 62 54 79 70  yp.Type == DbTyp
1b240 65 2e 47 75 69 64 20 26 26 20 74 79 70 2e 41 66  e.Guid && typ.Af
1b250 66 69 6e 69 74 79 20 3d 3d 20 54 79 70 65 41 66  finity == TypeAf
1b260 66 69 6e 69 74 79 2e 54 65 78 74 29 0d 0a 20 20  finity.Text)..  
1b270 20 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e            return
1b280 20 6e 65 77 20 47 75 69 64 28 47 65 74 54 65 78   new Guid(GetTex
1b290 74 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 29 3b  t(stmt, index));
1b2a0 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 6e  ....          in
1b2b0 74 20 6e 20 3d 20 28 69 6e 74 29 47 65 74 42 79  t n = (int)GetBy
1b2c0 74 65 73 28 73 74 6d 74 2c 20 69 6e 64 65 78 2c  tes(stmt, index,
1b2d0 20 30 2c 20 6e 75 6c 6c 2c 20 30 2c 20 30 29 3b   0, null, 0, 0);
1b2e0 0d 0a 20 20 20 20 20 20 20 20 20 20 62 79 74 65  ..          byte
1b2f0 5b 5d 20 62 20 3d 20 6e 65 77 20 62 79 74 65 5b  [] b = new byte[
1b300 6e 5d 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 47  n];..          G
1b310 65 74 42 79 74 65 73 28 73 74 6d 74 2c 20 69 6e  etBytes(stmt, in
1b320 64 65 78 2c 20 30 2c 20 62 2c 20 30 2c 20 6e 29  dex, 0, b, 0, n)
1b330 3b 0d 0a 0d 0a 20 20 20 20 20 20 20 20 20 20 69  ;....          i
1b340 66 20 28 74 79 70 2e 54 79 70 65 20 3d 3d 20 44  f (typ.Type == D
1b350 62 54 79 70 65 2e 47 75 69 64 20 26 26 20 6e 20  bType.Guid && n 
1b360 3d 3d 20 31 36 29 0d 0a 20 20 20 20 20 20 20 20  == 16)..        
1b370 20 20 20 20 72 65 74 75 72 6e 20 6e 65 77 20 47      return new G
1b380 75 69 64 28 62 29 3b 0d 0a 0d 0a 20 20 20 20 20  uid(b);....     
1b390 20 20 20 20 20 72 65 74 75 72 6e 20 62 3b 0d 0a       return b;..
1b3a0 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79 70          case Typ
1b3b0 65 41 66 66 69 6e 69 74 79 2e 44 61 74 65 54 69  eAffinity.DateTi
1b3c0 6d 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 72  me:..          r
1b3d0 65 74 75 72 6e 20 47 65 74 44 61 74 65 54 69 6d  eturn GetDateTim
1b3e0 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d  e(stmt, index);.
1b3f0 0a 20 20 20 20 20 20 20 20 63 61 73 65 20 54 79  .        case Ty
1b400 70 65 41 66 66 69 6e 69 74 79 2e 44 6f 75 62 6c  peAffinity.Doubl
1b410 65 3a 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  e:..          if
1b420 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72 65 74   (t == null) ret
1b430 75 72 6e 20 47 65 74 44 6f 75 62 6c 65 28 73 74  urn GetDouble(st
1b440 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20  mt, index);..   
1b450 20 20 20 20 20 20 20 72 65 74 75 72 6e 20 43 6f         return Co
1b460 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79 70 65  nvert.ChangeType
1b470 28 47 65 74 44 6f 75 62 6c 65 28 73 74 6d 74 2c  (GetDouble(stmt,
1b480 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c 6c   index), t, null
1b490 29 3b 0d 0a 20 20 20 20 20 20 20 20 63 61 73 65  );..        case
1b4a0 20 54 79 70 65 41 66 66 69 6e 69 74 79 2e 49 6e   TypeAffinity.In
1b4b0 74 36 34 3a 0d 0a 20 20 20 20 20 20 20 20 20 20  t64:..          
1b4c0 69 66 20 28 74 20 3d 3d 20 6e 75 6c 6c 29 20 72  if (t == null) r
1b4d0 65 74 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73  eturn GetInt64(s
1b4e0 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20  tmt, index);..  
1b4f0 20 20 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d          if (t ==
1b500 20 74 79 70 65 6f 66 28 42 6f 6f 6c 65 61 6e 29   typeof(Boolean)
1b510 29 20 72 65 74 75 72 6e 20 47 65 74 42 6f 6f 6c  ) return GetBool
1b520 65 61 6e 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  ean(stmt, index)
1b530 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
1b540 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 53 42 79  (t == typeof(SBy
1b550 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 53  te)) return GetS
1b560 42 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78  Byte(stmt, index
1b570 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
1b580 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 42 79   (t == typeof(By
1b590 74 65 29 29 20 72 65 74 75 72 6e 20 47 65 74 42  te)) return GetB
1b5a0 79 74 65 28 73 74 6d 74 2c 20 69 6e 64 65 78 29  yte(stmt, index)
1b5b0 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66 20  ;..          if 
1b5c0 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 49 6e 74  (t == typeof(Int
1b5d0 31 36 29 29 20 72 65 74 75 72 6e 20 47 65 74 49  16)) return GetI
1b5e0 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e 64 65 78  nt16(stmt, index
1b5f0 29 3b 0d 0a 20 20 20 20 20 20 20 20 20 20 69 66  );..          if
1b600 20 28 74 20 3d 3d 20 74 79 70 65 6f 66 28 55 49   (t == typeof(UI
1b610 6e 74 31 36 29 29 20 72 65 74 75 72 6e 20 47 65  nt16)) return Ge
1b620 74 55 49 6e 74 31 36 28 73 74 6d 74 2c 20 69 6e  tUInt16(stmt, in
1b630 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20 20  dex);..         
1b640 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f 66   if (t == typeof
1b650 28 49 6e 74 33 32 29 29 20 72 65 74 75 72 6e 20  (Int32)) return 
1b660 47 65 74 49 6e 74 33 32 28 73 74 6d 74 2c 20 69  GetInt32(stmt, i
1b670 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20 20 20 20  ndex);..        
1b680 20 20 69 66 20 28 74 20 3d 3d 20 74 79 70 65 6f    if (t == typeo
1b690 66 28 55 49 6e 74 33 32 29 29 20 72 65 74 75 72  f(UInt32)) retur
1b6a0 6e 20 47 65 74 55 49 6e 74 33 32 28 73 74 6d 74  n GetUInt32(stmt
1b6b0 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20 20  , index);..     
1b6c0 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74 79       if (t == ty
1b6d0 70 65 6f 66 28 49 6e 74 36 34 29 29 20 72 65 74  peof(Int64)) ret
1b6e0 75 72 6e 20 47 65 74 49 6e 74 36 34 28 73 74 6d  urn GetInt64(stm
1b6f0 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20 20 20 20  t, index);..    
1b700 20 20 20 20 20 20 69 66 20 28 74 20 3d 3d 20 74        if (t == t
1b710 79 70 65 6f 66 28 55 49 6e 74 36 34 29 29 20 72  ypeof(UInt64)) r
1b720 65 74 75 72 6e 20 47 65 74 55 49 6e 74 36 34 28  eturn GetUInt64(
1b730 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1b740 20 20 20 20 20 20 20 20 20 72 65 74 75 72 6e 20           return 
1b750 43 6f 6e 76 65 72 74 2e 43 68 61 6e 67 65 54 79  Convert.ChangeTy
1b760 70 65 28 47 65 74 49 6e 74 36 34 28 73 74 6d 74  pe(GetInt64(stmt
1b770 2c 20 69 6e 64 65 78 29 2c 20 74 2c 20 6e 75 6c  , index), t, nul
1b780 6c 29 3b 0d 0a 20 20 20 20 20 20 20 20 64 65 66  l);..        def
1b790 61 75 6c 74 3a 0d 0a 20 20 20 20 20 20 20 20 20  ault:..         
1b7a0 20 72 65 74 75 72 6e 20 47 65 74 54 65 78 74 28   return GetText(
1b7b0 73 74 6d 74 2c 20 69 6e 64 65 78 29 3b 0d 0a 20  stmt, index);.. 
1b7c0 20 20 20 20 20 7d 0d 0a 20 20 20 20 7d 0d 0a 0d       }..    }...
1b7d0 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f 76  .    internal ov
1b7e0 65 72 72 69 64 65 20 69 6e 74 20 47 65 74 43 75  erride int GetCu
1b7f0 72 73 6f 72 46 6f 72 54 61 62 6c 65 28 53 51 4c  rsorForTable(SQL
1b800 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73 74 6d  iteStatement stm
1b810 74 2c 20 69 6e 74 20 64 62 2c 20 69 6e 74 20 72  t, int db, int r
1b820 6f 6f 74 50 61 67 65 29 0d 0a 20 20 20 20 7b 0d  ootPage)..    {.
1b830 0a 23 69 66 20 21 53 51 4c 49 54 45 5f 53 54 41  .#if !SQLITE_STA
1b840 4e 44 41 52 44 0d 0a 20 20 20 20 20 20 72 65 74  NDARD..      ret
1b850 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76 65  urn UnsafeNative
1b860 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f  Methods.sqlite3_
1b870 74 61 62 6c 65 5f 63 75 72 73 6f 72 5f 69 6e 74  table_cursor_int
1b880 65 72 6f 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74  erop(stmt._sqlit
1b890 65 5f 73 74 6d 74 2c 20 64 62 2c 20 72 6f 6f 74  e_stmt, db, root
1b8a0 50 61 67 65 29 3b 0d 0a 23 65 6c 73 65 0d 0a 20  Page);..#else.. 
1b8b0 20 20 20 20 20 72 65 74 75 72 6e 20 2d 31 3b 0d       return -1;.
1b8c0 0a 23 65 6e 64 69 66 0d 0a 20 20 20 20 7d 0d 0a  .#endif..    }..
1b8d0 0d 0a 20 20 20 20 69 6e 74 65 72 6e 61 6c 20 6f  ..    internal o
1b8e0 76 65 72 72 69 64 65 20 6c 6f 6e 67 20 47 65 74  verride long Get
1b8f0 52 6f 77 49 64 46 6f 72 43 75 72 73 6f 72 28 53  RowIdForCursor(S
1b900 51 4c 69 74 65 53 74 61 74 65 6d 65 6e 74 20 73  QLiteStatement s
1b910 74 6d 74 2c 20 69 6e 74 20 63 75 72 73 6f 72 29  tmt, int cursor)
1b920 0d 0a 20 20 20 20 7b 0d 0a 23 69 66 20 21 53 51  ..    {..#if !SQ
1b930 4c 49 54 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20  LITE_STANDARD.. 
1b940 20 20 20 20 20 6c 6f 6e 67 20 72 6f 77 69 64 20       long rowid 
1b950 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
1b960 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 20 3d  teErrorCode rc =
1b970 20 55 6e 73 61 66 65 4e 61 74 69 76 65 4d 65 74   UnsafeNativeMet
1b980 68 6f 64 73 2e 73 71 6c 69 74 65 33 5f 63 75 72  hods.sqlite3_cur
1b990 73 6f 72 5f 72 6f 77 69 64 5f 69 6e 74 65 72 6f  sor_rowid_intero
1b9a0 70 28 73 74 6d 74 2e 5f 73 71 6c 69 74 65 5f 73  p(stmt._sqlite_s
1b9b0 74 6d 74 2c 20 63 75 72 73 6f 72 2c 20 72 65 66  tmt, cursor, ref
1b9c0 20 72 6f 77 69 64 29 3b 0d 0a 20 20 20 20 20 20   rowid);..      
1b9d0 69 66 20 28 72 63 20 3d 3d 20 53 51 4c 69 74 65  if (rc == SQLite
1b9e0 45 72 72 6f 72 43 6f 64 65 2e 4f 6b 29 20 72 65  ErrorCode.Ok) re
1b9f0 74 75 72 6e 20 72 6f 77 69 64 3b 0d 0a 0d 0a 20  turn rowid;.... 
1ba00 20 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0d 0a       return 0;..
1ba10 23 65 6c 73 65 0d 0a 20 20 20 20 20 20 72 65 74  #else..      ret
1ba20 75 72 6e 20 30 3b 0d 0a 23 65 6e 64 69 66 0d 0a  urn 0;..#endif..
1ba30 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1ba40 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 76  ernal override v
1ba50 6f 69 64 20 47 65 74 49 6e 64 65 78 43 6f 6c 75  oid GetIndexColu
1ba60 6d 6e 45 78 74 65 6e 64 65 64 49 6e 66 6f 28 73  mnExtendedInfo(s
1ba70 74 72 69 6e 67 20 64 61 74 61 62 61 73 65 2c 20  tring database, 
1ba80 73 74 72 69 6e 67 20 69 6e 64 65 78 2c 20 73 74  string index, st
1ba90 72 69 6e 67 20 63 6f 6c 75 6d 6e 2c 20 72 65 66  ring column, ref
1baa0 20 69 6e 74 20 73 6f 72 74 4d 6f 64 65 2c 20 72   int sortMode, r
1bab0 65 66 20 69 6e 74 20 6f 6e 45 72 72 6f 72 2c 20  ef int onError, 
1bac0 72 65 66 20 73 74 72 69 6e 67 20 63 6f 6c 6c 61  ref string colla
1bad0 74 69 6f 6e 53 65 71 75 65 6e 63 65 29 0d 0a 20  tionSequence).. 
1bae0 20 20 20 7b 0d 0a 23 69 66 20 21 53 51 4c 49 54     {..#if !SQLIT
1baf0 45 5f 53 54 41 4e 44 41 52 44 0d 0a 20 20 20 20  E_STANDARD..    
1bb00 20 20 49 6e 74 50 74 72 20 63 6f 6c 6c 20 3d 20    IntPtr coll = 
1bb10 49 6e 74 50 74 72 2e 5a 65 72 6f 3b 0d 0a 20 20  IntPtr.Zero;..  
1bb20 20 20 20 20 69 6e 74 20 63 6f 6c 6c 6c 65 6e 20      int colllen 
1bb30 3d 20 30 3b 0d 0a 20 20 20 20 20 20 53 51 4c 69  = 0;..      SQLi
1bb40 74 65 45 72 72 6f 72 43 6f 64 65 20 72 63 3b 0d  teErrorCode rc;.
1bb50 0a 0d 0a 20 20 20 20 20 20 72 63 20 3d 20 55 6e  ...      rc = Un
1bb60 73 61 66 65 4e 61 74 69 76 65 4d 65 74 68 6f 64  safeNativeMethod
1bb70 73 2e 73 71 6c 69 74 65 33 5f 69 6e 64 65 78 5f  s.sqlite3_index_
1bb80 63 6f 6c 75 6d 6e 5f 69 6e 66 6f 5f 69 6e 74 65  column_info_inte
1bb90 72 6f 70 28 5f 73 71 6c 2c 20 54 6f 55 54 46 38  rop(_sql, ToUTF8
1bba0 28 64 61 74 61 62 61 73 65 29 2c 20 54 6f 55 54  (database), ToUT
1bbb0 46 38 28 69 6e 64 65 78 29 2c 20 54 6f 55 54 46  F8(index), ToUTF
1bbc0 38 28 63 6f 6c 75 6d 6e 29 2c 20 72 65 66 20 73  8(column), ref s
1bbd0 6f 72 74 4d 6f 64 65 2c 20 72 65 66 20 6f 6e 45  ortMode, ref onE
1bbe0 72 72 6f 72 2c 20 72 65 66 20 63 6f 6c 6c 2c 20  rror, ref coll, 
1bbf0 72 65 66 20 63 6f 6c 6c 6c 65 6e 29 3b 0d 0a 20  ref colllen);.. 
1bc00 20 20 20 20 20 69 66 20 28 72 63 20 21 3d 20 53       if (rc != S
1bc10 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 2e 4f  QLiteErrorCode.O
1bc20 6b 29 20 74 68 72 6f 77 20 6e 65 77 20 53 51 4c  k) throw new SQL
1bc30 69 74 65 45 78 63 65 70 74 69 6f 6e 28 72 63 2c  iteException(rc,
1bc40 20 6e 75 6c 6c 29 3b 0d 0a 0d 0a 20 20 20 20 20   null);....     
1bc50 20 63 6f 6c 6c 61 74 69 6f 6e 53 65 71 75 65 6e   collationSequen
1bc60 63 65 20 3d 20 55 54 46 38 54 6f 53 74 72 69 6e  ce = UTF8ToStrin
1bc70 67 28 63 6f 6c 6c 2c 20 63 6f 6c 6c 6c 65 6e 29  g(coll, colllen)
1bc80 3b 0d 0a 23 65 6c 73 65 0d 0a 20 20 20 20 20 20  ;..#else..      
1bc90 73 6f 72 74 4d 6f 64 65 20 3d 20 30 3b 0d 0a 20  sortMode = 0;.. 
1bca0 20 20 20 20 20 6f 6e 45 72 72 6f 72 20 3d 20 32       onError = 2
1bcb0 3b 0d 0a 20 20 20 20 20 20 63 6f 6c 6c 61 74 69  ;..      collati
1bcc0 6f 6e 53 65 71 75 65 6e 63 65 20 3d 20 22 42 49  onSequence = "BI
1bcd0 4e 41 52 59 22 3b 0d 0a 23 65 6e 64 69 66 0d 0a  NARY";..#endif..
1bce0 20 20 20 20 7d 0d 0a 0d 0a 20 20 20 20 69 6e 74      }....    int
1bcf0 65 72 6e 61 6c 20 6f 76 65 72 72 69 64 65 20 53  ernal override S
1bd00 51 4c 69 74 65 45 72 72 6f 72 43 6f 64 65 20 46  QLiteErrorCode F
1bd10 69 6c 65 43 6f 6e 74 72 6f 6c 28 73 74 72 69 6e  ileControl(strin
1bd20 67 20 7a 44 62 4e 61 6d 65 2c 20 69 6e 74 20 6f  g zDbName, int o
1bd30 70 2c 20 49 6e 74 50 74 72 20 70 41 72 67 29 0d  p, IntPtr pArg).
1bd40 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 72 65  .    {..      re
1bd50 74 75 72 6e 20 55 6e 73 61 66 65 4e 61 74 69 76  turn UnsafeNativ
1bd60 65 4d 65 74 68 6f 64 73 2e 73 71 6c 69 74 65 33  eMethods.sqlite3
1bd70 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 5f 73  _file_control(_s
1bd80 71 6c 2c 20 28 7a 44 62 4e 61 6d 65 20 21 3d 20  ql, (zDbName != 
1bd90 6e 75 6c 6c 29 20 3f 20 54 6f 55 54 46 38 28 7a  null) ? ToUTF8(z
1bda0 44 62 4e 61 6d 65 29 20 3a 20 6e 75 6c 6c 2c 20  DbName) : null, 
1bdb0 6f 70 2c 20 70 41 72 67 29 3b 0d 0a 20 20 20 20  op, pArg);..    
1bdc0 7d 0d 0a 20 20 7d 0d 0a 7d 0d 0a                 }..  }..}..